Module:ClangDiags/DiagsLongData4: 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="regex1";
local b="commit";
local c="commit";
local c="id_hist";
local d="regex3";
local d="message_hist";
local e="regex2";
local e="hierarchical_hist";
local f="category_hist";
local f="regex1";
local g="hierarchical_hist";
local g="regex2";
local h="message_hist";
local h="regex3";
local i="id_hist";
local i="category_hist";
local j="source";
local j="source";
local k="(?:error|fatal error)\\: ";
local k="(?:error|fatal error)\\: ";
Line 21: Line 21:
local u="13.0";
local u="13.0";
local v="clang/lib/Lex/ModuleMap.cpp";
local v="clang/lib/Lex/ModuleMap.cpp";
local w="11.0";
local w="None";
local x="9.0";
local x="11.0";
local y="Parse Issue";
local y="Parse Issue";
local z="Lexical or Preprocessor Issue";
local z="9.0";
local A="destructor";
local A="Lexical or Preprocessor Issue";
local B="constructor";
local B="destructor";
local C="12.0";
local C="constructor";
local D="method F";
local D="12.0";
local E="clang/lib/Sema/SemaStmt.cpp";
local E="method F";
local F="clang/lib/Sema/SemaExprObjC.cpp";
local F="clang/lib/Sema/SemaStmt.cpp";
local G="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomplete) test conversions of the existing def files to this format.\n\nllvm-svn: 66064";
local G="clang/lib/Sema/SemaExprObjC.cpp";
local H="b1c4d5507fad";
local H="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local I="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local I="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomplete) test conversions of the existing def files to this format.\n\nllvm-svn: 66064";
local J="defined here";
local J="b1c4d5507fad";
local K="clang/lib/Sema/SemaDeclAttr.cpp";
local K="clang/lib/Sema/SemaDeclAttr.cpp";
local L="clang/lib/Sema/SemaObjCProperty.cpp";
local L="defined here";
local M="Modules Issue";
local M="clang/lib/Sema/SemaObjCProperty.cpp";
local N="clang/lib/Parse/ParseObjc.cpp";
local N="clang/lib/Parse/ParseObjc.cpp";
local O="clang/lib/Sema/SemaDeclCXX.cpp";
local O="Modules Issue";
local P="clang/lib/Sema/SemaPseudoObject.cpp";
local P="clang/lib/Sema/SemaPseudoObject.cpp";
local Q="clang/lib/Sema/SemaDeclObjC.cpp";
local Q="clang/lib/Sema/SemaDeclCXX.cpp";
local R="definition in module \'C\'";
local R="definition in module \'C\'";
local S="14.0";
local S="14.0";
local T="fatal error\\: ";
local T="clang/lib/Sema/SemaDeclObjC.cpp";
local U="clang/lib/AST/ODRDiagsEmitter.cpp";
local U="clang/lib/AST/ODRDiagsEmitter.cpp";
local V="clang/lib/Sema/SemaExpr.cpp";
local V="fatal error\\: ";
local W="clang/lib/Sema/SemaChecking.cpp";
local W="clang/lib/Sema/SemaExpr.cpp";
local X="AST Deserialization Issue";
local X="clang/lib/Sema/SemaChecking.cpp";
local Y="clang/lib/Sema/SemaTemplate.cpp";
local Y="clang/lib/Sema/SemaTemplate.cpp";
local Z="A has different definitions in different modules; first difference is ";
local Z=" found ";
local ab=" found ";
local ab="A has different definitions in different modules; first difference is ";
local bb=" is ";
local bb="AST Deserialization Issue";
local cb="clang/lib/Sema/SemaType.cpp";
local cb="clang/lib/Sema/SemaType.cpp";
local db="8.0";
local db="8.0";
local eb="clang/lib/Parse/ParseDecl.cpp";
local eb=" is ";
local fb="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local fb="Update tablegen diagnostic files to be in sync with the def files.";
local gb="Update tablegen diagnostic files to be in sync with the def files.";
local gb="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local hb="5a8987ca5113";
local hb="clang/lib/Parse/ParseDecl.cpp";
local ib="class";
local ib="5a8987ca5113";
local jb="e65b086e07a6";
local jb="e65b086e07a6";
local kb="Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,\nNSNumber, and boolean literals.  This includes both Sema and Codegen support.\nIncluded is also support for new Objective-C container subscripting.\n\nMy apologies for the large patch.  It was very difficult to break apart.\nThe patch introduces changes to the driver as well to cause clang to link\nin additional runtime support when needed to support the new language features.\n\nDocs are forthcoming to document the implementation and behavior of these features.\n\nllvm-svn: 152137";
local kb="Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,";
local lb="Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,";
local lb="Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,\nNSNumber, and boolean literals.  This includes both Sema and Codegen support.\nIncluded is also support for new Objective-C container subscripting.\n\nMy apologies for the large patch.  It was very difficult to break apart.\nThe patch introduces changes to the driver as well to cause clang to link\nin additional runtime support when needed to support the new language features.\n\nDocs are forthcoming to document the implementation and behavior of these features.\n\nllvm-svn: 152137";
local mb="clang/lib/Sema/SemaModule.cpp";
local mb="class";
local nb="Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the reserved\nidentifier rule from C and/or C++.\n\nDifferential Revision: https://reviews.llvm.org/D93095";
local nb="clang/lib/Sema/SemaModule.cpp";
local ob="typedef";
local ob="method";
local pb="method";
local pb="b83b23275b74";
local qb="[SYCL] Add sycl_kernel attribute for accelerated code outlining\n\nSYCL is single source offload programming model relying on compiler to\nseparate device code (i.e. offloaded to an accelerator) from the code\nexecuted on the host.\n\nHere is code example of the SYCL program to demonstrate compiler\noutlining work:\n\n```\nint foo(int x) { return ++x; }\nint bar(int x) { throw std::exception(\"CPU code only!\"); }\n...\nusing namespace cl::sycl;\nqueue Q;\nbuffer<int, 1> a(range<1>{1024});\nQ.submit([&](handler& cgh) {\n  auto A = a.get_access<access::mode::write>(cgh);\n  cgh.parallel_for<init_a>(range<1>{1024}, [=](id<1> index) {\n    A[index] = index[0] + foo(42);\n  });\n}\n...\n```\n\nSYCL device compiler must compile lambda expression passed to\ncl::sycl::handler::parallel_for method and function foo called from this\nlambda expression for an \"accelerator\". SYCL device compiler also must\nignore bar function as it\'s not required for offloaded code execution.\n\nThis patch adds the sycl_kernel attribute, which is used to mark code\npassed to cl::sycl::handler::parallel_for as \"accelerated code\".\n\nAttribute must be applied to function templates which parameters include\nat least \"kernel name\" and \"kernel function object\". These parameters\nwill be used to establish an ABI between the host application and\noffloaded part.\n\nReviewers: jlebar, keryell, Naghasan, ABataev, Anastasia, bader, aaron.ballman, rjmccall, rsmith\n\nReviewed By: keryell, bader\n\nSubscribers: mgorny, OlegM, ArturGainullin, agozillon, aaron.ballman, ebevhan, Anastasia, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D60455\n\nSigned-off-by: Alexey Bader <alexey.bader@intel.com>";
local qb="Introduce -Wreserved-identifier";
local rb="Introduce -Wreserved-identifier";
local rb="c094e7dc4b3f";
local sb="[SYCL] Add sycl_kernel attribute for accelerated code outlining";
local sb="Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the reserved\nidentifier rule from C and/or C++.\n\nDifferential Revision: https://reviews.llvm.org/D93095";
local tb="clang/lib/Sema/SemaExprCXX.cpp";
local tb="clang/lib/Sema/SemaExprCXX.cpp";
local ub="c094e7dc4b3f";
local ub="[SYCL] Add sycl_kernel attribute for accelerated code outlining\n\nSYCL is single source offload programming model relying on compiler to\nseparate device code (i.e. offloaded to an accelerator) from the code\nexecuted on the host.\n\nHere is code example of the SYCL program to demonstrate compiler\noutlining work:\n\n```\nint foo(int x) { return ++x; }\nint bar(int x) { throw std::exception(\"CPU code only!\"); }\n...\nusing namespace cl::sycl;\nqueue Q;\nbuffer<int, 1> a(range<1>{1024});\nQ.submit([&](handler& cgh) {\n  auto A = a.get_access<access::mode::write>(cgh);\n  cgh.parallel_for<init_a>(range<1>{1024}, [=](id<1> index) {\n    A[index] = index[0] + foo(42);\n  });\n}\n...\n```\n\nSYCL device compiler must compile lambda expression passed to\ncl::sycl::handler::parallel_for method and function foo called from this\nlambda expression for an \"accelerator\". SYCL device compiler also must\nignore bar function as it\'s not required for offloaded code execution.\n\nThis patch adds the sycl_kernel attribute, which is used to mark code\npassed to cl::sycl::handler::parallel_for as \"accelerated code\".\n\nAttribute must be applied to function templates which parameters include\nat least \"kernel name\" and \"kernel function object\". These parameters\nwill be used to establish an ABI between the host application and\noffloaded part.\n\nReviewers: jlebar, keryell, Naghasan, ABataev, Anastasia, bader, aaron.ballman, rjmccall, rsmith\n\nReviewed By: keryell, bader\n\nSubscribers: mgorny, OlegM, ArturGainullin, agozillon, aaron.ballman, ebevhan, Anastasia, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D60455\n\nSigned-off-by: Alexey Bader <alexey.bader@intel.com>";
local vb="b83b23275b74";
local vb="no ";
local wb="clang/lib/Frontend/CompilerInstance.cpp";
local wb="clang/lib/Frontend/CompilerInstance.cpp";
local xb="no ";
local xb="[SYCL] Add sycl_kernel attribute for accelerated code outlining";
local yb="f881267db9a9";
local yb="typedef";
local zb="Mass-rename the handful of error_* diagnostics to err_*.";
local zb="Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545";
local Ab="Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545";
local Ab="Mass-rename the handful of error_* diagnostics to err_*.";
local Bb="clang/test/Parser/MicrosoftExtensions.cpp";
local Bb="f881267db9a9";
local Cb="clang/lib/Parse/Parser.cpp";
local Cb="Introduce basic support for parsing module map files.\n\nModule map files provide a way to map between headers and modules, so\nthat we can layer a module system on top of existing headers without\nchanging those headers at all.\n\nThis commit introduces the module map file parser and the module map\nthat it generates, and wires up the module map file parser so that\nwe\'ll automatically find module map files as part of header\nsearch. Note that we don\'t yet use the information stored in the\nmodule map.\n\nllvm-svn: 144402";
local Db="Introduce basic support for parsing module map files.\n\nModule map files provide a way to map between headers and modules, so\nthat we can layer a module system on top of existing headers without\nchanging those headers at all.\n\nThis commit introduces the module map file parser and the module map\nthat it generates, and wires up the module map file parser so that\nwe\'ll automatically find module map files as part of header\nsearch. Note that we don\'t yet use the information stored in the\nmodule map.\n\nllvm-svn: 144402";
local Db="Introduce basic support for parsing module map files.";
local Eb="[WebAssembly] Improve clang diagnostics for wasm attributes";
local Eb="type alias";
local Fb="5e77d76c953d";
local Fb="[WebAssembly] Improve clang diagnostics for wasm attributes\n\nThis patch addresses the review comments on r352930:\n\n - Removes redundant diagnostic checking code\n - Removes errnoneous use of diag::err_alias_is_definition, which\n  turned out to be ineffective anyway since functions can be defined later\n  in the translation unit and avoid detection.\n - Adds a test for various invalid cases for import_name and import_module.\n\nDifferential Revision: https://reviews.llvm.org/D59520";
local Gb="Introduce basic support for parsing module map files.";
local Gb="[WebAssembly] Improve clang diagnostics for wasm attributes";
local Hb="931fcd3ba011";
local Hb="931fcd3ba011";
local Ib="clang/lib/Serialization/ASTReader.cpp";
local Ib="clang/lib/Serialization/ASTReader.cpp";
local Jb="Basic support for Microsoft property declarations and\nreferences thereto.\n\nPatch by Tong Shen!\n\nllvm-svn: 179585";
local Jb="5e77d76c953d";
local Kb="[WebAssembly] Improve clang diagnostics for wasm attributes\n\nThis patch addresses the review comments on r352930:\n\n - Removes redundant diagnostic checking code\n - Removes errnoneous use of diag::err_alias_is_definition, which\n  turned out to be ineffective anyway since functions can be defined later\n  in the translation unit and avoid detection.\n - Adds a test for various invalid cases for import_name and import_module.\n\nDifferential Revision: https://reviews.llvm.org/D59520";
local Kb="Basic support for Microsoft property declarations and";
local Lb="718292f260bf";
local Lb="Basic support for Microsoft property declarations and\nreferences thereto.\n\nPatch by Tong Shen!\n\nllvm-svn: 179585";
local Mb="Basic support for Microsoft property declarations and";
local Mb="clang/test/Parser/MicrosoftExtensions.cpp";
local Nb="type alias";
local Nb="clang/lib/Parse/Parser.cpp";
local Ob="clang/lib/Frontend/FrontendAction.cpp";
local Ob="718292f260bf";
local Pb="Add a warning for not packing non-POD members in packed structs";
local Pb="clang/lib/Frontend/FrontendAction.cpp";
local Qb="ec273d3e3a8c";
local Qb="cpu_dispatch";
local Rb="clang/lib/Sema/SemaExprMember.cpp";
local Rb="cpu_specific";
local Sb="attribute \'";
local Sb="target";
local Tb="clang/lib/Sema/SemaCXXScopeSpec.cpp";
local Tb="clang/lib/Sema/SemaExprMember.cpp";
local Ub="clang/test/SemaCXX/attr-musttail.cpp";
local Ub="attribute \'";
local Vb="Add a warning for not packing non-POD members in packed structs\n\nDifferential Revision: https://reviews.llvm.org/D118511";
local Vb="clang/test/SemaCXX/attr-musttail.cpp";
local Wb="default argument";
local Wb="Add a warning for not packing non-POD members in packed structs\n\nDifferential Revision: https://reviews.llvm.org/D118511";
local Xb="cpu_dispatch";
local Xb="Add a warning for not packing non-POD members in packed structs";
local Yb="cpu_specific";
local Yb="ec273d3e3a8c";
local Zb="target";
local Zb="Implement Attribute Target MultiVersioning";
local ac="Implement Attribute Target MultiVersioning\n\nGCC\'s attribute \'target\', in addition to being an optimization hint,\nalso allows function multiversioning. We currently have the former\nimplemented, this is the latter\'s implementation.\n\nThis works by enabling functions with the same name/signature to coexist,\nso that they can all be emitted. Multiversion state is stored in the\nFunctionDecl itself, and SemaDecl manages the definitions.\nNote that it ends up having to permit redefinition of functions so\nthat they can all be emitted. Additionally, all versions of the function\nmust be emitted, so this also manages that.\n\nNote that this includes some additional rules that GCC does not, since\ndefining something as a MultiVersion function after a usage has been made illegal.\n\nThe only \'history rewriting\' that happens is if a function is emitted before\nit has been converted to a multiversion\'ed function, at which point its name\nneeds to be changed.\n\nFunction templates and virtual functions are NOT yet supported (not supported\nin GCC either).\n\nAdditionally, constructors/destructors are disallowed, but the former is \nplanned.\n\nllvm-svn: 322028";
local ac="Implement Attribute Target MultiVersioning\n\nGCC\'s attribute \'target\', in addition to being an optimization hint,\nalso allows function multiversioning. We currently have the former\nimplemented, this is the latter\'s implementation.\n\nThis works by enabling functions with the same name/signature to coexist,\nso that they can all be emitted. Multiversion state is stored in the\nFunctionDecl itself, and SemaDecl manages the definitions.\nNote that it ends up having to permit redefinition of functions so\nthat they can all be emitted. Additionally, all versions of the function\nmust be emitted, so this also manages that.\n\nNote that this includes some additional rules that GCC does not, since\ndefining something as a MultiVersion function after a usage has been made illegal.\n\nThe only \'history rewriting\' that happens is if a function is emitted before\nit has been converted to a multiversion\'ed function, at which point its name\nneeds to be changed.\n\nFunction templates and virtual functions are NOT yet supported (not supported\nin GCC either).\n\nAdditionally, constructors/destructors are disallowed, but the former is \nplanned.\n\nllvm-svn: 322028";
local bc="281d20b601c8";
local bc="281d20b601c8";
local cc="Implement Attribute Target MultiVersioning";
local cc="clang/lib/Sema/SemaCXXScopeSpec.cpp";
local dc="static assert";
local dc="default argument";
local ec="field";
local ec="data member";
local fc="definition";
local fc="clang/test/Modules/odr_hash.cpp";
local gc="friend declaration";
local gc="definition";
local hc="clang/test/Modules/odr_hash.cpp";
local hc="friend declaration";
local ic="data member";
local ic="field";
local jc="declaration";
local jc="static assert";
local kc="clang/test/SemaObjC/objc-container-subscripting.m";
local kc="Implement P2361 Unevaluated string literals";
local lc="Parsing, semantic analysis, and AST for Objective-C type parameters.";
local lc="clang/test/SemaObjC/objc-container-subscripting.m";
local mc="Generics Issue";
local mc="clang/test/Sema/attr-target-mv.c";
local nc="no";
local nc="95f50964fbf5";
local oc="85f3f9513dbc";
local oc="clang/test/SemaObjC/parameterized_classes.m";
local pc="clang/test/SemaObjC/parameterized_classes.m";
local pc="clang/lib/Sema/SemaOverload.cpp";
local qc="Parse inferred submodules in module maps, track their contents in";
local qc="Parsing, semantic analysis, and AST for Objective-C type parameters.";
local rc="clang/lib/Sema/AnalysisBasedWarnings.cpp";
local rc="85f3f9513dbc";
local sc="Implement P2361 Unevaluated string literals\n\nThis patch proposes to handle in an uniform fashion\nthe parsing of strings that are never evaluated,\nin asm statement, static assert, attrributes, extern,\netc.\n\nUnevaluated strings are UTF-8 internally and so currently\nbehave as narrow strings, but these things will diverge with\nD93031.\n\nThe big question both for this patch and the P2361 paper\nis whether we risk breaking code by disallowing\nencoding prefixes in this context.\nI hope this patch may allow to gather some data on that.\n\nFuture work:\nImprove the rendering of unicode characters, line break\nand so forth in static-assert messages\n\nReviewed By: aaron.ballman, shafik\n\nDifferential Revision: https://reviews.llvm.org/D105759";
local sc="Generics Issue";
local tc="Parsing, semantic analysis, and AST for Objective-C type parameters.\n\nProduce type parameter declarations for Objective-C type parameters,\nand attach lists of type parameters to Objective-C classes,\ncategories, forward declarations, and extensions as\nappropriate. Perform semantic analysis of type bounds for type\nparameters, both in isolation and across classes/categories/extensions\nto ensure consistency.\n\nAlso handle (de-)serialization of Objective-C type parameter lists,\nalong with sundry other things one must do to add a new declaration to\nClang.\n\nNote that Objective-C type parameters are typedef name declarations,\nlike typedefs and C++11 type aliases, in support of type erasure.\n\nPart of rdar://problem/6294649.\n\nllvm-svn: 241541";
local tc="14f6bfcb52e7";
local uc="clang/lib/Parse/ParseStmtAsm.cpp";
local uc="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local vc="14f6bfcb52e7";
local vc="[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574";
local wc="clang/test/Sema/attr-target-mv.c";
local wc="clang/lib/Parse/ParseStmtAsm.cpp";
local xc="[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574";
local xc="Parsing, semantic analysis, and AST for Objective-C type parameters.\n\nProduce type parameter declarations for Objective-C type parameters,\nand attach lists of type parameters to Objective-C classes,\ncategories, forward declarations, and extensions as\nappropriate. Perform semantic analysis of type bounds for type\nparameters, both in isolation and across classes/categories/extensions\nto ensure consistency.\n\nAlso handle (de-)serialization of Objective-C type parameter lists,\nalong with sundry other things one must do to add a new declaration to\nClang.\n\nNote that Objective-C type parameters are typedef name declarations,\nlike typedefs and C++11 type aliases, in support of type erasure.\n\nPart of rdar://problem/6294649.\n\nllvm-svn: 241541";
local yc="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local yc="declaration";
local zc="Implement P2361 Unevaluated string literals";
local zc="Parse inferred submodules in module maps, track their contents in\nModule, and (de-)serialize this information. Semantics of inferred\nsubmodules to follow.\n\nllvm-svn: 145864";
local Ac="95f50964fbf5";
local Ac="clang/lib/Sema/AnalysisBasedWarnings.cpp";
local Bc="clang/lib/Sema/SemaOverload.cpp";
local Bc="no";
local Cc="Parse inferred submodules in module maps, track their contents in\nModule, and (de-)serialize this information. Semantics of inferred\nsubmodules to follow.\n\nllvm-svn: 145864";
local Cc="734410916a6d";
local Dc="734410916a6d";
local Dc="Implement P2361 Unevaluated string literals\n\nThis patch proposes to handle in an uniform fashion\nthe parsing of strings that are never evaluated,\nin asm statement, static assert, attrributes, extern,\netc.\n\nUnevaluated strings are UTF-8 internally and so currently\nbehave as narrow strings, but these things will diverge with\nD93031.\n\nThe big question both for this patch and the P2361 paper\nis whether we risk breaking code by disallowing\nencoding prefixes in this context.\nI hope this patch may allow to gather some data on that.\n\nFuture work:\nImprove the rendering of unicode characters, line break\nand so forth in static-assert messages\n\nReviewed By: aaron.ballman, shafik\n\nDifferential Revision: https://reviews.llvm.org/D105759";
local Ec="Parse inferred submodules in module maps, track their contents in";


return {
return {
["err_matrix_incomplete_index"]={
["err_matrix_incomplete_index"]={
[i]={{nil,w,"err_matrix_incomplete_index"}},
[c]={{nil,x,"err_matrix_incomplete_index"}},
[h]={{nil,w,"single subscript expressions are not allowed for matrix values"}},
[d]={{nil,x,"single subscript expressions are not allowed for matrix values"}},
[g]={{nil,w,"single subscript expressions are not allowed for matrix values"}},
[e]={{nil,x,"single subscript expressions are not allowed for matrix values"}},
[b]=k,
[f]=k,
[e]="single subscript expressions are not allowed for matrix values",
[g]="single subscript expressions are not allowed for matrix values",
[d]=a,
[h]=a,
[f]={{nil,w,a}},
[i]={{nil,x,w}},
[c]={Hb,1576908663,Eb,Kb},
[b]={Hb,1576908663,Gb,Fb},
[j]={{V,21634,"/// Check for operands with placeholder types and complain if found.\n/// Returns ExprError() if there was an error and no recovery was possible.\nExprResult Sema::CheckPlaceholderExpr(Expr *E) {\n  // ...\n  case BuiltinType::IncompleteMatrixIdx:\n    Diag(cast<MatrixSubscriptExpr>(E->IgnoreParens())->getRowIdx()->getBeginLoc(), diag::err_matrix_incomplete_index);"}},
[j]={{W,21634,"/// Check for operands with placeholder types and complain if found.\n/// Returns ExprError() if there was an error and no recovery was possible.\nExprResult Sema::CheckPlaceholderExpr(Expr *E) {\n  // ...\n  case BuiltinType::IncompleteMatrixIdx:\n    Diag(cast<MatrixSubscriptExpr>(E->IgnoreParens())->getRowIdx()->getBeginLoc(), diag::err_matrix_incomplete_index);"}},
[l]={
[l]={
["clang/test/Sema/matrix-type-operators.c"]={"clang/test/Sema/matrix-type-operators.c:171:5: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:174:6: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:181:16: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:186:17: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:223:17: error: single subscript expressions are not allowed for matrix values"}
["clang/test/Sema/matrix-type-operators.c"]={"clang/test/Sema/matrix-type-operators.c:171:5: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:174:6: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:181:16: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:186:17: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:223:17: error: single subscript expressions are not allowed for matrix values"}
Line 150: Line 151:
},
},
["err_matrix_index_not_integer"]={
["err_matrix_index_not_integer"]={
[i]={{nil,w,"err_matrix_index_not_integer"}},
[c]={{nil,x,"err_matrix_index_not_integer"}},
[h]={{nil,w,"matrix %select{row|column}0 index is not an integer"}},
[d]={{nil,x,"matrix %select{row|column}0 index is not an integer"}},
[g]={{nil,w,{"matrix ",{"row","column"}," index is not an integer"}}},
[e]={{nil,x,{"matrix ",{"row","column"}," index is not an integer"}}},
[b]=k,
[f]=k,
[e]="matrix (?:row|column) index is not an integer",
[g]="matrix (?:row|column) index is not an integer",
[d]=a,
[h]=a,
[f]={{nil,w,a}},
[i]={{nil,x,w}},
[c]={Hb,1576908663,Eb,Kb},
[b]={Hb,1576908663,Gb,Fb},
[j]={{V,5171,"ExprResult Sema::CreateBuiltinMatrixSubscriptExpr(Expr *Base, Expr *RowIdx, Expr *ColumnIdx, SourceLocation RBLoc) {\n  // ...\n  // Check that IndexExpr is an integer expression. If it is a constant\n  // expression, check that it is less than Dim (= the number of elements in the\n  // corresponding dimension).\n  auto IsIndexValid = [&](Expr *IndexExpr, unsigned Dim, bool IsColumnIdx) -> Expr * {\n    if (!IndexExpr->getType()->isIntegerType() && !IndexExpr->isTypeDependent()) {\n      Diag(IndexExpr->getBeginLoc(), diag::err_matrix_index_not_integer) << IsColumnIdx;"}},
[j]={{W,5171,"ExprResult Sema::CreateBuiltinMatrixSubscriptExpr(Expr *Base, Expr *RowIdx, Expr *ColumnIdx, SourceLocation RBLoc) {\n  // ...\n  // Check that IndexExpr is an integer expression. If it is a constant\n  // expression, check that it is less than Dim (= the number of elements in the\n  // corresponding dimension).\n  auto IsIndexValid = [&](Expr *IndexExpr, unsigned Dim, bool IsColumnIdx) -> Expr * {\n    if (!IndexExpr->getType()->isIntegerType() && !IndexExpr->isTypeDependent()) {\n      Diag(IndexExpr->getBeginLoc(), diag::err_matrix_index_not_integer) << IsColumnIdx;"}},
[l]={
[l]={
["clang/test/SemaObjC/matrix-type-operators.m"]={"clang/test/SemaObjC/matrix-type-operators.m:14:12: error: matrix row index is not an integer","clang/test/SemaObjC/matrix-type-operators.m:14:22: error: matrix column index is not an integer"}
["clang/test/SemaObjC/matrix-type-operators.m"]={"clang/test/SemaObjC/matrix-type-operators.m:14:12: error: matrix row index is not an integer","clang/test/SemaObjC/matrix-type-operators.m:14:22: error: matrix column index is not an integer"}
Line 164: Line 165:
},
},
["err_matrix_index_outside_range"]={
["err_matrix_index_outside_range"]={
[i]={{nil,w,"err_matrix_index_outside_range"}},
[c]={{nil,x,"err_matrix_index_outside_range"}},
[h]={{nil,w,"matrix %select{row|column}0 index is outside the allowed range [0, %1)"}},
[d]={{nil,x,"matrix %select{row|column}0 index is outside the allowed range [0, %1)"}},
[g]={{nil,w,{"matrix ",{"row","column"}," index is outside the allowed range [0, B)"}}},
[e]={{nil,x,{"matrix ",{"row","column"}," index is outside the allowed range [0, B)"}}},
[b]=k,
[f]=k,
[e]="matrix (?:row|column) index is outside the allowed range \\[0, (.*?)\\)",
[g]="matrix (?:row|column) index is outside the allowed range \\[0, (.*?)\\)",
[d]=a,
[h]=a,
[f]={{nil,w,a}},
[i]={{nil,x,w}},
[c]={Hb,1576908663,Eb,Kb},
[b]={Hb,1576908663,Gb,Fb},
[j]={{V,5303,"ExprResult Sema::CreateBuiltinMatrixSubscriptExpr(Expr *Base, Expr *RowIdx, Expr *ColumnIdx, SourceLocation RBLoc) {\n  // ...\n  // Check that IndexExpr is an integer expression. If it is a constant\n  // expression, check that it is less than Dim (= the number of elements in the\n  // corresponding dimension).\n  auto IsIndexValid = [&](Expr *IndexExpr, unsigned Dim, bool IsColumnIdx) -> Expr * {\n    // ...\n    if (std::optional<llvm::APSInt> Idx = IndexExpr->getIntegerConstantExpr(Context)) {\n      if ((*Idx < 0 || *Idx >= Dim)) {\n        Diag(IndexExpr->getBeginLoc(), diag::err_matrix_index_outside_range) << IsColumnIdx << Dim;"}},
[j]={{W,5303,"ExprResult Sema::CreateBuiltinMatrixSubscriptExpr(Expr *Base, Expr *RowIdx, Expr *ColumnIdx, SourceLocation RBLoc) {\n  // ...\n  // Check that IndexExpr is an integer expression. If it is a constant\n  // expression, check that it is less than Dim (= the number of elements in the\n  // corresponding dimension).\n  auto IsIndexValid = [&](Expr *IndexExpr, unsigned Dim, bool IsColumnIdx) -> Expr * {\n    // ...\n    if (std::optional<llvm::APSInt> Idx = IndexExpr->getIntegerConstantExpr(Context)) {\n      if ((*Idx < 0 || *Idx >= Dim)) {\n        Diag(IndexExpr->getBeginLoc(), diag::err_matrix_index_outside_range) << IsColumnIdx << Dim;"}},
[l]={
[l]={
["clang/test/Sema/matrix-type-operators.c"]={"clang/test/Sema/matrix-type-operators.c:154:5: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:156:8: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:158:8: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:160:5: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:162:5: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:164:8: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:166:5: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:179:16: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:210:16: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:212:19: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:214:16: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:216:16: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:218:20: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:220:17: error: matrix row index is outside the allowed range [0, 5)"}
["clang/test/Sema/matrix-type-operators.c"]={"clang/test/Sema/matrix-type-operators.c:154:5: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:156:8: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:158:8: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:160:5: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:162:5: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:164:8: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:166:5: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:179:16: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:210:16: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:212:19: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:214:16: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:216:16: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:218:20: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:220:17: error: matrix row index is outside the allowed range [0, 5)"}
Line 178: Line 179:
},
},
["err_matrix_separate_incomplete_index"]={
["err_matrix_separate_incomplete_index"]={
[i]={{nil,w,"err_matrix_separate_incomplete_index"}},
[c]={{nil,x,"err_matrix_separate_incomplete_index"}},
[h]={{nil,w,"matrix row and column subscripts cannot be separated by any expression"}},
[d]={{nil,x,"matrix row and column subscripts cannot be separated by any expression"}},
[g]={{nil,w,"matrix row and column subscripts cannot be separated by any expression"}},
[e]={{nil,x,"matrix row and column subscripts cannot be separated by any expression"}},
[b]=k,
[f]=k,
[e]="matrix row and column subscripts cannot be separated by any expression",
[g]="matrix row and column subscripts cannot be separated by any expression",
[d]=a,
[h]=a,
[f]={{nil,w,a}},
[i]={{nil,x,w}},
[c]={Hb,1576908663,Eb,Kb},
[b]={Hb,1576908663,Gb,Fb},
[j]={{V,5016,"ExprResult Sema::ActOnArraySubscriptExpr(Scope *S, Expr *base, SourceLocation lbLoc, MultiExprArg ArgExprs, SourceLocation rbLoc) {\n  // ...\n  // The matrix subscript operator ([][])is considered a single operator.\n  // Separating the index expressions by parenthesis is not allowed.\n  if (base && !base->getType().isNull() && base->hasPlaceholderType(BuiltinType::IncompleteMatrixIdx) && !isa<MatrixSubscriptExpr>(base)) {\n    Diag(base->getExprLoc(), diag::err_matrix_separate_incomplete_index) << SourceRange(base->getBeginLoc(), rbLoc);"}},
[j]={{W,5016,"ExprResult Sema::ActOnArraySubscriptExpr(Scope *S, Expr *base, SourceLocation lbLoc, MultiExprArg ArgExprs, SourceLocation rbLoc) {\n  // ...\n  // The matrix subscript operator ([][])is considered a single operator.\n  // Separating the index expressions by parenthesis is not allowed.\n  if (base && !base->getType().isNull() && base->hasPlaceholderType(BuiltinType::IncompleteMatrixIdx) && !isa<MatrixSubscriptExpr>(base)) {\n    Diag(base->getExprLoc(), diag::err_matrix_separate_incomplete_index) << SourceRange(base->getBeginLoc(), rbLoc);"}},
[l]={
[l]={
["clang/test/Sema/matrix-type-operators.c"]={"clang/test/Sema/matrix-type-operators.c:168:3: error: matrix row and column subscripts cannot be separated by any expression","clang/test/Sema/matrix-type-operators.c:184:3: error: matrix row and column subscripts cannot be separated by any expression"}
["clang/test/Sema/matrix-type-operators.c"]={"clang/test/Sema/matrix-type-operators.c:168:3: error: matrix row and column subscripts cannot be separated by any expression","clang/test/Sema/matrix-type-operators.c:184:3: error: matrix row and column subscripts cannot be separated by any expression"}
Line 192: Line 193:
},
},
["err_matrix_subscript_comma"]={
["err_matrix_subscript_comma"]={
[i]={{nil,w,"err_matrix_subscript_comma"}},
[c]={{nil,x,"err_matrix_subscript_comma"}},
[h]={{nil,w,"comma expressions are not allowed as indices in matrix subscript expressions"}},
[d]={{nil,x,"comma expressions are not allowed as indices in matrix subscript expressions"}},
[g]={{nil,w,"comma expressions are not allowed as indices in matrix subscript expressions"}},
[e]={{nil,x,"comma expressions are not allowed as indices in matrix subscript expressions"}},
[b]=k,
[f]=k,
[e]="comma expressions are not allowed as indices in matrix subscript expressions",
[g]="comma expressions are not allowed as indices in matrix subscript expressions",
[d]=a,
[h]=a,
[f]={{nil,w,a}},
[i]={{nil,x,w}},
[c]={Hb,1576908663,Eb,Kb},
[b]={Hb,1576908663,Gb,Fb},
[j]={{V,4997,"ExprResult Sema::ActOnArraySubscriptExpr(Scope *S, Expr *base, SourceLocation lbLoc, MultiExprArg ArgExprs, SourceLocation rbLoc) {\n  // ...\n  // Check if base and idx form a MatrixSubscriptExpr.\n  //\n  // Helper to check for comma expressions, which are not allowed as indices for\n  // matrix subscript expressions.\n  auto CheckAndReportCommaError = [this, base, rbLoc](Expr *E) {\n    if (isa<BinaryOperator>(E) && cast<BinaryOperator>(E)->isCommaOp()) {\n      Diag(E->getExprLoc(), diag::err_matrix_subscript_comma) << SourceRange(base->getBeginLoc(), rbLoc);"}},
[j]={{W,4997,"ExprResult Sema::ActOnArraySubscriptExpr(Scope *S, Expr *base, SourceLocation lbLoc, MultiExprArg ArgExprs, SourceLocation rbLoc) {\n  // ...\n  // Check if base and idx form a MatrixSubscriptExpr.\n  //\n  // Helper to check for comma expressions, which are not allowed as indices for\n  // matrix subscript expressions.\n  auto CheckAndReportCommaError = [this, base, rbLoc](Expr *E) {\n    if (isa<BinaryOperator>(E) && cast<BinaryOperator>(E)->isCommaOp()) {\n      Diag(E->getExprLoc(), diag::err_matrix_subscript_comma) << SourceRange(base->getBeginLoc(), rbLoc);"}},
[l]={
[l]={
["clang/test/SemaCXX/matrix-type-operators.cpp"]={"clang/test/SemaCXX/matrix-type-operators.cpp:180:6: error: comma expressions are not allowed as indices in matrix subscript expressions","clang/test/SemaCXX/matrix-type-operators.cpp:184:9: error: comma expressions are not allowed as indices in matrix subscript expressions"}
["clang/test/SemaCXX/matrix-type-operators.cpp"]={"clang/test/SemaCXX/matrix-type-operators.cpp:180:6: error: comma expressions are not allowed as indices in matrix subscript expressions","clang/test/SemaCXX/matrix-type-operators.cpp:184:9: error: comma expressions are not allowed as indices in matrix subscript expressions"}
Line 206: Line 207:
},
},
["err_maybe_falloff_nonvoid_block"]={
["err_maybe_falloff_nonvoid_block"]={
[i]="err_maybe_falloff_nonvoid_block",
[c]="err_maybe_falloff_nonvoid_block",
[h]={{nil,n,"non-void block does not return a value in all control paths"},{x,nil,"control may reach end of non-void block"}},
[d]={{nil,n,"non-void block does not return a value in all control paths"},{z,nil,"control may reach end of non-void block"}},
[g]={{nil,n,"non-void block does not return a value in all control paths"},{x,nil,"control may reach end of non-void block"}},
[e]={{nil,n,"non-void block does not return a value in all control paths"},{z,nil,"control may reach end of non-void block"}},
[b]=k,
[f]=k,
[e]="non\\-void block does not return a value in all control paths",
[g]="non\\-void block does not return a value in all control paths",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"3bf1ab48d304",1248818641,"Add noreturn support for blocks.","Add noreturn support for blocks.\n\nllvm-svn: 77377"},
[b]={"3bf1ab48d304",1248818641,"Add noreturn support for blocks.","Add noreturn support for blocks.\n\nllvm-svn: 77377"},
[j]={{rc,599,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForBlock() {\n    // ...\n    D.diag_MaybeFallThrough_ReturnsNonVoid = diag::err_maybe_falloff_nonvoid_block;"}},
[j]={{Ac,599,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForBlock() {\n    // ...\n    D.diag_MaybeFallThrough_ReturnsNonVoid = diag::err_maybe_falloff_nonvoid_block;"}},
[l]={
[l]={
["clang/test/Sema/block-return-1.c"]={"clang/test/Sema/block-return-1.c:5:31: error: non-void block does not return a value in all control paths"}
["clang/test/Sema/block-return-1.c"]={"clang/test/Sema/block-return-1.c:5:31: error: non-void block does not return a value in all control paths"}
Line 220: Line 221:
},
},
["err_mem_init_not_member_or_class"]={
["err_mem_init_not_member_or_class"]={
[i]="err_mem_init_not_member_or_class",
[c]="err_mem_init_not_member_or_class",
[h]="member initializer %0 does not name a non-static data member or base class",
[d]="member initializer %0 does not name a non-static data member or base class",
[g]="member initializer A does not name a non-static data member or base class",
[e]="member initializer A does not name a non-static data member or base class",
[b]=k,
[f]=k,
[e]="member initializer (.*?) does not name a non\\-static data member or base class",
[g]="member initializer (.*?) does not name a non\\-static data member or base class",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={hb,1237025389,gb,fb},
[b]={ib,1237025389,fb,gb},
[j]={{O,4509,"/// Handle a C++ member initializer.\nMemInitResult Sema::BuildMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS, IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy, const DeclSpec &DS, SourceLocation IdLoc, Expr *Init, SourceLocation EllipsisLoc) {\n  // ...\n  if (TemplateTypeTy) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype_auto) {\n  // ...\n  } else {\n    // ...\n    if (!TyD) {\n      // ...\n      if (!TyD && BaseType.isNull()) {\n        Diag(IdLoc, diag::err_mem_init_not_member_or_class) << MemberOrBase << SourceRange(IdLoc, Init->getSourceRange().getEnd());"}},
[j]={{Q,4509,"/// Handle a C++ member initializer.\nMemInitResult Sema::BuildMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS, IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy, const DeclSpec &DS, SourceLocation IdLoc, Expr *Init, SourceLocation EllipsisLoc) {\n  // ...\n  if (TemplateTypeTy) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype_auto) {\n  // ...\n  } else {\n    // ...\n    if (!TyD) {\n      // ...\n      if (!TyD && BaseType.isNull()) {\n        Diag(IdLoc, diag::err_mem_init_not_member_or_class) << MemberOrBase << SourceRange(IdLoc, Init->getSourceRange().getEnd());"}},
[l]={
[l]={
["clang/test/SemaCXX/constexpr-subobj-initialization.cpp"]={"clang/test/SemaCXX/constexpr-subobj-initialization.cpp:19:19: error: member initializer \'value\' does not name a non-static data member or base class"}
["clang/test/SemaCXX/constexpr-subobj-initialization.cpp"]={"clang/test/SemaCXX/constexpr-subobj-initialization.cpp:19:19: error: member initializer \'value\' does not name a non-static data member or base class"}
Line 234: Line 235:
},
},
["err_mem_init_not_member_or_class_suggest"]={
["err_mem_init_not_member_or_class_suggest"]={
[i]="err_mem_init_not_member_or_class_suggest",
[c]="err_mem_init_not_member_or_class_suggest",
[h]="initializer %0 does not name a non-static data member or base class; did you mean the %select{base class|member}1 %2?",
[d]="initializer %0 does not name a non-static data member or base class; did you mean the %select{base class|member}1 %2?",
[g]={{nil,nil,{"initializer A does not name a non-static data member or base class; did you mean the ",{"base class","member"}," C?"}}},
[e]={{nil,nil,{"initializer A does not name a non-static data member or base class; did you mean the ",{"base class","member"}," C?"}}},
[b]=k,
[f]=k,
[e]="initializer (.*?) does not name a non\\-static data member or base class; did you mean the (?:base class|member) (.*?)\\?",
[g]="initializer (.*?) does not name a non\\-static data member or base class; did you mean the (?:base class|member) (.*?)\\?",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"15e77a2fd305",1262250624,"Typo correction for C++ base and member initializers, e.g.,","Typo correction for C++ base and member initializers, e.g.,\n\ntest/FixIt/typo.cpp:41:15: error: initializer \'base\' does not name a non-static\n      data member or base class; did you mean the base class \'Base\'?\n  Derived() : base(),\n              ^~~~\n              Base\ntest/FixIt/typo.cpp:42:15: error: initializer \'ember\' does not name a non-static\n      data member or base class; did you mean the member \'member\'?\n              ember() { }\n              ^~~~~\n              member\n\nllvm-svn: 92355"},
[b]={"15e77a2fd305",1262250624,"Typo correction for C++ base and member initializers, e.g.,","Typo correction for C++ base and member initializers, e.g.,\n\ntest/FixIt/typo.cpp:41:15: error: initializer \'base\' does not name a non-static\n      data member or base class; did you mean the base class \'Base\'?\n  Derived() : base(),\n              ^~~~\n              Base\ntest/FixIt/typo.cpp:42:15: error: initializer \'ember\' does not name a non-static\n      data member or base class; did you mean the member \'member\'?\n              ember() { }\n              ^~~~~\n              member\n\nllvm-svn: 92355"},
[j]={{O,4481,"/// Handle a C++ member initializer.\nMemInitResult Sema::BuildMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS, IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy, const DeclSpec &DS, SourceLocation IdLoc, Expr *Init, SourceLocation EllipsisLoc) {\n  // ...\n  if (TemplateTypeTy) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype_auto) {\n  // ...\n  } else {\n    // ...\n    if (!TyD) {\n      // ...\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          // ...\n          diagnoseTypo(Corr, PDiag(diag::err_mem_init_not_member_or_class_suggest) << MemberOrBase << true);"},{O,4494,"/// Handle a C++ member initializer.\nMemInitResult Sema::BuildMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS, IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy, const DeclSpec &DS, SourceLocation IdLoc, Expr *Init, SourceLocation EllipsisLoc) {\n  // ...\n  if (TemplateTypeTy) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype_auto) {\n  // ...\n  } else {\n    // ...\n    if (!TyD) {\n      // ...\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        // ...\n        } else if (TypeDecl *Type = Corr.getCorrectionDeclAs<TypeDecl>()) {\n          // ...\n          if (FindBaseInitializer(*this, ClassDecl, Context.getTypeDeclType(Type), DirectBaseSpec, VirtualBaseSpec)) {\n            // ...\n            diagnoseTypo(Corr, PDiag(diag::err_mem_init_not_member_or_class_suggest) << MemberOrBase << false, PDiag() /*Suppress note, we provide our own.*/);"}},
[j]={{Q,4481,"/// Handle a C++ member initializer.\nMemInitResult Sema::BuildMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS, IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy, const DeclSpec &DS, SourceLocation IdLoc, Expr *Init, SourceLocation EllipsisLoc) {\n  // ...\n  if (TemplateTypeTy) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype_auto) {\n  // ...\n  } else {\n    // ...\n    if (!TyD) {\n      // ...\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          // ...\n          diagnoseTypo(Corr, PDiag(diag::err_mem_init_not_member_or_class_suggest) << MemberOrBase << true);"},{Q,4494,"/// Handle a C++ member initializer.\nMemInitResult Sema::BuildMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS, IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy, const DeclSpec &DS, SourceLocation IdLoc, Expr *Init, SourceLocation EllipsisLoc) {\n  // ...\n  if (TemplateTypeTy) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype_auto) {\n  // ...\n  } else {\n    // ...\n    if (!TyD) {\n      // ...\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        // ...\n        } else if (TypeDecl *Type = Corr.getCorrectionDeclAs<TypeDecl>()) {\n          // ...\n          if (FindBaseInitializer(*this, ClassDecl, Context.getTypeDeclType(Type), DirectBaseSpec, VirtualBaseSpec)) {\n            // ...\n            diagnoseTypo(Corr, PDiag(diag::err_mem_init_not_member_or_class_suggest) << MemberOrBase << false, PDiag() /*Suppress note, we provide our own.*/);"}},
[l]={
[l]={
["clang/test/FixIt/typo.cpp"]={"clang/test/FixIt/typo.cpp:55:15: error: initializer \'base\' does not name a non-static data member or base class; did you mean the base class \'Base\'?","clang/test/FixIt/typo.cpp:56:15: error: initializer \'ember\' does not name a non-static data member or base class; did you mean the member \'member\'?"}
["clang/test/FixIt/typo.cpp"]={"clang/test/FixIt/typo.cpp:55:15: error: initializer \'base\' does not name a non-static data member or base class; did you mean the base class \'Base\'?","clang/test/FixIt/typo.cpp:56:15: error: initializer \'ember\' does not name a non-static data member or base class; did you mean the member \'member\'?"}
Line 248: Line 249:
},
},
["err_member_call_without_object"]={
["err_member_call_without_object"]={
[i]="err_member_call_without_object",
[c]="err_member_call_without_object",
[h]="call to non-static member function without an object argument",
[d]="call to non-static member function without an object argument",
[g]="call to non-static member function without an object argument",
[e]="call to non-static member function without an object argument",
[b]=k,
[f]=k,
[e]="call to non\\-static member function without an object argument",
[g]="call to non\\-static member function without an object argument",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={H,1236199783,I,G},
[b]={J,1236199783,H,I},
[j]={{V,2359,"/// 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  // ...\n  // Return true if we are inside a default argument instantiation\n  // and the found name refers to an instance member function, otherwise\n  // the caller will try to create an implicit member call and this is wrong\n  // for default arguments.\n  //\n  // FIXME: Is this special case necessary? We could allow the caller to\n  // diagnose this.\n  if (isDefaultArgument && ((*R.begin())->isCXXInstanceMember())) {\n    Diag(R.getNameLoc(), diag::err_member_call_without_object);"},{V,7607,"/// 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  // ...\n  if (CXXMethodDecl *Method = dyn_cast_or_null<CXXMethodDecl>(FDecl))\n    if (!Method->isStatic())\n      return ExprError(Diag(LParenLoc, diag::err_member_call_without_object) << Fn->getSourceRange());"},{Rb,234,"/// Diagnose a reference to a field with no object available.\nstatic void diagnoseInstanceReference(Sema &SemaRef, const CXXScopeSpec &SS, NamedDecl *Rep, const DeclarationNameInfo &nameInfo) {\n  // ...\n  if (IsField && InStaticMethod)\n  // ...\n  else if (ContextClass && RepClass && SS.isEmpty() && !InStaticMethod && !RepClass->Equals(ContextClass) && RepClass->Encloses(ContextClass))\n  // ...\n  else if (IsField)\n  // ...\n  else\n    SemaRef.Diag(Loc, diag::err_member_call_without_object) << Range;"}},
[j]={{W,2359,"/// 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  // ...\n  // Return true if we are inside a default argument instantiation\n  // and the found name refers to an instance member function, otherwise\n  // the caller will try to create an implicit member call and this is wrong\n  // for default arguments.\n  //\n  // FIXME: Is this special case necessary? We could allow the caller to\n  // diagnose this.\n  if (isDefaultArgument && ((*R.begin())->isCXXInstanceMember())) {\n    Diag(R.getNameLoc(), diag::err_member_call_without_object);"},{W,7607,"/// 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  // ...\n  if (CXXMethodDecl *Method = dyn_cast_or_null<CXXMethodDecl>(FDecl))\n    if (!Method->isStatic())\n      return ExprError(Diag(LParenLoc, diag::err_member_call_without_object) << Fn->getSourceRange());"},{Tb,234,"/// Diagnose a reference to a field with no object available.\nstatic void diagnoseInstanceReference(Sema &SemaRef, const CXXScopeSpec &SS, NamedDecl *Rep, const DeclarationNameInfo &nameInfo) {\n  // ...\n  if (IsField && InStaticMethod)\n  // ...\n  else if (ContextClass && RepClass && SS.isEmpty() && !InStaticMethod && !RepClass->Equals(ContextClass) && RepClass->Encloses(ContextClass))\n  // ...\n  else if (IsField)\n  // ...\n  else\n    SemaRef.Diag(Loc, diag::err_member_call_without_object) << Range;"}},
[l]={
[l]={
["clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp"]={"clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp:52:9: error: call to non-static member function without an object argument","clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp:53:9: error: call to non-static member function without an object argument","clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp:69:18: error: call to non-static member function without an object argument","clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp:77:13: error: call to non-static member function without an object argument"}
["clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp"]={"clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp:52:9: error: call to non-static member function without an object argument","clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp:53:9: error: call to non-static member function without an object argument","clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp:69:18: error: call to non-static member function without an object argument","clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp:77:13: error: call to non-static member function without an object argument"}
Line 262: Line 263:
},
},
["err_member_decl_does_not_match"]={
["err_member_decl_does_not_match"]={
[i]="err_member_decl_does_not_match",
[c]="err_member_decl_does_not_match",
[h]="out-of-line %select{declaration|definition}2 of %0 does not match any declaration in %1",
[d]="out-of-line %select{declaration|definition}2 of %0 does not match any declaration in %1",
[g]={{nil,nil,{"out-of-line ",{jc,fc}," of A does not match any declaration in B"}}},
[e]={{nil,nil,{"out-of-line ",{yc,gc}," of A does not match any declaration in B"}}},
[b]=k,
[f]=k,
[e]="out\\-of\\-line (?:declaration|definition) of (.*?) does not match any declaration in (.*?)",
[g]="out\\-of\\-line (?:declaration|definition) of (.*?) does not match any declaration in (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"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\nof local classes. We were previously handling this by performing qualified\nlookup within a function declaration(!!); replace it with the proper scope\nlookup.\n\nllvm-svn: 188050"},
[b]={"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\nof local classes. We were previously handling this by performing qualified\nlookup within a function declaration(!!); replace it with the proper scope\nlookup.\n\nllvm-svn: 188050"},
[j]={{o,8958,"/// 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  // ...\n  unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"},{Y,2069,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (SS.isSet()) {\n    // If the name of the template was qualified, we must be defining the\n    // template out-of-line.\n    if (!SS.isInvalid() && !Invalid && !PrevClassTemplate) {\n      Diag(NameLoc, TUK == TUK_Friend ? diag::err_friend_decl_does_not_match : diag::err_member_decl_does_not_match) << Name << SemanticContext << /*IsDefinition*/ true << SS.getRange();"}},
[j]={{o,8958,"/// 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  // ...\n  unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"},{Y,2069,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (SS.isSet()) {\n    // If the name of the template was qualified, we must be defining the\n    // template out-of-line.\n    if (!SS.isInvalid() && !Invalid && !PrevClassTemplate) {\n      Diag(NameLoc, TUK == TUK_Friend ? diag::err_friend_decl_does_not_match : diag::err_member_decl_does_not_match) << Name << SemanticContext << /*IsDefinition*/ true << SS.getRange();"}},
[l]={
[l]={
Line 276: Line 277:
},
},
["err_member_decl_does_not_match_suggest"]={
["err_member_decl_does_not_match_suggest"]={
[i]="err_member_decl_does_not_match_suggest",
[c]="err_member_decl_does_not_match_suggest",
[h]="out-of-line %select{declaration|definition}2 of %0 does not match any declaration in %1; did you mean %3?",
[d]="out-of-line %select{declaration|definition}2 of %0 does not match any declaration in %1; did you mean %3?",
[g]={{nil,nil,{"out-of-line ",{jc,fc}," of A does not match any declaration in B; did you mean D?"}}},
[e]={{nil,nil,{"out-of-line ",{yc,gc}," of A does not match any declaration in B; did you mean D?"}}},
[b]=k,
[f]=k,
[e]="out\\-of\\-line (?:declaration|definition) of (.*?) does not match any declaration in (.*?); did you mean (.*?)\\?",
[g]="out\\-of\\-line (?:declaration|definition) of (.*?) does not match any declaration in (.*?); did you mean (.*?)\\?",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"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\nof local classes. We were previously handling this by performing qualified\nlookup within a function declaration(!!); replace it with the proper scope\nlookup.\n\nllvm-svn: 188050"},
[b]={"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\nof local classes. We were previously handling this by performing qualified\nlookup within a function declaration(!!); replace it with the proper scope\nlookup.\n\nllvm-svn: 188050"},
[j]={{o,9042,"/// 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  // ...\n  if (!Prev.empty()) {\n  // ...\n  } else if ((Correction = SemaRef.CorrectTypo(Prev.getLookupNameInfo(), Prev.getLookupKind(), S, &ExtraArgs.D.getCXXScopeSpec(), CCC, Sema::CTK_ErrorRecovery, IsLocalFriend ? nullptr : NewDC))) {\n    // ...\n    if (Result) {\n      // ...\n      SemaRef.diagnoseTypo(Correction, SemaRef.PDiag(IsLocalFriend ? diag::err_no_matching_local_friend_suggest : diag::err_member_decl_does_not_match_suggest) << Name << NewDC << IsDefinition);"}},
[j]={{o,9042,"/// 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  // ...\n  if (!Prev.empty()) {\n  // ...\n  } else if ((Correction = SemaRef.CorrectTypo(Prev.getLookupNameInfo(), Prev.getLookupKind(), S, &ExtraArgs.D.getCXXScopeSpec(), CCC, Sema::CTK_ErrorRecovery, IsLocalFriend ? nullptr : NewDC))) {\n    // ...\n    if (Result) {\n      // ...\n      SemaRef.diagnoseTypo(Correction, SemaRef.PDiag(IsLocalFriend ? diag::err_no_matching_local_friend_suggest : diag::err_member_decl_does_not_match_suggest) << Name << NewDC << IsDefinition);"}},
[l]={
[l]={
Line 290: Line 291:
},
},
["err_member_def_does_not_match_ret_type"]={
["err_member_def_does_not_match_ret_type"]={
[i]="err_member_def_does_not_match_ret_type",
[c]="err_member_def_does_not_match_ret_type",
[h]="return type of out-of-line definition of %q0 differs from that in the declaration",
[d]="return type of out-of-line definition of %q0 differs from that in the declaration",
[g]="return type of out-of-line definition of A differs from that in the declaration",
[e]="return type of out-of-line definition of A differs from that in the declaration",
[b]=k,
[f]=k,
[e]="return type of out\\-of\\-line definition of (.*?) differs from that in the declaration",
[g]="return type of out\\-of\\-line definition of (.*?) differs from that in the declaration",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"3d3208675f79",1296885289,"When the out-of-line definition differs from the declaration in the return type,","When the out-of-line definition differs from the declaration in the return type,\nsay \"out-of-line definition differ from the declaration in the return type\" instead of\nthe silly \"functions that differ only in their return type cannot be overloaded\".\n\nAddresses rdar://7980179.\n\nllvm-svn: 124939"},
[b]={"3d3208675f79",1296885289,"When the out-of-line definition differs from the declaration in the return type,","When the out-of-line definition differs from the declaration in the return type,\nsay \"out-of-line definition differ from the declaration in the return type\" instead of\nthe silly \"functions that differ only in their return type cannot be overloaded\".\n\nAddresses rdar://7980179.\n\nllvm-svn: 124939"},
[j]={{o,3936,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    if (!Context.hasSameType(OldDeclaredReturnType, NewDeclaredReturnType) && canFullyTypeCheckRedeclaration(New, Old, NewDeclaredReturnType, OldDeclaredReturnType)) {\n      // ...\n      if (ResQT.isNull()) {\n        if (New->isCXXClassMember() && New->isOutOfLine())\n          Diag(New->getLocation(), diag::err_member_def_does_not_match_ret_type) << New << New->getReturnTypeSourceRange();"}},
[j]={{o,3936,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    if (!Context.hasSameType(OldDeclaredReturnType, NewDeclaredReturnType) && canFullyTypeCheckRedeclaration(New, Old, NewDeclaredReturnType, OldDeclaredReturnType)) {\n      // ...\n      if (ResQT.isNull()) {\n        if (New->isCXXClassMember() && New->isOutOfLine())\n          Diag(New->getLocation(), diag::err_member_def_does_not_match_ret_type) << New << New->getReturnTypeSourceRange();"}},
[l]={
[l]={
Line 304: Line 305:
},
},
["err_member_def_undefined_record"]={
["err_member_def_undefined_record"]={
[i]="err_member_def_undefined_record",
[c]="err_member_def_undefined_record",
[h]="out-of-line definition of %0 from class %1 without definition",
[d]="out-of-line definition of %0 from class %1 without definition",
[g]="out-of-line definition of A from class B without definition",
[e]="out-of-line definition of A from class B without definition",
[b]=k,
[f]=k,
[e]="out\\-of\\-line definition of (.*?) from class (.*?) without definition",
[g]="out\\-of\\-line definition of (.*?) from class (.*?) without definition",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"67da35c832e6",1265322386,"Extract a common structure for holding information about the definition","Extract a common structure for holding information about the definition\nof a C++ record.  Exposed a lot of problems where various routines were\nsilently doing The Wrong Thing (or The Acceptable Thing in The Wrong Order)\nwhen presented with a non-definition.  Also cuts down on memory usage.\n\nllvm-svn: 95330"},
[b]={"67da35c832e6",1265322386,"Extract a common structure for holding information about the definition","Extract a common structure for holding information about the definition\nof a C++ record.  Exposed a lot of problems where various routines were\nsilently doing The Wrong Thing (or The Acceptable Thing in The Wrong Order)\nwhen presented with a non-definition.  Also cuts down on memory usage.\n\nllvm-svn: 95330"},
[j]={{o,6303,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  if (D.getCXXScopeSpec().isInvalid())\n  // ...\n  else if (D.getCXXScopeSpec().isSet()) {\n    // ...\n    // If a class is incomplete, do not parse entities inside it.\n    if (isa<CXXRecordDecl>(DC) && !cast<CXXRecordDecl>(DC)->hasDefinition()) {\n      Diag(D.getIdentifierLoc(), diag::err_member_def_undefined_record) << Name << DC << D.getCXXScopeSpec().getRange();"}},
[j]={{o,6303,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  if (D.getCXXScopeSpec().isInvalid())\n  // ...\n  else if (D.getCXXScopeSpec().isSet()) {\n    // ...\n    // If a class is incomplete, do not parse entities inside it.\n    if (isa<CXXRecordDecl>(DC) && !cast<CXXRecordDecl>(DC)->hasDefinition()) {\n      Diag(D.getIdentifierLoc(), diag::err_member_def_undefined_record) << Name << DC << D.getCXXScopeSpec().getRange();"}},
[l]={
[l]={
Line 318: Line 319:
},
},
["err_member_extra_qualification"]={
["err_member_extra_qualification"]={
[i]="err_member_extra_qualification",
[c]="err_member_extra_qualification",
[h]="extra qualification on member %0",
[d]="extra qualification on member %0",
[g]="extra qualification on member A",
[e]="extra qualification on member A",
[b]=k,
[f]=k,
[e]="extra qualification on member (.*?)",
[g]="extra qualification on member (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"43bc036e8ae3",1347567380,"Promote the warning about extra qualification on a declaration from a","Promote the warning about extra qualification on a declaration from a\nwarning to an error. C++ bans it, and both GCC and EDG diagnose it as\nan error. Microsoft allows it, so we still warn in Microsoft\nmode. Fixes <rdar://problem/11135644>.\n\nllvm-svn: 163831"},
[b]={"43bc036e8ae3",1347567380,"Promote the warning about extra qualification on a declaration from a","Promote the warning about extra qualification on a declaration from a\nwarning to an error. C++ bans it, and both GCC and EDG diagnose it as\nan error. Microsoft allows it, so we still warn in Microsoft\nmode. Fixes <rdar://problem/11135644>.\n\nllvm-svn: 163831"},
[j]={{o,6177,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // If the user provided a superfluous scope specifier that refers back to the\n  // class in which the entity is already declared, diagnose and ignore it.\n  //\n  // class X {\n  //  void X::f();\n  // };\n  //\n  // Note, it was once ill-formed to give redundant qualification in all\n  // contexts, but that rule was removed by DR482.\n  if (Cur->Equals(DC)) {\n    if (Cur->isRecord()) {\n      Diag(Loc, LangOpts.MicrosoftExt ? diag::warn_member_extra_qualification : diag::err_member_extra_qualification) << Name << FixItHint::CreateRemoval(SS.getRange());"}},
[j]={{o,6177,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // If the user provided a superfluous scope specifier that refers back to the\n  // class in which the entity is already declared, diagnose and ignore it.\n  //\n  // class X {\n  //  void X::f();\n  // };\n  //\n  // Note, it was once ill-formed to give redundant qualification in all\n  // contexts, but that rule was removed by DR482.\n  if (Cur->Equals(DC)) {\n    if (Cur->isRecord()) {\n      Diag(Loc, LangOpts.MicrosoftExt ? diag::warn_member_extra_qualification : diag::err_member_extra_qualification) << Name << FixItHint::CreateRemoval(SS.getRange());"}},
[l]={
[l]={
Line 332: Line 333:
},
},
["err_member_function_call_bad_cvr"]={
["err_member_function_call_bad_cvr"]={
[i]="err_member_function_call_bad_cvr",
[c]="err_member_function_call_bad_cvr",
[h]={{nil,t,"\'this\' argument to member function %0 has type %1, but function is not marked %select{const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict}2"},{r,nil,"member function %0 not viable: \'this\' argument has type %1, but function is not marked %select{const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict}2"}},
[d]={{nil,t,"\'this\' argument to member function %0 has type %1, but function is not marked %select{const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict}2"},{r,nil,"member function %0 not viable: \'this\' argument has type %1, but function is not marked %select{const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict}2"}},
[g]={{nil,t,{"\'this\' argument to member function A has type B, but function is not marked ",{"const","restrict","const or restrict","volatile","const or volatile","volatile or restrict","const, volatile, or restrict"}}},{r,nil,{"member function A not viable: \'this\' argument has type B, but function is not marked ",{"const","restrict","const or restrict","volatile","const or volatile","volatile or restrict","const, volatile, or restrict"}}}},
[e]={{nil,t,{"\'this\' argument to member function A has type B, but function is not marked ",{"const","restrict","const or restrict","volatile","const or volatile","volatile or restrict","const, volatile, or restrict"}}},{r,nil,{"member function A not viable: \'this\' argument has type B, but function is not marked ",{"const","restrict","const or restrict","volatile","const or volatile","volatile or restrict","const, volatile, or restrict"}}}},
[b]=k,
[f]=k,
[e]="\'this\' argument to member function (.*?) has type (.*?), but function is not marked (?:const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict)",
[g]="\'this\' argument to member function (.*?) has type (.*?), but function is not marked (?:const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"9813d3221d7d",1289894685,"Improve diagnostic for calling non-const method on const object. Fixes rdar://7743000","Improve diagnostic for calling non-const method on const object. Fixes rdar://7743000\n\nllvm-svn: 119336"},
[b]={"9813d3221d7d",1289894685,"Improve diagnostic for calling non-const method on const object. Fixes rdar://7743000","Improve diagnostic for calling non-const method on const object. Fixes rdar://7743000\n\nllvm-svn: 119336"},
[j]={{Bc,5651,"/// PerformObjectArgumentInitialization - Perform initialization of\n/// the implicit object parameter for the given Method with the given\n/// expression.\nExprResult Sema::PerformObjectArgumentInitialization(Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, CXXMethodDecl *Method) {\n  // ...\n  if (ICS.isBad()) {\n    // ...\n    case BadConversionSequence::bad_qualifiers: {\n      // ...\n      if (CVR) {\n        Diag(From->getBeginLoc(), diag::err_member_function_call_bad_cvr) << Method->getDeclName() << FromRecordType << (CVR - 1) << From->getSourceRange();"}},
[j]={{pc,5651,"/// PerformObjectArgumentInitialization - Perform initialization of\n/// the implicit object parameter for the given Method with the given\n/// expression.\nExprResult Sema::PerformObjectArgumentInitialization(Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, CXXMethodDecl *Method) {\n  // ...\n  if (ICS.isBad()) {\n    // ...\n    case BadConversionSequence::bad_qualifiers: {\n      // ...\n      if (CVR) {\n        Diag(From->getBeginLoc(), diag::err_member_function_call_bad_cvr) << Method->getDeclName() << FromRecordType << (CVR - 1) << From->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/arrow-operator.cpp"]={"clang/test/SemaCXX/arrow-operator.cpp:109:21: error: \'this\' argument to member function \'val\' has type \'const TemplateStruct<0>\', but function is not marked const"}
["clang/test/SemaCXX/arrow-operator.cpp"]={"clang/test/SemaCXX/arrow-operator.cpp:109:21: error: \'this\' argument to member function \'val\' has type \'const TemplateStruct<0>\', but function is not marked const"}
Line 346: Line 347:
},
},
["err_member_function_call_bad_ref"]={
["err_member_function_call_bad_ref"]={
[i]={{nil,t,"err_member_function_call_bad_ref"}},
[c]={{nil,t,"err_member_function_call_bad_ref"}},
[h]={{nil,t,"\'this\' argument to member function %0 is an %select{lvalue|rvalue}1, but function has %select{non-const lvalue|rvalue}2 ref-qualifier"}},
[d]={{nil,t,"\'this\' argument to member function %0 is an %select{lvalue|rvalue}1, but function has %select{non-const lvalue|rvalue}2 ref-qualifier"}},
[g]={{nil,t,{"\'this\' argument to member function A is an ",{"lvalue","rvalue"},", but function has ",{"non-const lvalue","rvalue"}," ref-qualifier"}}},
[e]={{nil,t,{"\'this\' argument to member function A is an ",{"lvalue","rvalue"},", but function has ",{"non-const lvalue","rvalue"}," ref-qualifier"}}},
[b]=k,
[f]=k,
[e]="\'this\' argument to member function (.*?) is an (?:lvalue|rvalue), but function has (?:non\\-const lvalue|rvalue) ref\\-qualifier",
[g]="\'this\' argument to member function (.*?) is an (?:lvalue|rvalue), but function has (?:non\\-const lvalue|rvalue) ref\\-qualifier",
[d]=a,
[h]=a,
[f]={{nil,t,m}},
[i]={{nil,t,m}},
[c]={"c7e67a04e0f3",1514695779,"[Sema] Improve diagnostics for const- and ref-qualified member functions","[Sema] Improve diagnostics for const- and ref-qualified member functions\n\nSummary:\nAdjust wording for const-qualification mismatch to be a little more clear.\n\nAlso add another diagnostic for a ref qualifier mismatch, which previously produced a useless error (this error path is simply very old; see rL119336):\n\nBefore:\n  error: cannot initialize object parameter of type \'X0\' with an expression of type \'X0\'\n\nAfter:\n  error: \'this\' argument to member function \'rvalue\' is an lvalue, but function has rvalue ref-qualifier\n\nReviewers: rsmith, aaron.ballman\n\nReviewed By: aaron.ballman\n\nSubscribers: lebedev.ri, aaron.ballman, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D39937\n\nllvm-svn: 321592"},
[b]={"c7e67a04e0f3",1514695779,"[Sema] Improve diagnostics for const- and ref-qualified member functions","[Sema] Improve diagnostics for const- and ref-qualified member functions\n\nSummary:\nAdjust wording for const-qualification mismatch to be a little more clear.\n\nAlso add another diagnostic for a ref qualifier mismatch, which previously produced a useless error (this error path is simply very old; see rL119336):\n\nBefore:\n  error: cannot initialize object parameter of type \'X0\' with an expression of type \'X0\'\n\nAfter:\n  error: \'this\' argument to member function \'rvalue\' is an lvalue, but function has rvalue ref-qualifier\n\nReviewers: rsmith, aaron.ballman\n\nReviewed By: aaron.ballman\n\nSubscribers: lebedev.ri, aaron.ballman, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D39937\n\nllvm-svn: 321592"},
[j]={{Bc,5665,"/// PerformObjectArgumentInitialization - Perform initialization of\n/// the implicit object parameter for the given Method with the given\n/// expression.\nExprResult Sema::PerformObjectArgumentInitialization(Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, CXXMethodDecl *Method) {\n  // ...\n  if (ICS.isBad()) {\n    // ...\n    case BadConversionSequence::lvalue_ref_to_rvalue:\n    case BadConversionSequence::rvalue_ref_to_lvalue: {\n      // ...\n      Diag(From->getBeginLoc(), diag::err_member_function_call_bad_ref) << Method->getDeclName() << FromClassification.isRValue() << IsRValueQualified;"}},
[j]={{pc,5665,"/// PerformObjectArgumentInitialization - Perform initialization of\n/// the implicit object parameter for the given Method with the given\n/// expression.\nExprResult Sema::PerformObjectArgumentInitialization(Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, CXXMethodDecl *Method) {\n  // ...\n  if (ICS.isBad()) {\n    // ...\n    case BadConversionSequence::lvalue_ref_to_rvalue:\n    case BadConversionSequence::rvalue_ref_to_lvalue: {\n      // ...\n      Diag(From->getBeginLoc(), diag::err_member_function_call_bad_ref) << Method->getDeclName() << FromClassification.isRValue() << IsRValueQualified;"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp"]={"clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp:10:3: error: \'this\' argument to member function \'ref\' is an rvalue, but function has non-const lvalue ref-qualifier","clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp:12:3: error: \'this\' argument to member function \'cvref\' is an rvalue, but function has non-const lvalue ref-qualifier"}
["clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp"]={"clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp:10:3: error: \'this\' argument to member function \'ref\' is an rvalue, but function has non-const lvalue ref-qualifier","clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp:12:3: error: \'this\' argument to member function \'cvref\' is an rvalue, but function has non-const lvalue ref-qualifier"}
Line 360: Line 361:
},
},
["err_member_function_call_bad_type"]={
["err_member_function_call_bad_type"]={
[i]={{nil,t,"err_member_function_call_bad_type"}},
[c]={{nil,t,"err_member_function_call_bad_type"}},
[h]={{nil,t,"cannot initialize object parameter of type %0 with an expression of type %1"}},
[d]={{nil,t,"cannot initialize object parameter of type %0 with an expression of type %1"}},
[g]={{nil,t,"cannot initialize object parameter of type A with an expression of type B"}},
[e]={{nil,t,"cannot initialize object parameter of type A with an expression of type B"}},
[b]=k,
[f]=k,
[e]="cannot initialize object parameter of type (.*?) with an expression of type (.*?)",
[g]="cannot initialize object parameter of type (.*?) with an expression of type (.*?)",
[d]=a,
[h]=a,
[f]={{nil,t,m}},
[i]={{nil,t,m}},
[c]={"c7e67a04e0f3",1514695779,"[Sema] Improve diagnostics for const- and ref-qualified member functions","[Sema] Improve diagnostics for const- and ref-qualified member functions\n\nSummary:\nAdjust wording for const-qualification mismatch to be a little more clear.\n\nAlso add another diagnostic for a ref qualifier mismatch, which previously produced a useless error (this error path is simply very old; see rL119336):\n\nBefore:\n  error: cannot initialize object parameter of type \'X0\' with an expression of type \'X0\'\n\nAfter:\n  error: \'this\' argument to member function \'rvalue\' is an lvalue, but function has rvalue ref-qualifier\n\nReviewers: rsmith, aaron.ballman\n\nReviewed By: aaron.ballman\n\nSubscribers: lebedev.ri, aaron.ballman, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D39937\n\nllvm-svn: 321592"},
[b]={"c7e67a04e0f3",1514695779,"[Sema] Improve diagnostics for const- and ref-qualified member functions","[Sema] Improve diagnostics for const- and ref-qualified member functions\n\nSummary:\nAdjust wording for const-qualification mismatch to be a little more clear.\n\nAlso add another diagnostic for a ref qualifier mismatch, which previously produced a useless error (this error path is simply very old; see rL119336):\n\nBefore:\n  error: cannot initialize object parameter of type \'X0\' with an expression of type \'X0\'\n\nAfter:\n  error: \'this\' argument to member function \'rvalue\' is an lvalue, but function has rvalue ref-qualifier\n\nReviewers: rsmith, aaron.ballman\n\nReviewed By: aaron.ballman\n\nSubscribers: lebedev.ri, aaron.ballman, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D39937\n\nllvm-svn: 321592"},
[j]={{Bc,5682,"/// PerformObjectArgumentInitialization - Perform initialization of\n/// the implicit object parameter for the given Method with the given\n/// expression.\nExprResult Sema::PerformObjectArgumentInitialization(Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, CXXMethodDecl *Method) {\n  // ...\n  if (ICS.isBad()) {\n    // ...\n    return Diag(From->getBeginLoc(), diag::err_member_function_call_bad_type) << ImplicitParamRecordType << FromRecordType << From->getSourceRange();"}}
[j]={{pc,5682,"/// PerformObjectArgumentInitialization - Perform initialization of\n/// the implicit object parameter for the given Method with the given\n/// expression.\nExprResult Sema::PerformObjectArgumentInitialization(Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, CXXMethodDecl *Method) {\n  // ...\n  if (ICS.isBad()) {\n    // ...\n    return Diag(From->getBeginLoc(), diag::err_member_function_call_bad_type) << ImplicitParamRecordType << FromRecordType << From->getSourceRange();"}}
},
},
["err_member_function_initialization"]={
["err_member_function_initialization"]={
[i]="err_member_function_initialization",
[c]="err_member_function_initialization",
[h]="initializer on function does not look like a pure-specifier",
[d]="initializer on function does not look like a pure-specifier",
[g]="initializer on function does not look like a pure-specifier",
[e]="initializer on function does not look like a pure-specifier",
[b]=k,
[f]=k,
[e]="initializer on function does not look like a pure\\-specifier",
[g]="initializer on function does not look like a pure\\-specifier",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={H,1236199783,I,G},
[b]={J,1236199783,H,I},
[j]={{o,13131,"/// 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  // ...\n  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(RealDecl)) {\n    // ...\n    Diag(Method->getLocation(), diag::err_member_function_initialization) << Method->getDeclName() << Init->getSourceRange();"}},
[j]={{o,13131,"/// 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  // ...\n  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(RealDecl)) {\n    // ...\n    Diag(Method->getLocation(), diag::err_member_function_initialization) << Method->getDeclName() << Init->getSourceRange();"}},
[l]={
[l]={
Line 385: Line 386:
},
},
["err_member_name_of_class"]={
["err_member_name_of_class"]={
[i]="err_member_name_of_class",
[c]="err_member_name_of_class",
[h]="member %0 has the same name as its class",
[d]="member %0 has the same name as its class",
[g]="member A has the same name as its class",
[e]="member A has the same name as its class",
[b]=k,
[f]=k,
[e]="member (.*?) has the same name as its class",
[g]="member (.*?) has the same name as its class",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"36c22a2335c0",1287148881,"Diagnose C++ [class.mem]p13-14, where a class member has the same name","Diagnose C++ [class.mem]p13-14, where a class member has the same name\nas the class itself. Fixes PR7082.\n\nllvm-svn: 116573"},
[b]={"36c22a2335c0",1287148881,"Diagnose C++ [class.mem]p13-14, where a class member has the same name","Diagnose C++ [class.mem]p13-14, where a class member has the same name\nas the class itself. Fixes PR7082.\n\nllvm-svn: 116573"},
[j]={{o,6135,"/// DiagnoseClassNameShadow - Implement C++ [class.mem]p13:\n///  If T is the name of a class, then each of the following shall have a\n///  name different from T:\n///    - every static data member of class T;\n///    - every member function of class T\n///    - every member of class T that is itself a type;\n/// \\returns true if the declaration name violates these rules.\nbool Sema::DiagnoseClassNameShadow(DeclContext *DC, DeclarationNameInfo NameInfo) {\n  // ...\n  if (Record && Record->getIdentifier() && Record->getDeclName() == Name) {\n    Diag(NameInfo.getLoc(), diag::err_member_name_of_class) << Name;"},{O,6956,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  if (Record->getIdentifier()) {\n    // ...\n    for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E; ++I) {\n      // ...\n      if (((isa<FieldDecl>(D) || isa<UnresolvedUsingValueDecl>(D)) && Record->hasUserDeclaredConstructor()) || isa<IndirectFieldDecl>(D)) {\n        Diag((*I)->getLocation(), diag::err_member_name_of_class) << D->getDeclName();"}},
[j]={{o,6135,"/// DiagnoseClassNameShadow - Implement C++ [class.mem]p13:\n///  If T is the name of a class, then each of the following shall have a\n///  name different from T:\n///    - every static data member of class T;\n///    - every member function of class T\n///    - every member of class T that is itself a type;\n/// \\returns true if the declaration name violates these rules.\nbool Sema::DiagnoseClassNameShadow(DeclContext *DC, DeclarationNameInfo NameInfo) {\n  // ...\n  if (Record && Record->getIdentifier() && Record->getDeclName() == Name) {\n    Diag(NameInfo.getLoc(), diag::err_member_name_of_class) << Name;"},{Q,6956,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  if (Record->getIdentifier()) {\n    // ...\n    for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E; ++I) {\n      // ...\n      if (((isa<FieldDecl>(D) || isa<UnresolvedUsingValueDecl>(D)) && Record->hasUserDeclaredConstructor()) || isa<IndirectFieldDecl>(D)) {\n        Diag((*I)->getLocation(), diag::err_member_name_of_class) << D->getDeclName();"}},
[l]={
[l]={
["clang/test/SemaTemplate/injected-class-name.cpp"]={"clang/test/SemaTemplate/injected-class-name.cpp:69:31: error: member \'Nested\' has the same name as its class"}
["clang/test/SemaTemplate/injected-class-name.cpp"]={"clang/test/SemaTemplate/injected-class-name.cpp:69:31: error: member \'Nested\' has the same name as its class"}
Line 399: Line 400:
},
},
["err_member_not_yet_instantiated"]={
["err_member_not_yet_instantiated"]={
[i]="err_member_not_yet_instantiated",
[c]="err_member_not_yet_instantiated",
[h]="no member %0 in %1; it has not yet been instantiated",
[d]="no member %0 in %1; it has not yet been instantiated",
[g]="no member A in B; it has not yet been instantiated",
[e]="no member A in B; it has not yet been instantiated",
[b]=k,
[f]=k,
[e]="no member (.*?) in (.*?); it has not yet been instantiated",
[g]="no member (.*?) in (.*?); it has not yet been instantiated",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"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\ndeclaration because of interesting ordering dependencies while\ninstantiating a class template or member class thereof. Complain,\nrather than asserting (+Asserts) or silently rejecting the code\n(-Asserts).\n\nFixes the crash-on-invalid in PR8965. \n\nllvm-svn: 127129"},
[b]={"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\ndeclaration because of interesting ordering dependencies while\ninstantiating a class template or member class thereof. Complain,\nrather than asserting (+Asserts) or silently rejecting the code\n(-Asserts).\n\nFixes the crash-on-invalid in PR8965. \n\nllvm-svn: 127129"},
[j]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",6321,"/// 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  // ...\n  if (ParentDC != D->getDeclContext()) {\n    // ...\n    if (!Result) {\n      if (isa<UsingShadowDecl>(D)) {\n      // ...\n      } else if (hasUncompilableErrorOccurred()) {\n      // ...\n      } else if (IsBeingInstantiated) {\n        // ...\n        Diag(Loc, diag::err_member_not_yet_instantiated) << D->getDeclName() << Context.getTypeDeclType(cast<CXXRecordDecl>(ParentDC));"}},
[j]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",6321,"/// 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  // ...\n  if (ParentDC != D->getDeclContext()) {\n    // ...\n    if (!Result) {\n      if (isa<UsingShadowDecl>(D)) {\n      // ...\n      } else if (hasUncompilableErrorOccurred()) {\n      // ...\n      } else if (IsBeingInstantiated) {\n        // ...\n        Diag(Loc, diag::err_member_not_yet_instantiated) << D->getDeclName() << Context.getTypeDeclType(cast<CXXRecordDecl>(ParentDC));"}},
[l]={
[l]={
Line 413: Line 414:
},
},
["err_member_qualification"]={
["err_member_qualification"]={
[i]="err_member_qualification",
[c]="err_member_qualification",
[h]="non-friend class member %0 cannot have a qualified name",
[d]="non-friend class member %0 cannot have a qualified name",
[g]="non-friend class member A cannot have a qualified name",
[e]="non-friend class member A cannot have a qualified name",
[b]=k,
[f]=k,
[e]="non\\-friend class member (.*?) cannot have a qualified name",
[g]="non\\-friend class member (.*?) cannot have a qualified name",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"a007d36c1bad",1287008393,"Generalize the checking for qualification of (non-friend) class","Generalize the checking for qualification of (non-friend) class\nmembers. Provide a hard error when the qualification doesn\'t match the\ncurrent class type, or a warning + Fix-it if it does match the current\nclass type. Fixes PR8159.\n\nllvm-svn: 116445"},
[b]={"a007d36c1bad",1287008393,"Generalize the checking for qualification of (non-friend) class","Generalize the checking for qualification of (non-friend) class\nmembers. Provide a hard error when the qualification doesn\'t match the\ncurrent class type, or a warning + Fix-it if it does match the current\nclass type. Fixes PR8159.\n\nllvm-svn: 116445"},
[j]={{o,6191,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // Check whether the qualifying scope encloses the scope of the original\n  // declaration. For a template-id, we perform the checks in\n  // CheckTemplateSpecializationScope.\n  if (!Cur->Encloses(DC) && !IsTemplateId) {\n    if (Cur->isRecord())\n      Diag(Loc, diag::err_member_qualification) << Name << SS.getRange();"},{o,6219,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  if (Cur->isRecord()) {\n    // ...\n    Diag(Loc, diag::err_member_qualification) << Name << SS.getRange();"},{O,3594,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  if (isInstField) {\n    // ...\n    if (SS.isSet() && !SS.isInvalid()) {\n      // The user provided a superfluous scope specifier inside a class\n      // definition:\n      //\n      // class X {\n      //  int X::member;\n      // };\n      if (DeclContext *DC = computeDeclContext(SS, false))\n      // ...\n      else\n        Diag(D.getIdentifierLoc(), diag::err_member_qualification) << Name << SS.getRange();"}},
[j]={{o,6191,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // Check whether the qualifying scope encloses the scope of the original\n  // declaration. For a template-id, we perform the checks in\n  // CheckTemplateSpecializationScope.\n  if (!Cur->Encloses(DC) && !IsTemplateId) {\n    if (Cur->isRecord())\n      Diag(Loc, diag::err_member_qualification) << Name << SS.getRange();"},{o,6219,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  if (Cur->isRecord()) {\n    // ...\n    Diag(Loc, diag::err_member_qualification) << Name << SS.getRange();"},{Q,3594,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  if (isInstField) {\n    // ...\n    if (SS.isSet() && !SS.isInvalid()) {\n      // The user provided a superfluous scope specifier inside a class\n      // definition:\n      //\n      // class X {\n      //  int X::member;\n      // };\n      if (DeclContext *DC = computeDeclContext(SS, false))\n      // ...\n      else\n        Diag(D.getIdentifierLoc(), diag::err_member_qualification) << Name << SS.getRange();"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/p1.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/p1.cpp:7:20: error: non-friend class member \'x\' cannot have a qualified name","clang/test/CXX/dcl.decl/dcl.meaning/p1.cpp:13:20: error: non-friend class member \'x2\' cannot have a qualified name"}
["clang/test/CXX/dcl.decl/dcl.meaning/p1.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/p1.cpp:7:20: error: non-friend class member \'x\' cannot have a qualified name","clang/test/CXX/dcl.decl/dcl.meaning/p1.cpp:13:20: error: non-friend class member \'x2\' cannot have a qualified name"}
Line 427: Line 428:
},
},
["err_member_redeclared"]={
["err_member_redeclared"]={
[i]="err_member_redeclared",
[c]="err_member_redeclared",
[h]="class member cannot be redeclared",
[d]="class member cannot be redeclared",
[e]="class member cannot be redeclared",
[f]=k,
[g]="class member cannot be redeclared",
[g]="class member cannot be redeclared",
[b]=k,
[h]=a,
[e]="class member cannot be redeclared",
[i]=m,
[d]=a,
[b]={ib,1237025389,fb,gb},
[f]=m,
[c]={hb,1237025389,gb,fb},
[j]={{o,4005,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    if (OldMethod && NewMethod) {\n      // ...\n      if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() && !IsClassScopeExplicitSpecialization) {\n        // ...\n        // C++ [class.mem]p1:\n        //  [...] A member shall not be declared twice in the\n        //  member-specification, except that a nested class or member\n        //  class template can be declared and then later defined.\n        if (!inTemplateInstantiation()) {\n          // ...\n          if (isa<CXXConstructorDecl>(OldMethod))\n          // ...\n          else if (isa<CXXDestructorDecl>(NewMethod))\n          // ...\n          else if (isa<CXXConversionDecl>(NewMethod))\n          // ...\n          else\n            NewDiag = diag::err_member_redeclared;"}},
[j]={{o,4005,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    if (OldMethod && NewMethod) {\n      // ...\n      if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() && !IsClassScopeExplicitSpecialization) {\n        // ...\n        // C++ [class.mem]p1:\n        //  [...] A member shall not be declared twice in the\n        //  member-specification, except that a nested class or member\n        //  class template can be declared and then later defined.\n        if (!inTemplateInstantiation()) {\n          // ...\n          if (isa<CXXConstructorDecl>(OldMethod))\n          // ...\n          else if (isa<CXXDestructorDecl>(NewMethod))\n          // ...\n          else if (isa<CXXConversionDecl>(NewMethod))\n          // ...\n          else\n            NewDiag = diag::err_member_redeclared;"}},
[l]={
[l]={
Line 441: Line 442:
},
},
["err_member_redeclared_in_instantiation"]={
["err_member_redeclared_in_instantiation"]={
[i]="err_member_redeclared_in_instantiation",
[c]="err_member_redeclared_in_instantiation",
[h]="multiple overloads of %0 instantiate to the same signature %1",
[d]="multiple overloads of %0 instantiate to the same signature %1",
[g]="multiple overloads of A instantiate to the same signature B",
[e]="multiple overloads of A instantiate to the same signature B",
[b]=k,
[f]=k,
[e]="multiple overloads of (.*?) instantiate to the same signature (.*?)",
[g]="multiple overloads of (.*?) instantiate to the same signature (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"57e7ff9c0c44",1342152724,"Provide a special-case diagnostic when two class member functions instantiate","Provide a special-case diagnostic when two class member functions instantiate\nto the same signature. Fix a bug in the type printer which would cause this\ndiagnostic to print wonderful types like \'const const int *\'.\n\nllvm-svn: 160161"},
[b]={"57e7ff9c0c44",1342152724,"Provide a special-case diagnostic when two class member functions instantiate","Provide a special-case diagnostic when two class member functions instantiate\nto the same signature. Fix a bug in the type printer which would cause this\ndiagnostic to print wonderful types like \'const const int *\'.\n\nllvm-svn: 160161"},
[j]={{o,4009,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    if (OldMethod && NewMethod) {\n      // ...\n      if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() && !IsClassScopeExplicitSpecialization) {\n        // ...\n        // C++ [class.mem]p1:\n        //  [...] A member shall not be declared twice in the\n        //  member-specification, except that a nested class or member\n        //  class template can be declared and then later defined.\n        if (!inTemplateInstantiation()) {\n        // ...\n        } else {\n          Diag(New->getLocation(), diag::err_member_redeclared_in_instantiation) << New << New->getType();"}},
[j]={{o,4009,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    if (OldMethod && NewMethod) {\n      // ...\n      if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() && !IsClassScopeExplicitSpecialization) {\n        // ...\n        // C++ [class.mem]p1:\n        //  [...] A member shall not be declared twice in the\n        //  member-specification, except that a nested class or member\n        //  class template can be declared and then later defined.\n        if (!inTemplateInstantiation()) {\n        // ...\n        } else {\n          Diag(New->getLocation(), diag::err_member_redeclared_in_instantiation) << New << New->getType();"}},
[l]={
[l]={
Line 455: Line 456:
},
},
["err_member_reference_needs_call"]={
["err_member_reference_needs_call"]={
[i]="err_member_reference_needs_call",
[c]="err_member_reference_needs_call",
[h]="base of member reference is a function; perhaps you meant to call it%select{| with no arguments}0?",
[d]="base of member reference is a function; perhaps you meant to call it%select{| with no arguments}0?",
[g]={{nil,nil,{"base of member reference is a function; perhaps you meant to call it",{a," with no arguments"},"?"}}},
[e]={{nil,nil,{"base of member reference is a function; perhaps you meant to call it",{a," with no arguments"},"?"}}},
[b]=k,
[f]=k,
[e]="base of member reference is a function; perhaps you meant to call it(?:| with no arguments)\\?",
[g]="base of member reference is a function; perhaps you meant to call it(?:| with no arguments)\\?",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"d82ae38d5300",1257489047,"Rework the fix-it hint for code like","Rework the fix-it hint for code like\n\n  get_origin->x\n\nwhere get_origin is actually a function and the user has forgotten the\nparentheses. Instead of giving a lame note for the fix-it, give a\nfull-fledge error, early, then build the call expression to try to\nrecover. \n\nllvm-svn: 86238"},
[b]={"d82ae38d5300",1257489047,"Rework the fix-it hint for code like","Rework the fix-it hint for code like\n\n  get_origin->x\n\nwhere get_origin is actually a function and the user has forgotten the\nparentheses. Instead of giving a lame note for the fix-it, give a\nfull-fledge error, early, then build the call expression to try to\nrecover. \n\nllvm-svn: 86238"},
[j]={{Rb,1681,"fail:\n  // ...\n  if (S.tryToRecoverWithCall(BaseExpr, S.PDiag(diag::err_member_reference_needs_call),"}},
[j]={{Tb,1681,"fail:\n  // ...\n  if (S.tryToRecoverWithCall(BaseExpr, S.PDiag(diag::err_member_reference_needs_call),"}},
[l]={
[l]={
["clang/test/FixIt/fixit-errors.c"]={"clang/test/FixIt/fixit-errors.c:22:9: error: base of member reference is a function; perhaps you meant to call it with no arguments?"}
["clang/test/FixIt/fixit-errors.c"]={"clang/test/FixIt/fixit-errors.c:22:9: error: base of member reference is a function; perhaps you meant to call it with no arguments?"}
Line 469: Line 470:
},
},
["err_member_with_template_arguments"]={
["err_member_with_template_arguments"]={
[i]={{nil,s,"err_member_with_template_arguments"}},
[c]={{nil,s,"err_member_with_template_arguments"}},
[h]={{nil,s,"member %0 cannot have template arguments"}},
[d]={{nil,s,"member %0 cannot have template arguments"}},
[g]={{nil,s,"member A cannot have template arguments"}},
[e]={{nil,s,"member A cannot have template arguments"}},
[b]=k,
[f]=k,
[e]="member (.*?) cannot have template arguments",
[g]="member (.*?) cannot have template arguments",
[d]=a,
[h]=a,
[f]={{nil,s,m}},
[i]={{nil,s,m}},
[c]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.","[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[b]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.","[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[j]={{O,3574,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  if (isInstField) {\n    // ...\n    if (D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) {\n      Diag(D.getIdentifierLoc(), diag::err_member_with_template_arguments) << II << SourceRange(D.getName().TemplateId->LAngleLoc, D.getName().TemplateId->RAngleLoc) << D.getName().TemplateId->LAngleLoc;"}},
[j]={{Q,3574,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  if (isInstField) {\n    // ...\n    if (D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) {\n      Diag(D.getIdentifierLoc(), diag::err_member_with_template_arguments) << II << SourceRange(D.getName().TemplateId->LAngleLoc, D.getName().TemplateId->RAngleLoc) << D.getName().TemplateId->LAngleLoc;"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:39:7: error: member \'i\' cannot have template arguments","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:40:7: error: member \'j\' cannot have template arguments","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:50:7: error: member \'i\' cannot have template arguments","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:51:7: error: member \'j\' cannot have template arguments"}
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:39:7: error: member \'i\' cannot have template arguments","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:40:7: error: member \'j\' cannot have template arguments","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:50:7: error: member \'i\' cannot have template arguments","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:51:7: error: member \'j\' cannot have template arguments"}
Line 483: Line 484:
},
},
["err_mempointer_in_nonclass_type"]={
["err_mempointer_in_nonclass_type"]={
[i]="err_mempointer_in_nonclass_type",
[c]="err_mempointer_in_nonclass_type",
[h]="member pointer refers into non-class type %0",
[d]="member pointer refers into non-class type %0",
[g]="member pointer refers into non-class type A",
[e]="member pointer refers into non-class type A",
[b]=k,
[f]=k,
[e]="member pointer refers into non\\-class type (.*?)",
[g]="member pointer refers into non\\-class type (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"0bdc1f5eef52",1244585859,"Handle member pointer types with dependent class types (e.g., int","Handle member pointer types with dependent class types (e.g., int\nT::*) and implement template instantiation for member pointer types.\n\nllvm-svn: 73151"},
[b]={"0bdc1f5eef52",1244585859,"Handle member pointer types with dependent class types (e.g., int","Handle member pointer types with dependent class types (e.g., int\nT::*) and implement template instantiation for member pointer types.\n\nllvm-svn: 73151"},
[j]={{cb,3096,"/// Build a member pointer type \\c T Class::*.\n///\n/// \\param T the type to which the member pointer refers.\n/// \\param Class the class type into which the member pointer points.\n/// \\param Loc the location where this type begins\n/// \\param Entity the name of the entity that will have this member pointer type\n///\n/// \\returns a member pointer type, if successful, or a NULL type if there was\n/// an error.\nQualType Sema::BuildMemberPointerType(QualType T, QualType Class, SourceLocation Loc, DeclarationName Entity) {\n  // ...\n  if (!Class->isDependentType() && !Class->isRecordType()) {\n    Diag(Loc, diag::err_mempointer_in_nonclass_type) << Class;"}},
[j]={{cb,3096,"/// Build a member pointer type \\c T Class::*.\n///\n/// \\param T the type to which the member pointer refers.\n/// \\param Class the class type into which the member pointer points.\n/// \\param Loc the location where this type begins\n/// \\param Entity the name of the entity that will have this member pointer type\n///\n/// \\returns a member pointer type, if successful, or a NULL type if there was\n/// an error.\nQualType Sema::BuildMemberPointerType(QualType T, QualType Class, SourceLocation Loc, DeclarationName Entity) {\n  // ...\n  if (!Class->isDependentType() && !Class->isRecordType()) {\n    Diag(Loc, diag::err_mempointer_in_nonclass_type) << Class;"}},
[l]={
[l]={
Line 497: Line 498:
},
},
["err_memptr_conv_via_virtual"]={
["err_memptr_conv_via_virtual"]={
[i]="err_memptr_conv_via_virtual",
[c]="err_memptr_conv_via_virtual",
[h]="conversion from pointer to member of class %0 to pointer to member of class %1 via virtual base %2 is not allowed",
[d]="conversion from pointer to member of class %0 to pointer to member of class %1 via virtual base %2 is not allowed",
[g]="conversion from pointer to member of class A to pointer to member of class B via virtual base C is not allowed",
[e]="conversion from pointer to member of class A to pointer to member of class B via virtual base C is not allowed",
[b]=k,
[f]=k,
[e]="conversion from pointer to member of class (.*?) to pointer to member of class (.*?) via virtual base (.*?) is not allowed",
[g]="conversion from pointer to member of class (.*?) to pointer to member of class (.*?) via virtual base (.*?) is not allowed",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={hb,1237025389,gb,fb},
[b]={ib,1237025389,fb,gb},
[j]={{"clang/lib/Sema/SemaCast.cpp",1823,"/// TryStaticMemberPointerUpcast - Tests whether a conversion according to\n/// C++ 5.2.9p9 is valid:\n///\n///  An rvalue of type \"pointer to member of D of type cv1 T\" can be\n///  converted to an rvalue of type \"pointer to member of B of type cv2 T\",\n///  where B is a base class of D [...].\n///\nTryCastResult TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr, QualType SrcType, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  // ...\n  if (const RecordType *VBase = Paths.getDetectedVirtual()) {\n    Self.Diag(OpRange.getBegin(), diag::err_memptr_conv_via_virtual) << SrcClass << DestClass << QualType(VBase, 0) << OpRange;"},{Bc,3284,"/// CheckMemberPointerConversion - Check the member pointer conversion from the\n/// expression From to the type ToType. This routine checks for ambiguous or\n/// virtual or inaccessible base-to-derived member pointer conversions\n/// for which IsMemberPointerConversion has already returned true. It returns\n/// true and produces a diagnostic if there was an error, or returns false\n/// otherwise.\nbool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType, CastKind &Kind, CXXCastPath &BasePath, bool IgnoreBaseAccess) {\n  // ...\n  if (const RecordType *VBase = Paths.getDetectedVirtual()) {\n    Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual) << FromClass << ToClass << QualType(VBase, 0) << From->getSourceRange();"}},
[j]={{"clang/lib/Sema/SemaCast.cpp",1823,"/// TryStaticMemberPointerUpcast - Tests whether a conversion according to\n/// C++ 5.2.9p9 is valid:\n///\n///  An rvalue of type \"pointer to member of D of type cv1 T\" can be\n///  converted to an rvalue of type \"pointer to member of B of type cv2 T\",\n///  where B is a base class of D [...].\n///\nTryCastResult TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr, QualType SrcType, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  // ...\n  if (const RecordType *VBase = Paths.getDetectedVirtual()) {\n    Self.Diag(OpRange.getBegin(), diag::err_memptr_conv_via_virtual) << SrcClass << DestClass << QualType(VBase, 0) << OpRange;"},{pc,3284,"/// CheckMemberPointerConversion - Check the member pointer conversion from the\n/// expression From to the type ToType. This routine checks for ambiguous or\n/// virtual or inaccessible base-to-derived member pointer conversions\n/// for which IsMemberPointerConversion has already returned true. It returns\n/// true and produces a diagnostic if there was an error, or returns false\n/// otherwise.\nbool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType, CastKind &Kind, CXXCastPath &BasePath, bool IgnoreBaseAccess) {\n  // ...\n  if (const RecordType *VBase = Paths.getDetectedVirtual()) {\n    Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual) << FromClass << ToClass << QualType(VBase, 0) << From->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/conv/conv.mem/p4.cpp"]={"clang/test/CXX/conv/conv.mem/p4.cpp:42:25: error: conversion from pointer to member of class \'Base\' to pointer to member of class \'test3::Derived\' via virtual base \'Base\' is not allowed","clang/test/CXX/conv/conv.mem/p4.cpp:43:27: error: conversion from pointer to member of class \'Base\' to pointer to member of class \'test3::Derived\' via virtual base \'Base\' is not allowed"}
["clang/test/CXX/conv/conv.mem/p4.cpp"]={"clang/test/CXX/conv/conv.mem/p4.cpp:42:25: error: conversion from pointer to member of class \'Base\' to pointer to member of class \'test3::Derived\' via virtual base \'Base\' is not allowed","clang/test/CXX/conv/conv.mem/p4.cpp:43:27: error: conversion from pointer to member of class \'Base\' to pointer to member of class \'test3::Derived\' via virtual base \'Base\' is not allowed"}
Line 511: Line 512:
},
},
["err_memptr_incomplete"]={
["err_memptr_incomplete"]={
[i]={{nil,q,"err_memptr_incomplete"}},
[c]={{nil,q,"err_memptr_incomplete"}},
[h]={{nil,q,"member pointer has incomplete base type %0"}},
[d]={{nil,q,"member pointer has incomplete base type %0"}},
[g]={{nil,q,"member pointer has incomplete base type A"}},
[e]={{nil,q,"member pointer has incomplete base type A"}},
[b]=k,
[f]=k,
[e]="member pointer has incomplete base type (.*?)",
[g]="member pointer has incomplete base type (.*?)",
[d]=a,
[h]=a,
[f]={{nil,q,m}},
[i]={{nil,q,m}},
[c]={"54d13b406828",1527651604,"Sema: Add a flag for rejecting member pointers with incomplete base types.","Sema: Add a flag for rejecting member pointers with incomplete base types.\n\nCodebases that need to be compatible with the Microsoft ABI can pass\nthis flag to avoid issues caused by the lack of a fixed ABI for\nincomplete member pointers.\n\nDifferential Revision: https://reviews.llvm.org/D47503\n\nllvm-svn: 333498"},
[b]={"54d13b406828",1527651604,"Sema: Add a flag for rejecting member pointers with incomplete base types.","Sema: Add a flag for rejecting member pointers with incomplete base types.\n\nCodebases that need to be compatible with the Microsoft ABI can pass\nthis flag to avoid issues caused by the lack of a fixed ABI for\nincomplete member pointers.\n\nDifferential Revision: https://reviews.llvm.org/D47503\n\nllvm-svn: 333498"},
[j]={{cb,9111,"/// The implementation of RequireCompleteType\nbool Sema::RequireCompleteTypeImpl(SourceLocation Loc, QualType T, CompleteTypeKind Kind, TypeDiagnoser *Diagnoser) {\n  // ...\n  if (const MemberPointerType *MPTy = T->getAs<MemberPointerType>()) {\n    if (!MPTy->getClass()->isDependentType()) {\n      if (getLangOpts().CompleteMemberPointers && !MPTy->getClass()->getAsCXXRecordDecl()->isBeingDefined() && RequireCompleteType(Loc, QualType(MPTy->getClass(), 0), Kind, diag::err_memptr_incomplete))"}},
[j]={{cb,9111,"/// The implementation of RequireCompleteType\nbool Sema::RequireCompleteTypeImpl(SourceLocation Loc, QualType T, CompleteTypeKind Kind, TypeDiagnoser *Diagnoser) {\n  // ...\n  if (const MemberPointerType *MPTy = T->getAs<MemberPointerType>()) {\n    if (!MPTy->getClass()->isDependentType()) {\n      if (getLangOpts().CompleteMemberPointers && !MPTy->getClass()->getAsCXXRecordDecl()->isBeingDefined() && RequireCompleteType(Loc, QualType(MPTy->getClass(), 0), Kind, diag::err_memptr_incomplete))"}},
[l]={
[l]={
Line 525: Line 526:
},
},
["err_memtag_any2arg_pointer"]={
["err_memtag_any2arg_pointer"]={
[i]={{nil,x,"err_memtag_any2arg_pointer"}},
[c]={{nil,z,"err_memtag_any2arg_pointer"}},
[h]={{nil,x,"at least one argument of MTE builtin function must be a pointer (%0, %1 invalid)"}},
[d]={{nil,z,"at least one argument of MTE builtin function must be a pointer (%0, %1 invalid)"}},
[g]={{nil,x,"at least one argument of MTE builtin function must be a pointer (A, B invalid)"}},
[e]={{nil,z,"at least one argument of MTE builtin function must be a pointer (A, B invalid)"}},
[b]=k,
[f]=k,
[e]="at least one argument of MTE builtin function must be a pointer \\((.*?), (.*?) invalid\\)",
[g]="at least one argument of MTE builtin function must be a pointer \\((.*?), (.*?) invalid\\)",
[d]=a,
[h]=a,
[f]={{nil,x,a}},
[i]={{nil,z,w}},
[c]={"18b0c40bc5db",1556312891,"[AArch64] Add support for MTE intrinsics","[AArch64] Add support for MTE intrinsics\nThis provides intrinsics support for Memory Tagging Extension (MTE),\nwhich was introduced with the Armv8.5-a architecture.\nThese intrinsics are available when __ARM_FEATURE_MEMORY_TAGGING is defined.\nEach intrinsic is described in detail in the ACLE Q1 2019 documentation:\nhttps://developer.arm.com/docs/101028/latest\nReviewed By: Tim Nortover, David Spickett\nDifferential Revision: https://reviews.llvm.org/D60485\n\nllvm-svn: 359348"},
[b]={"18b0c40bc5db",1556312891,"[AArch64] Add support for MTE intrinsics","[AArch64] Add support for MTE intrinsics\nThis provides intrinsics support for Memory Tagging Extension (MTE),\nwhich was introduced with the Armv8.5-a architecture.\nThese intrinsics are available when __ARM_FEATURE_MEMORY_TAGGING is defined.\nEach intrinsic is described in detail in the ACLE Q1 2019 documentation:\nhttps://developer.arm.com/docs/101028/latest\nReviewed By: Tim Nortover, David Spickett\nDifferential Revision: https://reviews.llvm.org/D60485\n\nllvm-svn: 359348"},
[j]={{W,9086,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n    // ...\n    // at least one argument should be pointer type\n    if (!ArgTypeA->isAnyPointerType() && !ArgTypeB->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_any2arg_pointer) << ArgTypeA << ArgTypeB << ArgA->getSourceRange();"}},
[j]={{X,9086,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n    // ...\n    // at least one argument should be pointer type\n    if (!ArgTypeA->isAnyPointerType() && !ArgTypeB->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_any2arg_pointer) << ArgTypeA << ArgTypeB << ArgA->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/builtins-arm64-mte.c"]={"clang/test/Sema/builtins-arm64-mte.c:136:10: error: at least one argument of MTE builtin function must be a pointer (\'std::nullptr_t\', \'std::nullptr_t\' invalid)"}
["clang/test/Sema/builtins-arm64-mte.c"]={"clang/test/Sema/builtins-arm64-mte.c:136:10: error: at least one argument of MTE builtin function must be a pointer (\'std::nullptr_t\', \'std::nullptr_t\' invalid)"}
Line 539: Line 540:
},
},
["err_memtag_arg_must_be_integer"]={
["err_memtag_arg_must_be_integer"]={
[i]={{nil,x,"err_memtag_arg_must_be_integer"}},
[c]={{nil,z,"err_memtag_arg_must_be_integer"}},
[h]={{nil,x,"%0 argument of MTE builtin function must be an integer type (%1 invalid)"}},
[d]={{nil,z,"%0 argument of MTE builtin function must be an integer type (%1 invalid)"}},
[g]={{nil,x,"A argument of MTE builtin function must be an integer type (B invalid)"}},
[e]={{nil,z,"A argument of MTE builtin function must be an integer type (B invalid)"}},
[b]=k,
[f]=k,
[e]="(.*?) argument of MTE builtin function must be an integer type \\((.*?) invalid\\)",
[g]="(.*?) argument of MTE builtin function must be an integer type \\((.*?) invalid\\)",
[d]=a,
[h]=a,
[f]={{nil,x,a}},
[i]={{nil,z,w}},
[c]={"18b0c40bc5db",1556312891,"[AArch64] Add support for MTE intrinsics","[AArch64] Add support for MTE intrinsics\nThis provides intrinsics support for Memory Tagging Extension (MTE),\nwhich was introduced with the Armv8.5-a architecture.\nThese intrinsics are available when __ARM_FEATURE_MEMORY_TAGGING is defined.\nEach intrinsic is described in detail in the ACLE Q1 2019 documentation:\nhttps://developer.arm.com/docs/101028/latest\nReviewed By: Tim Nortover, David Spickett\nDifferential Revision: https://reviews.llvm.org/D60485\n\nllvm-svn: 359348"},
[b]={"18b0c40bc5db",1556312891,"[AArch64] Add support for MTE intrinsics","[AArch64] Add support for MTE intrinsics\nThis provides intrinsics support for Memory Tagging Extension (MTE),\nwhich was introduced with the Armv8.5-a architecture.\nThese intrinsics are available when __ARM_FEATURE_MEMORY_TAGGING is defined.\nEach intrinsic is described in detail in the ACLE Q1 2019 documentation:\nhttps://developer.arm.com/docs/101028/latest\nReviewed By: Tim Nortover, David Spickett\nDifferential Revision: https://reviews.llvm.org/D60485\n\nllvm-svn: 359348"},
[j]={{W,8972,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == AArch64::BI__builtin_arm_irg) {\n    // ...\n    if (!SecArgType->isIntegerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_integer) << \"second\" << SecArgType << Arg1->getSourceRange();"},{W,9017,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_gmi) {\n    // ...\n    if (!SecArgType->isIntegerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_integer) << \"second\" << SecArgType << Arg1->getSourceRange();"}},
[j]={{X,8972,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == AArch64::BI__builtin_arm_irg) {\n    // ...\n    if (!SecArgType->isIntegerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_integer) << \"second\" << SecArgType << Arg1->getSourceRange();"},{X,9017,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_gmi) {\n    // ...\n    if (!SecArgType->isIntegerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_integer) << \"second\" << SecArgType << Arg1->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/builtins-arm64-mte.c"]={"clang/test/Sema/builtins-arm64-mte.c:15:10: error: second argument of MTE builtin function must be an integer type (\'unsigned int *\' invalid)","clang/test/Sema/builtins-arm64-mte.c:80:12: error: second argument of MTE builtin function must be an integer type (\'int *\' invalid)"}
["clang/test/Sema/builtins-arm64-mte.c"]={"clang/test/Sema/builtins-arm64-mte.c:15:10: error: second argument of MTE builtin function must be an integer type (\'unsigned int *\' invalid)","clang/test/Sema/builtins-arm64-mte.c:80:12: error: second argument of MTE builtin function must be an integer type (\'int *\' invalid)"}
Line 553: Line 554:
},
},
["err_memtag_arg_must_be_pointer"]={
["err_memtag_arg_must_be_pointer"]={
[i]={{nil,x,"err_memtag_arg_must_be_pointer"}},
[c]={{nil,z,"err_memtag_arg_must_be_pointer"}},
[h]={{nil,x,"%0 argument of MTE builtin function must be a pointer (%1 invalid)"}},
[d]={{nil,z,"%0 argument of MTE builtin function must be a pointer (%1 invalid)"}},
[g]={{nil,x,"A argument of MTE builtin function must be a pointer (B invalid)"}},
[e]={{nil,z,"A argument of MTE builtin function must be a pointer (B invalid)"}},
[b]=k,
[f]=k,
[e]="(.*?) argument of MTE builtin function must be a pointer \\((.*?) invalid\\)",
[g]="(.*?) argument of MTE builtin function must be a pointer \\((.*?) invalid\\)",
[d]=a,
[h]=a,
[f]={{nil,x,a}},
[i]={{nil,z,w}},
[c]={"18b0c40bc5db",1556312891,"[AArch64] Add support for MTE intrinsics","[AArch64] Add support for MTE intrinsics\nThis provides intrinsics support for Memory Tagging Extension (MTE),\nwhich was introduced with the Armv8.5-a architecture.\nThese intrinsics are available when __ARM_FEATURE_MEMORY_TAGGING is defined.\nEach intrinsic is described in detail in the ACLE Q1 2019 documentation:\nhttps://developer.arm.com/docs/101028/latest\nReviewed By: Tim Nortover, David Spickett\nDifferential Revision: https://reviews.llvm.org/D60485\n\nllvm-svn: 359348"},
[b]={"18b0c40bc5db",1556312891,"[AArch64] Add support for MTE intrinsics","[AArch64] Add support for MTE intrinsics\nThis provides intrinsics support for Memory Tagging Extension (MTE),\nwhich was introduced with the Armv8.5-a architecture.\nThese intrinsics are available when __ARM_FEATURE_MEMORY_TAGGING is defined.\nEach intrinsic is described in detail in the ACLE Q1 2019 documentation:\nhttps://developer.arm.com/docs/101028/latest\nReviewed By: Tim Nortover, David Spickett\nDifferential Revision: https://reviews.llvm.org/D60485\n\nllvm-svn: 359348"},
[j]={{W,8963,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == AArch64::BI__builtin_arm_irg) {\n    // ...\n    if (!FirstArgType->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) << \"first\" << FirstArgType << Arg0->getSourceRange();"},{W,8990,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_addg) {\n    // ...\n    if (!FirstArgType->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) << \"first\" << FirstArgType << Arg0->getSourceRange();"},{W,9012,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_gmi) {\n    // ...\n    if (!FirstArgType->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) << \"first\" << FirstArgType << Arg0->getSourceRange();"},{W,9034,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_ldg || BuiltinID == AArch64::BI__builtin_arm_stg) {\n    // ...\n    if (!FirstArgType->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) << \"first\" << FirstArgType << Arg0->getSourceRange();"}},
[j]={{X,8963,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == AArch64::BI__builtin_arm_irg) {\n    // ...\n    if (!FirstArgType->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) << \"first\" << FirstArgType << Arg0->getSourceRange();"},{X,8990,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_addg) {\n    // ...\n    if (!FirstArgType->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) << \"first\" << FirstArgType << Arg0->getSourceRange();"},{X,9012,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_gmi) {\n    // ...\n    if (!FirstArgType->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) << \"first\" << FirstArgType << Arg0->getSourceRange();"},{X,9034,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_ldg || BuiltinID == AArch64::BI__builtin_arm_stg) {\n    // ...\n    if (!FirstArgType->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) << \"first\" << FirstArgType << Arg0->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/builtins-arm64-mte.c"]={"clang/test/Sema/builtins-arm64-mte.c:10:10: error: first argument of MTE builtin function must be a pointer (\'int\' invalid)","clang/test/Sema/builtins-arm64-mte.c:75:12: error: first argument of MTE builtin function must be a pointer (\'int\' invalid)","clang/test/Sema/builtins-arm64-mte.c:90:11: error: first argument of MTE builtin function must be a pointer (\'int\' invalid)","clang/test/Sema/builtins-arm64-mte.c:110:4: error: first argument of MTE builtin function must be a pointer (\'int\' invalid)"}
["clang/test/Sema/builtins-arm64-mte.c"]={"clang/test/Sema/builtins-arm64-mte.c:10:10: error: first argument of MTE builtin function must be a pointer (\'int\' invalid)","clang/test/Sema/builtins-arm64-mte.c:75:12: error: first argument of MTE builtin function must be a pointer (\'int\' invalid)","clang/test/Sema/builtins-arm64-mte.c:90:11: error: first argument of MTE builtin function must be a pointer (\'int\' invalid)","clang/test/Sema/builtins-arm64-mte.c:110:4: error: first argument of MTE builtin function must be a pointer (\'int\' invalid)"}
Line 567: Line 568:
},
},
["err_memtag_arg_null_or_pointer"]={
["err_memtag_arg_null_or_pointer"]={
[i]={{nil,x,"err_memtag_arg_null_or_pointer"}},
[c]={{nil,z,"err_memtag_arg_null_or_pointer"}},
[h]={{nil,x,"%0 argument of MTE builtin function must be a null or a pointer (%1 invalid)"}},
[d]={{nil,z,"%0 argument of MTE builtin function must be a null or a pointer (%1 invalid)"}},
[g]={{nil,x,"A argument of MTE builtin function must be a null or a pointer (B invalid)"}},
[e]={{nil,z,"A argument of MTE builtin function must be a null or a pointer (B invalid)"}},
[b]=k,
[f]=k,
[e]="(.*?) argument of MTE builtin function must be a null or a pointer \\((.*?) invalid\\)",
[g]="(.*?) argument of MTE builtin function must be a null or a pointer \\((.*?) invalid\\)",
[d]=a,
[h]=a,
[f]={{nil,x,a}},
[i]={{nil,z,w}},
[c]={"18b0c40bc5db",1556312891,"[AArch64] Add support for MTE intrinsics","[AArch64] Add support for MTE intrinsics\nThis provides intrinsics support for Memory Tagging Extension (MTE),\nwhich was introduced with the Armv8.5-a architecture.\nThese intrinsics are available when __ARM_FEATURE_MEMORY_TAGGING is defined.\nEach intrinsic is described in detail in the ACLE Q1 2019 documentation:\nhttps://developer.arm.com/docs/101028/latest\nReviewed By: Tim Nortover, David Spickett\nDifferential Revision: https://reviews.llvm.org/D60485\n\nllvm-svn: 359348"},
[b]={"18b0c40bc5db",1556312891,"[AArch64] Add support for MTE intrinsics","[AArch64] Add support for MTE intrinsics\nThis provides intrinsics support for Memory Tagging Extension (MTE),\nwhich was introduced with the Armv8.5-a architecture.\nThese intrinsics are available when __ARM_FEATURE_MEMORY_TAGGING is defined.\nEach intrinsic is described in detail in the ACLE Q1 2019 documentation:\nhttps://developer.arm.com/docs/101028/latest\nReviewed By: Tim Nortover, David Spickett\nDifferential Revision: https://reviews.llvm.org/D60485\n\nllvm-svn: 359348"},
[j]={{W,9063,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n    // ...\n    // argument should be either a pointer or null\n    if (!ArgTypeA->isAnyPointerType() && !isNull(ArgA))\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_null_or_pointer) << \"first\" << ArgTypeA << ArgA->getSourceRange();"},{W,9067,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n    // ...\n    if (!ArgTypeB->isAnyPointerType() && !isNull(ArgB))\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_null_or_pointer) << \"second\" << ArgTypeB << ArgB->getSourceRange();"}},
[j]={{X,9063,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n    // ...\n    // argument should be either a pointer or null\n    if (!ArgTypeA->isAnyPointerType() && !isNull(ArgA))\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_null_or_pointer) << \"first\" << ArgTypeA << ArgA->getSourceRange();"},{X,9067,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n    // ...\n    if (!ArgTypeB->isAnyPointerType() && !isNull(ArgB))\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_null_or_pointer) << \"second\" << ArgTypeB << ArgB->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/builtins-arm64-mte.c"]={"clang/test/Sema/builtins-arm64-mte.c:115:10: error: first argument of MTE builtin function must be a null or a pointer (\'int\' invalid)","clang/test/Sema/builtins-arm64-mte.c:120:10: error: second argument of MTE builtin function must be a null or a pointer (\'int\' invalid)"}
["clang/test/Sema/builtins-arm64-mte.c"]={"clang/test/Sema/builtins-arm64-mte.c:115:10: error: first argument of MTE builtin function must be a null or a pointer (\'int\' invalid)","clang/test/Sema/builtins-arm64-mte.c:120:10: error: second argument of MTE builtin function must be a null or a pointer (\'int\' invalid)"}
Line 581: Line 582:
},
},
["err_messaging_class_with_direct_method"]={
["err_messaging_class_with_direct_method"]={
[i]={{nil,n,"err_messaging_class_with_direct_method"}},
[c]={{nil,n,"err_messaging_class_with_direct_method"}},
[h]={{nil,n,"messaging a Class with a method that is possibly direct"}},
[d]={{nil,n,"messaging a Class with a method that is possibly direct"}},
[g]={{nil,n,"messaging a Class with a method that is possibly direct"}},
[e]={{nil,n,"messaging a Class with a method that is possibly direct"}},
[b]=k,
[f]=k,
[e]="messaging a Class with a method that is possibly direct",
[g]="messaging a Class with a method that is possibly direct",
[d]=a,
[h]=a,
[f]={{nil,n,m}},
[i]={{nil,n,m}},
[c]={ub,1573050950,sb,qb},
[b]={rb,1573050950,xb,ub},
[j]={{F,3155,"/// 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  // ...\n  if (Method && Method->isDirectMethod()) {\n    // ...\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      {\n        auto Builder = Diag(Receiver->getExprLoc(), diag::err_messaging_class_with_direct_method);"}},
[j]={{G,3155,"/// 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  // ...\n  if (Method && Method->isDirectMethod()) {\n    // ...\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      {\n        auto Builder = Diag(Receiver->getExprLoc(), diag::err_messaging_class_with_direct_method);"}},
[l]={
[l]={
["clang/test/SemaObjC/method-direct-arc.m"]={"clang/test/SemaObjC/method-direct-arc.m:27:4: error: messaging a Class with a method that is possibly direct"}
["clang/test/SemaObjC/method-direct-arc.m"]={"clang/test/SemaObjC/method-direct-arc.m:27:4: error: messaging a Class with a method that is possibly direct"}
Line 595: Line 596:
},
},
["err_messaging_super_with_direct_method"]={
["err_messaging_super_with_direct_method"]={
[i]={{nil,n,"err_messaging_super_with_direct_method"}},
[c]={{nil,n,"err_messaging_super_with_direct_method"}},
[h]={{nil,n,"messaging super with a direct method"}},
[d]={{nil,n,"messaging super with a direct method"}},
[g]={{nil,n,"messaging super with a direct method"}},
[e]={{nil,n,"messaging super with a direct method"}},
[b]=k,
[f]=k,
[e]="messaging super with a direct method",
[g]="messaging super with a direct method",
[d]=a,
[h]=a,
[f]={{nil,n,m}},
[i]={{nil,n,m}},
[c]={ub,1573050950,sb,qb},
[b]={rb,1573050950,xb,ub},
[j]={{F,2703,"/// \\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  // ...\n  if (Method && Method->isDirectMethod() && SuperLoc.isValid()) {\n    Diag(SuperLoc, diag::err_messaging_super_with_direct_method) << FixItHint::CreateReplacement(SuperLoc, getLangOpts().ObjCAutoRefCount ? \"self\" : Method->getClassInterface()->getName());"},{F,3168,"/// 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  // ...\n  if (Method && Method->isDirectMethod()) {\n    // ...\n    if (SuperLoc.isValid()) {\n      {\n        auto Builder = Diag(SuperLoc, diag::err_messaging_super_with_direct_method);"}},
[j]={{G,2703,"/// \\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  // ...\n  if (Method && Method->isDirectMethod() && SuperLoc.isValid()) {\n    Diag(SuperLoc, diag::err_messaging_super_with_direct_method) << FixItHint::CreateReplacement(SuperLoc, getLangOpts().ObjCAutoRefCount ? \"self\" : Method->getClassInterface()->getName());"},{G,3168,"/// 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  // ...\n  if (Method && Method->isDirectMethod()) {\n    // ...\n    if (SuperLoc.isValid()) {\n      {\n        auto Builder = Diag(SuperLoc, diag::err_messaging_super_with_direct_method);"}},
[l]={
[l]={
["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:144:4: error: messaging super with a direct method","clang/test/SemaObjC/method-direct.m:147:4: error: messaging super with a direct method"}
["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:144:4: error: messaging super with a direct method","clang/test/SemaObjC/method-direct.m:147:4: error: messaging super with a direct method"}
Line 609: Line 610:
},
},
["err_messaging_unqualified_id_with_direct_method"]={
["err_messaging_unqualified_id_with_direct_method"]={
[i]={{nil,n,"err_messaging_unqualified_id_with_direct_method"}},
[c]={{nil,n,"err_messaging_unqualified_id_with_direct_method"}},
[h]={{nil,n,"messaging unqualified id with a method that is possibly direct"}},
[d]={{nil,n,"messaging unqualified id with a method that is possibly direct"}},
[g]={{nil,n,"messaging unqualified id with a method that is possibly direct"}},
[e]={{nil,n,"messaging unqualified id with a method that is possibly direct"}},
[b]=k,
[f]=k,
[e]="messaging unqualified id with a method that is possibly direct",
[g]="messaging unqualified id with a method that is possibly direct",
[d]=a,
[h]=a,
[f]={{nil,n,m}},
[i]={{nil,n,m}},
[c]={ub,1573050950,sb,qb},
[b]={rb,1573050950,xb,ub},
[j]={{F,3143,"/// 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  // ...\n  if (Method && Method->isDirectMethod()) {\n    if (ReceiverType->isObjCIdType() && !isImplicit) {\n      Diag(Receiver->getExprLoc(), diag::err_messaging_unqualified_id_with_direct_method);"}},
[j]={{G,3143,"/// 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  // ...\n  if (Method && Method->isDirectMethod()) {\n    if (ReceiverType->isObjCIdType() && !isImplicit) {\n      Diag(Receiver->getExprLoc(), diag::err_messaging_unqualified_id_with_direct_method);"}},
[l]={
[l]={
["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:164:4: error: messaging unqualified id with a method that is possibly direct"}
["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:164:4: error: messaging unqualified id with a method that is possibly direct"}
Line 623: Line 624:
},
},
["err_method_kernel"]={
["err_method_kernel"]={
[i]={{nil,x,"err_method_kernel"}},
[c]={{nil,z,"err_method_kernel"}},
[h]={{nil,x,"kernel functions cannot be class members"}},
[d]={{nil,z,"kernel functions cannot be class members"}},
[g]={{nil,x,"kernel functions cannot be class members"}},
[e]={{nil,z,"kernel functions cannot be class members"}},
[b]=k,
[f]=k,
[e]="kernel functions cannot be class members",
[g]="kernel functions cannot be class members",
[d]=a,
[h]=a,
[f]={{nil,x,m}},
[i]={{nil,z,m}},
[c]={"d6865b7d71bc",1557238954,"[OpenCL] Prevent mangling kernel functions.","[OpenCL] Prevent mangling kernel functions.\n\nKernel function names have to be preserved as in the original\nsource to be able to access them from the host API side. \n\nThis commit also adds restriction to kernels that prevents them\nfrom being used in overloading, templates, etc.\n\nDifferential Revision: https://reviews.llvm.org/D60454\n\nllvm-svn: 360152"},
[b]={"d6865b7d71bc",1557238954,"[OpenCL] Prevent mangling kernel functions.","[OpenCL] Prevent mangling kernel functions.\n\nKernel function names have to be preserved as in the original\nsource to be able to access them from the host API side. \n\nThis commit also adds restriction to kernels that prevents them\nfrom being used in overloading, templates, etc.\n\nDifferential Revision: https://reviews.llvm.org/D60454\n\nllvm-svn: 360152"},
[j]={{o,10710,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().OpenCL && NewFD->hasAttr<OpenCLKernelAttr>()) {\n    // ...\n    if (getLangOpts().OpenCLCPlusPlus) {\n      if (DC->isRecord()) {\n        Diag(D.getIdentifierLoc(), diag::err_method_kernel);"}},
[j]={{o,10710,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().OpenCL && NewFD->hasAttr<OpenCLKernelAttr>()) {\n    // ...\n    if (getLangOpts().OpenCLCPlusPlus) {\n      if (DC->isRecord()) {\n        Diag(D.getIdentifierLoc(), diag::err_method_kernel);"}},
[l]={
[l]={
Line 637: Line 638:
},
},
["err_method_not_found_with_typo"]={
["err_method_not_found_with_typo"]={
[i]="err_method_not_found_with_typo",
[c]="err_method_not_found_with_typo",
[h]="%select{instance|class}1 method %0 not found ; did you mean %2?",
[d]="%select{instance|class}1 method %0 not found ; did you mean %2?",
[g]={{nil,nil,{{"instance",ib}," method A not found ; did you mean C?"}}},
[e]={{nil,nil,{{"instance",mb}," method A not found ; did you mean C?"}}},
[b]=k,
[f]=k,
[e]="(?:instance|class) method (.*?) not found ; did you mean (.*?)\\?",
[g]="(?:instance|class) method (.*?) not found ; did you mean (.*?)\\?",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={yb,1480718311,zb,Ab},
[b]={Bb,1480718311,Ab,zb},
[j]={{F,1751,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  // ...\n  if (!Method) {\n    // ...\n    if (!getLangOpts().DebuggerSupport) {\n      // ...\n      if (OMD && !OMD->isInvalidDecl()) {\n        if (getLangOpts().ObjCAutoRefCount)\n          DiagID = diag::err_method_not_found_with_typo;"}},
[j]={{G,1751,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  // ...\n  if (!Method) {\n    // ...\n    if (!getLangOpts().DebuggerSupport) {\n      // ...\n      if (OMD && !OMD->isInvalidDecl()) {\n        if (getLangOpts().ObjCAutoRefCount)\n          DiagID = diag::err_method_not_found_with_typo;"}},
[l]={
[l]={
["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:432:6: error: instance method \'test18\' not found ; did you mean \'test17\'?"}
["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:432:6: error: instance method \'test18\' not found ; did you mean \'test17\'?"}
Line 651: Line 652:
},
},
["err_mips_builtin_requires_dsp"]={
["err_mips_builtin_requires_dsp"]={
[i]={{nil,n,"err_mips_builtin_requires_dsp"}},
[c]={{nil,n,"err_mips_builtin_requires_dsp"}},
[h]={{nil,n,"this builtin requires \'dsp\' ASE, please use -mdsp"}},
[d]={{nil,n,"this builtin requires \'dsp\' ASE, please use -mdsp"}},
[g]={{nil,n,"this builtin requires \'dsp\' ASE, please use -mdsp"}},
[e]={{nil,n,"this builtin requires \'dsp\' ASE, please use -mdsp"}},
[b]=k,
[f]=k,
[e]="this builtin requires \'dsp\' ASE, please use \\-mdsp",
[g]="this builtin requires \'dsp\' ASE, please use \\-mdsp",
[d]=a,
[h]=a,
[f]={{nil,n,m}},
[i]={{nil,n,m}},
[c]={ub,1573050950,sb,qb},
[b]={rb,1573050950,xb,ub},
[j]={{W,3921,"bool Sema::CheckMipsBuiltinCpu(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  if (Mips::BI__builtin_mips_addu_qb <= BuiltinID && BuiltinID <= Mips::BI__builtin_mips_lwx) {\n    if (!TI.hasFeature(\"dsp\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_dsp);"}},
[j]={{X,3921,"bool Sema::CheckMipsBuiltinCpu(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  if (Mips::BI__builtin_mips_addu_qb <= BuiltinID && BuiltinID <= Mips::BI__builtin_mips_lwx) {\n    if (!TI.hasFeature(\"dsp\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_dsp);"}},
[l]={
[l]={
["clang/test/Sema/builtins-mips-features.c"]={"clang/test/Sema/builtins-mips-features.c:14:3: error: this builtin requires \'dsp\' ASE, please use -mdsp","clang/test/Sema/builtins-mips-features.c:16:3: error: this builtin requires \'dsp\' ASE, please use -mdsp"}
["clang/test/Sema/builtins-mips-features.c"]={"clang/test/Sema/builtins-mips-features.c:14:3: error: this builtin requires \'dsp\' ASE, please use -mdsp","clang/test/Sema/builtins-mips-features.c:16:3: error: this builtin requires \'dsp\' ASE, please use -mdsp"}
Line 665: Line 666:
},
},
["err_mips_builtin_requires_dspr2"]={
["err_mips_builtin_requires_dspr2"]={
[i]={{nil,n,"err_mips_builtin_requires_dspr2"}},
[c]={{nil,n,"err_mips_builtin_requires_dspr2"}},
[h]={{nil,n,"this builtin requires \'dsp r2\' ASE, please use -mdspr2"}},
[d]={{nil,n,"this builtin requires \'dsp r2\' ASE, please use -mdspr2"}},
[g]={{nil,n,"this builtin requires \'dsp r2\' ASE, please use -mdspr2"}},
[e]={{nil,n,"this builtin requires \'dsp r2\' ASE, please use -mdspr2"}},
[b]=k,
[f]=k,
[e]="this builtin requires \'dsp r2\' ASE, please use \\-mdspr2",
[g]="this builtin requires \'dsp r2\' ASE, please use \\-mdspr2",
[d]=a,
[h]=a,
[f]={{nil,n,m}},
[i]={{nil,n,m}},
[c]={ub,1573050950,sb,qb},
[b]={rb,1573050950,xb,ub},
[j]={{W,3928,"bool Sema::CheckMipsBuiltinCpu(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (Mips::BI__builtin_mips_absq_s_qb <= BuiltinID && BuiltinID <= Mips::BI__builtin_mips_subuh_r_qb) {\n    if (!TI.hasFeature(\"dspr2\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_dspr2);"}},
[j]={{X,3928,"bool Sema::CheckMipsBuiltinCpu(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (Mips::BI__builtin_mips_absq_s_qb <= BuiltinID && BuiltinID <= Mips::BI__builtin_mips_subuh_r_qb) {\n    if (!TI.hasFeature(\"dspr2\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_dspr2);"}},
[l]={
[l]={
["clang/test/Sema/builtins-mips-features.c"]={"clang/test/Sema/builtins-mips-features.c:24:3: error: this builtin requires \'dsp r2\' ASE, please use -mdspr2","clang/test/Sema/builtins-mips-features.c:26:3: error: this builtin requires \'dsp r2\' ASE, please use -mdspr2"}
["clang/test/Sema/builtins-mips-features.c"]={"clang/test/Sema/builtins-mips-features.c:24:3: error: this builtin requires \'dsp r2\' ASE, please use -mdspr2","clang/test/Sema/builtins-mips-features.c:26:3: error: this builtin requires \'dsp r2\' ASE, please use -mdspr2"}
Line 679: Line 680:
},
},
["err_mips_builtin_requires_msa"]={
["err_mips_builtin_requires_msa"]={
[i]={{nil,n,"err_mips_builtin_requires_msa"}},
[c]={{nil,n,"err_mips_builtin_requires_msa"}},
[h]={{nil,n,"this builtin requires \'msa\' ASE, please use -mmsa"}},
[d]={{nil,n,"this builtin requires \'msa\' ASE, please use -mmsa"}},
[g]={{nil,n,"this builtin requires \'msa\' ASE, please use -mmsa"}},
[e]={{nil,n,"this builtin requires \'msa\' ASE, please use -mmsa"}},
[b]=k,
[f]=k,
[e]="this builtin requires \'msa\' ASE, please use \\-mmsa",
[g]="this builtin requires \'msa\' ASE, please use \\-mmsa",
[d]=a,
[h]=a,
[f]={{nil,n,m}},
[i]={{nil,n,m}},
[c]={ub,1573050950,sb,qb},
[b]={rb,1573050950,xb,ub},
[j]={{W,3934,"bool Sema::CheckMipsBuiltinCpu(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (Mips::BI__builtin_msa_add_a_b <= BuiltinID && BuiltinID <= Mips::BI__builtin_msa_xori_b) {\n    if (!TI.hasFeature(\"msa\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_msa);"}},
[j]={{X,3934,"bool Sema::CheckMipsBuiltinCpu(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (Mips::BI__builtin_msa_add_a_b <= BuiltinID && BuiltinID <= Mips::BI__builtin_msa_xori_b) {\n    if (!TI.hasFeature(\"msa\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_msa);"}},
[l]={
[l]={
["clang/test/Sema/builtins-mips-features.c"]={"clang/test/Sema/builtins-mips-features.c:34:3: error: this builtin requires \'msa\' ASE, please use -mmsa","clang/test/Sema/builtins-mips-features.c:36:3: error: this builtin requires \'msa\' ASE, please use -mmsa"}
["clang/test/Sema/builtins-mips-features.c"]={"clang/test/Sema/builtins-mips-features.c:34:3: error: this builtin requires \'msa\' ASE, please use -mmsa","clang/test/Sema/builtins-mips-features.c:36:3: error: this builtin requires \'msa\' ASE, please use -mmsa"}
Line 693: Line 694:
},
},
["err_mips_fp64_req"]={
["err_mips_fp64_req"]={
[i]={{nil,db,"err_mips_fp64_req"}},
[c]={{nil,db,"err_mips_fp64_req"}},
[h]={{nil,db,"\'%0\' can only be used if the target supports the mfhc1 and mthc1 instructions"}},
[d]={{nil,db,"\'%0\' can only be used if the target supports the mfhc1 and mthc1 instructions"}},
[g]={{nil,db,"\'A\' can only be used if the target supports the mfhc1 and mthc1 instructions"}},
[e]={{nil,db,"\'A\' can only be used if the target supports the mfhc1 and mthc1 instructions"}},
[b]=k,
[f]=k,
[e]="\'(.*?)\' can only be used if the target supports the mfhc1 and mthc1 instructions",
[g]="\'(.*?)\' can only be used if the target supports the mfhc1 and mthc1 instructions",
[d]=a,
[h]=a,
[f]={{nil,db,a}},
[i]={{nil,db,w}},
[c]={"eb63256095dd",1534929985,"[clang][mips] Set __mips_fpr correctly for -mfpxx","[clang][mips] Set __mips_fpr correctly for -mfpxx\n\nSet __mips_fpr to 0 if o32 ABI is used with either -mfpxx\nor none of -mfp32, -mfpxx, -mfp64 being specified.\n\nIntroduce additional checks:\n-mfpxx is only to be used in conjunction with the o32 ABI.\nreport an error when incompatible options are provided.\n\nFormerly no errors were raised when combining n32/n64 ABIs\nwith -mfp32 and -mfpxx.\n\nThere are other cases when __mips_fpr should be set to 0\nthat are not covered, ex. using o32 on a mips64 cpu\nwhich is valid but not supported in the backend as of yet.\n\nDifferential Revision: https://reviews.llvm.org/D50557\n\nllvm-svn: 340391"},
[b]={"eb63256095dd",1534929985,"[clang][mips] Set __mips_fpr correctly for -mfpxx","[clang][mips] Set __mips_fpr correctly for -mfpxx\n\nSet __mips_fpr to 0 if o32 ABI is used with either -mfpxx\nor none of -mfp32, -mfpxx, -mfp64 being specified.\n\nIntroduce additional checks:\n-mfpxx is only to be used in conjunction with the o32 ABI.\nreport an error when incompatible options are provided.\n\nFormerly no errors were raised when combining n32/n64 ABIs\nwith -mfp32 and -mfpxx.\n\nThere are other cases when __mips_fpr should be set to 0\nthat are not covered, ex. using o32 on a mips64 cpu\nwhich is valid but not supported in the backend as of yet.\n\nDifferential Revision: https://reviews.llvm.org/D50557\n\nllvm-svn: 340391"},
[j]={{"clang/lib/Basic/Targets/Mips.cpp",270,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // ...\n  // Option -mfp64 permitted on Mips32 iff revision 2 or higher is present\n  if (FPMode == FP64 && (CPU == \"mips1\" || CPU == \"mips2\" || getISARev() < 2) && ABI == \"o32\") {\n    Diags.Report(diag::err_mips_fp64_req) << \"-mfp64\";"}}
[j]={{"clang/lib/Basic/Targets/Mips.cpp",270,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // ...\n  // Option -mfp64 permitted on Mips32 iff revision 2 or higher is present\n  if (FPMode == FP64 && (CPU == \"mips1\" || CPU == \"mips2\" || getISARev() < 2) && ABI == \"o32\") {\n    Diags.Report(diag::err_mips_fp64_req) << \"-mfp64\";"}}
},
},
["err_mismatched_code_seg_base"]={
["err_mismatched_code_seg_base"]={
[i]={{nil,q,"err_mismatched_code_seg_base"}},
[c]={{nil,q,"err_mismatched_code_seg_base"}},
[h]={{nil,q,"derived class must specify the same code segment as its base classes"}},
[d]={{nil,q,"derived class must specify the same code segment as its base classes"}},
[g]={{nil,q,"derived class must specify the same code segment as its base classes"}},
[e]={{nil,q,"derived class must specify the same code segment as its base classes"}},
[b]=k,
[f]=k,
[e]="derived class must specify the same code segment as its base classes",
[g]="derived class must specify the same code segment as its base classes",
[d]=a,
[h]=a,
[f]={{nil,q,m}},
[i]={{nil,q,m}},
[c]={"64144eb194c8",1526479037,"Add support for __declspec(code_seg(\"segname\"))","Add support for __declspec(code_seg(\"segname\"))\n\nAdd support for __declspec(code_seg(\"segname\"))\n\nThis patch is built on the existing support for #pragma code_seg. The code_seg\ndeclspec is allowed on functions and classes. The attribute enables the\nplacement of code into separate named segments, including compiler-generated\nmembers and template instantiations.\n\nFor more information, please see the following:\nhttps://msdn.microsoft.com/en-us/library/dn636922.aspx\n\nA new CodeSeg attribute is used instead of adding a new spelling to the existing\nSection attribute since they don’t apply to the same Subjects. Section\nattributes are also added for the code_seg declspec since they are used for\n#pragma code_seg. No CodeSeg attributes are added to the AST.\n\nThe patch is written to match with the Microsoft compiler’s behavior even where\nthat behavior is a little complicated (see https://reviews.llvm.org/D22931, the\nMicrosoft feedback page is no longer available since MS has removed the page).\nThat code is in getImplicitSectionAttrFromClass routine.\n\nDiagnostics messages are added to match with the Microsoft compiler for code-seg\nattribute mismatches on base and derived classes and virtual overrides.\n\n\nDifferential Revision: https://reviews.llvm.org/D43352\n\nllvm-svn: 332470"},
[b]={"64144eb194c8",1526479037,"Add support for __declspec(code_seg(\"segname\"))","Add support for __declspec(code_seg(\"segname\"))\n\nAdd support for __declspec(code_seg(\"segname\"))\n\nThis patch is built on the existing support for #pragma code_seg. The code_seg\ndeclspec is allowed on functions and classes. The attribute enables the\nplacement of code into separate named segments, including compiler-generated\nmembers and template instantiations.\n\nFor more information, please see the following:\nhttps://msdn.microsoft.com/en-us/library/dn636922.aspx\n\nA new CodeSeg attribute is used instead of adding a new spelling to the existing\nSection attribute since they don’t apply to the same Subjects. Section\nattributes are also added for the code_seg declspec since they are used for\n#pragma code_seg. No CodeSeg attributes are added to the AST.\n\nThe patch is written to match with the Microsoft compiler’s behavior even where\nthat behavior is a little complicated (see https://reviews.llvm.org/D22931, the\nMicrosoft feedback page is no longer available since MS has removed the page).\nThat code is in getImplicitSectionAttrFromClass routine.\n\nDiagnostics messages are added to match with the Microsoft compiler for code-seg\nattribute mismatches on base and derived classes and virtual overrides.\n\n\nDifferential Revision: https://reviews.llvm.org/D43352\n\nllvm-svn: 332470"},
[j]={{O,2758,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n  // ...\n  if ((DerivedCSA || BaseCSA) && (!BaseCSA || !DerivedCSA || BaseCSA->getName() != DerivedCSA->getName())) {\n    Diag(Class->getLocation(), diag::err_mismatched_code_seg_base);"}},
[j]={{Q,2758,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n  // ...\n  if ((DerivedCSA || BaseCSA) && (!BaseCSA || !DerivedCSA || BaseCSA->getName() != DerivedCSA->getName())) {\n    Diag(Class->getLocation(), diag::err_mismatched_code_seg_base);"}},
[l]={
[l]={
["clang/test/SemaCXX/code-seg.cpp"]={"clang/test/SemaCXX/code-seg.cpp:27:8: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:30:43: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:33:43: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:37:62: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:38:65: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:38:65: error: derived class must specify the same code segment as its base classes"}
["clang/test/SemaCXX/code-seg.cpp"]={"clang/test/SemaCXX/code-seg.cpp:27:8: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:30:43: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:33:43: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:37:62: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:38:65: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:38:65: error: derived class must specify the same code segment as its base classes"}
Line 718: Line 719:
},
},
["err_mismatched_code_seg_override"]={
["err_mismatched_code_seg_override"]={
[i]={{nil,q,"err_mismatched_code_seg_override"}},
[c]={{nil,q,"err_mismatched_code_seg_override"}},
[h]={{nil,q,"overriding virtual function must specify the same code segment as its overridden function"}},
[d]={{nil,q,"overriding virtual function must specify the same code segment as its overridden function"}},
[g]={{nil,q,"overriding virtual function must specify the same code segment as its overridden function"}},
[e]={{nil,q,"overriding virtual function must specify the same code segment as its overridden function"}},
[b]=k,
[f]=k,
[e]="overriding virtual function must specify the same code segment as its overridden function",
[g]="overriding virtual function must specify the same code segment as its overridden function",
[d]=a,
[h]=a,
[f]={{nil,q,m}},
[i]={{nil,q,m}},
[c]={"64144eb194c8",1526479037,"Add support for __declspec(code_seg(\"segname\"))","Add support for __declspec(code_seg(\"segname\"))\n\nAdd support for __declspec(code_seg(\"segname\"))\n\nThis patch is built on the existing support for #pragma code_seg. The code_seg\ndeclspec is allowed on functions and classes. The attribute enables the\nplacement of code into separate named segments, including compiler-generated\nmembers and template instantiations.\n\nFor more information, please see the following:\nhttps://msdn.microsoft.com/en-us/library/dn636922.aspx\n\nA new CodeSeg attribute is used instead of adding a new spelling to the existing\nSection attribute since they don’t apply to the same Subjects. Section\nattributes are also added for the code_seg declspec since they are used for\n#pragma code_seg. No CodeSeg attributes are added to the AST.\n\nThe patch is written to match with the Microsoft compiler’s behavior even where\nthat behavior is a little complicated (see https://reviews.llvm.org/D22931, the\nMicrosoft feedback page is no longer available since MS has removed the page).\nThat code is in getImplicitSectionAttrFromClass routine.\n\nDiagnostics messages are added to match with the Microsoft compiler for code-seg\nattribute mismatches on base and derived classes and virtual overrides.\n\n\nDifferential Revision: https://reviews.llvm.org/D43352\n\nllvm-svn: 332470"},
[b]={"64144eb194c8",1526479037,"Add support for __declspec(code_seg(\"segname\"))","Add support for __declspec(code_seg(\"segname\"))\n\nAdd support for __declspec(code_seg(\"segname\"))\n\nThis patch is built on the existing support for #pragma code_seg. The code_seg\ndeclspec is allowed on functions and classes. The attribute enables the\nplacement of code into separate named segments, including compiler-generated\nmembers and template instantiations.\n\nFor more information, please see the following:\nhttps://msdn.microsoft.com/en-us/library/dn636922.aspx\n\nA new CodeSeg attribute is used instead of adding a new spelling to the existing\nSection attribute since they don’t apply to the same Subjects. Section\nattributes are also added for the code_seg declspec since they are used for\n#pragma code_seg. No CodeSeg attributes are added to the AST.\n\nThe patch is written to match with the Microsoft compiler’s behavior even where\nthat behavior is a little complicated (see https://reviews.llvm.org/D22931, the\nMicrosoft feedback page is no longer available since MS has removed the page).\nThat code is in getImplicitSectionAttrFromClass routine.\n\nDiagnostics messages are added to match with the Microsoft compiler for code-seg\nattribute mismatches on base and derived classes and virtual overrides.\n\n\nDifferential Revision: https://reviews.llvm.org/D43352\n\nllvm-svn: 332470"},
[j]={{O,17994,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  if ((NewCSA || OldCSA) && (!OldCSA || !NewCSA || NewCSA->getName() != OldCSA->getName())) {\n    Diag(New->getLocation(), diag::err_mismatched_code_seg_override);"}},
[j]={{Q,17994,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  if ((NewCSA || OldCSA) && (!OldCSA || !NewCSA || NewCSA->getName() != OldCSA->getName())) {\n    Diag(New->getLocation(), diag::err_mismatched_code_seg_override);"}},
[l]={
[l]={
["clang/test/SemaCXX/code-seg.cpp"]={"clang/test/SemaCXX/code-seg.cpp:60:7: error: overriding virtual function must specify the same code segment as its overridden function","clang/test/SemaCXX/code-seg.cpp:70:15: error: overriding virtual function must specify the same code segment as its overridden function","clang/test/SemaCXX/code-seg.cpp:73:46: error: overriding virtual function must specify the same code segment as its overridden function"}
["clang/test/SemaCXX/code-seg.cpp"]={"clang/test/SemaCXX/code-seg.cpp:60:7: error: overriding virtual function must specify the same code segment as its overridden function","clang/test/SemaCXX/code-seg.cpp:70:15: error: overriding virtual function must specify the same code segment as its overridden function","clang/test/SemaCXX/code-seg.cpp:73:46: error: overriding virtual function must specify the same code segment as its overridden function"}
Line 732: Line 733:
},
},
["err_mismatched_exception_spec"]={
["err_mismatched_exception_spec"]={
[i]="err_mismatched_exception_spec",
[c]="err_mismatched_exception_spec",
[h]="exception specification in declaration does not match previous declaration",
[d]="exception specification in declaration does not match previous declaration",
[e]="exception specification in declaration does not match previous declaration",
[f]=k,
[g]="exception specification in declaration does not match previous declaration",
[g]="exception specification in declaration does not match previous declaration",
[b]=k,
[h]=a,
[e]="exception specification in declaration does not match previous declaration",
[i]=m,
[d]=a,
[b]={"4f4d7b5d8e5f",1246707540,"Catch function redeclarations with incompatible exception specifications.","Catch function redeclarations with incompatible exception specifications.\n\nllvm-svn: 74787"},
[f]=m,
[c]={"4f4d7b5d8e5f",1246707540,"Catch function redeclarations with incompatible exception specifications.","Catch function redeclarations with incompatible exception specifications.\n\nllvm-svn: 74787"},
[j]={{"clang/lib/Sema/SemaExceptionSpec.cpp",311,"bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {\n  // ...\n  unsigned DiagID = diag::err_mismatched_exception_spec;"},{"clang/lib/Sema/SemaExceptionSpec.cpp",504,"/// CheckEquivalentExceptionSpec - Check if the two types have equivalent\n/// exception specifications. Exception specifications are equivalent if\n/// they allow exactly the same set of exception types. It does not matter how\n/// that is achieved. See C++ [except.spec]p2.\nbool Sema::CheckEquivalentExceptionSpec(const FunctionProtoType *Old, SourceLocation OldLoc, const FunctionProtoType *New, SourceLocation NewLoc) {\n  // ...\n  unsigned DiagID = diag::err_mismatched_exception_spec;"}},
[j]={{"clang/lib/Sema/SemaExceptionSpec.cpp",311,"bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {\n  // ...\n  unsigned DiagID = diag::err_mismatched_exception_spec;"},{"clang/lib/Sema/SemaExceptionSpec.cpp",504,"/// CheckEquivalentExceptionSpec - Check if the two types have equivalent\n/// exception specifications. Exception specifications are equivalent if\n/// they allow exactly the same set of exception types. It does not matter how\n/// that is achieved. See C++ [except.spec]p2.\nbool Sema::CheckEquivalentExceptionSpec(const FunctionProtoType *Old, SourceLocation OldLoc, const FunctionProtoType *New, SourceLocation NewLoc) {\n  // ...\n  unsigned DiagID = diag::err_mismatched_exception_spec;"}},
[l]={
[l]={
Line 746: Line 747:
},
},
["err_mismatched_exception_spec_explicit_instantiation"]={
["err_mismatched_exception_spec_explicit_instantiation"]={
[i]="err_mismatched_exception_spec_explicit_instantiation",
[c]="err_mismatched_exception_spec_explicit_instantiation",
[h]="exception specification in explicit instantiation does not match instantiated one",
[d]="exception specification in explicit instantiation does not match instantiated one",
[e]="exception specification in explicit instantiation does not match instantiated one",
[f]=k,
[g]="exception specification in explicit instantiation does not match instantiated one",
[g]="exception specification in explicit instantiation does not match instantiated one",
[b]=k,
[h]=a,
[e]="exception specification in explicit instantiation does not match instantiated one",
[i]=m,
[d]=a,
[b]={"73983918c45b",1415268650,"Fix for exception specification mismatch in explicit instantiation.","Fix for exception specification mismatch in explicit instantiation.\nAccording to C++ standard if an exception-specification is specified in an explicit instantiation directive, it shall be compatible with the exception-specifications of other declarations of that function. This patch adds checks for this.\nDifferential Revision: http://reviews.llvm.org/D5822\n\nllvm-svn: 221448"},
[f]=m,
[c]={"73983918c45b",1415268650,"Fix for exception specification mismatch in explicit instantiation.","Fix for exception specification mismatch in explicit instantiation.\nAccording to C++ standard if an exception-specification is specified in an explicit instantiation directive, it shall be compatible with the exception-specifications of other declarations of that function. This patch adds checks for this.\nDifferential Revision: http://reviews.llvm.org/D5822\n\nllvm-svn: 221448"},
[j]={{Y,10667,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  // ...\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      unsigned DiagID = diag::err_mismatched_exception_spec_explicit_instantiation;"}},
[j]={{Y,10667,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  // ...\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      unsigned DiagID = diag::err_mismatched_exception_spec_explicit_instantiation;"}},
[l]={
[l]={
Line 760: Line 761:
},
},
["err_mismatched_ms_inheritance"]={
["err_mismatched_ms_inheritance"]={
[i]="err_mismatched_ms_inheritance",
[c]="err_mismatched_ms_inheritance",
[h]="inheritance model does not match %select{definition|previous declaration}0",
[d]="inheritance model does not match %select{definition|previous declaration}0",
[g]={{nil,nil,{"inheritance model does not match ",{fc,"previous declaration"}}}},
[e]={{nil,nil,{"inheritance model does not match ",{gc,"previous declaration"}}}},
[b]=k,
[f]=k,
[e]="inheritance model does not match (?:definition|previous declaration)",
[g]="inheritance model does not match (?:definition|previous declaration)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"2c4e00ac1cc8",1391033256,"Sema: Diagnose improper application of inheritance keywords","Sema: Diagnose improper application of inheritance keywords\n\nWe would previously allow inappropriate inheritance keywords to appear\non class declarations.  We would also allow inheritance keywords on\ntemplates which were not fully specialized; this was divergent from\nMSVC.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2585\n\nllvm-svn: 200423"},
[b]={"2c4e00ac1cc8",1391033256,"Sema: Diagnose improper application of inheritance keywords","Sema: Diagnose improper application of inheritance keywords\n\nWe would previously allow inappropriate inheritance keywords to appear\non class declarations.  We would also allow inheritance keywords on\ntemplates which were not fully specialized; this was divergent from\nMSVC.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2585\n\nllvm-svn: 200423"},
[j]={{K,4643,"bool Sema::checkMSInheritanceAttrOnDefinition(CXXRecordDecl *RD, SourceRange Range, bool BestCase, MSInheritanceModel ExplicitModel) {\n  // ...\n  Diag(Range.getBegin(), diag::err_mismatched_ms_inheritance) << 0 /*definition*/;"},{K,8068,"MSInheritanceAttr *Sema::mergeMSInheritanceAttr(Decl *D, const AttributeCommonInfo &CI, bool BestCase, MSInheritanceModel Model) {\n  if (MSInheritanceAttr *IA = D->getAttr<MSInheritanceAttr>()) {\n    // ...\n    Diag(IA->getLocation(), diag::err_mismatched_ms_inheritance) << 1 /*previous declaration*/;"}},
[j]={{K,4643,"bool Sema::checkMSInheritanceAttrOnDefinition(CXXRecordDecl *RD, SourceRange Range, bool BestCase, MSInheritanceModel ExplicitModel) {\n  // ...\n  Diag(Range.getBegin(), diag::err_mismatched_ms_inheritance) << 0 /*definition*/;"},{K,8068,"MSInheritanceAttr *Sema::mergeMSInheritanceAttr(Decl *D, const AttributeCommonInfo &CI, bool BestCase, MSInheritanceModel Model) {\n  if (MSInheritanceAttr *IA = D->getAttr<MSInheritanceAttr>()) {\n    // ...\n    Diag(IA->getLocation(), diag::err_mismatched_ms_inheritance) << 1 /*previous declaration*/;"}},
[l]={
[l]={
Line 774: Line 775:
},
},
["err_mismatched_owning_module"]={
["err_mismatched_owning_module"]={
[i]={{nil,t,"err_mismatched_owning_module"}},
[c]={{nil,t,"err_mismatched_owning_module"}},
[h]={{nil,t,"declaration of %0 in %select{the global module|module %2}1 follows declaration in %select{the global module|module %4}3"}},
[d]={{nil,t,"declaration of %0 in %select{the global module|module %2}1 follows declaration in %select{the global module|module %4}3"}},
[g]={{nil,t,{"declaration of A in ",{"the global module","module C"}," follows declaration in ",{"the global module","module E"}}}},
[e]={{nil,t,{"declaration of A in ",{"the global module","module C"}," follows declaration in ",{"the global module","module E"}}}},
[b]=k,
[f]=k,
[e]="declaration of (.*?) in (?:the global module|module (.*?)) follows declaration in (?:the global module|module (.*?))",
[g]="declaration of (.*?) in (?:the global module|module (.*?)) follows declaration in (?:the global module|module (.*?))",
[d]=a,
[h]=a,
[f]={{nil,t,m}},
[i]={{nil,t,m}},
[c]={"b87720b77aee",1507592529,"[Modules TS] Module ownership semantics for redeclarations.","[Modules TS] Module ownership semantics for redeclarations.\n\nWhen declaring an entity in the \"purview\" of a module, it\'s never a\nredeclaration of an entity in the purview of a default module or in no module\n(\"in the global module\"). Don\'t consider those other declarations as possible\nredeclaration targets if they\'re not visible, and reject any cases where we\npick a prior visible declaration that violates this rule.\n\nllvm-svn: 315251"},
[b]={"b87720b77aee",1507592529,"[Modules TS] Module ownership semantics for redeclarations.","[Modules TS] Module ownership semantics for redeclarations.\n\nWhen declaring an entity in the \"purview\" of a module, it\'s never a\nredeclaration of an entity in the purview of a default module or in no module\n(\"in the global module\"). Don\'t consider those other declarations as possible\nredeclaration targets if they\'re not visible, and reject any cases where we\npick a prior visible declaration that violates this rule.\n\nllvm-svn: 315251"},
[j]={{o,1686,"/// We\'ve determined that \\p New is a redeclaration of \\p Old. Check that they\n/// have compatible owning modules.\nbool Sema::CheckRedeclarationModuleOwnership(NamedDecl *New, NamedDecl *Old) {\n  // ...\n  if (NewIsModuleInterface || OldIsModuleInterface) {\n    // ...\n    Diag(New->getLocation(), diag::err_mismatched_owning_module) << New << NewIsModuleInterface << (NewIsModuleInterface ? NewM->getFullModuleName() : \"\") << OldIsModuleInterface << (OldIsModuleInterface ? OldM->getFullModuleName() : \"\");"}},
[j]={{o,1686,"/// We\'ve determined that \\p New is a redeclaration of \\p Old. Check that they\n/// have compatible owning modules.\nbool Sema::CheckRedeclarationModuleOwnership(NamedDecl *New, NamedDecl *Old) {\n  // ...\n  if (NewIsModuleInterface || OldIsModuleInterface) {\n    // ...\n    Diag(New->getLocation(), diag::err_mismatched_owning_module) << New << NewIsModuleInterface << (NewIsModuleInterface ? NewM->getFullModuleName() : \"\") << OldIsModuleInterface << (OldIsModuleInterface ? OldM->getFullModuleName() : \"\");"}},
[l]={
[l]={
Line 788: Line 789:
},
},
["err_mismatched_uuid"]={
["err_mismatched_uuid"]={
[i]="err_mismatched_uuid",
[c]="err_mismatched_uuid",
[h]="uuid does not match previous declaration",
[d]="uuid does not match previous declaration",
[e]="uuid does not match previous declaration",
[f]=k,
[g]="uuid does not match previous declaration",
[g]="uuid does not match previous declaration",
[b]=k,
[h]=a,
[e]="uuid does not match previous declaration",
[i]=m,
[d]=a,
[b]={"88f5ed9430a9",1473792926,"[clang-cl] Diagnose duplicate uuids.","[clang-cl] Diagnose duplicate uuids.\n\nThis mostly behaves cl.exe\'s behavior, even though clang-cl is stricter in some\ncorner cases and more lenient in others (see the included test).\n\nTo make the uuid declared previously here diagnostic work correctly, tweak\nstripTypeAttributesOffDeclSpec() to keep attributes in the right order.\n\nhttps://reviews.llvm.org/D24469\n\nllvm-svn: 281367"},
[f]=m,
[c]={"88f5ed9430a9",1473792926,"[clang-cl] Diagnose duplicate uuids.","[clang-cl] Diagnose duplicate uuids.\n\nThis mostly behaves cl.exe\'s behavior, even though clang-cl is stricter in some\ncorner cases and more lenient in others (see the included test).\n\nTo make the uuid declared previously here diagnostic work correctly, tweak\nstripTypeAttributesOffDeclSpec() to keep attributes in the right order.\n\nhttps://reviews.llvm.org/D24469\n\nllvm-svn: 281367"},
[j]={{K,6978,"UuidAttr *Sema::mergeUuidAttr(Decl *D, const AttributeCommonInfo &CI, StringRef UuidAsWritten, MSGuidDecl *GuidDecl) {\n  if (const auto *UA = D->getAttr<UuidAttr>()) {\n    // ...\n    if (!UA->getGuid().empty()) {\n      Diag(UA->getLocation(), diag::err_mismatched_uuid);"}},
[j]={{K,6978,"UuidAttr *Sema::mergeUuidAttr(Decl *D, const AttributeCommonInfo &CI, StringRef UuidAsWritten, MSGuidDecl *GuidDecl) {\n  if (const auto *UA = D->getAttr<UuidAttr>()) {\n    // ...\n    if (!UA->getGuid().empty()) {\n      Diag(UA->getLocation(), diag::err_mismatched_uuid);"}},
[l]={
[l]={
Line 802: Line 803:
},
},
["err_mismatched_visibility"]={
["err_mismatched_visibility"]={
[i]="err_mismatched_visibility",
[c]="err_mismatched_visibility",
[h]="visibility does not match previous declaration",
[d]="visibility does not match previous declaration",
[e]="visibility does not match previous declaration",
[f]=k,
[g]="visibility does not match previous declaration",
[g]="visibility does not match previous declaration",
[b]=k,
[h]=a,
[e]="visibility does not match previous declaration",
[i]=m,
[d]=a,
[b]={"0232c19a3128",1336436919,"Add missing \'y\'.","Add missing \'y\'.\n\nllvm-svn: 156348"},
[f]=m,
[c]={"0232c19a3128",1336436919,"Add missing \'y\'.","Add missing \'y\'.\n\nllvm-svn: 156348"},
[j]={{K,2874,"template <class T> static T *mergeVisibilityAttr(Sema &S, Decl *D, const AttributeCommonInfo &CI, typename T::VisibilityType value) {\n  // ...\n  if (existingAttr) {\n    // ...\n    S.Diag(existingAttr->getLocation(), diag::err_mismatched_visibility);"}},
[j]={{K,2874,"template <class T> static T *mergeVisibilityAttr(Sema &S, Decl *D, const AttributeCommonInfo &CI, typename T::VisibilityType value) {\n  // ...\n  if (existingAttr) {\n    // ...\n    S.Diag(existingAttr->getLocation(), diag::err_mismatched_visibility);"}},
[l]={
[l]={
Line 816: Line 817:
},
},
["err_misplaced_ellipsis_in_declaration"]={
["err_misplaced_ellipsis_in_declaration"]={
[i]="err_misplaced_ellipsis_in_declaration",
[c]="err_misplaced_ellipsis_in_declaration",
[h]="\'...\' must %select{immediately precede declared identifier|be innermost component of anonymous pack declaration}0",
[d]="\'...\' must %select{immediately precede declared identifier|be innermost component of anonymous pack declaration}0",
[g]={{nil,nil,{"\'...\' must ",{"immediately precede declared identifier","be innermost component of anonymous pack declaration"}}}},
[e]={{nil,nil,{"\'...\' must ",{"immediately precede declared identifier","be innermost component of anonymous pack declaration"}}}},
[b]=k,
[f]=k,
[e]="\'\\.\\.\\.\' must (?:immediately precede declared identifier|be innermost component of anonymous pack declaration)",
[g]="\'\\.\\.\\.\' must (?:immediately precede declared identifier|be innermost component of anonymous pack declaration)",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"0efa75c3e38d",1332983802,"Reject \'template<typename...Ts> void f(Ts ...(x));\'. Add a special-case","Reject \'template<typename...Ts> void f(Ts ...(x));\'. Add a special-case\ndiagnostic and a fix-it to explain to the user where the ellipsis is\nsupposed to go.\n\nllvm-svn: 153622"},
[b]={"0efa75c3e38d",1332983802,"Reject \'template<typename...Ts> void f(Ts ...(x));\'. Add a special-case","Reject \'template<typename...Ts> void f(Ts ...(x));\'. Add a special-case\ndiagnostic and a fix-it to explain to the user where the ellipsis is\nsupposed to go.\n\nllvm-svn: 153622"},
[j]={{"clang/lib/Parse/ParseTemplate.cpp",1082,"void Parser::DiagnoseMisplacedEllipsis(SourceLocation EllipsisLoc, SourceLocation CorrectLoc, bool AlreadyHasEllipsis, bool IdentifierHasName) {\n  // ...\n  Diag(EllipsisLoc, diag::err_misplaced_ellipsis_in_declaration) << FixItHint::CreateRemoval(EllipsisLoc) << Insertion << !IdentifierHasName;"}},
[j]={{"clang/lib/Parse/ParseTemplate.cpp",1082,"void Parser::DiagnoseMisplacedEllipsis(SourceLocation EllipsisLoc, SourceLocation CorrectLoc, bool AlreadyHasEllipsis, bool IdentifierHasName) {\n  // ...\n  Diag(EllipsisLoc, diag::err_misplaced_ellipsis_in_declaration) << FixItHint::CreateRemoval(EllipsisLoc) << Insertion << !IdentifierHasName;"}},
[l]={
[l]={
Line 830: Line 831:
},
},
["err_misplaced_ivar"]={
["err_misplaced_ivar"]={
[i]="err_misplaced_ivar",
[c]="err_misplaced_ivar",
[h]="instance variables may not be placed in %select{categories|class extension}0",
[d]="instance variables may not be placed in %select{categories|class extension}0",
[g]={{nil,nil,{"instance variables may not be placed in ",{"categories","class extension"}}}},
[e]={{nil,nil,{"instance variables may not be placed in ",{"categories","class extension"}}}},
[b]=k,
[f]=k,
[e]="instance variables may not be placed in (?:categories|class extension)",
[g]="instance variables may not be placed in (?:categories|class extension)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"4c172c63e510",1266879860,"Early support for declaring ivars in class extensions. wip.","Early support for declaring ivars in class extensions. wip.\n\nllvm-svn: 96819"},
[b]={"4c172c63e510",1266879860,"Early support for declaring ivars in class extensions. wip.","Early support for declaring ivars in class extensions. wip.\n\nllvm-svn: 96819"},
[j]={{o,18412,"/// ActOnIvar - Each ivar field of an objective-c class is passed into this\n/// in order to create an IvarDecl object for it.\nDecl *Sema::ActOnIvar(Scope *S, SourceLocation DeclStart, Declarator &D, Expr *BitfieldWidth, tok::ObjCKeywordKind Visibility) {\n  // ...\n  if (ObjCImplementationDecl *IMPDecl = dyn_cast<ObjCImplementationDecl>(EnclosingDecl)) {\n  // ...\n  } else {\n    if (ObjCCategoryDecl *CDecl = dyn_cast<ObjCCategoryDecl>(EnclosingDecl)) {\n      if (LangOpts.ObjCRuntime.isFragile() || !CDecl->IsClassExtension()) {\n        Diag(Loc, diag::err_misplaced_ivar) << CDecl->IsClassExtension();"}},
[j]={{o,18412,"/// ActOnIvar - Each ivar field of an objective-c class is passed into this\n/// in order to create an IvarDecl object for it.\nDecl *Sema::ActOnIvar(Scope *S, SourceLocation DeclStart, Declarator &D, Expr *BitfieldWidth, tok::ObjCKeywordKind Visibility) {\n  // ...\n  if (ObjCImplementationDecl *IMPDecl = dyn_cast<ObjCImplementationDecl>(EnclosingDecl)) {\n  // ...\n  } else {\n    if (ObjCCategoryDecl *CDecl = dyn_cast<ObjCCategoryDecl>(EnclosingDecl)) {\n      if (LangOpts.ObjCRuntime.isFragile() || !CDecl->IsClassExtension()) {\n        Diag(Loc, diag::err_misplaced_ivar) << CDecl->IsClassExtension();"}},
[l]={
[l]={
Line 844: Line 845:
},
},
["err_missing_actual_pipe_type"]={
["err_missing_actual_pipe_type"]={
[i]="err_missing_actual_pipe_type",
[c]="err_missing_actual_pipe_type",
[h]="missing actual type specifier for pipe",
[d]="missing actual type specifier for pipe",
[e]="missing actual type specifier for pipe",
[f]=k,
[g]="missing actual type specifier for pipe",
[g]="missing actual type specifier for pipe",
[b]=k,
[h]=a,
[e]="missing actual type specifier for pipe",
[i]=m,
[d]=a,
[b]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support","[OpenCL] Pipe type support\n\nSummary:\nSupport for OpenCL 2.0 pipe type.\nThis is a bug-fix version for bader\'s patch reviews.llvm.org/D14441\n\n\nReviewers: pekka.jaaskelainen, Anastasia\n\nSubscribers: bader, Anastasia, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D15603\n\nllvm-svn: 257254"},
[f]=m,
[c]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support","[OpenCL] Pipe type support\n\nSummary:\nSupport for OpenCL 2.0 pipe type.\nThis is a bug-fix version for bader\'s patch reviews.llvm.org/D14441\n\n\nReviewers: pekka.jaaskelainen, Anastasia\n\nSubscribers: bader, Anastasia, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D15603\n\nllvm-svn: 257254"},
[j]={{cb,1378,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  // ...\n  case DeclSpec::TST_unspecified:\n    // ...\n    // Unspecified typespec defaults to int in C90.  However, the C90 grammar\n    // [C90 6.5] only allows a decl-spec if there was *some* type-specifier,\n    // type-qualifier, or storage-class-specifier.  If not, emit an extwarn.\n    // Note that the one exception to this is function definitions, which are\n    // allowed to be completely missing a declspec.  This is handled in the\n    // parser already though by it pretending to have seen an \'int\' in this\n    // case.\n    if (S.getLangOpts().isImplicitIntRequired()) {\n    // ...\n    } else if (!DS.hasTypeSpecifier()) {\n      // C99 and C++ require a type specifier.  For example, C99 6.7.2p2 says:\n      // \"At least one type specifier shall be given in the declaration\n      // specifiers in each declaration, and in the specifier-qualifier list in\n      // each struct declaration and type name.\"\n      if (!S.getLangOpts().isImplicitIntAllowed() && !DS.isTypeSpecPipe()) {\n      // ...\n      } else if (S.getLangOpts().getOpenCLCompatibleVersion() >= 200 && DS.isTypeSpecPipe()) {\n        S.Diag(DeclLoc, diag::err_missing_actual_pipe_type) << DS.getSourceRange();"}},
[j]={{cb,1378,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  // ...\n  case DeclSpec::TST_unspecified:\n    // ...\n    // Unspecified typespec defaults to int in C90.  However, the C90 grammar\n    // [C90 6.5] only allows a decl-spec if there was *some* type-specifier,\n    // type-qualifier, or storage-class-specifier.  If not, emit an extwarn.\n    // Note that the one exception to this is function definitions, which are\n    // allowed to be completely missing a declspec.  This is handled in the\n    // parser already though by it pretending to have seen an \'int\' in this\n    // case.\n    if (S.getLangOpts().isImplicitIntRequired()) {\n    // ...\n    } else if (!DS.hasTypeSpecifier()) {\n      // C99 and C++ require a type specifier.  For example, C99 6.7.2p2 says:\n      // \"At least one type specifier shall be given in the declaration\n      // specifiers in each declaration, and in the specifier-qualifier list in\n      // each struct declaration and type name.\"\n      if (!S.getLangOpts().isImplicitIntAllowed() && !DS.isTypeSpecPipe()) {\n      // ...\n      } else if (S.getLangOpts().getOpenCLCompatibleVersion() >= 200 && DS.isTypeSpecPipe()) {\n        S.Diag(DeclLoc, diag::err_missing_actual_pipe_type) << DS.getSourceRange();"}},
[l]={
[l]={
Line 858: Line 859:
},
},
["err_missing_atsign_prefix"]={
["err_missing_atsign_prefix"]={
[i]="err_missing_atsign_prefix",
[c]="err_missing_atsign_prefix",
[h]={{nil,w,"%select{string|numeric}0 literal must be prefixed by \'@\'"},{n,nil,"string literal must be prefixed by \'@\' "}},
[d]={{nil,x,"%select{string|numeric}0 literal must be prefixed by \'@\'"},{n,nil,"string literal must be prefixed by \'@\' "}},
[g]={{nil,w,{{"string","numeric"}," literal must be prefixed by \'@\'"}},{n,nil,"string literal must be prefixed by \'@\' "}},
[e]={{nil,x,{{"string","numeric"}," literal must be prefixed by \'@\'"}},{n,nil,"string literal must be prefixed by \'@\' "}},
[b]=k,
[f]=k,
[e]="(?:string|numeric) literal must be prefixed by \'@\'",
[g]="(?:string|numeric) literal must be prefixed by \'@\'",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"bd714e9bb120",1387308823,"Objective-C. Make diagnostics and fix-its consistent ","Objective-C. Make diagnostics and fix-its consistent \nwhen diagnosing casting of a cstring literal to\nNSString in default and -fobjc-arc mode. \n// rdar://14106083\n\nllvm-svn: 197515"},
[b]={"bd714e9bb120",1387308823,"Objective-C. Make diagnostics and fix-its consistent ","Objective-C. Make diagnostics and fix-its consistent \nwhen diagnosing casting of a cstring literal to\nNSString in default and -fobjc-arc mode. \n// rdar://14106083\n\nllvm-svn: 197515"},
[j]={{V,17467,"bool Sema::CheckConversionToObjCLiteral(QualType DstType, Expr *&Exp, bool Diagnose) {\n  // ...\n  if (auto *SL = dyn_cast<StringLiteral>(SrcExpr)) {\n    // ...\n    if (Diagnose) {\n      Diag(SL->getBeginLoc(), diag::err_missing_atsign_prefix) << /*string*/ 0 << FixItHint::CreateInsertion(SL->getBeginLoc(), \"@\");"},{V,17525,"bool Sema::CheckConversionToObjCLiteral(QualType DstType, Expr *&Exp, bool Diagnose) {\n  // ...\n  if ((isa<IntegerLiteral>(SrcExpr) || isa<CharacterLiteral>(SrcExpr) || isa<FloatingLiteral>(SrcExpr) || isa<ObjCBoolLiteralExpr>(SrcExpr) || isa<CXXBoolLiteralExpr>(SrcExpr)) && !SrcExpr->isNullPointerConstant(getASTContext(), Expr::NPC_NeverValueDependent)) {\n    // ...\n    if (Diagnose) {\n      Diag(SrcExpr->getBeginLoc(), diag::err_missing_atsign_prefix) << /*number*/ 1 << FixItHint::CreateInsertion(SrcExpr->getBeginLoc(), \"@\");"}},
[j]={{W,17467,"bool Sema::CheckConversionToObjCLiteral(QualType DstType, Expr *&Exp, bool Diagnose) {\n  // ...\n  if (auto *SL = dyn_cast<StringLiteral>(SrcExpr)) {\n    // ...\n    if (Diagnose) {\n      Diag(SL->getBeginLoc(), diag::err_missing_atsign_prefix) << /*string*/ 0 << FixItHint::CreateInsertion(SL->getBeginLoc(), \"@\");"},{W,17525,"bool Sema::CheckConversionToObjCLiteral(QualType DstType, Expr *&Exp, bool Diagnose) {\n  // ...\n  if ((isa<IntegerLiteral>(SrcExpr) || isa<CharacterLiteral>(SrcExpr) || isa<FloatingLiteral>(SrcExpr) || isa<ObjCBoolLiteralExpr>(SrcExpr) || isa<CXXBoolLiteralExpr>(SrcExpr)) && !SrcExpr->isNullPointerConstant(getASTContext(), Expr::NPC_NeverValueDependent)) {\n    // ...\n    if (Diagnose) {\n      Diag(SrcExpr->getBeginLoc(), diag::err_missing_atsign_prefix) << /*number*/ 1 << FixItHint::CreateInsertion(SrcExpr->getBeginLoc(), \"@\");"}},
[l]={
[l]={
["clang/test/SemaObjC/objc-literal-fixit.m"]={"clang/test/SemaObjC/objc-literal-fixit.m:17:17: error: numeric literal must be prefixed by \'@\'","clang/test/SemaObjC/objc-literal-fixit.m:18:18: error: numeric literal must be prefixed by \'@\'","clang/test/SemaObjC/objc-literal-fixit.m:23:18: error: numeric literal must be prefixed by \'@\'","clang/test/SemaObjC/objc-literal-fixit.m:29:18: error: numeric literal must be prefixed by \'@\'"}
["clang/test/SemaObjC/objc-literal-fixit.m"]={"clang/test/SemaObjC/objc-literal-fixit.m:17:17: error: numeric literal must be prefixed by \'@\'","clang/test/SemaObjC/objc-literal-fixit.m:18:18: error: numeric literal must be prefixed by \'@\'","clang/test/SemaObjC/objc-literal-fixit.m:23:18: error: numeric literal must be prefixed by \'@\'","clang/test/SemaObjC/objc-literal-fixit.m:29:18: error: numeric literal must be prefixed by \'@\'"}
Line 872: Line 873:
},
},
["err_missing_before_module_end"]={
["err_missing_before_module_end"]={
[i]="err_missing_before_module_end",
[c]="err_missing_before_module_end",
[h]="expected %0 at end of module",
[d]="expected %0 at end of module",
[g]="expected A at end of module",
[e]="expected A at end of module",
[b]=k,
[f]=k,
[e]="expected (.*?) at end of module",
[g]="expected (.*?) at end of module",
[d]=a,
[h]=a,
[f]=M,
[i]=O,
[c]={"c4e04a296403",1442640777,"[Modules] More descriptive diagnostics for misplaced import directive","[Modules] More descriptive diagnostics for misplaced import directive\n\nIf an import directive was put into wrong context, the error message was obscure,\ncomplaining on misbalanced braces. To get more descriptive messages, annotation\ntokens related to modules are processed where they must not be seen.\n\nDifferential Revision: http://reviews.llvm.org/D11844\n\nllvm-svn: 248085"},
[b]={"c4e04a296403",1442640777,"[Modules] More descriptive diagnostics for misplaced import directive","[Modules] More descriptive diagnostics for misplaced import directive\n\nIf an import directive was put into wrong context, the error message was obscure,\ncomplaining on misbalanced braces. To get more descriptive messages, annotation\ntokens related to modules are processed where they must not be seen.\n\nDifferential Revision: http://reviews.llvm.org/D11844\n\nllvm-svn: 248085"},
[j]={{Cb,2723,"bool BalancedDelimiterTracker::diagnoseMissingClose() {\n  // ...\n  if (P.Tok.is(tok::annot_module_end))\n    P.Diag(P.Tok, diag::err_missing_before_module_end) << Close;"}},
[j]={{Nb,2723,"bool BalancedDelimiterTracker::diagnoseMissingClose() {\n  // ...\n  if (P.Tok.is(tok::annot_module_end))\n    P.Diag(P.Tok, diag::err_missing_before_module_end) << Close;"}},
[l]={
[l]={
["clang/test/Modules/extern_cxx.cpp"]={"clang/test/Modules/extern_cxx.cpp:22:24: error: expected \'}\' at end of module"}
["clang/test/Modules/extern_cxx.cpp"]={"clang/test/Modules/extern_cxx.cpp:22:24: error: expected \'}\' at end of module"}
Line 886: Line 887:
},
},
["err_missing_catch_finally"]={
["err_missing_catch_finally"]={
[i]="err_missing_catch_finally",
[c]="err_missing_catch_finally",
[h]="@try statement without a @catch and @finally clause",
[d]="@try statement without a @catch and @finally clause",
[e]="@try statement without a @catch and @finally clause",
[f]=k,
[g]="@try statement without a @catch and @finally clause",
[g]="@try statement without a @catch and @finally clause",
[b]=k,
[h]=a,
[e]="@try statement without a @catch and @finally clause",
[i]=y,
[d]=a,
[b]={J,1236199783,H,I},
[f]=y,
[c]={H,1236199783,I,G},
[j]={{N,2672,"///  objc-try-catch-statement:\n///    @try compound-statement objc-catch-list[opt]\n///    @try compound-statement objc-catch-list[opt] @finally compound-statement\n///\n///  objc-catch-list:\n///    @catch ( parameter-declaration ) compound-statement\n///    objc-catch-list @catch ( catch-parameter-declaration ) compound-statement\n///  catch-parameter-declaration:\n///    parameter-declaration\n///    \'...\' [OBJC2]\n///\nStmtResult Parser::ParseObjCTryStmt(SourceLocation atLoc) {\n  // ...\n  if (!catch_or_finally_seen) {\n    Diag(atLoc, diag::err_missing_catch_finally);"}},
[j]={{N,2672,"///  objc-try-catch-statement:\n///    @try compound-statement objc-catch-list[opt]\n///    @try compound-statement objc-catch-list[opt] @finally compound-statement\n///\n///  objc-catch-list:\n///    @catch ( parameter-declaration ) compound-statement\n///    objc-catch-list @catch ( catch-parameter-declaration ) compound-statement\n///  catch-parameter-declaration:\n///    parameter-declaration\n///    \'...\' [OBJC2]\n///\nStmtResult Parser::ParseObjCTryStmt(SourceLocation atLoc) {\n  // ...\n  if (!catch_or_finally_seen) {\n    Diag(atLoc, diag::err_missing_catch_finally);"}},
[l]={
[l]={
Line 900: Line 901:
},
},
["err_missing_comma_before_ellipsis"]={
["err_missing_comma_before_ellipsis"]={
[i]="err_missing_comma_before_ellipsis",
[c]="err_missing_comma_before_ellipsis",
[h]="C requires a comma prior to the ellipsis in a variadic function type",
[d]="C requires a comma prior to the ellipsis in a variadic function type",
[e]="C requires a comma prior to the ellipsis in a variadic function type",
[f]=k,
[g]="C requires a comma prior to the ellipsis in a variadic function type",
[g]="C requires a comma prior to the ellipsis in a variadic function type",
[b]=k,
[h]=a,
[e]="C requires a comma prior to the ellipsis in a variadic function type",
[i]=y,
[d]=a,
[b]={"9bfc2e50a786",1253655700,"In C++, a variadic function does not need an ellipsis prior to the comma. Parse it in both C and C++...","In C++, a variadic function does not need an ellipsis prior to the comma. Parse it in both C and C++, but diagnose it as an error in C with a fix-it hint to add the comma.\n\nllvm-svn: 82576"},
[f]=y,
[j]={{hb,7499,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  // ...\n  do {\n    // ...\n    if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n      if (!getLangOpts().CPlusPlus) {\n        // ...\n        Diag(EllipsisLoc, diag::err_missing_comma_before_ellipsis) << FixItHint::CreateInsertion(EllipsisLoc, \", \");"}},
[c]={"9bfc2e50a786",1253655700,"In C++, a variadic function does not need an ellipsis prior to the comma. Parse it in both C and C++...","In C++, a variadic function does not need an ellipsis prior to the comma. Parse it in both C and C++, but diagnose it as an error in C with a fix-it hint to add the comma.\n\nllvm-svn: 82576"},
[j]={{eb,7499,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  // ...\n  do {\n    // ...\n    if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n      if (!getLangOpts().CPlusPlus) {\n        // ...\n        Diag(EllipsisLoc, diag::err_missing_comma_before_ellipsis) << FixItHint::CreateInsertion(EllipsisLoc, \", \");"}},
[l]={
[l]={
["clang/test/C/C2x/n2975.c"]={"clang/test/C/C2x/n2975.c:53:15: error: C requires a comma prior to the ellipsis in a variadic function type"}
["clang/test/C/C2x/n2975.c"]={"clang/test/C/C2x/n2975.c:53:15: error: C requires a comma prior to the ellipsis in a variadic function type"}
Line 914: Line 915:
},
},
["err_missing_default_ctor"]={
["err_missing_default_ctor"]={
[i]="err_missing_default_ctor",
[c]="err_missing_default_ctor",
[h]="%select{constructor for %1 must explicitly initialize the|implicit default constructor for %1 must explicitly initialize the|cannot use constructor inherited from base class %4;}0 %select{base class|member}2 %3 %select{which|which|of %1}0 does not have a default constructor",
[d]="%select{constructor for %1 must explicitly initialize the|implicit default constructor for %1 must explicitly initialize the|cannot use constructor inherited from base class %4;}0 %select{base class|member}2 %3 %select{which|which|of %1}0 does not have a default constructor",
[g]={{nil,nil,{{"constructor for B must explicitly initialize the","implicit default constructor for B must explicitly initialize the","cannot use constructor inherited from base class E;"}," ",{"base class","member"}," D ",{"which","which","of B"}," does not have a default constructor"}}},
[e]={{nil,nil,{{"constructor for B must explicitly initialize the","implicit default constructor for B must explicitly initialize the","cannot use constructor inherited from base class E;"}," ",{"base class","member"}," D ",{"which","which","of B"}," does not have a default constructor"}}},
[b]=k,
[f]=k,
[e]="(?:constructor for (.*?) must explicitly initialize the|implicit default constructor for (.*?) must explicitly initialize the|cannot use constructor inherited from base class (.*?);) (?:base class|member) (.*?) (?:which|which|of (.*?)) does not have a default constructor",
[g]="(?:constructor for (.*?) must explicitly initialize the|implicit default constructor for (.*?) must explicitly initialize the|cannot use constructor inherited from base class (.*?);) (?:base class|member) (.*?) (?:which|which|of (.*?)) does not have a default constructor",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"d7686ef31c21",1257728747,"Unify the codepaths used to verify base and member initializers for explicitly","Unify the codepaths used to verify base and member initializers for explicitly\nand implicitly defined constructors.  This has a number of benefits:\n\n1. Less code.\n\n2. Explicit and implicit constructors get the same diagnostics.\n\n3. The AST explicitly contains constructor calls from implicit default\nconstructors.  This allows handing some cases that previously weren\'t handled\ncorrectly in IRGen without any additional code. Specifically, implicit default\nconstructors containing calls to constructors with default arguments are now\nhandled correctly.\n\nllvm-svn: 86500"},
[b]={"d7686ef31c21",1257728747,"Unify the codepaths used to verify base and member initializers for explicitly","Unify the codepaths used to verify base and member initializers for explicitly\nand implicitly defined constructors.  This has a number of benefits:\n\n1. Less code.\n\n2. Explicit and implicit constructors get the same diagnostics.\n\n3. The AST explicitly contains constructor calls from implicit default\nconstructors.  This allows handing some cases that previously weren\'t handled\ncorrectly in IRGen without any additional code. Specifically, implicit default\nconstructors containing calls to constructors with default arguments are now\nhandled correctly.\n\nllvm-svn: 86500"},
[j]={{"clang/lib/Sema/SemaInit.cpp",9878,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ListConstructorOverloadFailed:\n  case FK_ConstructorOverloadFailed: {\n    // ...\n    case OR_No_Viable_Function:\n      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        // ...\n        if (Entity.getKind() == InitializedEntity::EK_Base) {\n          S.Diag(Kind.getLocation(), diag::err_missing_default_ctor) << (InheritedFrom ? 2 : Constructor->isImplicit() ? 1 : 0) << S.Context.getTypeDeclType(Constructor->getParent()) << /*base=*/0 << Entity.getType() << InheritedFrom;"},{"clang/lib/Sema/SemaInit.cpp",9891,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ListConstructorOverloadFailed:\n  case FK_ConstructorOverloadFailed: {\n    // ...\n    case OR_No_Viable_Function:\n      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        // ...\n        if (Entity.getKind() == InitializedEntity::EK_Base) {\n        // ...\n        } else {\n          S.Diag(Kind.getLocation(), diag::err_missing_default_ctor) << (InheritedFrom ? 2 : Constructor->isImplicit() ? 1 : 0) << S.Context.getTypeDeclType(Constructor->getParent()) << /*member=*/1 << Entity.getName() << InheritedFrom;"}},
[j]={{"clang/lib/Sema/SemaInit.cpp",9878,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ListConstructorOverloadFailed:\n  case FK_ConstructorOverloadFailed: {\n    // ...\n    case OR_No_Viable_Function:\n      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        // ...\n        if (Entity.getKind() == InitializedEntity::EK_Base) {\n          S.Diag(Kind.getLocation(), diag::err_missing_default_ctor) << (InheritedFrom ? 2 : Constructor->isImplicit() ? 1 : 0) << S.Context.getTypeDeclType(Constructor->getParent()) << /*base=*/0 << Entity.getType() << InheritedFrom;"},{"clang/lib/Sema/SemaInit.cpp",9891,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ListConstructorOverloadFailed:\n  case FK_ConstructorOverloadFailed: {\n    // ...\n    case OR_No_Viable_Function:\n      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        // ...\n        if (Entity.getKind() == InitializedEntity::EK_Base) {\n        // ...\n        } else {\n          S.Diag(Kind.getLocation(), diag::err_missing_default_ctor) << (InheritedFrom ? 2 : Constructor->isImplicit() ? 1 : 0) << S.Context.getTypeDeclType(Constructor->getParent()) << /*member=*/1 << Entity.getName() << InheritedFrom;"}},
[l]={
[l]={
Line 928: Line 929:
},
},
["err_missing_dependent_template_keyword"]={
["err_missing_dependent_template_keyword"]={
[i]="err_missing_dependent_template_keyword",
[c]="err_missing_dependent_template_keyword",
[h]="use \'template\' keyword to treat \'%0\' as a dependent template name",
[d]="use \'template\' keyword to treat \'%0\' as a dependent template name",
[g]="use \'template\' keyword to treat \'A\' as a dependent template name",
[e]="use \'template\' keyword to treat \'A\' as a dependent template name",
[b]=k,
[f]=k,
[e]="use \'template\' keyword to treat \'(.*?)\' as a dependent template name",
[g]="use \'template\' keyword to treat \'(.*?)\' as a dependent template name",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"786123dc48d8",1274483887,"Improve parser recovery when we encounter a dependent template name","Improve parser recovery when we encounter a dependent template name\nthat is missing the \'template\' keyword, e.g., \n\n  t->getAs<T>()\n\nwhere getAs is a member of an unknown specialization. C++ requires\nthat we treat \"getAs\" as a value, but that would fail to parse since T\nis the name of a type. We would then fail at the \'>\', since a type\ncannot be followed by a \'>\'.\n\nThis is a very common error for C++ programmers to make, especially\nsince GCC occasionally allows it when it shouldn\'t (as does Visual\nC++). So, when we are in this case, we use tentative parsing to see if\nthe tokens starting at \"<\" can only be parsed as a template argument\nlist. If so, we produce a diagnostic with a fix-it that states that\nthe \'template\' keyword is needed:\n\ntest/SemaTemplate/dependent-template-recover.cpp:5:8: error: \'template\' keyword\n      is required to treat \'getAs\' as a dependent template name\n    t->getAs<T>();\n      ^\n      template \n\nThis is just a start of this patch; I\'d like to apply the same\napproach to everywhere that a template-id with dependent template name\ncan be parsed.\n\nllvm-svn: 104406"},
[b]={"786123dc48d8",1274483887,"Improve parser recovery when we encounter a dependent template name","Improve parser recovery when we encounter a dependent template name\nthat is missing the \'template\' keyword, e.g., \n\n  t->getAs<T>()\n\nwhere getAs is a member of an unknown specialization. C++ requires\nthat we treat \"getAs\" as a value, but that would fail to parse since T\nis the name of a type. We would then fail at the \'>\', since a type\ncannot be followed by a \'>\'.\n\nThis is a very common error for C++ programmers to make, especially\nsince GCC occasionally allows it when it shouldn\'t (as does Visual\nC++). So, when we are in this case, we use tentative parsing to see if\nthe tokens starting at \"<\" can only be parsed as a template argument\nlist. If so, we produce a diagnostic with a fix-it that states that\nthe \'template\' keyword is needed:\n\ntest/SemaTemplate/dependent-template-recover.cpp:5:8: error: \'template\' keyword\n      is required to treat \'getAs\' as a dependent template name\n    t->getAs<T>();\n      ^\n      template \n\nThis is just a start of this patch; I\'d like to apply the same\napproach to everywhere that a template-id with dependent template name\ncan be parsed.\n\nllvm-svn: 104406"},
[j]={{"clang/lib/Parse/ParseExprCXX.cpp",525,"/// Parse global scope or nested-name-specifier if present.\n///\n/// Parses a C++ global scope specifier (\'::\') or nested-name-specifier (which\n/// may be preceded by \'::\'). Note that this routine will not parse ::new or\n/// ::delete; it will just leave them in the token stream.\n///\n///      \'::\'[opt] nested-name-specifier\n///      \'::\'\n///\n///      nested-name-specifier:\n///        type-name \'::\'\n///        namespace-name \'::\'\n///        nested-name-specifier identifier \'::\'\n///        nested-name-specifier \'template\'[opt] simple-template-id \'::\'\n///\n///\n/// \\param SS the scope specifier that will be set to the parsed\n/// nested-name-specifier (or empty)\n///\n/// \\param ObjectType if this nested-name-specifier is being parsed following\n/// the \".\" or \"->\" of a member access expression, this parameter provides the\n/// type of the object whose members are being accessed.\n///\n/// \\param ObjectHadErrors if this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n/// When true, diagnostics for missing \'template\' keyword will be supressed.\n///\n/// \\param EnteringContext whether we will be entering into the context of\n/// the nested-name-specifier after parsing it.\n///\n/// \\param MayBePseudoDestructor When non-NULL, points to a flag that\n/// indicates whether this nested-name-specifier may be part of a\n/// pseudo-destructor name. In this case, the flag will be set false\n/// if we don\'t actually end up parsing a destructor name. Moreover,\n/// if we do end up determining that we are parsing a destructor name,\n/// the last component of the nested-name-specifier is not parsed as\n/// part of the scope specifier.\n///\n/// \\param IsTypename If \\c true, this nested-name-specifier is known to be\n/// part of a type name. This is used to improve error recovery.\n///\n/// \\param LastII When non-NULL, points to an IdentifierInfo* that will be\n/// filled in with the leading identifier in the last component of the\n/// nested-name-specifier, if any.\n///\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n///\n/// \\returns true if there was an error parsing a scope specifier\nbool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool *MayBePseudoDestructor, bool IsTypename, IdentifierInfo **LastII, bool OnlyNamespace, bool InUsingDeclaration) {\n  // ...\n  while (true) {\n    // ...\n    // nested-name-specifier:\n    //  type-name \'<\'\n    if (Next.is(tok::less)) {\n      // ...\n      if (MemberOfUnknownSpecialization && (ObjectType || SS.isSet()) && (IsTypename || isTemplateArgumentList(1) == TPResult::True)) {\n        // If we had errors before, ObjectType can be dependent even without any\n        // templates. Do not report missing template keyword in that case.\n        if (!ObjectHadErrors) {\n          // ...\n          unsigned DiagID = diag::err_missing_dependent_template_keyword;"},{"clang/lib/Parse/ParseExprCXX.cpp",2483,"/// Finish parsing a C++ unqualified-id that is a template-id of\n/// some form.\n///\n/// This routine is invoked when a \'<\' is encountered after an identifier or\n/// operator-function-id is parsed by \\c ParseUnqualifiedId() to determine\n/// whether the unqualified-id is actually a template-id. This routine will\n/// then parse the template arguments and form the appropriate template-id to\n/// return to the caller.\n///\n/// \\param SS the nested-name-specifier that precedes this template-id, if\n/// we\'re actually parsing a qualified-id.\n///\n/// \\param ObjectType if this unqualified-id occurs within a member access\n/// expression, the type of the base object whose member is being accessed.\n///\n/// \\param ObjectHadErrors this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n///\n/// \\param Name for constructor and destructor names, this is the actual\n/// identifier that may be a template-name.\n///\n/// \\param NameLoc the location of the class-name in a constructor or\n/// destructor.\n///\n/// \\param EnteringContext whether we\'re entering the scope of the\n/// nested-name-specifier.\n///\n/// \\param Id as input, describes the template-name or operator-function-id\n/// that precedes the \'<\'. If template arguments were parsed successfully,\n/// will be updated with the template-id.\n///\n/// \\param AssumeTemplateId When true, this routine will assume that the name\n/// refers to a template without performing name lookup to verify.\n///\n/// \\returns true if a parse error occurred, false otherwise.\nbool Parser::ParseUnqualifiedIdTemplateId(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, SourceLocation TemplateKWLoc, IdentifierInfo *Name, SourceLocation NameLoc, bool EnteringContext, UnqualifiedId &Id, bool AssumeTemplateId) {\n  // ...\n  case UnqualifiedIdKind::IK_Identifier:\n  case UnqualifiedIdKind::IK_OperatorFunctionId:\n  case UnqualifiedIdKind::IK_LiteralOperatorId:\n    if (AssumeTemplateId) {\n    // ...\n    } else {\n      // ...\n      if (TNK == TNK_Non_template && MemberOfUnknownSpecialization && ObjectType && isTemplateArgumentList(0) == TPResult::True) {\n        // If we had errors before, ObjectType can be dependent even without any\n        // templates, do not report missing template keyword in that case.\n        if (!ObjectHadErrors) {\n          // ...\n          Diag(Id.StartLocation, diag::err_missing_dependent_template_keyword) << Name << FixItHint::CreateInsertion(Id.StartLocation, \"template \");"}},
[j]={{"clang/lib/Parse/ParseExprCXX.cpp",525,"/// Parse global scope or nested-name-specifier if present.\n///\n/// Parses a C++ global scope specifier (\'::\') or nested-name-specifier (which\n/// may be preceded by \'::\'). Note that this routine will not parse ::new or\n/// ::delete; it will just leave them in the token stream.\n///\n///      \'::\'[opt] nested-name-specifier\n///      \'::\'\n///\n///      nested-name-specifier:\n///        type-name \'::\'\n///        namespace-name \'::\'\n///        nested-name-specifier identifier \'::\'\n///        nested-name-specifier \'template\'[opt] simple-template-id \'::\'\n///\n///\n/// \\param SS the scope specifier that will be set to the parsed\n/// nested-name-specifier (or empty)\n///\n/// \\param ObjectType if this nested-name-specifier is being parsed following\n/// the \".\" or \"->\" of a member access expression, this parameter provides the\n/// type of the object whose members are being accessed.\n///\n/// \\param ObjectHadErrors if this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n/// When true, diagnostics for missing \'template\' keyword will be supressed.\n///\n/// \\param EnteringContext whether we will be entering into the context of\n/// the nested-name-specifier after parsing it.\n///\n/// \\param MayBePseudoDestructor When non-NULL, points to a flag that\n/// indicates whether this nested-name-specifier may be part of a\n/// pseudo-destructor name. In this case, the flag will be set false\n/// if we don\'t actually end up parsing a destructor name. Moreover,\n/// if we do end up determining that we are parsing a destructor name,\n/// the last component of the nested-name-specifier is not parsed as\n/// part of the scope specifier.\n///\n/// \\param IsTypename If \\c true, this nested-name-specifier is known to be\n/// part of a type name. This is used to improve error recovery.\n///\n/// \\param LastII When non-NULL, points to an IdentifierInfo* that will be\n/// filled in with the leading identifier in the last component of the\n/// nested-name-specifier, if any.\n///\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n///\n/// \\returns true if there was an error parsing a scope specifier\nbool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool *MayBePseudoDestructor, bool IsTypename, IdentifierInfo **LastII, bool OnlyNamespace, bool InUsingDeclaration) {\n  // ...\n  while (true) {\n    // ...\n    // nested-name-specifier:\n    //  type-name \'<\'\n    if (Next.is(tok::less)) {\n      // ...\n      if (MemberOfUnknownSpecialization && (ObjectType || SS.isSet()) && (IsTypename || isTemplateArgumentList(1) == TPResult::True)) {\n        // If we had errors before, ObjectType can be dependent even without any\n        // templates. Do not report missing template keyword in that case.\n        if (!ObjectHadErrors) {\n          // ...\n          unsigned DiagID = diag::err_missing_dependent_template_keyword;"},{"clang/lib/Parse/ParseExprCXX.cpp",2483,"/// Finish parsing a C++ unqualified-id that is a template-id of\n/// some form.\n///\n/// This routine is invoked when a \'<\' is encountered after an identifier or\n/// operator-function-id is parsed by \\c ParseUnqualifiedId() to determine\n/// whether the unqualified-id is actually a template-id. This routine will\n/// then parse the template arguments and form the appropriate template-id to\n/// return to the caller.\n///\n/// \\param SS the nested-name-specifier that precedes this template-id, if\n/// we\'re actually parsing a qualified-id.\n///\n/// \\param ObjectType if this unqualified-id occurs within a member access\n/// expression, the type of the base object whose member is being accessed.\n///\n/// \\param ObjectHadErrors this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n///\n/// \\param Name for constructor and destructor names, this is the actual\n/// identifier that may be a template-name.\n///\n/// \\param NameLoc the location of the class-name in a constructor or\n/// destructor.\n///\n/// \\param EnteringContext whether we\'re entering the scope of the\n/// nested-name-specifier.\n///\n/// \\param Id as input, describes the template-name or operator-function-id\n/// that precedes the \'<\'. If template arguments were parsed successfully,\n/// will be updated with the template-id.\n///\n/// \\param AssumeTemplateId When true, this routine will assume that the name\n/// refers to a template without performing name lookup to verify.\n///\n/// \\returns true if a parse error occurred, false otherwise.\nbool Parser::ParseUnqualifiedIdTemplateId(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, SourceLocation TemplateKWLoc, IdentifierInfo *Name, SourceLocation NameLoc, bool EnteringContext, UnqualifiedId &Id, bool AssumeTemplateId) {\n  // ...\n  case UnqualifiedIdKind::IK_Identifier:\n  case UnqualifiedIdKind::IK_OperatorFunctionId:\n  case UnqualifiedIdKind::IK_LiteralOperatorId:\n    if (AssumeTemplateId) {\n    // ...\n    } else {\n      // ...\n      if (TNK == TNK_Non_template && MemberOfUnknownSpecialization && ObjectType && isTemplateArgumentList(0) == TPResult::True) {\n        // If we had errors before, ObjectType can be dependent even without any\n        // templates, do not report missing template keyword in that case.\n        if (!ObjectHadErrors) {\n          // ...\n          Diag(Id.StartLocation, diag::err_missing_dependent_template_keyword) << Name << FixItHint::CreateInsertion(Id.StartLocation, \"template \");"}},
[l]={
[l]={
Line 942: Line 943:
},
},
["err_missing_end_of_definition"]={
["err_missing_end_of_definition"]={
[i]="err_missing_end_of_definition",
[c]="err_missing_end_of_definition",
[h]="missing \'}\' at end of definition of %q0",
[d]="missing \'}\' at end of definition of %q0",
[g]="missing \'}\' at end of definition of A",
[e]="missing \'}\' at end of definition of A",
[b]=k,
[f]=k,
[e]="missing \'\\}\' at end of definition of (.*?)",
[g]="missing \'\\}\' at end of definition of (.*?)",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"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\ndefinition. If we see something that looks like a namespace definition inside a\nclass, that strongly indicates that a close brace was missing somewhere.\n\nllvm-svn: 194319"},
[b]={"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\ndefinition. If we see something that looks like a namespace definition inside a\nclass, that strongly indicates that a close brace was missing somewhere.\n\nllvm-svn: 194319"},
[j]={{"clang/lib/Parse/ParseDeclCXX.cpp",3690,"void Parser::DiagnoseUnexpectedNamespace(NamedDecl *D) {\n  // ...\n  Diag(D->getLocation(), diag::err_missing_end_of_definition) << D;"}},
[j]={{"clang/lib/Parse/ParseDeclCXX.cpp",3690,"void Parser::DiagnoseUnexpectedNamespace(NamedDecl *D) {\n  // ...\n  Diag(D->getLocation(), diag::err_missing_end_of_definition) << D;"}},
[l]={
[l]={
Line 956: Line 957:
},
},
["err_missing_exception_specification"]={
["err_missing_exception_specification"]={
[i]="err_missing_exception_specification",
[c]="err_missing_exception_specification",
[h]="%0 is missing exception specification \'%1\'",
[d]="%0 is missing exception specification \'%1\'",
[g]="A is missing exception specification \'B\'",
[e]="A is missing exception specification \'B\'",
[b]=k,
[f]=k,
[e]="(.*?) is missing exception specification \'(.*?)\'",
[g]="(.*?) is missing exception specification \'(.*?)\'",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"a91de375f278",1443574130,"Promote a warning on ill-formed code (redeclaration missing an exception","Promote a warning on ill-formed code (redeclaration missing an exception\nspecification) to an error. No compiler other than Clang seems to allow this,\nand it doesn\'t seem like a useful thing to accept as an extension in general.\n\nThe current behavior was added for PR5957, where the problem was specifically\nrelated to mismatches of the exception specification on the implicitly-declared\nglobal operator new and delete. To retain that workaround, we downgrade the\nerror to an ExtWarn when the declaration is of a replaceable global allocation\nfunction.\n\nNow that this is an error, stop trying (and failing) to recover from a missing\ncomputed noexcept specification. That recovery didn\'t work, and led to crashes\nin code like the added testcase.\n\nllvm-svn: 248867"},
[b]={"a91de375f278",1443574130,"Promote a warning on ill-formed code (redeclaration missing an exception","Promote a warning on ill-formed code (redeclaration missing an exception\nspecification) to an error. No compiler other than Clang seems to allow this,\nand it doesn\'t seem like a useful thing to accept as an extension in general.\n\nThe current behavior was added for PR5957, where the problem was specifically\nrelated to mismatches of the exception specification on the implicitly-declared\nglobal operator new and delete. To retain that workaround, we downgrade the\nerror to an ExtWarn when the declaration is of a replaceable global allocation\nfunction.\n\nNow that this is an error, stop trying (and failing) to recover from a missing\ncomputed noexcept specification. That recovery didn\'t work, and led to crashes\nin code like the added testcase.\n\nllvm-svn: 248867"},
[j]={{"clang/lib/Sema/SemaExceptionSpec.cpp",419,"bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {\n  // ...\n  if (getLangOpts().MSVCCompat && isDynamicExceptionSpec(ESI.Type)) {\n  // ...\n  } else if (New->isReplaceableGlobalAllocationFunction() && ESI.Type != EST_DependentNoexcept) {\n  // ...\n  } else if (ESI.Type == EST_NoThrow) {\n  // ...\n  } else {\n    DiagID = diag::err_missing_exception_specification;"}},
[j]={{"clang/lib/Sema/SemaExceptionSpec.cpp",419,"bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {\n  // ...\n  if (getLangOpts().MSVCCompat && isDynamicExceptionSpec(ESI.Type)) {\n  // ...\n  } else if (New->isReplaceableGlobalAllocationFunction() && ESI.Type != EST_DependentNoexcept) {\n  // ...\n  } else if (ESI.Type == EST_NoThrow) {\n  // ...\n  } else {\n    DiagID = diag::err_missing_exception_specification;"}},
[l]={
[l]={
Line 970: Line 971:
},
},
["err_missing_method_context"]={
["err_missing_method_context"]={
[i]="err_missing_method_context",
[c]="err_missing_method_context",
[h]="missing context for method declaration",
[d]="missing context for method declaration",
[e]="missing context for method declaration",
[f]=k,
[g]="missing context for method declaration",
[g]="missing context for method declaration",
[b]=k,
[h]=a,
[e]="missing context for method declaration",
[i]=m,
[d]=a,
[b]={Bb,1480718311,Ab,zb},
[f]=m,
[j]={{T,4734,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  // Make sure we can establish a context for the method.\n  if (!CurContext->isObjCContainer()) {\n    Diag(MethodLoc, diag::err_missing_method_context);"}},
[c]={yb,1480718311,zb,Ab},
[j]={{Q,4734,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  // Make sure we can establish a context for the method.\n  if (!CurContext->isObjCContainer()) {\n    Diag(MethodLoc, diag::err_missing_method_context);"}},
[l]={
[l]={
["clang/test/SemaObjC/method-no-context.m"]={"clang/test/SemaObjC/method-no-context.m:3:1: error: missing context for method declaration"}
["clang/test/SemaObjC/method-no-context.m"]={"clang/test/SemaObjC/method-no-context.m:3:1: error: missing context for method declaration"}
Line 984: Line 985:
},
},
["err_missing_module"]={
["err_missing_module"]={
[i]="err_missing_module",
[c]="err_missing_module",
[h]="no module named \'%0\' declared in module map file \'%1\'",
[d]="no module named \'%0\' declared in module map file \'%1\'",
[g]="no module named \'A\' declared in module map file \'B\'",
[e]="no module named \'A\' declared in module map file \'B\'",
[b]=T,
[f]=V,
[e]="no module named \'(.*?)\' declared in module map file \'(.*?)\'",
[g]="no module named \'(.*?)\' declared in module map file \'(.*?)\'",
[d]=a,
[h]=a,
[f]=a,
[i]=w,
[c]={"2b20cb87f5b6",1321402146,"Add support for building a module from a module map to the -cc1","Add support for building a module from a module map to the -cc1\ninterface. This is currently limited to modules with umbrella\nheaders.\n\nllvm-svn: 144736"},
[b]={"2b20cb87f5b6",1321402146,"Add support for building a module from a module map to the -cc1","Add support for building a module from a module map to the -cc1\ninterface. This is currently limited to modules with umbrella\nheaders.\n\nllvm-svn: 144736"},
[j]={{Ob,502,"static Module *prepareToBuildModule(CompilerInstance &CI, StringRef ModuleMapFilename) {\n  // ...\n  if (!M) {\n    CI.getDiagnostics().Report(diag::err_missing_module) << CI.getLangOpts().CurrentModule << ModuleMapFilename;"}},
[j]={{Pb,502,"static Module *prepareToBuildModule(CompilerInstance &CI, StringRef ModuleMapFilename) {\n  // ...\n  if (!M) {\n    CI.getDiagnostics().Report(diag::err_missing_module) << CI.getLangOpts().CurrentModule << ModuleMapFilename;"}},
[l]={
[l]={
["clang/test/Modules/preprocess-build.cpp"]={"fatal error: no module named \'unterminated\' declared in module map file \'unterminated.map\'"}
["clang/test/Modules/preprocess-build.cpp"]={"fatal error: no module named \'unterminated\' declared in module map file \'unterminated.map\'"}
Line 998: Line 999:
},
},
["err_missing_module_name"]={
["err_missing_module_name"]={
[i]="err_missing_module_name",
[c]="err_missing_module_name",
[h]="no module name provided; specify one with -fmodule-name=",
[d]="no module name provided; specify one with -fmodule-name=",
[g]="no module name provided; specify one with -fmodule-name=",
[e]="no module name provided; specify one with -fmodule-name=",
[b]=T,
[f]=V,
[e]="no module name provided; specify one with \\-fmodule\\-name\\=",
[g]="no module name provided; specify one with \\-fmodule\\-name\\=",
[d]=a,
[h]=a,
[f]=a,
[i]=w,
[c]={"2b20cb87f5b6",1321402146,"Add support for building a module from a module map to the -cc1","Add support for building a module from a module map to the -cc1\ninterface. This is currently limited to modules with umbrella\nheaders.\n\nllvm-svn: 144736"},
[b]={"2b20cb87f5b6",1321402146,"Add support for building a module from a module map to the -cc1","Add support for building a module from a module map to the -cc1\ninterface. This is currently limited to modules with umbrella\nheaders.\n\nllvm-svn: 144736"},
[j]={{Ob,488,"static Module *prepareToBuildModule(CompilerInstance &CI, StringRef ModuleMapFilename) {\n  if (CI.getLangOpts().CurrentModule.empty()) {\n    CI.getDiagnostics().Report(diag::err_missing_module_name);"}}
[j]={{Pb,488,"static Module *prepareToBuildModule(CompilerInstance &CI, StringRef ModuleMapFilename) {\n  if (CI.getLangOpts().CurrentModule.empty()) {\n    CI.getDiagnostics().Report(diag::err_missing_module_name);"}}
},
},
["err_missing_open_square_message_send"]={
["err_missing_open_square_message_send"]={
[i]="err_missing_open_square_message_send",
[c]="err_missing_open_square_message_send",
[h]="missing \'[\' at start of message send expression",
[d]="missing \'[\' at start of message send expression",
[g]="missing \'[\' at start of message send expression",
[e]="missing \'[\' at start of message send expression",
[b]=k,
[f]=k,
[e]="missing \'\\[\' at start of message send expression",
[g]="missing \'\\[\' at start of message send expression",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"e9bba4f1a441",1284562265,"Implement bracket insertion for Objective-C instance message sends as","Implement bracket insertion for Objective-C instance message sends as\npart of parser recovery. For example, given:\n\n  a method1:arg];\n\nwe detect after parsing the expression \"a\" that we have the start of a\nmessage send expression. We pretend we\'ve seen a \'[\' prior to the a,\nthen parse the remainder as a message send. We\'ll then give a\ndiagnostic+fix-it such as:\n\nfixit-objc-message.m:17:3: error: missing \'[\' at start of message\n      send expression\n  a method1:arg];\n  ^\n  [\n\nThe algorithm here is very simple, and always assumes that the open\nbracket goes at the beginning of the message send. It also only works\nfor non-super instance message sends at this time.\n\nllvm-svn: 113968"},
[b]={"e9bba4f1a441",1284562265,"Implement bracket insertion for Objective-C instance message sends as","Implement bracket insertion for Objective-C instance message sends as\npart of parser recovery. For example, given:\n\n  a method1:arg];\n\nwe detect after parsing the expression \"a\" that we have the start of a\nmessage send expression. We pretend we\'ve seen a \'[\' prior to the a,\nthen parse the remainder as a message send. We\'ll then give a\ndiagnostic+fix-it such as:\n\nfixit-objc-message.m:17:3: error: missing \'[\' at start of message\n      send expression\n  a method1:arg];\n  ^\n  [\n\nThe algorithm here is very simple, and always assumes that the open\nbracket goes at the beginning of the message send. It also only works\nfor non-super instance message sends at this time.\n\nllvm-svn: 113968"},
[j]={{F,2621,"/// \\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  // ...\n  if (LBracLoc.isInvalid()) {\n    Diag(Loc, diag::err_missing_open_square_message_send) << FixItHint::CreateInsertion(Loc, \"[\");"},{F,2865,"/// 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  // ...\n  if (LBracLoc.isInvalid()) {\n    Diag(Loc, diag::err_missing_open_square_message_send) << FixItHint::CreateInsertion(Loc, \"[\");"}},
[j]={{G,2621,"/// \\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  // ...\n  if (LBracLoc.isInvalid()) {\n    Diag(Loc, diag::err_missing_open_square_message_send) << FixItHint::CreateInsertion(Loc, \"[\");"},{G,2865,"/// 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  // ...\n  if (LBracLoc.isInvalid()) {\n    Diag(Loc, diag::err_missing_open_square_message_send) << FixItHint::CreateInsertion(Loc, \"[\");"}},
[l]={
[l]={
["clang/test/Parser/stmt-attributes.m"]={"clang/test/Parser/stmt-attributes.m:26:22: error: missing \'[\' at start of message send expression"}
["clang/test/Parser/stmt-attributes.m"]={"clang/test/Parser/stmt-attributes.m:26:22: error: missing \'[\' at start of message send expression"}
Line 1,023: Line 1,024:
},
},
["err_missing_param"]={
["err_missing_param"]={
[i]="err_missing_param",
[c]="err_missing_param",
[h]="expected parameter declarator",
[d]="expected parameter declarator",
[e]="expected parameter declarator",
[f]=k,
[g]="expected parameter declarator",
[g]="expected parameter declarator",
[b]=k,
[h]=a,
[e]="expected parameter declarator",
[i]=y,
[d]=a,
[b]={J,1236199783,H,I},
[f]=y,
[j]={{hb,7393,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  // ...\n  do {\n    // ...\n    // If no parameter was specified, verify that *something* was specified,\n    // otherwise we have a missing type and identifier.\n    if (DS.isEmpty() && ParmDeclarator.getIdentifier() == nullptr && ParmDeclarator.getNumTypeObjects() == 0) {\n      // ...\n      Diag(DSStart, diag::err_missing_param);"}},
[c]={H,1236199783,I,G},
[j]={{eb,7393,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  // ...\n  do {\n    // ...\n    // If no parameter was specified, verify that *something* was specified,\n    // otherwise we have a missing type and identifier.\n    if (DS.isEmpty() && ParmDeclarator.getIdentifier() == nullptr && ParmDeclarator.getNumTypeObjects() == 0) {\n      // ...\n      Diag(DSStart, diag::err_missing_param);"}},
[l]={
[l]={
["clang/test/Parser/cxx2a-concepts-requires-expr.cpp"]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:32:28: error: expected parameter declarator","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:44:22: error: expected parameter declarator"}
["clang/test/Parser/cxx2a-concepts-requires-expr.cpp"]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:32:28: error: expected parameter declarator","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:44:22: error: expected parameter declarator"}
Line 1,037: Line 1,038:
},
},
["err_missing_property_context"]={
["err_missing_property_context"]={
[i]="err_missing_property_context",
[c]="err_missing_property_context",
[h]="missing context for property implementation declaration",
[d]="missing context for property implementation declaration",
[e]="missing context for property implementation declaration",
[f]=k,
[g]="missing context for property implementation declaration",
[g]="missing context for property implementation declaration",
[b]=k,
[h]=a,
[e]="missing context for property implementation declaration",
[i]=m,
[d]=a,
[b]={Bb,1480718311,Ab,zb},
[f]=m,
[j]={{M,1090,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  // Make sure we have a context for the property implementation declaration.\n  if (!ClassImpDecl) {\n    Diag(AtLoc, diag::err_missing_property_context);"}},
[c]={yb,1480718311,zb,Ab},
[j]={{L,1090,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  // Make sure we have a context for the property implementation declaration.\n  if (!ClassImpDecl) {\n    Diag(AtLoc, diag::err_missing_property_context);"}},
[l]={
[l]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:66:1: error: missing context for property implementation declaration"}
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:66:1: error: missing context for property implementation declaration"}
Line 1,051: Line 1,052:
},
},
["err_missing_property_interface"]={
["err_missing_property_interface"]={
[i]="err_missing_property_interface",
[c]="err_missing_property_interface",
[h]="property implementation in a category with no category declaration",
[d]="property implementation in a category with no category declaration",
[e]="property implementation in a category with no category declaration",
[f]=k,
[g]="property implementation in a category with no category declaration",
[g]="property implementation in a category with no category declaration",
[b]=k,
[h]=a,
[e]="property implementation in a category with no category declaration",
[i]=m,
[d]=a,
[b]={Bb,1480718311,Ab,zb},
[f]=m,
[j]={{M,1181,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n  // ...\n  } else if ((CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassImpDecl))) {\n    // ...\n    if (!IDecl) {\n      Diag(AtLoc, diag::err_missing_property_interface);"}},
[c]={yb,1480718311,zb,Ab},
[j]={{L,1181,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n  // ...\n  } else if ((CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassImpDecl))) {\n    // ...\n    if (!IDecl) {\n      Diag(AtLoc, diag::err_missing_property_interface);"}},
[l]={
[l]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:35:1: error: property implementation in a category with no category declaration"}
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:35:1: error: property implementation in a category with no category declaration"}
Line 1,065: Line 1,066:
},
},
["err_missing_property_ivar_decl"]={
["err_missing_property_ivar_decl"]={
[i]="err_missing_property_ivar_decl",
[c]="err_missing_property_ivar_decl",
[h]="synthesized property %0 must either be named the same as a compatible instance variable or must explicitly name an instance variable",
[d]="synthesized property %0 must either be named the same as a compatible instance variable or must explicitly name an instance variable",
[g]="synthesized property A must either be named the same as a compatible instance variable or must explicitly name an instance variable",
[e]="synthesized property A must either be named the same as a compatible instance variable or must explicitly name an instance variable",
[b]=k,
[f]=k,
[e]="synthesized property (.*?) must either be named the same as a compatible instance variable or must explicitly name an instance variable",
[g]="synthesized property (.*?) must either be named the same as a compatible instance variable or must explicitly name an instance variable",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={yb,1480718311,zb,Ab},
[b]={Bb,1480718311,Ab,zb},
[j]={{L,1346,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // ...\n    if (!Ivar) {\n      // ...\n      if (getLangOpts().ObjCRuntime.isFragile())\n        Diag(PropertyDiagLoc, diag::err_missing_property_ivar_decl) << PropertyId;"}},
[j]={{M,1346,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // ...\n    if (!Ivar) {\n      // ...\n      if (getLangOpts().ObjCRuntime.isFragile())\n        Diag(PropertyDiagLoc, diag::err_missing_property_ivar_decl) << PropertyId;"}},
[l]={
[l]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:18:13: error: synthesized property \'d1\' must either be named the same as a compatible instance variable or must explicitly name an instance variable","clang/test/SemaObjC/property.m:20:13: error: synthesized property \'prop_id\' must either be named the same as a compatible instance variable or must explicitly name an instance variable"}
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:18:13: error: synthesized property \'d1\' must either be named the same as a compatible instance variable or must explicitly name an instance variable","clang/test/SemaObjC/property.m:20:13: error: synthesized property \'prop_id\' must either be named the same as a compatible instance variable or must explicitly name an instance variable"}
Line 1,079: Line 1,080:
},
},
["err_missing_type_specifier"]={
["err_missing_type_specifier"]={
[i]="err_missing_type_specifier",
[c]="err_missing_type_specifier",
[h]={{nil,s,"a type specifier is required for all declarations"},{S,nil,"C++ requires a type specifier for all declarations"}},
[d]={{nil,s,"a type specifier is required for all declarations"},{S,nil,"C++ requires a type specifier for all declarations"}},
[g]={{nil,s,"a type specifier is required for all declarations"},{S,nil,"C++ requires a type specifier for all declarations"}},
[e]={{nil,s,"a type specifier is required for all declarations"},{S,nil,"C++ requires a type specifier for all declarations"}},
[b]=k,
[f]=k,
[e]="a type specifier is required for all declarations",
[g]="a type specifier is required for all declarations",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={hb,1237025389,gb,fb},
[b]={ib,1237025389,fb,gb},
[j]={{cb,1369,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  // ...\n  case DeclSpec::TST_unspecified:\n    // ...\n    // Unspecified typespec defaults to int in C90.  However, the C90 grammar\n    // [C90 6.5] only allows a decl-spec if there was *some* type-specifier,\n    // type-qualifier, or storage-class-specifier.  If not, emit an extwarn.\n    // Note that the one exception to this is function definitions, which are\n    // allowed to be completely missing a declspec.  This is handled in the\n    // parser already though by it pretending to have seen an \'int\' in this\n    // case.\n    if (S.getLangOpts().isImplicitIntRequired()) {\n    // ...\n    } else if (!DS.hasTypeSpecifier()) {\n      // C99 and C++ require a type specifier.  For example, C99 6.7.2p2 says:\n      // \"At least one type specifier shall be given in the declaration\n      // specifiers in each declaration, and in the specifier-qualifier list in\n      // each struct declaration and type name.\"\n      if (!S.getLangOpts().isImplicitIntAllowed() && !DS.isTypeSpecPipe()) {\n        S.Diag(DeclLoc, diag::err_missing_type_specifier) << DS.getSourceRange();"}},
[j]={{cb,1369,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  // ...\n  case DeclSpec::TST_unspecified:\n    // ...\n    // Unspecified typespec defaults to int in C90.  However, the C90 grammar\n    // [C90 6.5] only allows a decl-spec if there was *some* type-specifier,\n    // type-qualifier, or storage-class-specifier.  If not, emit an extwarn.\n    // Note that the one exception to this is function definitions, which are\n    // allowed to be completely missing a declspec.  This is handled in the\n    // parser already though by it pretending to have seen an \'int\' in this\n    // case.\n    if (S.getLangOpts().isImplicitIntRequired()) {\n    // ...\n    } else if (!DS.hasTypeSpecifier()) {\n      // C99 and C++ require a type specifier.  For example, C99 6.7.2p2 says:\n      // \"At least one type specifier shall be given in the declaration\n      // specifiers in each declaration, and in the specifier-qualifier list in\n      // each struct declaration and type name.\"\n      if (!S.getLangOpts().isImplicitIntAllowed() && !DS.isTypeSpecPipe()) {\n        S.Diag(DeclLoc, diag::err_missing_type_specifier) << DS.getSourceRange();"}},
[l]={
[l]={
Line 1,093: Line 1,094:
},
},
["err_missing_vfs_overlay_file"]={
["err_missing_vfs_overlay_file"]={
[i]="err_missing_vfs_overlay_file",
[c]="err_missing_vfs_overlay_file",
[h]="virtual filesystem overlay file \'%0\' not found",
[d]="virtual filesystem overlay file \'%0\' not found",
[g]="virtual filesystem overlay file \'A\' not found",
[e]="virtual filesystem overlay file \'A\' not found",
[b]=T,
[f]=V,
[e]="virtual filesystem overlay file \'(.*?)\' not found",
[g]="virtual filesystem overlay file \'(.*?)\' not found",
[d]=a,
[h]=a,
[f]=a,
[i]=w,
[c]={"801272a98c71",1393352627,"Add a driver option -ivfsoverlay","Add a driver option -ivfsoverlay\n\nReads the description of a virtual filesystem from a file and overlays\nit over the real file system.\n\nllvm-svn: 202176"},
[b]={"801272a98c71",1393352627,"Add a driver option -ivfsoverlay","Add a driver option -ivfsoverlay\n\nReads the description of a virtual filesystem from a file and overlays\nit over the real file system.\n\nllvm-svn: 202176"},
[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",4691,"IntrusiveRefCntPtr<llvm::vfs::FileSystem> clang::createVFSFromOverlayFiles(ArrayRef<std::string> VFSOverlayFiles, DiagnosticsEngine &Diags, IntrusiveRefCntPtr<llvm::vfs::FileSystem> BaseFS) {\n  // ...\n  // earlier vfs files are on the bottom\n  for (const auto &File : VFSOverlayFiles) {\n    // ...\n    if (!Buffer) {\n      Diags.Report(diag::err_missing_vfs_overlay_file) << File;"}}
[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",4691,"IntrusiveRefCntPtr<llvm::vfs::FileSystem> clang::createVFSFromOverlayFiles(ArrayRef<std::string> VFSOverlayFiles, DiagnosticsEngine &Diags, IntrusiveRefCntPtr<llvm::vfs::FileSystem> BaseFS) {\n  // ...\n  // earlier vfs files are on the bottom\n  for (const auto &File : VFSOverlayFiles) {\n    // ...\n    if (!Buffer) {\n      Diags.Report(diag::err_missing_vfs_overlay_file) << File;"}}
},
},
["err_missing_whitespace_digraph"]={
["err_missing_whitespace_digraph"]={
[i]="err_missing_whitespace_digraph",
[c]="err_missing_whitespace_digraph",
[h]={{nil,w,"found \'<::\' after a %select{template name|addrspace_cast|const_cast|dynamic_cast|reinterpret_cast|static_cast}0 which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"},{n,nil,"found \'<::\' after a %select{template name|const_cast|dynamic_cast|reinterpret_cast|static_cast}0 which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"}},
[d]={{nil,x,"found \'<::\' after a %select{template name|addrspace_cast|const_cast|dynamic_cast|reinterpret_cast|static_cast}0 which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"},{n,nil,"found \'<::\' after a %select{template name|const_cast|dynamic_cast|reinterpret_cast|static_cast}0 which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"}},
[g]={{nil,w,{"found \'<::\' after a ",{"template name","addrspace_cast","const_cast","dynamic_cast","reinterpret_cast","static_cast"}," which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"}},{n,nil,{"found \'<::\' after a ",{"template name","const_cast","dynamic_cast","reinterpret_cast","static_cast"}," which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"}}},
[e]={{nil,x,{"found \'<::\' after a ",{"template name","addrspace_cast","const_cast","dynamic_cast","reinterpret_cast","static_cast"}," which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"}},{n,nil,{"found \'<::\' after a ",{"template name","const_cast","dynamic_cast","reinterpret_cast","static_cast"}," which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"}}},
[b]=k,
[f]=k,
[e]="found \'\\<\\:\\:\' after a (?:template name|addrspace_cast|const_cast|dynamic_cast|reinterpret_cast|static_cast) which forms the digraph \'\\<\\:\' \\(aka \'\\[\'\\) and a \'\\:\', did you mean \'\\< \\:\\:\'\\?",
[g]="found \'\\<\\:\\:\' after a (?:template name|addrspace_cast|const_cast|dynamic_cast|reinterpret_cast|static_cast) which forms the digraph \'\\<\\:\' \\(aka \'\\[\'\\) and a \'\\:\', did you mean \'\\< \\:\\:\'\\?",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"55858499e21e",1302817545,"Detect when the string \"<::\" is found in code after a cast or template name and is interpreted as \"[...","Detect when the string \"<::\" is found in code after a cast or template name and is interpreted as \"[:\" because of the digraph \"<:\". When found, give an error with a fix-it to add whitespace between the \"<\" and \"::\".\n\nPatch by Richard Trieu! Plus a small tweak from me to deal with one of the tokens coming from a macro.\n\nllvm-svn: 129540"},
[b]={"55858499e21e",1302817545,"Detect when the string \"<::\" is found in code after a cast or template name and is interpreted as \"[...","Detect when the string \"<::\" is found in code after a cast or template name and is interpreted as \"[:\" because of the digraph \"<:\". When found, give an error with a fix-it to add whitespace between the \"<\" and \"::\".\n\nPatch by Richard Trieu! Plus a small tweak from me to deal with one of the tokens coming from a macro.\n\nllvm-svn: 129540"},
[j]={{"clang/lib/Parse/ParseExprCXX.cpp",67,"// Suggest fixit for \"<::\" after a cast.\nstatic void FixDigraph(Parser &P, Preprocessor &PP, Token &DigraphToken, Token &ColonToken, tok::TokenKind Kind, bool AtDigraph) {\n  // ...\n  P.Diag(DigraphToken.getLocation(), diag::err_missing_whitespace_digraph) << SelectDigraphErrorMessage(Kind) << FixItHint::CreateReplacement(Range, \"< ::\");"}},
[j]={{"clang/lib/Parse/ParseExprCXX.cpp",67,"// Suggest fixit for \"<::\" after a cast.\nstatic void FixDigraph(Parser &P, Preprocessor &PP, Token &DigraphToken, Token &ColonToken, tok::TokenKind Kind, bool AtDigraph) {\n  // ...\n  P.Diag(DigraphToken.getLocation(), diag::err_missing_whitespace_digraph) << SelectDigraphErrorMessage(Kind) << FixItHint::CreateReplacement(Range, \"< ::\");"}},
[l]={
[l]={
Line 1,118: Line 1,119:
},
},
["err_mixing_cxx_try_seh_try"]={
["err_mixing_cxx_try_seh_try"]={
[i]="err_mixing_cxx_try_seh_try",
[c]="err_mixing_cxx_try_seh_try",
[h]={{nil,S,"cannot use %select{C++ \'try\'|Objective-C \'@try\'}0 in the same function as SEH \'__try\'"},{u,nil,"cannot use C++ \'try\' in the same function as SEH \'__try\'"}},
[d]={{nil,S,"cannot use %select{C++ \'try\'|Objective-C \'@try\'}0 in the same function as SEH \'__try\'"},{u,nil,"cannot use C++ \'try\' in the same function as SEH \'__try\'"}},
[g]={{nil,S,{"cannot use ",{"C++ \'try\'","Objective-C \'@try\'"}," in the same function as SEH \'__try\'"}},{u,nil,"cannot use C++ \'try\' in the same function as SEH \'__try\'"}},
[e]={{nil,S,{"cannot use ",{"C++ \'try\'","Objective-C \'@try\'"}," in the same function as SEH \'__try\'"}},{u,nil,"cannot use C++ \'try\' in the same function as SEH \'__try\'"}},
[b]=k,
[f]=k,
[e]="cannot use (?:C\\+\\+ \'try\'|Objective\\-C \'@try\') in the same function as SEH \'__try\'",
[g]="cannot use (?:C\\+\\+ \'try\'|Objective\\-C \'@try\') in the same function as SEH \'__try\'",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"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\nThis check does not apply when Borland extensions are enabled, as they\nhave a checked in test case indicating that mixed usage of SEH and C++\nis supported.\n\nllvm-svn: 227876"},
[b]={"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\nThis check does not apply when Borland extensions are enabled, as they\nhave a checked in test case indicating that mixed usage of SEH and C++\nis supported.\n\nllvm-svn: 227876"},
[j]={{E,4244,"StmtResult Sema::ActOnObjCAtTryStmt(SourceLocation AtLoc, Stmt *Try, MultiStmtArg CatchStmts, Stmt *Finally) {\n  // ...\n  if (FSI->FirstSEHTryLoc.isValid()) {\n    Diag(AtLoc, diag::err_mixing_cxx_try_seh_try) << 1;"},{E,4494,"/// ActOnCXXTryBlock - Takes a try compound-statement and a number of\n/// handlers and creates a try statement from them.\nStmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, ArrayRef<Stmt *> Handlers) {\n  // ...\n  // C++ try is incompatible with SEH __try.\n  if (!getLangOpts().Borland && FSI->FirstSEHTryLoc.isValid()) {\n    Diag(TryLoc, diag::err_mixing_cxx_try_seh_try) << 0;"},{E,4587,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n  // ...\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(TryLoc, diag::err_mixing_cxx_try_seh_try) << FSI->FirstTryType;"}},
[j]={{F,4244,"StmtResult Sema::ActOnObjCAtTryStmt(SourceLocation AtLoc, Stmt *Try, MultiStmtArg CatchStmts, Stmt *Finally) {\n  // ...\n  if (FSI->FirstSEHTryLoc.isValid()) {\n    Diag(AtLoc, diag::err_mixing_cxx_try_seh_try) << 1;"},{F,4494,"/// ActOnCXXTryBlock - Takes a try compound-statement and a number of\n/// handlers and creates a try statement from them.\nStmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, ArrayRef<Stmt *> Handlers) {\n  // ...\n  // C++ try is incompatible with SEH __try.\n  if (!getLangOpts().Borland && FSI->FirstSEHTryLoc.isValid()) {\n    Diag(TryLoc, diag::err_mixing_cxx_try_seh_try) << 0;"},{F,4587,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n  // ...\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(TryLoc, diag::err_mixing_cxx_try_seh_try) << FSI->FirstTryType;"}},
[l]={
[l]={
["clang/test/SemaCXX/exceptions-seh.mm"]={"clang/test/SemaCXX/exceptions-seh.mm:10:3: error: cannot use Objective-C \'@try\' in the same function as SEH \'__try\'","clang/test/SemaCXX/exceptions-seh.mm:21:3: error: cannot use Objective-C \'@try\' in the same function as SEH \'__try\'"}
["clang/test/SemaCXX/exceptions-seh.mm"]={"clang/test/SemaCXX/exceptions-seh.mm:10:3: error: cannot use Objective-C \'@try\' in the same function as SEH \'__try\'","clang/test/SemaCXX/exceptions-seh.mm:21:3: error: cannot use Objective-C \'@try\' in the same function as SEH \'__try\'"}
Line 1,132: Line 1,133:
},
},
["err_mmap_config_macro_submodule"]={
["err_mmap_config_macro_submodule"]={
[i]="err_mmap_config_macro_submodule",
[c]="err_mmap_config_macro_submodule",
[h]="configuration macros are only allowed in top-level modules",
[d]="configuration macros are only allowed in top-level modules",
[g]="configuration macros are only allowed in top-level modules",
[e]="configuration macros are only allowed in top-level modules",
[b]=k,
[f]=k,
[e]="configuration macros are only allowed in top\\-level modules",
[g]="configuration macros are only allowed in top\\-level modules",
[d]=a,
[h]=a,
[f]=z,
[i]=A,
[c]={"35b13ece231b",1363738925,"<rdar://problem/10796651> Introduce configuration macros into module maps.","<rdar://problem/10796651> Introduce configuration macros into module maps.\n\nConfiguration macros are macros that are intended to alter how a\nmodule works, such that we need to build different module variants\nfor different values of these macros. A module can declare its\nconfiguration macros, in which case we will complain if the definition\nof a configation macro on the command line (or lack thereof) differs\nfrom the current preprocessor state at the point where the module is\nimported. This should eliminate some surprises when enabling modules,\nbecause \"#define CONFIG_MACRO ...\" followed by \"#include\n<module/header.h>\" would silently ignore the CONFIG_MACRO setting. At\nleast it will no longer be silent about it.\n\nConfiguration macros are eventually intended to help reduce the number\nof module variants that need to be built. When the list of\nconfiguration macros for a module is exhaustive, we only need to\nconsider the settings for those macros when building/finding the\nmodule, which can help isolate modules for various project-specific -D\nflags that should never affect how modules are build (but currently do).\n\nllvm-svn: 177466"},
[b]={"35b13ece231b",1363738925,"<rdar://problem/10796651> Introduce configuration macros into module maps.","<rdar://problem/10796651> Introduce configuration macros into module maps.\n\nConfiguration macros are macros that are intended to alter how a\nmodule works, such that we need to build different module variants\nfor different values of these macros. A module can declare its\nconfiguration macros, in which case we will complain if the definition\nof a configation macro on the command line (or lack thereof) differs\nfrom the current preprocessor state at the point where the module is\nimported. This should eliminate some surprises when enabling modules,\nbecause \"#define CONFIG_MACRO ...\" followed by \"#include\n<module/header.h>\" would silently ignore the CONFIG_MACRO setting. At\nleast it will no longer be silent about it.\n\nConfiguration macros are eventually intended to help reduce the number\nof module variants that need to be built. When the list of\nconfiguration macros for a module is exhaustive, we only need to\nconsider the settings for those macros when building/finding the\nmodule, which can help isolate modules for various project-specific -D\nflags that should never affect how modules are build (but currently do).\n\nllvm-svn: 177466"},
[j]={{v,2712,"/// Parse a configuration macro declaration.\n///\n///  module-declaration:\n///    \'config_macros\' attributes[opt] config-macro-list?\n///\n///  config-macro-list:\n///    identifier (\',\' identifier)?\nvoid ModuleMapParser::parseConfigMacros() {\n  // ...\n  // Only top-level modules can have configuration macros.\n  if (ActiveModule->Parent) {\n    Diags.Report(ConfigMacrosLoc, diag::err_mmap_config_macro_submodule);"}}
[j]={{v,2712,"/// Parse a configuration macro declaration.\n///\n///  module-declaration:\n///    \'config_macros\' attributes[opt] config-macro-list?\n///\n///  config-macro-list:\n///    identifier (\',\' identifier)?\nvoid ModuleMapParser::parseConfigMacros() {\n  // ...\n  // Only top-level modules can have configuration macros.\n  if (ActiveModule->Parent) {\n    Diags.Report(ConfigMacrosLoc, diag::err_mmap_config_macro_submodule);"}}
},
},
["err_mmap_conflicting_export_as"]={
["err_mmap_conflicting_export_as"]={
[i]={{nil,t,"err_mmap_conflicting_export_as"}},
[c]={{nil,t,"err_mmap_conflicting_export_as"}},
[h]={{nil,t,"conflicting re-export of module \'%0\' as \'%1\' or \'%2\'"}},
[d]={{nil,t,"conflicting re-export of module \'%0\' as \'%1\' or \'%2\'"}},
[g]={{nil,t,"conflicting re-export of module \'A\' as \'B\' or \'C\'"}},
[e]={{nil,t,"conflicting re-export of module \'A\' as \'B\' or \'C\'"}},
[b]=k,
[f]=k,
[e]="conflicting re\\-export of module \'(.*?)\' as \'(.*?)\' or \'(.*?)\'",
[g]="conflicting re\\-export of module \'(.*?)\' as \'(.*?)\' or \'(.*?)\'",
[d]=a,
[h]=a,
[f]={{nil,t,z}},
[i]={{nil,t,A}},
[c]={"f0b11de279e7",1505432324,"[Module map] Introduce a private module re-export directive.","[Module map] Introduce a private module re-export directive.\n\nIntroduce a new \"export_as\" directive for top-level modules, which\nindicates that the current module is a \"private\" module whose symbols\nwill eventually be exported through the named \"public\" module. This is\nin support of a common pattern in the Darwin ecosystem where a single\npublic framework is constructed of several private frameworks, with\n(currently) header duplication and some support from the linker.\n\nAddresses rdar://problem/34438420.\n\nllvm-svn: 313316"},
[b]={"f0b11de279e7",1505432324,"[Module map] Introduce a private module re-export directive.","[Module map] Introduce a private module re-export directive.\n\nIntroduce a new \"export_as\" directive for top-level modules, which\nindicates that the current module is a \"private\" module whose symbols\nwill eventually be exported through the named \"public\" module. This is\nin support of a common pattern in the Darwin ecosystem where a single\npublic framework is constructed of several private frameworks, with\n(currently) header duplication and some support from the linker.\n\nAddresses rdar://problem/34438420.\n\nllvm-svn: 313316"},
[j]={{v,2641,"/// Parse a module export_as declaration.\n///\n///  export-as-declaration:\n///    \'export_as\' identifier\nvoid ModuleMapParser::parseExportAsDecl() {\n  // ...\n  if (!ActiveModule->ExportAsModule.empty()) {\n    if (ActiveModule->ExportAsModule == Tok.getString()) {\n    // ...\n    } else {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_conflicting_export_as) << ActiveModule->Name << ActiveModule->ExportAsModule << Tok.getString();"}}
[j]={{v,2641,"/// Parse a module export_as declaration.\n///\n///  export-as-declaration:\n///    \'export_as\' identifier\nvoid ModuleMapParser::parseExportAsDecl() {\n  // ...\n  if (!ActiveModule->ExportAsModule.empty()) {\n    if (ActiveModule->ExportAsModule == Tok.getString()) {\n    // ...\n    } else {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_conflicting_export_as) << ActiveModule->Name << ActiveModule->ExportAsModule << Tok.getString();"}}
},
},
["err_mmap_duplicate_header_attribute"]={
["err_mmap_duplicate_header_attribute"]={
[i]={{nil,r,"err_mmap_duplicate_header_attribute"}},
[c]={{nil,r,"err_mmap_duplicate_header_attribute"}},
[h]={{nil,r,"header attribute \'%0\' specified multiple times"}},
[d]={{nil,r,"header attribute \'%0\' specified multiple times"}},
[g]={{nil,r,"header attribute \'A\' specified multiple times"}},
[e]={{nil,r,"header attribute \'A\' specified multiple times"}},
[b]=k,
[f]=k,
[e]="header attribute \'(.*?)\' specified multiple times",
[g]="header attribute \'(.*?)\' specified multiple times",
[d]=a,
[h]=a,
[f]={{nil,r,z}},
[i]={{nil,r,A}},
[c]={"040e12662a67",1496368539,"Support lazy stat\'ing of files referenced by module maps.","Support lazy stat\'ing of files referenced by module maps.\n\nThis patch adds support for a `header` declaration in a module map to specify\ncertain `stat` information (currently, size and mtime) about that header file.\nThis has two purposes:\n\n- It removes the need to eagerly `stat` every file referenced by a module map.\n  Instead, we track a list of unresolved header files with each size / mtime\n  (actually, for simplicity, we track submodules with such headers), and when\n  attempting to look up a header file based on a `FileEntry`, we check if there\n  are any unresolved header directives with that `FileEntry`\'s size / mtime and\n  perform deferred `stat`s if so.\n\n- It permits a preprocessed module to be compiled without the original files\n  being present on disk. The only reason we used to need those files was to get\n  the `stat` information in order to do header -> module lookups when using the\n  module. If we\'re provided with the `stat` information in the preprocessed\n  module, we can avoid requiring the files to exist.\n\nUnlike most `header` directives, if a `header` directive with `stat`\ninformation has no corresponding on-disk file the enclosing module is *not*\nmarked unavailable (so that behavior is consistent regardless of whether we\'ve\nresolved a header directive, and so that preprocessed modules don\'t get marked\nunavailable). We could actually do this for all `header` directives: the only\nreason we mark the module unavailable if headers are missing is to give a\ndiagnostic slightly earlier (rather than waiting until we actually try to build\nthe module / load and validate its .pcm file).\n\nDifferential Revision: https://reviews.llvm.org/D33703\n\nllvm-svn: 304515"},
[b]={"040e12662a67",1496368539,"Support lazy stat\'ing of files referenced by module maps.","Support lazy stat\'ing of files referenced by module maps.\n\nThis patch adds support for a `header` declaration in a module map to specify\ncertain `stat` information (currently, size and mtime) about that header file.\nThis has two purposes:\n\n- It removes the need to eagerly `stat` every file referenced by a module map.\n  Instead, we track a list of unresolved header files with each size / mtime\n  (actually, for simplicity, we track submodules with such headers), and when\n  attempting to look up a header file based on a `FileEntry`, we check if there\n  are any unresolved header directives with that `FileEntry`\'s size / mtime and\n  perform deferred `stat`s if so.\n\n- It permits a preprocessed module to be compiled without the original files\n  being present on disk. The only reason we used to need those files was to get\n  the `stat` information in order to do header -> module lookups when using the\n  module. If we\'re provided with the `stat` information in the preprocessed\n  module, we can avoid requiring the files to exist.\n\nUnlike most `header` directives, if a `header` directive with `stat`\ninformation has no corresponding on-disk file the enclosing module is *not*\nmarked unavailable (so that behavior is consistent regardless of whether we\'ve\nresolved a header directive, and so that preprocessed modules don\'t get marked\nunavailable). We could actually do this for all `header` directives: the only\nreason we mark the module unavailable if headers are missing is to give a\ndiagnostic slightly earlier (rather than waiting until we actually try to build\nthe module / load and validate its .pcm file).\n\nDifferential Revision: https://reviews.llvm.org/D33703\n\nllvm-svn: 304515"},
[j]={{v,2436,"/// 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  // ...\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    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case Size:\n        if (Header.Size)\n          Diags.Report(Loc, diag::err_mmap_duplicate_header_attribute) << Str;"},{v,2449,"/// 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  // ...\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    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case ModTime:\n        if (Header.ModTime)\n          Diags.Report(Loc, diag::err_mmap_duplicate_header_attribute) << Str;"}}
[j]={{v,2436,"/// 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  // ...\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    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case Size:\n        if (Header.Size)\n          Diags.Report(Loc, diag::err_mmap_duplicate_header_attribute) << Str;"},{v,2449,"/// 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  // ...\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    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case ModTime:\n        if (Header.ModTime)\n          Diags.Report(Loc, diag::err_mmap_duplicate_header_attribute) << Str;"}}
},
},
["err_mmap_expected_attribute"]={
["err_mmap_expected_attribute"]={
[i]="err_mmap_expected_attribute",
[c]="err_mmap_expected_attribute",
[h]="expected an attribute name",
[d]="expected an attribute name",
[e]="expected an attribute name",
[f]=k,
[g]="expected an attribute name",
[g]="expected an attribute name",
[b]=k,
[h]=a,
[e]="expected an attribute name",
[i]=A,
[d]=a,
[b]={"a686e1b05df9",1327693953,"Introduce module attributes into the module map grammar, along with a","Introduce module attributes into the module map grammar, along with a\nsingle attribute (\"system\") that allows us to mark a module as being a\n\"system\" module. Each of the headers that makes up a system module is\nconsidered to be a system header, so that we (for example) suppress\nwarnings there.\n\nIf a module is being inferred for a framework, and that framework\ndirectory is within a system frameworks directory, infer it as a\nsystem framework.\n\nllvm-svn: 149143"},
[f]=z,
[c]={"a686e1b05df9",1327693953,"Introduce module attributes into the module map grammar, along with a","Introduce module attributes into the module map grammar, along with a\nsingle attribute (\"system\") that allows us to mark a module as being a\n\"system\" module. Each of the headers that makes up a system module is\nconsidered to be a system header, so that we (for example) suppress\nwarnings there.\n\nIf a module is being inferred for a framework, and that framework\ndirectory is within a system frameworks directory, infer it as a\nsystem framework.\n\nllvm-svn: 149143"},
[j]={{v,2980,"/// 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  // ...\n  while (Tok.is(MMToken::LSquare)) {\n    // ...\n    // Check whether we have an attribute name here.\n    if (!Tok.is(MMToken::Identifier)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_attribute);"}}
[j]={{v,2980,"/// 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  // ...\n  while (Tok.is(MMToken::LSquare)) {\n    // ...\n    // Check whether we have an attribute name here.\n    if (!Tok.is(MMToken::Identifier)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_attribute);"}}
},
},
["err_mmap_expected_config_macro"]={
["err_mmap_expected_config_macro"]={
[i]="err_mmap_expected_config_macro",
[c]="err_mmap_expected_config_macro",
[h]="expected configuration macro name after \',\'",
[d]="expected configuration macro name after \',\'",
[e]="expected configuration macro name after \',\'",
[f]=k,
[g]="expected configuration macro name after \',\'",
[g]="expected configuration macro name after \',\'",
[b]=k,
[h]=a,
[e]="expected configuration macro name after \',\'",
[i]=A,
[d]=a,
[b]={"35b13ece231b",1363738925,"<rdar://problem/10796651> Introduce configuration macros into module maps.","<rdar://problem/10796651> Introduce configuration macros into module maps.\n\nConfiguration macros are macros that are intended to alter how a\nmodule works, such that we need to build different module variants\nfor different values of these macros. A module can declare its\nconfiguration macros, in which case we will complain if the definition\nof a configation macro on the command line (or lack thereof) differs\nfrom the current preprocessor state at the point where the module is\nimported. This should eliminate some surprises when enabling modules,\nbecause \"#define CONFIG_MACRO ...\" followed by \"#include\n<module/header.h>\" would silently ignore the CONFIG_MACRO setting. At\nleast it will no longer be silent about it.\n\nConfiguration macros are eventually intended to help reduce the number\nof module variants that need to be built. When the list of\nconfiguration macros for a module is exhaustive, we only need to\nconsider the settings for those macros when building/finding the\nmodule, which can help isolate modules for various project-specific -D\nflags that should never affect how modules are build (but currently do).\n\nllvm-svn: 177466"},
[f]=z,
[c]={"35b13ece231b",1363738925,"<rdar://problem/10796651> Introduce configuration macros into module maps.","<rdar://problem/10796651> Introduce configuration macros into module maps.\n\nConfiguration macros are macros that are intended to alter how a\nmodule works, such that we need to build different module variants\nfor different values of these macros. A module can declare its\nconfiguration macros, in which case we will complain if the definition\nof a configation macro on the command line (or lack thereof) differs\nfrom the current preprocessor state at the point where the module is\nimported. This should eliminate some surprises when enabling modules,\nbecause \"#define CONFIG_MACRO ...\" followed by \"#include\n<module/header.h>\" would silently ignore the CONFIG_MACRO setting. At\nleast it will no longer be silent about it.\n\nConfiguration macros are eventually intended to help reduce the number\nof module variants that need to be built. When the list of\nconfiguration macros for a module is exhaustive, we only need to\nconsider the settings for those macros when building/finding the\nmodule, which can help isolate modules for various project-specific -D\nflags that should never affect how modules are build (but currently do).\n\nllvm-svn: 177466"},
[j]={{v,2744,"/// Parse a configuration macro declaration.\n///\n///  module-declaration:\n///    \'config_macros\' attributes[opt] config-macro-list?\n///\n///  config-macro-list:\n///    identifier (\',\' identifier)?\nvoid ModuleMapParser::parseConfigMacros() {\n  // ...\n  do {\n    // ...\n    // We expect to see a macro name here.\n    // FIXME: Support macros with the same name as a keyword here.\n    if (!Tok.is(MMToken::Identifier)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_config_macro);"}}
[j]={{v,2744,"/// Parse a configuration macro declaration.\n///\n///  module-declaration:\n///    \'config_macros\' attributes[opt] config-macro-list?\n///\n///  config-macro-list:\n///    identifier (\',\' identifier)?\nvoid ModuleMapParser::parseConfigMacros() {\n  // ...\n  do {\n    // ...\n    // We expect to see a macro name here.\n    // FIXME: Support macros with the same name as a keyword here.\n    if (!Tok.is(MMToken::Identifier)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_config_macro);"}}
},
},
["err_mmap_expected_conflicts_comma"]={
["err_mmap_expected_conflicts_comma"]={
[i]="err_mmap_expected_conflicts_comma",
[c]="err_mmap_expected_conflicts_comma",
[h]="expected \',\' after conflicting module name",
[d]="expected \',\' after conflicting module name",
[e]="expected \',\' after conflicting module name",
[f]=k,
[g]="expected \',\' after conflicting module name",
[g]="expected \',\' after conflicting module name",
[b]=k,
[h]=a,
[e]="expected \',\' after conflicting module name",
[i]=A,
[d]=a,
[b]={"fb9126578ec3",1363813835,"<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-im...","<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-imported module conflicts with an already-imported module.\n\nllvm-svn: 177577"},
[f]=z,
[c]={"fb9126578ec3",1363813835,"<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-im...","<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-imported module conflicts with an already-imported module.\n\nllvm-svn: 177577"},
[j]={{v,2787,"/// Parse a conflict declaration.\n///\n///  module-declaration:\n///    \'conflict\' module-id \',\' string-literal\nvoid ModuleMapParser::parseConflict() {\n  // ...\n  // Parse the \',\'.\n  if (!Tok.is(MMToken::Comma)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_conflicts_comma) << SourceRange(ConflictLoc);"}}
[j]={{v,2787,"/// Parse a conflict declaration.\n///\n///  module-declaration:\n///    \'conflict\' module-id \',\' string-literal\nvoid ModuleMapParser::parseConflict() {\n  // ...\n  // Parse the \',\'.\n  if (!Tok.is(MMToken::Comma)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_conflicts_comma) << SourceRange(ConflictLoc);"}}
},
},
["err_mmap_expected_conflicts_message"]={
["err_mmap_expected_conflicts_message"]={
[i]="err_mmap_expected_conflicts_message",
[c]="err_mmap_expected_conflicts_message",
[h]="expected a message describing the conflict with \'%0\'",
[d]="expected a message describing the conflict with \'%0\'",
[g]="expected a message describing the conflict with \'A\'",
[e]="expected a message describing the conflict with \'A\'",
[b]=k,
[f]=k,
[e]="expected a message describing the conflict with \'(.*?)\'",
[g]="expected a message describing the conflict with \'(.*?)\'",
[d]=a,
[h]=a,
[f]=z,
[i]=A,
[c]={"fb9126578ec3",1363813835,"<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-im...","<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-imported module conflicts with an already-imported module.\n\nllvm-svn: 177577"},
[b]={"fb9126578ec3",1363813835,"<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-im...","<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-imported module conflicts with an already-imported module.\n\nllvm-svn: 177577"},
[j]={{v,2795,"/// Parse a conflict declaration.\n///\n///  module-declaration:\n///    \'conflict\' module-id \',\' string-literal\nvoid ModuleMapParser::parseConflict() {\n  // ...\n  // Parse the message.\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_conflicts_message) << formatModuleId(Conflict.Id);"}}
[j]={{v,2795,"/// Parse a conflict declaration.\n///\n///  module-declaration:\n///    \'conflict\' module-id \',\' string-literal\nvoid ModuleMapParser::parseConflict() {\n  // ...\n  // Parse the message.\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_conflicts_message) << formatModuleId(Conflict.Id);"}}
},
},
["err_mmap_expected_export_wildcard"]={
["err_mmap_expected_export_wildcard"]={
[i]="err_mmap_expected_export_wildcard",
[c]="err_mmap_expected_export_wildcard",
[h]="only \'*\' can be exported from an inferred submodule",
[d]="only \'*\' can be exported from an inferred submodule",
[g]="only \'*\' can be exported from an inferred submodule",
[e]="only \'*\' can be exported from an inferred submodule",
[b]=k,
[f]=k,
[e]="only \'\\*\' can be exported from an inferred submodule",
[g]="only \'\\*\' can be exported from an inferred submodule",
[d]=a,
[h]=a,
[f]=z,
[i]=A,
[c]={Dc,1323124064,qc,Cc},
[b]={Cc,1323124064,Ec,zc},
[j]={{v,2933,"/// 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  // ...\n  do {\n    // ...\n    case MMToken::ExportKeyword:\n      // ...\n      if (Tok.is(MMToken::Star))\n      // ...\n      else\n        Diags.Report(Tok.getLocation(), diag::err_mmap_expected_export_wildcard);"}}
[j]={{v,2933,"/// 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  // ...\n  do {\n    // ...\n    case MMToken::ExportKeyword:\n      // ...\n      if (Tok.is(MMToken::Star))\n      // ...\n      else\n        Diags.Report(Tok.getLocation(), diag::err_mmap_expected_export_wildcard);"}}
},
},
["err_mmap_expected_feature"]={
["err_mmap_expected_feature"]={
[i]="err_mmap_expected_feature",
[c]="err_mmap_expected_feature",
[h]="expected a feature name",
[d]="expected a feature name",
[e]="expected a feature name",
[f]=k,
[g]="expected a feature name",
[g]="expected a feature name",
[b]=k,
[h]=a,
[e]="expected a feature name",
[i]=A,
[d]=a,
[b]={"1fb5c3a63a88",1325304344,"Implement support for module requirements, which indicate the language","Implement support for module requirements, which indicate the language\nfeatures needed for a particular module to be available. This allows\nmixed-language modules, where certain headers only work under some\nlanguage variants (e.g., in C++, std.tuple might only be available in\nC++11 mode).\n\nllvm-svn: 147387"},
[f]=z,
[c]={"1fb5c3a63a88",1325304344,"Implement support for module requirements, which indicate the language","Implement support for module requirements, which indicate the language\nfeatures needed for a particular module to be available. This allows\nmixed-language modules, where certain headers only work under some\nlanguage variants (e.g., in C++, std.tuple might only be available in\nC++11 mode).\n\nllvm-svn: 147387"},
[j]={{v,2325,"/// Parse a requires declaration.\n///\n///  requires-declaration:\n///    \'requires\' feature-list\n///\n///  feature-list:\n///    feature \',\' feature-list\n///    feature\n///\n///  feature:\n///    \'!\'[opt] identifier\nvoid ModuleMapParser::parseRequiresDecl() {\n  // ...\n  // Parse the feature-list.\n  do {\n    // ...\n    if (!Tok.is(MMToken::Identifier)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_feature);"}}
[j]={{v,2325,"/// Parse a requires declaration.\n///\n///  requires-declaration:\n///    \'requires\' feature-list\n///\n///  feature-list:\n///    feature \',\' feature-list\n///    feature\n///\n///  feature:\n///    \'!\'[opt] identifier\nvoid ModuleMapParser::parseRequiresDecl() {\n  // ...\n  // Parse the feature-list.\n  do {\n    // ...\n    if (!Tok.is(MMToken::Identifier)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_feature);"}}
},
},
["err_mmap_expected_header"]={
["err_mmap_expected_header"]={
[i]="err_mmap_expected_header",
[c]="err_mmap_expected_header",
[h]="expected a header name after \'%0\'",
[d]="expected a header name after \'%0\'",
[g]="expected a header name after \'A\'",
[e]="expected a header name after \'A\'",
[b]=k,
[f]=k,
[e]="expected a header name after \'(.*?)\'",
[g]="expected a header name after \'(.*?)\'",
[d]=a,
[h]=a,
[f]=z,
[i]=A,
[c]={Lb,1321038628,Gb,Db},
[b]={Ob,1321038628,Db,Cb},
[j]={{v,2391,"/// 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  // ...\n  if (LeadingToken != MMToken::HeaderKeyword) {\n    if (!Tok.is(MMToken::HeaderKeyword)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_header) << (LeadingToken == MMToken::PrivateKeyword ? \"private\" : LeadingToken == MMToken::ExcludeKeyword ? \"exclude\" : LeadingToken == MMToken::TextualKeyword ? \"textual\" : \"umbrella\");"},{v,2402,"/// 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  // ...\n  // Parse the header name.\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_header) << \"header\";"},{v,2497,"/// Parse an umbrella directory declaration.\n///\n///  umbrella-dir-declaration:\n///    umbrella string-literal\nvoid ModuleMapParser::parseUmbrellaDirDecl(SourceLocation UmbrellaLoc) {\n  // Parse the directory name.\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_header) << \"umbrella\";"}}
[j]={{v,2391,"/// 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  // ...\n  if (LeadingToken != MMToken::HeaderKeyword) {\n    if (!Tok.is(MMToken::HeaderKeyword)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_header) << (LeadingToken == MMToken::PrivateKeyword ? \"private\" : LeadingToken == MMToken::ExcludeKeyword ? \"exclude\" : LeadingToken == MMToken::TextualKeyword ? \"textual\" : \"umbrella\");"},{v,2402,"/// 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  // ...\n  // Parse the header name.\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_header) << \"header\";"},{v,2497,"/// Parse an umbrella directory declaration.\n///\n///  umbrella-dir-declaration:\n///    umbrella string-literal\nvoid ModuleMapParser::parseUmbrellaDirDecl(SourceLocation UmbrellaLoc) {\n  // Parse the directory name.\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_header) << \"umbrella\";"}}
},
},
["err_mmap_expected_header_attribute"]={
["err_mmap_expected_header_attribute"]={
[i]={{nil,r,"err_mmap_expected_header_attribute"}},
[c]={{nil,r,"err_mmap_expected_header_attribute"}},
[h]={{nil,r,"expected a header attribute name (\'size\' or \'mtime\')"}},
[d]={{nil,r,"expected a header attribute name (\'size\' or \'mtime\')"}},
[g]={{nil,r,"expected a header attribute name (\'size\' or \'mtime\')"}},
[e]={{nil,r,"expected a header attribute name (\'size\' or \'mtime\')"}},
[b]=k,
[f]=k,
[e]="expected a header attribute name \\(\'size\' or \'mtime\'\\)",
[g]="expected a header attribute name \\(\'size\' or \'mtime\'\\)",
[d]=a,
[h]=a,
[f]={{nil,r,z}},
[i]={{nil,r,A}},
[c]={"040e12662a67",1496368539,"Support lazy stat\'ing of files referenced by module maps.","Support lazy stat\'ing of files referenced by module maps.\n\nThis patch adds support for a `header` declaration in a module map to specify\ncertain `stat` information (currently, size and mtime) about that header file.\nThis has two purposes:\n\n- It removes the need to eagerly `stat` every file referenced by a module map.\n  Instead, we track a list of unresolved header files with each size / mtime\n  (actually, for simplicity, we track submodules with such headers), and when\n  attempting to look up a header file based on a `FileEntry`, we check if there\n  are any unresolved header directives with that `FileEntry`\'s size / mtime and\n  perform deferred `stat`s if so.\n\n- It permits a preprocessed module to be compiled without the original files\n  being present on disk. The only reason we used to need those files was to get\n  the `stat` information in order to do header -> module lookups when using the\n  module. If we\'re provided with the `stat` information in the preprocessed\n  module, we can avoid requiring the files to exist.\n\nUnlike most `header` directives, if a `header` directive with `stat`\ninformation has no corresponding on-disk file the enclosing module is *not*\nmarked unavailable (so that behavior is consistent regardless of whether we\'ve\nresolved a header directive, and so that preprocessed modules don\'t get marked\nunavailable). We could actually do this for all `header` directives: the only\nreason we mark the module unavailable if headers are missing is to give a\ndiagnostic slightly earlier (rather than waiting until we actually try to build\nthe module / load and validate its .pcm file).\n\nDifferential Revision: https://reviews.llvm.org/D33703\n\nllvm-svn: 304515"},
[b]={"040e12662a67",1496368539,"Support lazy stat\'ing of files referenced by module maps.","Support lazy stat\'ing of files referenced by module maps.\n\nThis patch adds support for a `header` declaration in a module map to specify\ncertain `stat` information (currently, size and mtime) about that header file.\nThis has two purposes:\n\n- It removes the need to eagerly `stat` every file referenced by a module map.\n  Instead, we track a list of unresolved header files with each size / mtime\n  (actually, for simplicity, we track submodules with such headers), and when\n  attempting to look up a header file based on a `FileEntry`, we check if there\n  are any unresolved header directives with that `FileEntry`\'s size / mtime and\n  perform deferred `stat`s if so.\n\n- It permits a preprocessed module to be compiled without the original files\n  being present on disk. The only reason we used to need those files was to get\n  the `stat` information in order to do header -> module lookups when using the\n  module. If we\'re provided with the `stat` information in the preprocessed\n  module, we can avoid requiring the files to exist.\n\nUnlike most `header` directives, if a `header` directive with `stat`\ninformation has no corresponding on-disk file the enclosing module is *not*\nmarked unavailable (so that behavior is consistent regardless of whether we\'ve\nresolved a header directive, and so that preprocessed modules don\'t get marked\nunavailable). We could actually do this for all `header` directives: the only\nreason we mark the module unavailable if headers are missing is to give a\ndiagnostic slightly earlier (rather than waiting until we actually try to build\nthe module / load and validate its .pcm file).\n\nDifferential Revision: https://reviews.llvm.org/D33703\n\nllvm-svn: 304515"},
[j]={{v,2461,"/// 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  // ...\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    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case Unknown:\n        Diags.Report(Loc, diag::err_mmap_expected_header_attribute);"}}
[j]={{v,2461,"/// 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  // ...\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    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case Unknown:\n        Diags.Report(Loc, diag::err_mmap_expected_header_attribute);"}}
},
},
["err_mmap_expected_inferred_member"]={
["err_mmap_expected_inferred_member"]={
[i]="err_mmap_expected_inferred_member",
[c]="err_mmap_expected_inferred_member",
[h]="expected %select{module exclusion with \'exclude\'|\'export *\'}0",
[d]="expected %select{module exclusion with \'exclude\'|\'export *\'}0",
[g]={{nil,nil,{"expected ",{"module exclusion with \'exclude\'","\'export *\'"}}}},
[e]={{nil,nil,{"expected ",{"module exclusion with \'exclude\'","\'export *\'"}}}},
[b]=k,
[f]=k,
[e]="expected (?:module exclusion with \'exclude\'|\'export \\*\')",
[g]="expected (?:module exclusion with \'exclude\'|\'export \\*\')",
[d]=a,
[h]=a,
[f]=z,
[i]=A,
[c]={"9194a91dc928",1352230780,"Introduce inferred framework modules into the module map file,","Introduce inferred framework modules into the module map file,\nallowing a module map to be placed one level above the \'.framework\'\ndirectories to specify that all .frameworks within that directory can\nbe inferred as framework modules. One can also specifically exclude\nframeworks known not to work.\n\nThis makes explicit (and more restricted) behavior modules have had\n\"forever\", where *any* .framework was assumed to be able to be built\nas a module. That\'s not necessarily true, so we white-list directories\n(with exclusions) when those directories have been audited.\n\nllvm-svn: 167482"},
[b]={"9194a91dc928",1352230780,"Introduce inferred framework modules into the module map file,","Introduce inferred framework modules into the module map file,\nallowing a module map to be placed one level above the \'.framework\'\ndirectories to specify that all .frameworks within that directory can\nbe inferred as framework modules. One can also specifically exclude\nframeworks known not to work.\n\nThis makes explicit (and more restricted) behavior modules have had\n\"forever\", where *any* .framework was assumed to be able to be built\nas a module. That\'s not necessarily true, so we white-list directories\n(with exclusions) when those directories have been audited.\n\nllvm-svn: 167482"},
[j]={{v,2902,"/// 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  // ...\n  do {\n    // ...\n    case MMToken::ExcludeKeyword:\n      if (ActiveModule) {\n        Diags.Report(Tok.getLocation(), diag::err_mmap_expected_inferred_member) << (ActiveModule != nullptr);"},{v,2922,"/// 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  // ...\n  do {\n    // ...\n    case MMToken::ExportKeyword:\n      if (!ActiveModule) {\n        Diags.Report(Tok.getLocation(), diag::err_mmap_expected_inferred_member) << (ActiveModule != nullptr);"},{v,2943,"/// 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  // ...\n  do {\n    // ...\n    case MMToken::ExplicitKeyword:\n    case MMToken::ModuleKeyword:\n    case MMToken::HeaderKeyword:\n    case MMToken::PrivateKeyword:\n    case MMToken::UmbrellaKeyword:\n    default:\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_inferred_member) << (ActiveModule != nullptr);"}}
[j]={{v,2902,"/// 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  // ...\n  do {\n    // ...\n    case MMToken::ExcludeKeyword:\n      if (ActiveModule) {\n        Diags.Report(Tok.getLocation(), diag::err_mmap_expected_inferred_member) << (ActiveModule != nullptr);"},{v,2922,"/// 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  // ...\n  do {\n    // ...\n    case MMToken::ExportKeyword:\n      if (!ActiveModule) {\n        Diags.Report(Tok.getLocation(), diag::err_mmap_expected_inferred_member) << (ActiveModule != nullptr);"},{v,2943,"/// 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  // ...\n  do {\n    // ...\n    case MMToken::ExplicitKeyword:\n    case MMToken::ModuleKeyword:\n    case MMToken::HeaderKeyword:\n    case MMToken::PrivateKeyword:\n    case MMToken::UmbrellaKeyword:\n    default:\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_inferred_member) << (ActiveModule != nullptr);"}}
},
},
["err_mmap_expected_lbrace"]={
["err_mmap_expected_lbrace"]={
[i]="err_mmap_expected_lbrace",
[c]="err_mmap_expected_lbrace",
[h]="expected \'{\' to start module \'%0\'",
[d]="expected \'{\' to start module \'%0\'",
[g]="expected \'{\' to start module \'A\'",
[e]="expected \'{\' to start module \'A\'",
[b]=k,
[f]=k,
[e]="expected \'\\{\' to start module \'(.*?)\'",
[g]="expected \'\\{\' to start module \'(.*?)\'",
[d]=a,
[h]=a,
[f]=z,
[i]=A,
[c]={Lb,1321038628,Gb,Db},
[b]={Ob,1321038628,Db,Cb},
[j]={{v,2009,"/// 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  // ...\n  // Parse the opening brace.\n  if (!Tok.is(MMToken::LBrace)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_lbrace) << ModuleName;"}}
[j]={{v,2009,"/// 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  // ...\n  // Parse the opening brace.\n  if (!Tok.is(MMToken::LBrace)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_lbrace) << ModuleName;"}}
},
},
["err_mmap_expected_lbrace_wildcard"]={
["err_mmap_expected_lbrace_wildcard"]={
[i]="err_mmap_expected_lbrace_wildcard",
[c]="err_mmap_expected_lbrace_wildcard",
[h]="expected \'{\' to start inferred submodule",
[d]="expected \'{\' to start inferred submodule",
[g]="expected \'{\' to start inferred submodule",
[e]="expected \'{\' to start inferred submodule",
[b]=k,
[f]=k,
[e]="expected \'\\{\' to start inferred submodule",
[g]="expected \'\\{\' to start inferred submodule",
[d]=a,
[h]=a,
[f]=z,
[i]=A,
[c]={Dc,1323124064,qc,Cc},
[b]={Cc,1323124064,Ec,zc},
[j]={{v,2885,"/// 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  // ...\n  // Parse the opening brace.\n  if (!Tok.is(MMToken::LBrace)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_lbrace_wildcard);"}}
[j]={{v,2885,"/// 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  // ...\n  // Parse the opening brace.\n  if (!Tok.is(MMToken::LBrace)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_lbrace_wildcard);"}}
},
},
["err_mmap_expected_library_name"]={
["err_mmap_expected_library_name"]={
[i]="err_mmap_expected_library_name",
[c]="err_mmap_expected_library_name",
[h]="expected %select{library|framework}0 name as a string",
[d]="expected %select{library|framework}0 name as a string",
[g]={{nil,nil,{"expected ",{"library","framework"}," name as a string"}}},
[e]={{nil,nil,{"expected ",{"library","framework"}," name as a string"}}},
[b]=k,
[f]=k,
[e]="expected (?:library|framework) name as a string",
[g]="expected (?:library|framework) name as a string",
[d]=a,
[h]=a,
[f]=z,
[i]=A,
[c]={"6ddfca91e04e",1358184060,"Implement parsing, AST, (de-)serialization, and placeholder global","Implement parsing, AST, (de-)serialization, and placeholder global\nmetadata for linking against the libraries/frameworks for imported\nmodules.\n\nThe module map language is extended with a new \"link\" directive that\nspecifies what library or framework to link against when a module is\nimported, e.g.,\n\n  link \"clangAST\"\n\nor\n\n  link framework \"MyFramework\"\n\nImporting the corresponding module (or any of its submodules) will\neventually link against the named library/framework.\n\nFor now, I\'ve added some placeholder global metadata that encodes the\nimported libraries/frameworks, so that we can test that this\ninformation gets through to the IR. The format of the data is still\nunder discussion.\n\nllvm-svn: 172437"},
[b]={"6ddfca91e04e",1358184060,"Implement parsing, AST, (de-)serialization, and placeholder global","Implement parsing, AST, (de-)serialization, and placeholder global\nmetadata for linking against the libraries/frameworks for imported\nmodules.\n\nThe module map language is extended with a new \"link\" directive that\nspecifies what library or framework to link against when a module is\nimported, e.g.,\n\n  link \"clangAST\"\n\nor\n\n  link framework \"MyFramework\"\n\nImporting the corresponding module (or any of its submodules) will\neventually link against the named library/framework.\n\nFor now, I\'ve added some placeholder global metadata that encodes the\nimported libraries/frameworks, so that we can test that this\ninformation gets through to the IR. The format of the data is still\nunder discussion.\n\nllvm-svn: 172437"},
[j]={{v,2687,"/// Parse a link declaration.\n///\n///  module-declaration:\n///    \'link\' \'framework\'[opt] string-literal\nvoid ModuleMapParser::parseLinkDecl() {\n  // ...\n  // Parse the library name\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_library_name) << IsFramework << SourceRange(LinkLoc);"}}
[j]={{v,2687,"/// Parse a link declaration.\n///\n///  module-declaration:\n///    \'link\' \'framework\'[opt] string-literal\nvoid ModuleMapParser::parseLinkDecl() {\n  // ...\n  // Parse the library name\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_library_name) << IsFramework << SourceRange(LinkLoc);"}}
},
},
["err_mmap_expected_member"]={
["err_mmap_expected_member"]={
[i]="err_mmap_expected_member",
[c]="err_mmap_expected_member",
[h]="expected umbrella, header, submodule, or module export",
[d]="expected umbrella, header, submodule, or module export",
[e]="expected umbrella, header, submodule, or module export",
[f]=k,
[g]="expected umbrella, header, submodule, or module export",
[g]="expected umbrella, header, submodule, or module export",
[b]=k,
[h]=a,
[e]="expected umbrella, header, submodule, or module export",
[i]=A,
[d]=a,
[b]={Ob,1321038628,Db,Cb},
[f]=z,
[c]={Lb,1321038628,Gb,Db},
[j]={{v,2188,"/// 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  // ...\n  do {\n    // ...\n    default:\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_member);"}}
[j]={{v,2188,"/// 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  // ...\n  do {\n    // ...\n    default:\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_member);"}}
},
},
["err_mmap_expected_mmap_file"]={
["err_mmap_expected_mmap_file"]={
[i]="err_mmap_expected_mmap_file",
[c]="err_mmap_expected_mmap_file",
[h]="expected a module map file name",
[d]="expected a module map file name",
[e]="expected a module map file name",
[f]=k,
[g]="expected a module map file name",
[g]="expected a module map file name",
[b]=k,
[h]=a,
[e]="expected a module map file name",
[i]=A,
[d]=a,
[b]={"97292843d0aa",1378884044,"Support for modular module-map-files","Support for modular module-map-files\n\nThis patch is the first step to make module-map-files modular (instead\nof requiring a single \"module.map\"-file per include directory). This\nstep adds a new \"extern module\" declaration that enables\nmodule-map-files to reference one another along with a very basic\nimplementation.\n\nThe next steps are:\n\n* Combine this with the use-declaration (from\n  http://llvm-reviews.chandlerc.com/D1546) in order to only load module\n  map files required for a specific compilation.\n* Add an additional flag to start with a specific module-map-file (instead\n  of requiring there to be at least one \"module.map\").\n\nReview: http://llvm-reviews.chandlerc.com/D1637\nllvm-svn: 190497"},
[f]=z,
[c]={"97292843d0aa",1378884044,"Support for modular module-map-files","Support for modular module-map-files\n\nThis patch is the first step to make module-map-files modular (instead\nof requiring a single \"module.map\"-file per include directory). This\nstep adds a new \"extern module\" declaration that enables\nmodule-map-files to reference one another along with a very basic\nimplementation.\n\nThe next steps are:\n\n* Combine this with the use-declaration (from\n  http://llvm-reviews.chandlerc.com/D1546) in order to only load module\n  map files required for a specific compilation.\n* Add an additional flag to start with a specific module-map-file (instead\n  of requiring there to be at least one \"module.map\").\n\nReview: http://llvm-reviews.chandlerc.com/D1637\nllvm-svn: 190497"},
[j]={{v,2247,"/// Parse an extern module declaration.\n///\n///  extern module-declaration:\n///    \'extern\' \'module\' module-id string-literal\nvoid ModuleMapParser::parseExternModuleDecl() {\n  // ...\n  // Parse the referenced module map file name.\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_mmap_file);"}}
[j]={{v,2247,"/// Parse an extern module declaration.\n///\n///  extern module-declaration:\n///    \'extern\' \'module\' module-id string-literal\nvoid ModuleMapParser::parseExternModuleDecl() {\n  // ...\n  // Parse the referenced module map file name.\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_mmap_file);"}}
},
},
["err_mmap_expected_module"]={
["err_mmap_expected_module"]={
[i]="err_mmap_expected_module",
[c]="err_mmap_expected_module",
[h]="expected module declaration",
[d]="expected module declaration",
[e]="expected module declaration",
[f]=k,
[g]="expected module declaration",
[g]="expected module declaration",
[b]=k,
[h]=a,
[e]="expected module declaration",
[i]=A,
[d]=a,
[b]={Ob,1321038628,Db,Cb},
[f]=z,
[c]={Lb,1321038628,Gb,Db},
[j]={{v,1933,"/// 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  // ...\n  // Parse \'module\' keyword.\n  if (!Tok.is(MMToken::ModuleKeyword)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_module);"},{v,2231,"/// Parse an extern module declaration.\n///\n///  extern module-declaration:\n///    \'extern\' \'module\' module-id string-literal\nvoid ModuleMapParser::parseExternModuleDecl() {\n  // ...\n  // Parse \'module\' keyword.\n  if (!Tok.is(MMToken::ModuleKeyword)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_module);"},{v,3074,"/// Parse a module map file.\n///\n///  module-map-file:\n///    module-declaration*\nbool ModuleMapParser::parseModuleMapFile() {\n  do {\n    // ...\n    case MMToken::Comma:\n    case MMToken::ConfigMacros:\n    case MMToken::Conflict:\n    case MMToken::Exclaim:\n    case MMToken::ExcludeKeyword:\n    case MMToken::ExportKeyword:\n    case MMToken::ExportAsKeyword:\n    case MMToken::HeaderKeyword:\n    case MMToken::Identifier:\n    case MMToken::LBrace:\n    case MMToken::LinkKeyword:\n    case MMToken::LSquare:\n    case MMToken::Period:\n    case MMToken::PrivateKeyword:\n    case MMToken::RBrace:\n    case MMToken::RSquare:\n    case MMToken::RequiresKeyword:\n    case MMToken::Star:\n    case MMToken::StringLiteral:\n    case MMToken::IntegerLiteral:\n    case MMToken::TextualKeyword:\n    case MMToken::UmbrellaKeyword:\n    case MMToken::UseKeyword:\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_module);"}}
[j]={{v,1933,"/// 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  // ...\n  // Parse \'module\' keyword.\n  if (!Tok.is(MMToken::ModuleKeyword)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_module);"},{v,2231,"/// Parse an extern module declaration.\n///\n///  extern module-declaration:\n///    \'extern\' \'module\' module-id string-literal\nvoid ModuleMapParser::parseExternModuleDecl() {\n  // ...\n  // Parse \'module\' keyword.\n  if (!Tok.is(MMToken::ModuleKeyword)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_module);"},{v,3074,"/// Parse a module map file.\n///\n///  module-map-file:\n///    module-declaration*\nbool ModuleMapParser::parseModuleMapFile() {\n  do {\n    // ...\n    case MMToken::Comma:\n    case MMToken::ConfigMacros:\n    case MMToken::Conflict:\n    case MMToken::Exclaim:\n    case MMToken::ExcludeKeyword:\n    case MMToken::ExportKeyword:\n    case MMToken::ExportAsKeyword:\n    case MMToken::HeaderKeyword:\n    case MMToken::Identifier:\n    case MMToken::LBrace:\n    case MMToken::LinkKeyword:\n    case MMToken::LSquare:\n    case MMToken::Period:\n    case MMToken::PrivateKeyword:\n    case MMToken::RBrace:\n    case MMToken::RSquare:\n    case MMToken::RequiresKeyword:\n    case MMToken::Star:\n    case MMToken::StringLiteral:\n    case MMToken::IntegerLiteral:\n    case MMToken::TextualKeyword:\n    case MMToken::UmbrellaKeyword:\n    case MMToken::UseKeyword:\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_module);"}}
},
},
["err_mmap_expected_module_name"]={
["err_mmap_expected_module_name"]={
[i]="err_mmap_expected_module_name",
[c]="err_mmap_expected_module_name",
[h]="expected module name",
[d]="expected module name",
[e]="expected module name",
[f]=k,
[g]="expected module name",
[g]="expected module name",
[b]=k,
[h]=a,
[e]="expected module name",
[i]=A,
[d]=a,
[b]={Ob,1321038628,Db,Cb},
[f]=z,
[c]={Lb,1321038628,Gb,Db},
[j]={{v,1791,"/// Parse a module-id.\n///\n///  module-id:\n///    identifier\n///    identifier \'.\' module-id\n///\n/// \\returns true if an error occurred, false otherwise.\nbool ModuleMapParser::parseModuleId(ModuleId &Id) {\n  // ...\n  do {\n    if (Tok.is(MMToken::Identifier) || Tok.is(MMToken::StringLiteral)) {\n    // ...\n    } else {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_module_name);"}},
[j]={{v,1791,"/// Parse a module-id.\n///\n///  module-id:\n///    identifier\n///    identifier \'.\' module-id\n///\n/// \\returns true if an error occurred, false otherwise.\nbool ModuleMapParser::parseModuleId(ModuleId &Id) {\n  // ...\n  do {\n    if (Tok.is(MMToken::Identifier) || Tok.is(MMToken::StringLiteral)) {\n    // ...\n    } else {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_module_name);"}},
[l]={
[l]={
Line 1,344: Line 1,345:
},
},
["err_mmap_expected_rbrace"]={
["err_mmap_expected_rbrace"]={
[i]="err_mmap_expected_rbrace",
[c]="err_mmap_expected_rbrace",
[h]="expected \'}\'",
[d]="expected \'}\'",
[g]="expected \'}\'",
[e]="expected \'}\'",
[b]=k,
[f]=k,
[e]="expected \'\\}\'",
[g]="expected \'\\}\'",
[d]=a,
[h]=a,
[f]=z,
[i]=A,
[c]={Lb,1321038628,Gb,Db},
[b]={Ob,1321038628,Db,Cb},
[j]={{v,2056,"/// 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  // ...\n  if (Module *Existing = Map.lookupModuleQualified(ModuleName, ActiveModule)) {\n    // ...\n    if (LoadedFromASTFile || Inferred || PartOfFramework || ParsedAsMainInput) {\n      // ...\n      if (Tok.is(MMToken::RBrace))\n      // ...\n      else {\n        Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rbrace);"},{v,2197,"/// 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  // ...\n  if (Tok.is(MMToken::RBrace))\n  // ...\n  else {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rbrace);"},{v,2470,"/// 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  // ...\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    // ...\n    if (Tok.is(MMToken::RBrace))\n    // ...\n    else {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rbrace);"},{v,2953,"/// 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  // ...\n  if (Tok.is(MMToken::RBrace))\n  // ...\n  else {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rbrace);"}},
[j]={{v,2056,"/// 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  // ...\n  if (Module *Existing = Map.lookupModuleQualified(ModuleName, ActiveModule)) {\n    // ...\n    if (LoadedFromASTFile || Inferred || PartOfFramework || ParsedAsMainInput) {\n      // ...\n      if (Tok.is(MMToken::RBrace))\n      // ...\n      else {\n        Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rbrace);"},{v,2197,"/// 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  // ...\n  if (Tok.is(MMToken::RBrace))\n  // ...\n  else {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rbrace);"},{v,2470,"/// 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  // ...\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    // ...\n    if (Tok.is(MMToken::RBrace))\n    // ...\n    else {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rbrace);"},{v,2953,"/// 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  // ...\n  if (Tok.is(MMToken::RBrace))\n  // ...\n  else {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rbrace);"}},
[l]={
[l]={
Line 1,358: Line 1,359:
},
},
["err_mmap_expected_rsquare"]={
["err_mmap_expected_rsquare"]={
[i]="err_mmap_expected_rsquare",
[c]="err_mmap_expected_rsquare",
[h]="expected \']\' to close attribute",
[d]="expected \']\' to close attribute",
[g]="expected \']\' to close attribute",
[e]="expected \']\' to close attribute",
[b]=k,
[f]=k,
[e]="expected \'\\]\' to close attribute",
[g]="expected \'\\]\' to close attribute",
[d]=a,
[h]=a,
[f]=z,
[i]=A,
[c]={"a686e1b05df9",1327693953,"Introduce module attributes into the module map grammar, along with a","Introduce module attributes into the module map grammar, along with a\nsingle attribute (\"system\") that allows us to mark a module as being a\n\"system\" module. Each of the headers that makes up a system module is\nconsidered to be a system header, so that we (for example) suppress\nwarnings there.\n\nIf a module is being inferred for a framework, and that framework\ndirectory is within a system frameworks directory, infer it as a\nsystem framework.\n\nllvm-svn: 149143"},
[b]={"a686e1b05df9",1327693953,"Introduce module attributes into the module map grammar, along with a","Introduce module attributes into the module map grammar, along with a\nsingle attribute (\"system\") that allows us to mark a module as being a\n\"system\" module. Each of the headers that makes up a system module is\nconsidered to be a system header, so that we (for example) suppress\nwarnings there.\n\nIf a module is being inferred for a framework, and that framework\ndirectory is within a system frameworks directory, infer it as a\nsystem framework.\n\nllvm-svn: 149143"},
[j]={{v,3021,"/// 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  // ...\n  while (Tok.is(MMToken::LSquare)) {\n    // ...\n    // Consume the \']\'.\n    if (!Tok.is(MMToken::RSquare)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rsquare);"}}
[j]={{v,3021,"/// 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  // ...\n  while (Tok.is(MMToken::LSquare)) {\n    // ...\n    // Consume the \']\'.\n    if (!Tok.is(MMToken::RSquare)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rsquare);"}}
},
},
["err_mmap_explicit_inferred_framework"]={
["err_mmap_explicit_inferred_framework"]={
[i]="err_mmap_explicit_inferred_framework",
[c]="err_mmap_explicit_inferred_framework",
[h]="inferred framework modules cannot be \'explicit\'",
[d]="inferred framework modules cannot be \'explicit\'",
[e]="inferred framework modules cannot be \'explicit\'",
[f]=k,
[g]="inferred framework modules cannot be \'explicit\'",
[g]="inferred framework modules cannot be \'explicit\'",
[b]=k,
[h]=a,
[e]="inferred framework modules cannot be \'explicit\'",
[i]=A,
[d]=a,
[b]={"9194a91dc928",1352230780,"Introduce inferred framework modules into the module map file,","Introduce inferred framework modules into the module map file,\nallowing a module map to be placed one level above the \'.framework\'\ndirectories to specify that all .frameworks within that directory can\nbe inferred as framework modules. One can also specifically exclude\nframeworks known not to work.\n\nThis makes explicit (and more restricted) behavior modules have had\n\"forever\", where *any* .framework was assumed to be able to be built\nas a module. That\'s not necessarily true, so we white-list directories\n(with exclusions) when those directories have been audited.\n\nllvm-svn: 167482"},
[f]=z,
[c]={"9194a91dc928",1352230780,"Introduce inferred framework modules into the module map file,","Introduce inferred framework modules into the module map file,\nallowing a module map to be placed one level above the \'.framework\'\ndirectories to specify that all .frameworks within that directory can\nbe inferred as framework modules. One can also specifically exclude\nframeworks known not to work.\n\nThis makes explicit (and more restricted) behavior modules have had\n\"forever\", where *any* .framework was assumed to be able to be built\nas a module. That\'s not necessarily true, so we white-list directories\n(with exclusions) when those directories have been audited.\n\nllvm-svn: 167482"},
[j]={{v,2849,"/// 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  // ...\n  if (ActiveModule) {\n  // ...\n  } else if (Explicit) {\n    Diags.Report(StarLoc, diag::err_mmap_explicit_inferred_framework);"}}
[j]={{v,2849,"/// 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  // ...\n  if (ActiveModule) {\n  // ...\n  } else if (Explicit) {\n    Diags.Report(StarLoc, diag::err_mmap_explicit_inferred_framework);"}}
},
},
["err_mmap_explicit_top_level"]={
["err_mmap_explicit_top_level"]={
[i]="err_mmap_explicit_top_level",
[c]="err_mmap_explicit_top_level",
[h]="\'explicit\' is not permitted on top-level modules",
[d]="\'explicit\' is not permitted on top-level modules",
[g]="\'explicit\' is not permitted on top-level modules",
[e]="\'explicit\' is not permitted on top-level modules",
[b]=k,
[f]=k,
[e]="\'explicit\' is not permitted on top\\-level modules",
[g]="\'explicit\' is not permitted on top\\-level modules",
[d]=a,
[h]=a,
[f]=z,
[i]=A,
[c]={"e7ab36693b68",1323224625,"Implement basic support for private headers in frameworks. In essence,","Implement basic support for private headers in frameworks. In essence,\nwhen we load a module map (module.map) from a directory, also load a\nprivate module map (module_private.map) for that directory, if\npresent. That private module map can inject a new submodule that\ncaptures private headers.\n\nllvm-svn: 146012"},
[b]={"e7ab36693b68",1323224625,"Implement basic support for private headers in frameworks. In essence,","Implement basic support for private headers in frameworks. In essence,\nwhen we load a module map (module.map) from a directory, also load a\nprivate module map (module_private.map) for that directory, if\npresent. That private module map can inject a new submodule that\ncaptures private headers.\n\nllvm-svn: 146012"},
[j]={{v,1962,"/// 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  // ...\n  if (ActiveModule) {\n  // ...\n  } else if (Id.size() == 1 && Explicit) {\n    // ...\n    Diags.Report(ExplicitLoc, diag::err_mmap_explicit_top_level);"}}
[j]={{v,1962,"/// 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  // ...\n  if (ActiveModule) {\n  // ...\n  } else if (Id.size() == 1 && Explicit) {\n    // ...\n    Diags.Report(ExplicitLoc, diag::err_mmap_explicit_top_level);"}}
},
},
["err_mmap_inferred_framework_submodule"]={
["err_mmap_inferred_framework_submodule"]={
[i]="err_mmap_inferred_framework_submodule",
[c]="err_mmap_inferred_framework_submodule",
[h]="inferred submodule cannot be a framework submodule",
[d]="inferred submodule cannot be a framework submodule",
[e]="inferred submodule cannot be a framework submodule",
[f]=k,
[g]="inferred submodule cannot be a framework submodule",
[g]="inferred submodule cannot be a framework submodule",
[b]=k,
[h]=a,
[e]="inferred submodule cannot be a framework submodule",
[i]=A,
[d]=a,
[b]={"9194a91dc928",1352230780,"Introduce inferred framework modules into the module map file,","Introduce inferred framework modules into the module map file,\nallowing a module map to be placed one level above the \'.framework\'\ndirectories to specify that all .frameworks within that directory can\nbe inferred as framework modules. One can also specifically exclude\nframeworks known not to work.\n\nThis makes explicit (and more restricted) behavior modules have had\n\"forever\", where *any* .framework was assumed to be able to be built\nas a module. That\'s not necessarily true, so we white-list directories\n(with exclusions) when those directories have been audited.\n\nllvm-svn: 167482"},
[f]=z,
[c]={"9194a91dc928",1352230780,"Introduce inferred framework modules into the module map file,","Introduce inferred framework modules into the module map file,\nallowing a module map to be placed one level above the \'.framework\'\ndirectories to specify that all .frameworks within that directory can\nbe inferred as framework modules. One can also specifically exclude\nframeworks known not to work.\n\nThis makes explicit (and more restricted) behavior modules have had\n\"forever\", where *any* .framework was assumed to be able to be built\nas a module. That\'s not necessarily true, so we white-list directories\n(with exclusions) when those directories have been audited.\n\nllvm-svn: 167482"},
[j]={{v,2845,"/// 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  // ...\n  if (ActiveModule) {\n    // ...\n    // Check for the \'framework\' keyword, which is not permitted here.\n    if (Framework) {\n      Diags.Report(StarLoc, diag::err_mmap_inferred_framework_submodule);"}}
[j]={{v,2845,"/// 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  // ...\n  if (ActiveModule) {\n    // ...\n    // Check for the \'framework\' keyword, which is not permitted here.\n    if (Framework) {\n      Diags.Report(StarLoc, diag::err_mmap_inferred_framework_submodule);"}}
},
},
["err_mmap_inferred_no_umbrella"]={
["err_mmap_inferred_no_umbrella"]={
[i]="err_mmap_inferred_no_umbrella",
[c]="err_mmap_inferred_no_umbrella",
[h]="inferred submodules require a module with an umbrella",
[d]="inferred submodules require a module with an umbrella",
[e]="inferred submodules require a module with an umbrella",
[f]=k,
[g]="inferred submodules require a module with an umbrella",
[g]="inferred submodules require a module with an umbrella",
[b]=k,
[h]=a,
[e]="inferred submodules require a module with an umbrella",
[i]=A,
[d]=a,
[b]={Cc,1323124064,Ec,zc},
[f]=z,
[c]={Dc,1323124064,qc,Cc},
[j]={{v,2830,"/// 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  // ...\n  if (ActiveModule) {\n    // Inferred modules must have umbrella directories.\n    if (!Failed && ActiveModule->IsAvailable && !ActiveModule->getEffectiveUmbrellaDir()) {\n      Diags.Report(StarLoc, diag::err_mmap_inferred_no_umbrella);"}}
[j]={{v,2830,"/// 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  // ...\n  if (ActiveModule) {\n    // Inferred modules must have umbrella directories.\n    if (!Failed && ActiveModule->IsAvailable && !ActiveModule->getEffectiveUmbrellaDir()) {\n      Diags.Report(StarLoc, diag::err_mmap_inferred_no_umbrella);"}}
},
},
["err_mmap_inferred_redef"]={
["err_mmap_inferred_redef"]={
[i]="err_mmap_inferred_redef",
[c]="err_mmap_inferred_redef",
[h]="redefinition of inferred submodule",
[d]="redefinition of inferred submodule",
[e]="redefinition of inferred submodule",
[f]=k,
[g]="redefinition of inferred submodule",
[g]="redefinition of inferred submodule",
[b]=k,
[h]=a,
[e]="redefinition of inferred submodule",
[i]=A,
[d]=a,
[b]={Cc,1323124064,Ec,zc},
[f]=z,
[c]={Dc,1323124064,qc,Cc},
[j]={{v,2836,"/// 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  // ...\n  if (ActiveModule) {\n    // ...\n    // Check for redefinition of an inferred module.\n    if (!Failed && ActiveModule->InferSubmodules) {\n      Diags.Report(StarLoc, diag::err_mmap_inferred_redef);"}}
[j]={{v,2836,"/// 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  // ...\n  if (ActiveModule) {\n    // ...\n    // Check for redefinition of an inferred module.\n    if (!Failed && ActiveModule->InferSubmodules) {\n      Diags.Report(StarLoc, diag::err_mmap_inferred_redef);"}}
},
},
["err_mmap_invalid_header_attribute_value"]={
["err_mmap_invalid_header_attribute_value"]={
[i]={{nil,r,"err_mmap_invalid_header_attribute_value"}},
[c]={{nil,r,"err_mmap_invalid_header_attribute_value"}},
[h]={{nil,r,"expected integer literal as value for header attribute \'%0\'"}},
[d]={{nil,r,"expected integer literal as value for header attribute \'%0\'"}},
[g]={{nil,r,"expected integer literal as value for header attribute \'A\'"}},
[e]={{nil,r,"expected integer literal as value for header attribute \'A\'"}},
[b]=k,
[f]=k,
[e]="expected integer literal as value for header attribute \'(.*?)\'",
[g]="expected integer literal as value for header attribute \'(.*?)\'",
[d]=a,
[h]=a,
[f]={{nil,r,z}},
[i]={{nil,r,A}},
[c]={"040e12662a67",1496368539,"Support lazy stat\'ing of files referenced by module maps.","Support lazy stat\'ing of files referenced by module maps.\n\nThis patch adds support for a `header` declaration in a module map to specify\ncertain `stat` information (currently, size and mtime) about that header file.\nThis has two purposes:\n\n- It removes the need to eagerly `stat` every file referenced by a module map.\n  Instead, we track a list of unresolved header files with each size / mtime\n  (actually, for simplicity, we track submodules with such headers), and when\n  attempting to look up a header file based on a `FileEntry`, we check if there\n  are any unresolved header directives with that `FileEntry`\'s size / mtime and\n  perform deferred `stat`s if so.\n\n- It permits a preprocessed module to be compiled without the original files\n  being present on disk. The only reason we used to need those files was to get\n  the `stat` information in order to do header -> module lookups when using the\n  module. If we\'re provided with the `stat` information in the preprocessed\n  module, we can avoid requiring the files to exist.\n\nUnlike most `header` directives, if a `header` directive with `stat`\ninformation has no corresponding on-disk file the enclosing module is *not*\nmarked unavailable (so that behavior is consistent regardless of whether we\'ve\nresolved a header directive, and so that preprocessed modules don\'t get marked\nunavailable). We could actually do this for all `header` directives: the only\nreason we mark the module unavailable if headers are missing is to give a\ndiagnostic slightly earlier (rather than waiting until we actually try to build\nthe module / load and validate its .pcm file).\n\nDifferential Revision: https://reviews.llvm.org/D33703\n\nllvm-svn: 304515"},
[b]={"040e12662a67",1496368539,"Support lazy stat\'ing of files referenced by module maps.","Support lazy stat\'ing of files referenced by module maps.\n\nThis patch adds support for a `header` declaration in a module map to specify\ncertain `stat` information (currently, size and mtime) about that header file.\nThis has two purposes:\n\n- It removes the need to eagerly `stat` every file referenced by a module map.\n  Instead, we track a list of unresolved header files with each size / mtime\n  (actually, for simplicity, we track submodules with such headers), and when\n  attempting to look up a header file based on a `FileEntry`, we check if there\n  are any unresolved header directives with that `FileEntry`\'s size / mtime and\n  perform deferred `stat`s if so.\n\n- It permits a preprocessed module to be compiled without the original files\n  being present on disk. The only reason we used to need those files was to get\n  the `stat` information in order to do header -> module lookups when using the\n  module. If we\'re provided with the `stat` information in the preprocessed\n  module, we can avoid requiring the files to exist.\n\nUnlike most `header` directives, if a `header` directive with `stat`\ninformation has no corresponding on-disk file the enclosing module is *not*\nmarked unavailable (so that behavior is consistent regardless of whether we\'ve\nresolved a header directive, and so that preprocessed modules don\'t get marked\nunavailable). We could actually do this for all `header` directives: the only\nreason we mark the module unavailable if headers are missing is to give a\ndiagnostic slightly earlier (rather than waiting until we actually try to build\nthe module / load and validate its .pcm file).\n\nDifferential Revision: https://reviews.llvm.org/D33703\n\nllvm-svn: 304515"},
[j]={{v,2439,"/// 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  // ...\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    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case Size:\n        // ...\n        if (!Tok.is(MMToken::IntegerLiteral)) {\n          Diags.Report(Tok.getLocation(), diag::err_mmap_invalid_header_attribute_value) << Str;"},{v,2452,"/// 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  // ...\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    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case ModTime:\n        // ...\n        if (!Tok.is(MMToken::IntegerLiteral)) {\n          Diags.Report(Tok.getLocation(), diag::err_mmap_invalid_header_attribute_value) << Str;"}}
[j]={{v,2439,"/// 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  // ...\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    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case Size:\n        // ...\n        if (!Tok.is(MMToken::IntegerLiteral)) {\n          Diags.Report(Tok.getLocation(), diag::err_mmap_invalid_header_attribute_value) << Str;"},{v,2452,"/// 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  // ...\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    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case ModTime:\n        // ...\n        if (!Tok.is(MMToken::IntegerLiteral)) {\n          Diags.Report(Tok.getLocation(), diag::err_mmap_invalid_header_attribute_value) << Str;"}}
},
},
["err_mmap_missing_exclude_name"]={
["err_mmap_missing_exclude_name"]={
[i]="err_mmap_missing_exclude_name",
[c]="err_mmap_missing_exclude_name",
[h]="expected excluded module name",
[d]="expected excluded module name",
[e]="expected excluded module name",
[f]=k,
[g]="expected excluded module name",
[g]="expected excluded module name",
[b]=k,
[h]=a,
[e]="expected excluded module name",
[i]=A,
[d]=a,
[b]={"9194a91dc928",1352230780,"Introduce inferred framework modules into the module map file,","Introduce inferred framework modules into the module map file,\nallowing a module map to be placed one level above the \'.framework\'\ndirectories to specify that all .frameworks within that directory can\nbe inferred as framework modules. One can also specifically exclude\nframeworks known not to work.\n\nThis makes explicit (and more restricted) behavior modules have had\n\"forever\", where *any* .framework was assumed to be able to be built\nas a module. That\'s not necessarily true, so we white-list directories\n(with exclusions) when those directories have been audited.\n\nllvm-svn: 167482"},
[f]=z,
[c]={"9194a91dc928",1352230780,"Introduce inferred framework modules into the module map file,","Introduce inferred framework modules into the module map file,\nallowing a module map to be placed one level above the \'.framework\'\ndirectories to specify that all .frameworks within that directory can\nbe inferred as framework modules. One can also specifically exclude\nframeworks known not to work.\n\nThis makes explicit (and more restricted) behavior modules have had\n\"forever\", where *any* .framework was assumed to be able to be built\nas a module. That\'s not necessarily true, so we white-list directories\n(with exclusions) when those directories have been audited.\n\nllvm-svn: 167482"},
[j]={{v,2911,"/// 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  // ...\n  do {\n    // ...\n    case MMToken::ExcludeKeyword:\n      // ...\n      // FIXME: Support string-literal module names here.\n      if (!Tok.is(MMToken::Identifier)) {\n        Diags.Report(Tok.getLocation(), diag::err_mmap_missing_exclude_name);"}}
[j]={{v,2911,"/// 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  // ...\n  do {\n    // ...\n    case MMToken::ExcludeKeyword:\n      // ...\n      // FIXME: Support string-literal module names here.\n      if (!Tok.is(MMToken::Identifier)) {\n        Diags.Report(Tok.getLocation(), diag::err_mmap_missing_exclude_name);"}}
},
},
["err_mmap_missing_module_qualified"]={
["err_mmap_missing_module_qualified"]={
[i]="err_mmap_missing_module_qualified",
[c]="err_mmap_missing_module_qualified",
[h]="no module named \'%0\' in \'%1\'",
[d]="no module named \'%0\' in \'%1\'",
[g]="no module named \'A\' in \'B\'",
[e]="no module named \'A\' in \'B\'",
[b]=k,
[f]=k,
[e]="no module named \'(.*?)\' in \'(.*?)\'",
[g]="no module named \'(.*?)\' in \'(.*?)\'",
[d]=a,
[h]=a,
[f]=z,
[i]=A,
[c]={"2b82c2a59eca",1322790427,"Implementing parsing and resolution of module export declarations","Implementing parsing and resolution of module export declarations\nwithin module maps, which will (eventually) be used to re-export a\nmodule from another module. There are still some pieces missing,\nhowever.\n\nllvm-svn: 145665"},
[b]={"2b82c2a59eca",1322790427,"Implementing parsing and resolution of module export declarations","Implementing parsing and resolution of module export declarations\nwithin module maps, which will (eventually) be used to re-export a\nmodule from another module. There are still some pieces missing,\nhowever.\n\nllvm-svn: 145665"},
[j]={{v,149,"Module *ModuleMap::resolveModuleId(const ModuleId &Id, Module *Mod, bool Complain) const {\n  // ...\n  // Dig into the module path.\n  for (unsigned I = 1, N = Id.size(); I != N; ++I) {\n    // ...\n    if (!Sub) {\n      if (Complain)\n        Diags.Report(Id[I].second, diag::err_mmap_missing_module_qualified) << Id[I].first << Context->getFullModuleName() << SourceRange(Id[0].second, Id[I - 1].second);"}}
[j]={{v,149,"Module *ModuleMap::resolveModuleId(const ModuleId &Id, Module *Mod, bool Complain) const {\n  // ...\n  // Dig into the module path.\n  for (unsigned I = 1, N = Id.size(); I != N; ++I) {\n    // ...\n    if (!Sub) {\n      if (Complain)\n        Diags.Report(Id[I].second, diag::err_mmap_missing_module_qualified) << Id[I].first << Context->getFullModuleName() << SourceRange(Id[0].second, Id[I - 1].second);"}}
},
},
["err_mmap_missing_module_unqualified"]={
["err_mmap_missing_module_unqualified"]={
[i]="err_mmap_missing_module_unqualified",
[c]="err_mmap_missing_module_unqualified",
[h]="no module named \'%0\' visible from \'%1\'",
[d]="no module named \'%0\' visible from \'%1\'",
[g]="no module named \'A\' visible from \'B\'",
[e]="no module named \'A\' visible from \'B\'",
[b]=k,
[f]=k,
[e]="no module named \'(.*?)\' visible from \'(.*?)\'",
[g]="no module named \'(.*?)\' visible from \'(.*?)\'",
[d]=a,
[h]=a,
[f]=z,
[i]=A,
[c]={"2b82c2a59eca",1322790427,"Implementing parsing and resolution of module export declarations","Implementing parsing and resolution of module export declarations\nwithin module maps, which will (eventually) be used to re-export a\nmodule from another module. There are still some pieces missing,\nhowever.\n\nllvm-svn: 145665"},
[b]={"2b82c2a59eca",1322790427,"Implementing parsing and resolution of module export declarations","Implementing parsing and resolution of module export declarations\nwithin module maps, which will (eventually) be used to re-export a\nmodule from another module. There are still some pieces missing,\nhowever.\n\nllvm-svn: 145665"},
[j]={{v,138,"Module *ModuleMap::resolveModuleId(const ModuleId &Id, Module *Mod, bool Complain) const {\n  // ...\n  if (!Context) {\n    if (Complain)\n      Diags.Report(Id[0].second, diag::err_mmap_missing_module_unqualified) << Id[0].first << Mod->getFullModuleName();"}}
[j]={{v,138,"Module *ModuleMap::resolveModuleId(const ModuleId &Id, Module *Mod, bool Complain) const {\n  // ...\n  if (!Context) {\n    if (Complain)\n      Diags.Report(Id[0].second, diag::err_mmap_missing_module_unqualified) << Id[0].first << Mod->getFullModuleName();"}}
},
},
["err_mmap_missing_parent_module"]={
["err_mmap_missing_parent_module"]={
[i]={{nil,C,"err_mmap_missing_parent_module"}},
[c]={{nil,D,"err_mmap_missing_parent_module"}},
[h]={{nil,C,"no module named \'%0\' %select{found|in \'%2\'}1, parent module must be defined before the submodule"}},
[d]={{nil,D,"no module named \'%0\' %select{found|in \'%2\'}1, parent module must be defined before the submodule"}},
[g]={{nil,C,{"no module named \'A\' ",{"found","in \'C\'"},", parent module must be defined before the submodule"}}},
[e]={{nil,D,{"no module named \'A\' ",{"found","in \'C\'"},", parent module must be defined before the submodule"}}},
[b]=k,
[f]=k,
[e]="no module named \'(.*?)\' (?:found|in \'(.*?)\'), parent module must be defined before the submodule",
[g]="no module named \'(.*?)\' (?:found|in \'(.*?)\'), parent module must be defined before the submodule",
[d]=a,
[h]=a,
[f]={{nil,C,z}},
[i]={{nil,D,A}},
[c]={"8839e278ffca",1595533636,"[Modules] Improve error message when cannot find parent module for submodule definition.","[Modules] Improve error message when cannot find parent module for submodule definition.\n\nBefore the change the diagnostic for\n\n    module unknown.submodule {}\n\nwas \"error: expected module name\" which is incorrect and misleading\nbecause both \"unknown\" and \"submodule\" are valid module names.\n\nWe already have a better error message when a parent module is a\nsubmodule itself and is missing. Make the error for a missing top-level\nmodule more like the one for a submodule.\n\nrdar://problem/64424407\n\nReviewed By: bruno\n\nDifferential Revision: https://reviews.llvm.org/D84458"},
[b]={"8839e278ffca",1595533636,"[Modules] Improve error message when cannot find parent module for submodule definition.","[Modules] Improve error message when cannot find parent module for submodule definition.\n\nBefore the change the diagnostic for\n\n    module unknown.submodule {}\n\nwas \"error: expected module name\" which is incorrect and misleading\nbecause both \"unknown\" and \"submodule\" are valid module names.\n\nWe already have a better error message when a parent module is a\nsubmodule itself and is missing. Make the error for a missing top-level\nmodule more like the one for a submodule.\n\nrdar://problem/64424407\n\nReviewed By: bruno\n\nDifferential Revision: https://reviews.llvm.org/D84458"},
[j]={{v,1982,"/// 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  // ...\n  if (Id.size() > 1) {\n    // ...\n    for (unsigned I = 0, N = Id.size() - 1; I != N; ++I) {\n      // ...\n      Diags.Report(Id[I].second, diag::err_mmap_missing_parent_module) << Id[I].first << (ActiveModule != nullptr) << (ActiveModule ? ActiveModule->getTopLevelModule()->getFullModuleName() : \"\");"}}
[j]={{v,1982,"/// 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  // ...\n  if (Id.size() > 1) {\n    // ...\n    for (unsigned I = 0, N = Id.size() - 1; I != N; ++I) {\n      // ...\n      Diags.Report(Id[I].second, diag::err_mmap_missing_parent_module) << Id[I].first << (ActiveModule != nullptr) << (ActiveModule ? ActiveModule->getTopLevelModule()->getFullModuleName() : \"\");"}}
},
},
["err_mmap_module_id"]={
["err_mmap_module_id"]={
[i]="err_mmap_module_id",
[c]="err_mmap_module_id",
[h]="expected a module name or \'*\'",
[d]="expected a module name or \'*\'",
[g]="expected a module name or \'*\'",
[e]="expected a module name or \'*\'",
[b]=k,
[f]=k,
[e]="expected a module name or \'\\*\'",
[g]="expected a module name or \'\\*\'",
[d]=a,
[h]=a,
[f]=z,
[i]=A,
[c]={"ba7f2f7110c2",1380014054,"Module use declarations (II)","Module use declarations (II)\n\nReview: http://llvm-reviews.chandlerc.com/D1546.\n\nI have picked up this patch form Lawrence\n(http://llvm-reviews.chandlerc.com/D1063) and did a few changes.\n\nFrom the original change description (updated as appropriate):\nThis patch adds a check that ensures that modules only use modules they\nhave so declared. To this end, it adds a statement on intended module\nuse to the module.map grammar:\n\n  use module-id\n\nA module can then only use headers from other modules if it \'uses\' them.\nThis enforcement is off by default, but may be turned on with the new\noption -fmodules-decluse.\n\nWhen enforcing the module semantics, we also need to consider a source\nfile part of a module. This is achieved with a compiler option\n\n-fmodule-name=<module-id>.\n\nThe compiler at present only applies restrictions to the module directly\nbeing built.\n\nllvm-svn: 191283"},
[b]={"ba7f2f7110c2",1380014054,"Module use declarations (II)","Module use declarations (II)\n\nReview: http://llvm-reviews.chandlerc.com/D1546.\n\nI have picked up this patch form Lawrence\n(http://llvm-reviews.chandlerc.com/D1063) and did a few changes.\n\nFrom the original change description (updated as appropriate):\nThis patch adds a check that ensures that modules only use modules they\nhave so declared. To this end, it adds a statement on intended module\nuse to the module.map grammar:\n\n  use module-id\n\nA module can then only use headers from other modules if it \'uses\' them.\nThis enforcement is off by default, but may be turned on with the new\noption -fmodules-decluse.\n\nWhen enforcing the module semantics, we also need to consider a source\nfile part of a module. This is achieved with a compiler option\n\n-fmodule-name=<module-id>.\n\nThe compiler at present only applies restrictions to the module directly\nbeing built.\n\nllvm-svn: 191283"},
[j]={{v,2605,"/// Parse a module export declaration.\n///\n///  export-declaration:\n///    \'export\' wildcard-module-id\n///\n///  wildcard-module-id:\n///    identifier\n///    \'*\'\n///    identifier \'.\' wildcard-module-id\nvoid ModuleMapParser::parseExportDecl() {\n  // ...\n  do {\n    // ...\n    Diags.Report(Tok.getLocation(), diag::err_mmap_module_id);"},{v,2625,"/// Parse a module export_as declaration.\n///\n///  export-as-declaration:\n///    \'export_as\' identifier\nvoid ModuleMapParser::parseExportAsDecl() {\n  // ...\n  if (!Tok.is(MMToken::Identifier)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_module_id);"}}
[j]={{v,2605,"/// Parse a module export declaration.\n///\n///  export-declaration:\n///    \'export\' wildcard-module-id\n///\n///  wildcard-module-id:\n///    identifier\n///    \'*\'\n///    identifier \'.\' wildcard-module-id\nvoid ModuleMapParser::parseExportDecl() {\n  // ...\n  do {\n    // ...\n    Diags.Report(Tok.getLocation(), diag::err_mmap_module_id);"},{v,2625,"/// Parse a module export_as declaration.\n///\n///  export-as-declaration:\n///    \'export_as\' identifier\nvoid ModuleMapParser::parseExportAsDecl() {\n  // ...\n  if (!Tok.is(MMToken::Identifier)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_module_id);"}}
},
},
["err_mmap_module_redefinition"]={
["err_mmap_module_redefinition"]={
[i]="err_mmap_module_redefinition",
[c]="err_mmap_module_redefinition",
[h]="redefinition of module \'%0\'",
[d]="redefinition of module \'%0\'",
[g]="redefinition of module \'A\'",
[e]="redefinition of module \'A\'",
[b]=k,
[f]=k,
[e]="redefinition of module \'(.*?)\'",
[g]="redefinition of module \'(.*?)\'",
[d]=a,
[h]=a,
[f]=z,
[i]=A,
[c]={Lb,1321038628,Gb,Db},
[b]={Ob,1321038628,Db,Cb},
[j]={{v,2067,"/// 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  // ...\n  if (Module *Existing = Map.lookupModuleQualified(ModuleName, ActiveModule)) {\n    // ...\n    if (!Existing->Parent && Map.mayShadowNewModule(Existing)) {\n    // ...\n    } else {\n      // ...\n      Diags.Report(ModuleNameLoc, diag::err_mmap_module_redefinition) << ModuleName;"}}
[j]={{v,2067,"/// 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  // ...\n  if (Module *Existing = Map.lookupModuleQualified(ModuleName, ActiveModule)) {\n    // ...\n    if (!Existing->Parent && Map.mayShadowNewModule(Existing)) {\n    // ...\n    } else {\n      // ...\n      Diags.Report(ModuleNameLoc, diag::err_mmap_module_redefinition) << ModuleName;"}}
},
},
["err_mmap_nested_submodule_id"]={
["err_mmap_nested_submodule_id"]={
[i]="err_mmap_nested_submodule_id",
[c]="err_mmap_nested_submodule_id",
[h]="qualified module name can only be used to define modules at the top level",
[d]="qualified module name can only be used to define modules at the top level",
[e]="qualified module name can only be used to define modules at the top level",
[f]=k,
[g]="qualified module name can only be used to define modules at the top level",
[g]="qualified module name can only be used to define modules at the top level",
[b]=k,
[h]=a,
[e]="qualified module name can only be used to define modules at the top level",
[i]=A,
[d]=a,
[b]={"e7ab36693b68",1323224625,"Implement basic support for private headers in frameworks. In essence,","Implement basic support for private headers in frameworks. In essence,\nwhen we load a module map (module.map) from a directory, also load a\nprivate module map (module_private.map) for that directory, if\npresent. That private module map can inject a new submodule that\ncaptures private headers.\n\nllvm-svn: 146012"},
[f]=z,
[c]={"e7ab36693b68",1323224625,"Implement basic support for private headers in frameworks. In essence,","Implement basic support for private headers in frameworks. In essence,\nwhen we load a module map (module.map) from a directory, also load a\nprivate module map (module_private.map) for that directory, if\npresent. That private module map can inject a new submodule that\ncaptures private headers.\n\nllvm-svn: 146012"},
[j]={{v,1954,"/// 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  // ...\n  if (ActiveModule) {\n    if (Id.size() > 1) {\n      Diags.Report(Id.front().second, diag::err_mmap_nested_submodule_id) << SourceRange(Id.front().second, Id.back().second);"}}
[j]={{v,1954,"/// 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  // ...\n  if (ActiveModule) {\n    if (Id.size() > 1) {\n      Diags.Report(Id.front().second, diag::err_mmap_nested_submodule_id) << SourceRange(Id.front().second, Id.back().second);"}}
},
},
["err_mmap_submodule_export_as"]={
["err_mmap_submodule_export_as"]={
[i]={{nil,t,"err_mmap_submodule_export_as"}},
[c]={{nil,t,"err_mmap_submodule_export_as"}},
[h]={{nil,t,"only top-level modules can be re-exported as public"}},
[d]={{nil,t,"only top-level modules can be re-exported as public"}},
[g]={{nil,t,"only top-level modules can be re-exported as public"}},
[e]={{nil,t,"only top-level modules can be re-exported as public"}},
[b]=k,
[f]=k,
[e]="only top\\-level modules can be re\\-exported as public",
[g]="only top\\-level modules can be re\\-exported as public",
[d]=a,
[h]=a,
[f]={{nil,t,z}},
[i]={{nil,t,A}},
[c]={"f0b11de279e7",1505432324,"[Module map] Introduce a private module re-export directive.","[Module map] Introduce a private module re-export directive.\n\nIntroduce a new \"export_as\" directive for top-level modules, which\nindicates that the current module is a \"private\" module whose symbols\nwill eventually be exported through the named \"public\" module. This is\nin support of a common pattern in the Darwin ecosystem where a single\npublic framework is constructed of several private frameworks, with\n(currently) header duplication and some support from the linker.\n\nAddresses rdar://problem/34438420.\n\nllvm-svn: 313316"},
[b]={"f0b11de279e7",1505432324,"[Module map] Introduce a private module re-export directive.","[Module map] Introduce a private module re-export directive.\n\nIntroduce a new \"export_as\" directive for top-level modules, which\nindicates that the current module is a \"private\" module whose symbols\nwill eventually be exported through the named \"public\" module. This is\nin support of a common pattern in the Darwin ecosystem where a single\npublic framework is constructed of several private frameworks, with\n(currently) header duplication and some support from the linker.\n\nAddresses rdar://problem/34438420.\n\nllvm-svn: 313316"},
[j]={{v,2631,"/// Parse a module export_as declaration.\n///\n///  export-as-declaration:\n///    \'export_as\' identifier\nvoid ModuleMapParser::parseExportAsDecl() {\n  // ...\n  if (ActiveModule->Parent) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_submodule_export_as);"}}
[j]={{v,2631,"/// Parse a module export_as declaration.\n///\n///  export-as-declaration:\n///    \'export_as\' identifier\nvoid ModuleMapParser::parseExportAsDecl() {\n  // ...\n  if (ActiveModule->Parent) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_submodule_export_as);"}}
},
},
["err_mmap_top_level_inferred_submodule"]={
["err_mmap_top_level_inferred_submodule"]={
[i]="err_mmap_top_level_inferred_submodule",
[c]="err_mmap_top_level_inferred_submodule",
[h]="only submodules and framework modules may be inferred with wildcard syntax",
[d]="only submodules and framework modules may be inferred with wildcard syntax",
[e]="only submodules and framework modules may be inferred with wildcard syntax",
[f]=k,
[g]="only submodules and framework modules may be inferred with wildcard syntax",
[g]="only submodules and framework modules may be inferred with wildcard syntax",
[b]=k,
[h]=a,
[e]="only submodules and framework modules may be inferred with wildcard syntax",
[i]=A,
[d]=a,
[b]={Cc,1323124064,Ec,zc},
[f]=z,
[c]={Dc,1323124064,qc,Cc},
[j]={{v,2822,"/// 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  // ...\n  // Inferred modules must be submodules.\n  if (!ActiveModule && !Framework) {\n    Diags.Report(StarLoc, diag::err_mmap_top_level_inferred_submodule);"}}
[j]={{v,2822,"/// 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  // ...\n  // Inferred modules must be submodules.\n  if (!ActiveModule && !Framework) {\n    Diags.Report(StarLoc, diag::err_mmap_top_level_inferred_submodule);"}}
},
},
["err_mmap_umbrella_clash"]={
["err_mmap_umbrella_clash"]={
[i]="err_mmap_umbrella_clash",
[c]="err_mmap_umbrella_clash",
[h]="umbrella for module \'%0\' already covers this directory",
[d]="umbrella for module \'%0\' already covers this directory",
[g]="umbrella for module \'A\' already covers this directory",
[e]="umbrella for module \'A\' already covers this directory",
[b]=k,
[f]=k,
[e]="umbrella for module \'(.*?)\' already covers this directory",
[g]="umbrella for module \'(.*?)\' already covers this directory",
[d]=a,
[h]=a,
[f]=z,
[i]=A,
[c]={"b65dbfff5275",1321484545,"A module with an umbrella header assumes that all of the headers in","A module with an umbrella header assumes that all of the headers in\nthe umbrella header\'s directory and its subdirectories are part of the\nmodule (that\'s why it\'s an umbrella). Make sure that these headers are\nconsidered to be part of the module for lookup purposes.\n\nllvm-svn: 144859"},
[b]={"b65dbfff5275",1321484545,"A module with an umbrella header assumes that all of the headers in","A module with an umbrella header assumes that all of the headers in\nthe umbrella header\'s directory and its subdirectories are part of the\nmodule (that\'s why it\'s an umbrella). Make sure that these headers are\nconsidered to be part of the module for lookup purposes.\n\nllvm-svn: 144859"},
[j]={{v,266,"void ModuleMap::resolveHeader(Module *Mod, const Module::UnresolvedHeaderDirective &Header, bool &NeedsFramework) {\n  // ...\n  if (OptionalFileEntryRef File = findHeader(Mod, Header, RelativePathName, NeedsFramework)) {\n    if (Header.IsUmbrella) {\n      // ...\n      if (Module *UmbrellaMod = UmbrellaDirs[UmbrellaDir])\n        Diags.Report(Header.FileNameLoc, diag::err_mmap_umbrella_clash) << UmbrellaMod->getFullModuleName();"},{v,2415,"/// 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  // ...\n  // Check whether we already have an umbrella.\n  if (Header.IsUmbrella && ActiveModule->Umbrella) {\n    Diags.Report(Header.FileNameLoc, diag::err_mmap_umbrella_clash) << ActiveModule->getFullModuleName();"},{v,2509,"/// Parse an umbrella directory declaration.\n///\n///  umbrella-dir-declaration:\n///    umbrella string-literal\nvoid ModuleMapParser::parseUmbrellaDirDecl(SourceLocation UmbrellaLoc) {\n  // ...\n  // Check whether we already have an umbrella.\n  if (ActiveModule->Umbrella) {\n    Diags.Report(DirNameLoc, diag::err_mmap_umbrella_clash) << ActiveModule->getFullModuleName();"},{v,2558,"/// Parse an umbrella directory declaration.\n///\n///  umbrella-dir-declaration:\n///    umbrella string-literal\nvoid ModuleMapParser::parseUmbrellaDirDecl(SourceLocation UmbrellaLoc) {\n  // ...\n  if (Module *OwningModule = Map.UmbrellaDirs[*Dir]) {\n    Diags.Report(UmbrellaLoc, diag::err_mmap_umbrella_clash) << OwningModule->getFullModuleName();"}}
[j]={{v,266,"void ModuleMap::resolveHeader(Module *Mod, const Module::UnresolvedHeaderDirective &Header, bool &NeedsFramework) {\n  // ...\n  if (OptionalFileEntryRef File = findHeader(Mod, Header, RelativePathName, NeedsFramework)) {\n    if (Header.IsUmbrella) {\n      // ...\n      if (Module *UmbrellaMod = UmbrellaDirs[UmbrellaDir])\n        Diags.Report(Header.FileNameLoc, diag::err_mmap_umbrella_clash) << UmbrellaMod->getFullModuleName();"},{v,2415,"/// 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  // ...\n  // Check whether we already have an umbrella.\n  if (Header.IsUmbrella && ActiveModule->Umbrella) {\n    Diags.Report(Header.FileNameLoc, diag::err_mmap_umbrella_clash) << ActiveModule->getFullModuleName();"},{v,2509,"/// Parse an umbrella directory declaration.\n///\n///  umbrella-dir-declaration:\n///    umbrella string-literal\nvoid ModuleMapParser::parseUmbrellaDirDecl(SourceLocation UmbrellaLoc) {\n  // ...\n  // Check whether we already have an umbrella.\n  if (ActiveModule->Umbrella) {\n    Diags.Report(DirNameLoc, diag::err_mmap_umbrella_clash) << ActiveModule->getFullModuleName();"},{v,2558,"/// Parse an umbrella directory declaration.\n///\n///  umbrella-dir-declaration:\n///    umbrella string-literal\nvoid ModuleMapParser::parseUmbrellaDirDecl(SourceLocation UmbrellaLoc) {\n  // ...\n  if (Module *OwningModule = Map.UmbrellaDirs[*Dir]) {\n    Diags.Report(UmbrellaLoc, diag::err_mmap_umbrella_clash) << OwningModule->getFullModuleName();"}}
},
},
["err_mmap_unknown_token"]={
["err_mmap_unknown_token"]={
[i]="err_mmap_unknown_token",
[c]="err_mmap_unknown_token",
[h]="skipping stray token",
[d]="skipping stray token",
[e]="skipping stray token",
[f]=k,
[g]="skipping stray token",
[g]="skipping stray token",
[b]=k,
[h]=a,
[e]="skipping stray token",
[i]=A,
[d]=a,
[b]={Ob,1321038628,Db,Cb},
[f]=z,
[c]={Lb,1321038628,Gb,Db},
[j]={{v,1689,"retry:\n  // ...\n  case tok::numeric_constant: {\n    // ...\n    if (StringRef(Start, Length).getAsInteger(0, Value)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_unknown_token);"},{v,1722,"retry:\n  // ...\n  default:\n    Diags.Report(Tok.getLocation(), diag::err_mmap_unknown_token);"}}
[j]={{v,1689,"retry:\n  // ...\n  case tok::numeric_constant: {\n    // ...\n    if (StringRef(Start, Length).getAsInteger(0, Value)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_unknown_token);"},{v,1722,"retry:\n  // ...\n  default:\n    Diags.Report(Tok.getLocation(), diag::err_mmap_unknown_token);"}}
},
},
["err_mmap_use_decl_submodule"]={
["err_mmap_use_decl_submodule"]={
[i]="err_mmap_use_decl_submodule",
[c]="err_mmap_use_decl_submodule",
[h]="use declarations are only allowed in top-level modules",
[d]="use declarations are only allowed in top-level modules",
[g]="use declarations are only allowed in top-level modules",
[e]="use declarations are only allowed in top-level modules",
[b]=k,
[f]=k,
[e]="use declarations are only allowed in top\\-level modules",
[g]="use declarations are only allowed in top\\-level modules",
[d]=a,
[h]=a,
[f]=z,
[i]=A,
[c]={"8f4d3ff1466a",1427407801,"[modules] Restrict the module use-declaration to only appear in top-level","[modules] Restrict the module use-declaration to only appear in top-level\nmodules, and allow sub-modules of a module with a use-declaration to make use\nof the nominated modules.\n\nllvm-svn: 233323"},
[b]={"8f4d3ff1466a",1427407801,"[modules] Restrict the module use-declaration to only appear in top-level","[modules] Restrict the module use-declaration to only appear in top-level\nmodules, and allow sub-modules of a module with a use-declaration to make use\nof the nominated modules.\n\nllvm-svn: 233323"},
[j]={{v,2665,"/// Parse a module use declaration.\n///\n///  use-declaration:\n///    \'use\' wildcard-module-id\nvoid ModuleMapParser::parseUseDecl() {\n  // ...\n  if (ActiveModule->Parent)\n    Diags.Report(KWLoc, diag::err_mmap_use_decl_submodule);"}}
[j]={{v,2665,"/// Parse a module use declaration.\n///\n///  use-declaration:\n///    \'use\' wildcard-module-id\nvoid ModuleMapParser::parseUseDecl() {\n  // ...\n  if (ActiveModule->Parent)\n    Diags.Report(KWLoc, diag::err_mmap_use_decl_submodule);"}}
},
},
["err_mode_not_primitive"]={
["err_mode_not_primitive"]={
[i]="err_mode_not_primitive",
[c]="err_mode_not_primitive",
[h]="mode attribute only supported for integer and floating-point types",
[d]="mode attribute only supported for integer and floating-point types",
[g]="mode attribute only supported for integer and floating-point types",
[e]="mode attribute only supported for integer and floating-point types",
[b]=k,
[f]=k,
[e]="mode attribute only supported for integer and floating\\-point types",
[g]="mode attribute only supported for integer and floating\\-point types",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={H,1236199783,I,G},
[b]={J,1236199783,H,I},
[j]={{K,4817,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (!OldElemTy->getAs<BuiltinType>() && !OldElemTy->isComplexType() && !IntegralOrAnyEnumType)\n    Diag(AttrLoc, diag::err_mode_not_primitive);"}},
[j]={{K,4817,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (!OldElemTy->getAs<BuiltinType>() && !OldElemTy->isComplexType() && !IntegralOrAnyEnumType)\n    Diag(AttrLoc, diag::err_mode_not_primitive);"}},
[l]={
[l]={
Line 1,581: Line 1,582:
},
},
["err_mode_wrong_type"]={
["err_mode_wrong_type"]={
[i]="err_mode_wrong_type",
[c]="err_mode_wrong_type",
[h]="type of machine mode does not match type of base type",
[d]="type of machine mode does not match type of base type",
[e]="type of machine mode does not match type of base type",
[f]=k,
[g]="type of machine mode does not match type of base type",
[g]="type of machine mode does not match type of base type",
[b]=k,
[h]=a,
[e]="type of machine mode does not match type of base type",
[i]=m,
[d]=a,
[b]={J,1236199783,H,I},
[f]=m,
[c]={H,1236199783,I,G},
[j]={{K,4820,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (!OldElemTy->getAs<BuiltinType>() && !OldElemTy->isComplexType() && !IntegralOrAnyEnumType)\n  // ...\n  else if (IntegerMode) {\n    if (!IntegralOrAnyEnumType)\n      Diag(AttrLoc, diag::err_mode_wrong_type);"},{K,4823,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (!OldElemTy->getAs<BuiltinType>() && !OldElemTy->isComplexType() && !IntegralOrAnyEnumType)\n  // ...\n  else if (IntegerMode) {\n  // ...\n  } else if (ComplexMode) {\n    if (!OldElemTy->isComplexType())\n      Diag(AttrLoc, diag::err_mode_wrong_type);"},{K,4826,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (!OldElemTy->getAs<BuiltinType>() && !OldElemTy->isComplexType() && !IntegralOrAnyEnumType)\n  // ...\n  else if (IntegerMode) {\n  // ...\n  } else if (ComplexMode) {\n  // ...\n  } else {\n    if (!OldElemTy->isFloatingType())\n      Diag(AttrLoc, diag::err_mode_wrong_type);"},{K,4864,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (NewTy.isNull()) {\n    Diag(AttrLoc, diag::err_mode_wrong_type);"}},
[j]={{K,4820,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (!OldElemTy->getAs<BuiltinType>() && !OldElemTy->isComplexType() && !IntegralOrAnyEnumType)\n  // ...\n  else if (IntegerMode) {\n    if (!IntegralOrAnyEnumType)\n      Diag(AttrLoc, diag::err_mode_wrong_type);"},{K,4823,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (!OldElemTy->getAs<BuiltinType>() && !OldElemTy->isComplexType() && !IntegralOrAnyEnumType)\n  // ...\n  else if (IntegerMode) {\n  // ...\n  } else if (ComplexMode) {\n    if (!OldElemTy->isComplexType())\n      Diag(AttrLoc, diag::err_mode_wrong_type);"},{K,4826,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (!OldElemTy->getAs<BuiltinType>() && !OldElemTy->isComplexType() && !IntegralOrAnyEnumType)\n  // ...\n  else if (IntegerMode) {\n  // ...\n  } else if (ComplexMode) {\n  // ...\n  } else {\n    if (!OldElemTy->isFloatingType())\n      Diag(AttrLoc, diag::err_mode_wrong_type);"},{K,4864,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (NewTy.isNull()) {\n    Diag(AttrLoc, diag::err_mode_wrong_type);"}},
[l]={
[l]={
Line 1,595: Line 1,596:
},
},
["err_modifier_expected_colon"]={
["err_modifier_expected_colon"]={
[i]={{nil,p,"err_modifier_expected_colon"}},
[c]={{nil,p,"err_modifier_expected_colon"}},
[h]={{nil,p,"missing \':\' after %0 modifier"}},
[d]={{nil,p,"missing \':\' after %0 modifier"}},
[g]={{nil,p,"missing \':\' after A modifier"}},
[e]={{nil,p,"missing \':\' after A modifier"}},
[b]=k,
[f]=k,
[e]="missing \'\\:\' after (.*?) modifier",
[g]="missing \'\\:\' after (.*?) modifier",
[d]=a,
[h]=a,
[f]={{nil,p,y}},
[i]={{nil,p,y}},
[c]={"ab9eac762c35",1668730814,"[OpenMP] Initial parsing/sema for \'strict\' modifier with \'grainsize\' clause","[OpenMP] Initial parsing/sema for \'strict\' modifier with \'grainsize\' clause\n\nThis patch gives basic parsing and semantic analysis support for \'strict\'\nmodifier with \'grainsize\' clause of \'taskloop\' construct introduced in\nOpenMP 5.1 (section 2.12.2)\n\nDifferential Revision: https://reviews.llvm.org/D138217"},
[b]={"ab9eac762c35",1668730814,"[OpenMP] Initial parsing/sema for \'strict\' modifier with \'grainsize\' clause","[OpenMP] Initial parsing/sema for \'strict\' modifier with \'grainsize\' clause\n\nThis patch gives basic parsing and semantic analysis support for \'strict\'\nmodifier with \'grainsize\' clause of \'taskloop\' construct introduced in\nOpenMP 5.1 (section 2.12.2)\n\nDifferential Revision: https://reviews.llvm.org/D138217"},
[j]={{"clang/lib/Parse/ParseOpenMP.cpp",3942,"/// Parsing of OpenMP clauses with single expressions and some additional\n/// argument like \'schedule\' or \'dist_schedule\'.\n///\n///    schedule-clause:\n///      \'schedule\' \'(\' [ modifier [ \',\' modifier ] \':\' ] kind [\',\' expression ]\n///      \')\'\n///\n///    if-clause:\n///      \'if\' \'(\' [ directive-name-modifier \':\' ] expression \')\'\n///\n///    defaultmap:\n///      \'defaultmap\' \'(\' modifier [ \':\' kind ] \')\'\n///\n///    device-clause:\n///      \'device\' \'(\' [ device-modifier \':\' ] expression \')\'\n///\nOMPClause *Parser::ParseOpenMPSingleExprWithArgClause(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, bool ParseOnly) {\n  // ...\n  if (Kind == OMPC_schedule) {\n  // ...\n  } else if (Kind == OMPC_dist_schedule) {\n  // ...\n  } else if (Kind == OMPC_defaultmap) {\n  // ...\n  } else if (Kind == OMPC_order) {\n  // ...\n  } else if (Kind == OMPC_device) {\n  // ...\n  } else if (Kind == OMPC_grainsize) {\n    // ...\n    if (getLangOpts().OpenMP >= 51) {\n      if (NextToken().is(tok::colon)) {\n      // ...\n      } else {\n        if (Modifier == OMPC_GRAINSIZE_strict) {\n          Diag(Tok, diag::err_modifier_expected_colon) << \"strict\";"},{"clang/lib/Parse/ParseOpenMP.cpp",3969,"/// Parsing of OpenMP clauses with single expressions and some additional\n/// argument like \'schedule\' or \'dist_schedule\'.\n///\n///    schedule-clause:\n///      \'schedule\' \'(\' [ modifier [ \',\' modifier ] \':\' ] kind [\',\' expression ]\n///      \')\'\n///\n///    if-clause:\n///      \'if\' \'(\' [ directive-name-modifier \':\' ] expression \')\'\n///\n///    defaultmap:\n///      \'defaultmap\' \'(\' modifier [ \':\' kind ] \')\'\n///\n///    device-clause:\n///      \'device\' \'(\' [ device-modifier \':\' ] expression \')\'\n///\nOMPClause *Parser::ParseOpenMPSingleExprWithArgClause(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, bool ParseOnly) {\n  // ...\n  if (Kind == OMPC_schedule) {\n  // ...\n  } else if (Kind == OMPC_dist_schedule) {\n  // ...\n  } else if (Kind == OMPC_defaultmap) {\n  // ...\n  } else if (Kind == OMPC_order) {\n  // ...\n  } else if (Kind == OMPC_device) {\n  // ...\n  } else if (Kind == OMPC_grainsize) {\n  // ...\n  } else if (Kind == OMPC_num_tasks) {\n    // ...\n    if (getLangOpts().OpenMP >= 51) {\n      if (NextToken().is(tok::colon)) {\n      // ...\n      } else {\n        if (Modifier == OMPC_NUMTASKS_strict) {\n          Diag(Tok, diag::err_modifier_expected_colon) << \"strict\";"}},
[j]={{"clang/lib/Parse/ParseOpenMP.cpp",3942,"/// Parsing of OpenMP clauses with single expressions and some additional\n/// argument like \'schedule\' or \'dist_schedule\'.\n///\n///    schedule-clause:\n///      \'schedule\' \'(\' [ modifier [ \',\' modifier ] \':\' ] kind [\',\' expression ]\n///      \')\'\n///\n///    if-clause:\n///      \'if\' \'(\' [ directive-name-modifier \':\' ] expression \')\'\n///\n///    defaultmap:\n///      \'defaultmap\' \'(\' modifier [ \':\' kind ] \')\'\n///\n///    device-clause:\n///      \'device\' \'(\' [ device-modifier \':\' ] expression \')\'\n///\nOMPClause *Parser::ParseOpenMPSingleExprWithArgClause(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, bool ParseOnly) {\n  // ...\n  if (Kind == OMPC_schedule) {\n  // ...\n  } else if (Kind == OMPC_dist_schedule) {\n  // ...\n  } else if (Kind == OMPC_defaultmap) {\n  // ...\n  } else if (Kind == OMPC_order) {\n  // ...\n  } else if (Kind == OMPC_device) {\n  // ...\n  } else if (Kind == OMPC_grainsize) {\n    // ...\n    if (getLangOpts().OpenMP >= 51) {\n      if (NextToken().is(tok::colon)) {\n      // ...\n      } else {\n        if (Modifier == OMPC_GRAINSIZE_strict) {\n          Diag(Tok, diag::err_modifier_expected_colon) << \"strict\";"},{"clang/lib/Parse/ParseOpenMP.cpp",3969,"/// Parsing of OpenMP clauses with single expressions and some additional\n/// argument like \'schedule\' or \'dist_schedule\'.\n///\n///    schedule-clause:\n///      \'schedule\' \'(\' [ modifier [ \',\' modifier ] \':\' ] kind [\',\' expression ]\n///      \')\'\n///\n///    if-clause:\n///      \'if\' \'(\' [ directive-name-modifier \':\' ] expression \')\'\n///\n///    defaultmap:\n///      \'defaultmap\' \'(\' modifier [ \':\' kind ] \')\'\n///\n///    device-clause:\n///      \'device\' \'(\' [ device-modifier \':\' ] expression \')\'\n///\nOMPClause *Parser::ParseOpenMPSingleExprWithArgClause(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, bool ParseOnly) {\n  // ...\n  if (Kind == OMPC_schedule) {\n  // ...\n  } else if (Kind == OMPC_dist_schedule) {\n  // ...\n  } else if (Kind == OMPC_defaultmap) {\n  // ...\n  } else if (Kind == OMPC_order) {\n  // ...\n  } else if (Kind == OMPC_device) {\n  // ...\n  } else if (Kind == OMPC_grainsize) {\n  // ...\n  } else if (Kind == OMPC_num_tasks) {\n    // ...\n    if (getLangOpts().OpenMP >= 51) {\n      if (NextToken().is(tok::colon)) {\n      // ...\n      } else {\n        if (Modifier == OMPC_NUMTASKS_strict) {\n          Diag(Tok, diag::err_modifier_expected_colon) << \"strict\";"}},
[l]={
[l]={
Line 1,609: Line 1,610:
},
},
["err_module_build_disabled"]={
["err_module_build_disabled"]={
[i]="err_module_build_disabled",
[c]="err_module_build_disabled",
[h]="module \'%0\' is needed but has not been provided, and implicit use of module files is disabled",
[d]="module \'%0\' is needed but has not been provided, and implicit use of module files is disabled",
[g]="module \'A\' is needed but has not been provided, and implicit use of module files is disabled",
[e]="module \'A\' is needed but has not been provided, and implicit use of module files is disabled",
[b]=T,
[f]=V,
[e]="module \'(.*?)\' is needed but has not been provided, and implicit use of module files is disabled",
[g]="module \'(.*?)\' is needed but has not been provided, and implicit use of module files is disabled",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"d2e8b04d6111",1424432681,"Add -fno-implicit-modules.","Add -fno-implicit-modules.\n\nIf this flag is set, we error out when a module build is required. This is\nuseful in environments where all required modules are passed via -fmodule-file.\n\nllvm-svn: 230006"},
[b]={"d2e8b04d6111",1424432681,"Add -fno-implicit-modules.","Add -fno-implicit-modules.\n\nIf this flag is set, we error out when a module build is required. This is\nuseful in environments where all required modules are passed via -fmodule-file.\n\nllvm-svn: 230006"},
[j]={{wb,1832,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  if (ModuleFilename.empty()) {\n    // ...\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_build_disabled) << ModuleName;"}},
[j]={{wb,1832,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  if (ModuleFilename.empty()) {\n    // ...\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_build_disabled) << ModuleName;"}},
[l]={
[l]={
Line 1,623: Line 1,624:
},
},
["err_module_build_requires_fmodules"]={
["err_module_build_requires_fmodules"]={
[i]={{nil,r,"err_module_build_requires_fmodules"}},
[c]={{nil,r,"err_module_build_requires_fmodules"}},
[h]={{nil,r,"module compilation requires \'-fmodules\'"}},
[d]={{nil,r,"module compilation requires \'-fmodules\'"}},
[g]={{nil,r,"module compilation requires \'-fmodules\'"}},
[e]={{nil,r,"module compilation requires \'-fmodules\'"}},
[b]=k,
[f]=k,
[e]="module compilation requires \'\\-fmodules\'",
[g]="module compilation requires \'\\-fmodules\'",
[d]=a,
[h]=a,
[f]={{nil,r,a}},
[i]={{nil,r,w}},
[c]={"1f2bd35b247b",1499375156,"Reject attempts to build a module without -fmodules, rather than silently doing weird things.","Reject attempts to build a module without -fmodules, rather than silently doing weird things.\n\nllvm-svn: 307316"},
[b]={"1f2bd35b247b",1499375156,"Reject attempts to build a module without -fmodules, rather than silently doing weird things.","Reject attempts to build a module without -fmodules, rather than silently doing weird things.\n\nllvm-svn: 307316"},
[j]={{"clang/lib/Frontend/FrontendActions.cpp",223,"bool GenerateModuleFromModuleMapAction::BeginSourceFileAction(CompilerInstance &CI) {\n  if (!CI.getLangOpts().Modules) {\n    CI.getDiagnostics().Report(diag::err_module_build_requires_fmodules);"}}
[j]={{"clang/lib/Frontend/FrontendActions.cpp",223,"bool GenerateModuleFromModuleMapAction::BeginSourceFileAction(CompilerInstance &CI) {\n  if (!CI.getLangOpts().Modules) {\n    CI.getDiagnostics().Report(diag::err_module_build_requires_fmodules);"}}
},
},
["err_module_build_shadowed_submodule"]={
["err_module_build_shadowed_submodule"]={
[i]={{nil,q,"err_module_build_shadowed_submodule"}},
[c]={{nil,q,"err_module_build_shadowed_submodule"}},
[h]={{nil,q,"build a shadowed submodule \'%0\'"}},
[d]={{nil,q,"build a shadowed submodule \'%0\'"}},
[g]={{nil,q,"build a shadowed submodule \'A\'"}},
[e]={{nil,q,"build a shadowed submodule \'A\'"}},
[b]=T,
[f]=V,
[e]="build a shadowed submodule \'(.*?)\'",
[g]="build a shadowed submodule \'(.*?)\'",
[d]=a,
[h]=a,
[f]={{nil,q,y}},
[i]={{nil,q,y}},
[c]={"b6ec4a33fb2b",1515032260,"[Modules] Allow modules specified by -fmodule-map-file to shadow implicitly found ones","[Modules] Allow modules specified by -fmodule-map-file to shadow implicitly found ones\n\nWhen modules come from module map files explicitly specified by\n-fmodule-map-file= arguments, allow those to override/shadow modules\nwith the same name that are found implicitly by header search. If such a\nmodule is looked up by name (e.g. @import), we will always find the one\nfrom -fmodule-map-file. If we try to use a shadowed module by including\none of its headers report an error.\n\nThis enables developers to force use of a specific copy of their module\nto be used if there are multiple copies that would otherwise be visible,\nfor example if they develop modules that are installed in the default\nsearch paths.\n\nPatch originally by Ben Langmuir,\nhttp://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20151116/143425.html\n\nBased on cfe-dev discussion:\nhttp://lists.llvm.org/pipermail/cfe-dev/2015-November/046164.html\n\nDifferential Revision: https://reviews.llvm.org/D31269\n\nrdar://problem/23612102\n\nllvm-svn: 321781"},
[b]={"b6ec4a33fb2b",1515032260,"[Modules] Allow modules specified by -fmodule-map-file to shadow implicitly found ones","[Modules] Allow modules specified by -fmodule-map-file to shadow implicitly found ones\n\nWhen modules come from module map files explicitly specified by\n-fmodule-map-file= arguments, allow those to override/shadow modules\nwith the same name that are found implicitly by header search. If such a\nmodule is looked up by name (e.g. @import), we will always find the one\nfrom -fmodule-map-file. If we try to use a shadowed module by including\none of its headers report an error.\n\nThis enables developers to force use of a specific copy of their module\nto be used if there are multiple copies that would otherwise be visible,\nfor example if they develop modules that are installed in the default\nsearch paths.\n\nPatch originally by Ben Langmuir,\nhttp://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20151116/143425.html\n\nBased on cfe-dev discussion:\nhttp://lists.llvm.org/pipermail/cfe-dev/2015-November/046164.html\n\nDifferential Revision: https://reviews.llvm.org/D31269\n\nrdar://problem/23612102\n\nllvm-svn: 321781"},
[j]={{"clang/lib/Lex/PPDirectives.cpp",2553,"#endif\n  // ...\n  // Determine if we\'re switching to building a new submodule, and which one.\n  // This does not apply for C++20 modules header units.\n  if (SM && !SM->isHeaderUnit()) {\n    if (SM->getTopLevelModule()->ShadowingModule) {\n      // ...\n      Diag(SM->DefinitionLoc, diag::err_module_build_shadowed_submodule) << SM->getFullModuleName();"}}
[j]={{"clang/lib/Lex/PPDirectives.cpp",2553,"#endif\n  // ...\n  // Determine if we\'re switching to building a new submodule, and which one.\n  // This does not apply for C++20 modules header units.\n  if (SM && !SM->isHeaderUnit()) {\n    if (SM->getTopLevelModule()->ShadowingModule) {\n      // ...\n      Diag(SM->DefinitionLoc, diag::err_module_build_shadowed_submodule) << SM->getFullModuleName();"}}
},
},
["err_module_cannot_create_includes"]={
["err_module_cannot_create_includes"]={
[i]="err_module_cannot_create_includes",
[c]="err_module_cannot_create_includes",
[h]="cannot create includes file for module %0: %1",
[d]="cannot create includes file for module %0: %1",
[g]="cannot create includes file for module A: B",
[e]="cannot create includes file for module A: B",
[b]=k,
[f]=k,
[e]="cannot create includes file for module (.*?)\\: (.*?)",
[g]="cannot create includes file for module (.*?)\\: (.*?)",
[d]=a,
[h]=a,
[f]=a,
[i]=w,
[c]={"723928c7dcc7",1394503367,"If a module map is found in a relative -I path, convert the filenames within it","If a module map is found in a relative -I path, convert the filenames within it\nto absolute paths when building the includes file for the module. Without this,\nthe module build would fail, because the relative paths we were using are not\nnecessarily relative to a directory in our include path.\n\nllvm-svn: 203528"},
[b]={"723928c7dcc7",1394503367,"If a module map is found in a relative -I path, convert the filenames within it","If a module map is found in a relative -I path, convert the filenames within it\nto absolute paths when building the includes file for the module. Without this,\nthe module build would fail, because the relative paths we were using are not\nnecessarily relative to a directory in our include path.\n\nllvm-svn: 203528"},
[j]={{Ob,567,"/// Compute the input buffer that should be used to build the specified module.\nstatic std::unique_ptr<llvm::MemoryBuffer> getInputBufferForModule(CompilerInstance &CI, Module *M) {\n  // ...\n  if (Err) {\n    CI.getDiagnostics().Report(diag::err_module_cannot_create_includes) << M->getFullModuleName() << Err.message();"}}
[j]={{Pb,567,"/// Compute the input buffer that should be used to build the specified module.\nstatic std::unique_ptr<llvm::MemoryBuffer> getInputBufferForModule(CompilerInstance &CI, Module *M) {\n  // ...\n  if (Err) {\n    CI.getDiagnostics().Report(diag::err_module_cannot_create_includes) << M->getFullModuleName() << Err.message();"}}
},
},
["err_module_cycle"]={
["err_module_cycle"]={
[i]="err_module_cycle",
[c]="err_module_cycle",
[h]="cyclic dependency in module \'%0\': %1",
[d]="cyclic dependency in module \'%0\': %1",
[g]="cyclic dependency in module \'A\': B",
[e]="cyclic dependency in module \'A\': B",
[b]=T,
[f]=V,
[e]="cyclic dependency in module \'(.*?)\'\\: (.*?)",
[g]="cyclic dependency in module \'(.*?)\'\\: (.*?)",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"dff0e892db7c",1316119210,"Detect cyclic module dependencies in a manner that is rather more","Detect cyclic module dependencies in a manner that is rather more\ngraceful than running out of stack space.\n\nllvm-svn: 139833"},
[b]={"dff0e892db7c",1316119210,"Detect cyclic module dependencies in a manner that is rather more","Detect cyclic module dependencies in a manner that is rather more\ngraceful than running out of stack space.\n\nllvm-svn: 139833"},
[j]={{wb,1938,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  if (Pos != PosEnd) {\n    // ...\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_cycle) << ModuleName << CyclePath;"}}
[j]={{wb,1938,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  if (Pos != PosEnd) {\n    // ...\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_cycle) << ModuleName << CyclePath;"}}
},
},
["err_module_decl_in_header_unit"]={
["err_module_decl_in_header_unit"]={
[i]={{nil,p,"err_module_decl_in_header_unit"}},
[c]={{nil,p,"err_module_decl_in_header_unit"}},
[h]={{nil,p,"\'module\' declaration found while building header unit"}},
[d]={{nil,p,"\'module\' declaration found while building header unit"}},
[g]={{nil,p,"\'module\' declaration found while building header unit"}},
[e]={{nil,p,"\'module\' declaration found while building header unit"}},
[b]=k,
[f]=k,
[e]="\'module\' declaration found while building header unit",
[g]="\'module\' declaration found while building header unit",
[d]=a,
[h]=a,
[f]={{nil,p,M}},
[i]={{nil,p,O}},
[c]={Ac,1625925174,zc,sc},
[b]={nc,1625925174,kc,Dc},
[j]={{mb,225,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case LangOptions::CMK_HeaderUnit:\n    Diag(ModuleLoc, diag::err_module_decl_in_header_unit);"}}
[j]={{nb,225,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case LangOptions::CMK_HeaderUnit:\n    Diag(ModuleLoc, diag::err_module_decl_in_header_unit);"}}
},
},
["err_module_decl_in_module_map_module"]={
["err_module_decl_in_module_map_module"]={
[i]={{nil,r,"err_module_decl_in_module_map_module"}},
[c]={{nil,r,"err_module_decl_in_module_map_module"}},
[h]={{nil,r,"\'module\' declaration found while building module from module map"}},
[d]={{nil,r,"\'module\' declaration found while building module from module map"}},
[g]={{nil,r,"\'module\' declaration found while building module from module map"}},
[e]={{nil,r,"\'module\' declaration found while building module from module map"}},
[b]=k,
[f]=k,
[e]="\'module\' declaration found while building module from module map",
[g]="\'module\' declaration found while building module from module map",
[d]=a,
[h]=a,
[f]={{nil,r,M}},
[i]={{nil,r,O}},
[c]={"81328ac3a5b1",1492814358,"P0629R0: Switch to latest proposal for distinguishing module interface from implementation.","P0629R0: Switch to latest proposal for distinguishing module interface from implementation.\n\nThis switches from the prototype syntax in P0273R0 (\'module\' and \'module\nimplementation\') to the consensus syntax \'export module\' and \'module\'.\n\nIn passing, drop the \"module declaration must be first\" enforcement, since EWG\nseems to have changed its mind on that.\n\nllvm-svn: 301056"},
[b]={"81328ac3a5b1",1492814358,"P0629R0: Switch to latest proposal for distinguishing module interface from implementation.","P0629R0: Switch to latest proposal for distinguishing module interface from implementation.\n\nThis switches from the prototype syntax in P0273R0 (\'module\' and \'module\nimplementation\') to the consensus syntax \'export module\' and \'module\'.\n\nIn passing, drop the \"module declaration must be first\" enforcement, since EWG\nseems to have changed its mind on that.\n\nllvm-svn: 301056"},
[j]={{mb,221,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case LangOptions::CMK_ModuleMap:\n    Diag(ModuleLoc, diag::err_module_decl_in_module_map_module);"}}
[j]={{nb,221,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case LangOptions::CMK_ModuleMap:\n    Diag(ModuleLoc, diag::err_module_decl_in_module_map_module);"}}
},
},
["err_module_decl_not_at_start"]={
["err_module_decl_not_at_start"]={
[i]={{nil,x,"err_module_decl_not_at_start"}},
[c]={{nil,z,"err_module_decl_not_at_start"}},
[h]={{nil,x,"module declaration must occur at the start of the translation unit"}},
[d]={{nil,z,"module declaration must occur at the start of the translation unit"}},
[g]={{nil,x,"module declaration must occur at the start of the translation unit"}},
[e]={{nil,z,"module declaration must occur at the start of the translation unit"}},
[b]=k,
[f]=k,
[e]="module declaration must occur at the start of the translation unit",
[g]="module declaration must occur at the start of the translation unit",
[d]=a,
[h]=a,
[f]={{nil,x,M}},
[i]={{nil,z,O}},
[c]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,\nand the global and private module fragment.\n\nFor now, the private module fragment introducer is ignored, but use of\nthe global module fragment introducer should be properly enforced.\n\nllvm-svn: 358353"},
[b]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,\nand the global and private module fragment.\n\nFor now, the private module fragment introducer is ignored, but use of\nthe global module fragment introducer should be properly enforced.\n\nllvm-svn: 358353"},
[j]={{mb,249,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\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    Diag(ModuleLoc, diag::err_module_decl_not_at_start);"}},
[j]={{nb,249,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\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    Diag(ModuleLoc, diag::err_module_decl_not_at_start);"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:24:8: error: module declaration must occur at the start of the translation unit"}
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:24:8: error: module declaration must occur at the start of the translation unit"}
Line 1,703: Line 1,704:
},
},
["err_module_declaration_missing"]={
["err_module_declaration_missing"]={
[i]={{nil,t,"err_module_declaration_missing"}},
[c]={{nil,t,"err_module_declaration_missing"}},
[h]={{nil,t,"missing \'export module\' declaration in module interface unit"}},
[d]={{nil,t,"missing \'export module\' declaration in module interface unit"}},
[g]={{nil,t,"missing \'export module\' declaration in module interface unit"}},
[e]={{nil,t,"missing \'export module\' declaration in module interface unit"}},
[b]=k,
[f]=k,
[e]="missing \'export module\' declaration in module interface unit",
[g]="missing \'export module\' declaration in module interface unit",
[d]=a,
[h]=a,
[f]={{nil,t,M}},
[i]={{nil,t,O}},
[c]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration.","[Modules TS] Diagnose missing/duplicate module-declaration.\n\nllvm-svn: 315397"},
[b]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration.","[Modules TS] Diagnose missing/duplicate module-declaration.\n\nllvm-svn: 315397"},
[j]={{"clang/lib/Sema/Sema.cpp",1222,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  if (TUKind == TU_Module) {\n    // If we are building a module interface unit, we need to have seen the\n    // module declaration by now.\n    if (getLangOpts().getCompilingModule() == LangOptions::CMK_ModuleInterface && !isCurrentModulePurview() && !DiagnosedMissingModuleDeclaration) {\n      // ...\n      Diag(getSourceManager().getLocForStartOfFile(getSourceManager().getMainFileID()), diag::err_module_declaration_missing);"}}
[j]={{"clang/lib/Sema/Sema.cpp",1222,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  if (TUKind == TU_Module) {\n    // If we are building a module interface unit, we need to have seen the\n    // module declaration by now.\n    if (getLangOpts().getCompilingModule() == LangOptions::CMK_ModuleInterface && !isCurrentModulePurview() && !DiagnosedMissingModuleDeclaration) {\n      // ...\n      Diag(getSourceManager().getLocForStartOfFile(getSourceManager().getMainFileID()), diag::err_module_declaration_missing);"}}
},
},
["err_module_declaration_missing_after_global_module_introducer"]={
["err_module_declaration_missing_after_global_module_introducer"]={
[i]={{nil,x,"err_module_declaration_missing_after_global_module_introducer"}},
[c]={{nil,z,"err_module_declaration_missing_after_global_module_introducer"}},
[h]={{nil,x,"missing \'module\' declaration at end of global module fragment introduced here"}},
[d]={{nil,z,"missing \'module\' declaration at end of global module fragment introduced here"}},
[g]={{nil,x,"missing \'module\' declaration at end of global module fragment introduced here"}},
[e]={{nil,z,"missing \'module\' declaration at end of global module fragment introduced here"}},
[b]=k,
[f]=k,
[e]="missing \'module\' declaration at end of global module fragment introduced here",
[g]="missing \'module\' declaration at end of global module fragment introduced here",
[d]=a,
[h]=a,
[f]={{nil,x,M}},
[i]={{nil,z,O}},
[c]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,\nand the global and private module fragment.\n\nFor now, the private module fragment introducer is ignored, but use of\nthe global module fragment introducer should be properly enforced.\n\nllvm-svn: 358353"},
[b]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,\nand the global and private module fragment.\n\nFor now, the private module fragment introducer is ignored, but use of\nthe global module fragment introducer should be properly enforced.\n\nllvm-svn: 358353"},
[j]={{"clang/lib/Sema/Sema.cpp",1209,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  if (!ModuleScopes.empty() && ModuleScopes.back().Module->Kind == Module::ExplicitGlobalModuleFragment) {\n    Diag(ModuleScopes.back().BeginLoc, diag::err_module_declaration_missing_after_global_module_introducer);"}},
[j]={{"clang/lib/Sema/Sema.cpp",1209,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  if (!ModuleScopes.empty() && ModuleScopes.back().Module->Kind == Module::ExplicitGlobalModuleFragment) {\n    Diag(ModuleScopes.back().BeginLoc, diag::err_module_declaration_missing_after_global_module_introducer);"}},
[l]={
[l]={
Line 1,728: Line 1,729:
},
},
["err_module_different_modmap"]={
["err_module_different_modmap"]={
[i]="err_module_different_modmap",
[c]="err_module_different_modmap",
[h]="module \'%0\' %select{uses|does not use}1 additional module map \'%2\'%select{| not}1 used when the module was built",
[d]="module \'%0\' %select{uses|does not use}1 additional module map \'%2\'%select{| not}1 used when the module was built",
[g]={{nil,nil,{"module \'A\' ",{"uses","does not use"}," additional module map \'C\'",{a," not"}," used when the module was built"}}},
[e]={{nil,nil,{"module \'A\' ",{"uses","does not use"}," additional module map \'C\'",{a," not"}," used when the module was built"}}},
[b]=k,
[f]=k,
[e]="module \'(.*?)\' (?:uses|does not use) additional module map \'(.*?)\'(?:| not) used when the module was built",
[g]="module \'(.*?)\' (?:uses|does not use) additional module map \'(.*?)\'(?:| not) used when the module was built",
[d]=a,
[h]=a,
[f]=X,
[i]=bb,
[c]={"4b8a9e951e09",1407861753,"Verify all the module map files for a pcm are the same on load","Verify all the module map files for a pcm are the same on load\n\nWe already verified the primary module map file (either the one that\ndefines the top-level module, or the one that allows inferring it if it\nis an inferred framework module). Now we also verify any other module\nmap files that define submodules, such as when there is a\nmodule.private.modulemap file.\n\nllvm-svn: 215455"},
[b]={"4b8a9e951e09",1407861753,"Verify all the module map files for a pcm are the same on load","Verify all the module map files for a pcm are the same on load\n\nWe already verified the primary module map file (either the one that\ndefines the top-level module, or the one that allows inferring it if it\nis an inferred framework module). Now we also verify any other module\nmap files that define submodules, such as when there is a\nmodule.private.modulemap file.\n\nllvm-svn: 215455"},
[j]={{Ib,4067,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n    // ...\n    // Check any additional module map files (e.g. module.private.modulemap)\n    // that are not in the pcm.\n    if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {\n      for (const FileEntry *ModMap : *AdditionalModuleMaps) {\n        // Remove files that match\n        // Note: SmallPtrSet::erase is really remove\n        if (!AdditionalStoredMaps.erase(ModMap)) {\n          if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))\n            Diag(diag::err_module_different_modmap) << F.ModuleName << /*new*/ 0 << ModMap->getName();"},{Ib,4078,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n    // ...\n    // Check any additional module map files that are in the pcm, but not\n    // found in header search. Cases that match are already removed.\n    for (const FileEntry *ModMap : AdditionalStoredMaps) {\n      if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))\n        Diag(diag::err_module_different_modmap) << F.ModuleName << /*not new*/ 1 << ModMap->getName();"}}
[j]={{Ib,4067,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n    // ...\n    // Check any additional module map files (e.g. module.private.modulemap)\n    // that are not in the pcm.\n    if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {\n      for (const FileEntry *ModMap : *AdditionalModuleMaps) {\n        // Remove files that match\n        // Note: SmallPtrSet::erase is really remove\n        if (!AdditionalStoredMaps.erase(ModMap)) {\n          if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))\n            Diag(diag::err_module_different_modmap) << F.ModuleName << /*new*/ 0 << ModMap->getName();"},{Ib,4078,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n    // ...\n    // Check any additional module map files that are in the pcm, but not\n    // found in header search. Cases that match are already removed.\n    for (const FileEntry *ModMap : AdditionalStoredMaps) {\n      if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))\n        Diag(diag::err_module_different_modmap) << F.ModuleName << /*not new*/ 1 << ModMap->getName();"}}
},
},
["err_module_expected_ident"]={
["err_module_expected_ident"]={
[i]="err_module_expected_ident",
[c]="err_module_expected_ident",
[h]="expected a module name after module%select{| import}0",
[d]="expected a module name after module%select{| import}0",
[g]={{nil,r,{"expected a module name after \'",{"module","import"},"\'"}},{nil,nil,{"expected a module name after module",{a," import"}}}},
[e]={{nil,r,{"expected a module name after \'",{"module","import"},"\'"}},{nil,nil,{"expected a module name after module",{a," import"}}}},
[b]=k,
[f]=k,
[e]="expected a module name after \'(?:module|import)\'",
[g]="expected a module name after \'(?:module|import)\'",
[d]=a,
[h]=a,
[f]=M,
[i]=O,
[c]={"081425343b18",1314402967,"Introduce support for a simple module import declaration, which","Introduce support for a simple module import declaration, which\nloads the named module. The syntax itself is intentionally hideous and\nwill be replaced at some later point with something more\npalatable. For now, we\'re focusing on the semantics:\n  - Module imports are handled first by the preprocessor (to get macro\n  definitions) and then the same tokens are also handled by the parser\n  (to get declarations). If both happen (as in normal compilation),\n  the second one is redundant, because we currently have no way to\n  hide macros or declarations when loading a module. Chris gets credit\n  for this mad-but-workable scheme.\n  - The Preprocessor now holds on to a reference to a module loader,\n  which is responsible for loading named modules. CompilerInstance is\n  the only important module loader: it now knows how to create and\n  wire up an AST reader on demand to actually perform the module load.\n  - We search for modules in the include path, using the module name\n  with the suffix \".pcm\" (precompiled module) for the file name. This\n  is a temporary hack; we hope to improve the situation in the\n  future.\n\nllvm-svn: 138679"},
[b]={"081425343b18",1314402967,"Introduce support for a simple module import declaration, which","Introduce support for a simple module import declaration, which\nloads the named module. The syntax itself is intentionally hideous and\nwill be replaced at some later point with something more\npalatable. For now, we\'re focusing on the semantics:\n  - Module imports are handled first by the preprocessor (to get macro\n  definitions) and then the same tokens are also handled by the parser\n  (to get declarations). If both happen (as in normal compilation),\n  the second one is redundant, because we currently have no way to\n  hide macros or declarations when loading a module. Chris gets credit\n  for this mad-but-workable scheme.\n  - The Preprocessor now holds on to a reference to a module loader,\n  which is responsible for loading named modules. CompilerInstance is\n  the only important module loader: it now knows how to create and\n  wire up an AST reader on demand to actually perform the module load.\n  - We search for modules in the include path, using the module name\n  with the suffix \".pcm\" (precompiled module) for the file name. This\n  is a temporary hack; we hope to improve the situation in the\n  future.\n\nllvm-svn: 138679"},
[j]={{Cb,2632,"/// Parse a C++ / Objective-C module name (both forms use the same\n/// grammar).\n///\n///        module-name:\n///          module-name-qualifier[opt] identifier\n///        module-name-qualifier:\n///          module-name-qualifier[opt] identifier \'.\'\nbool Parser::ParseModuleName(SourceLocation UseLoc, SmallVectorImpl<std::pair<IdentifierInfo *, SourceLocation>> &Path, bool IsImport) {\n  // Parse the module path.\n  while (true) {\n    if (!Tok.is(tok::identifier)) {\n      // ...\n      Diag(Tok, diag::err_module_expected_ident) << IsImport;"}}
[j]={{Nb,2632,"/// Parse a C++ / Objective-C module name (both forms use the same\n/// grammar).\n///\n///        module-name:\n///          module-name-qualifier[opt] identifier\n///        module-name-qualifier:\n///          module-name-qualifier[opt] identifier \'.\'\nbool Parser::ParseModuleName(SourceLocation UseLoc, SmallVectorImpl<std::pair<IdentifierInfo *, SourceLocation>> &Path, bool IsImport) {\n  // Parse the module path.\n  while (true) {\n    if (!Tok.is(tok::identifier)) {\n      // ...\n      Diag(Tok, diag::err_module_expected_ident) << IsImport;"}}
},
},
["err_module_expected_semi"]={
["err_module_expected_semi"]={
[i]="err_module_expected_semi",
[c]="err_module_expected_semi",
[h]="expected \';\' after module name",
[d]="expected \';\' after module name",
[e]="expected \';\' after module name",
[f]=k,
[g]="expected \';\' after module name",
[g]="expected \';\' after module name",
[b]=k,
[h]=a,
[e]="expected \';\' after module name",
[i]=O,
[d]=a,
[b]={"081425343b18",1314402967,"Introduce support for a simple module import declaration, which","Introduce support for a simple module import declaration, which\nloads the named module. The syntax itself is intentionally hideous and\nwill be replaced at some later point with something more\npalatable. For now, we\'re focusing on the semantics:\n  - Module imports are handled first by the preprocessor (to get macro\n  definitions) and then the same tokens are also handled by the parser\n  (to get declarations). If both happen (as in normal compilation),\n  the second one is redundant, because we currently have no way to\n  hide macros or declarations when loading a module. Chris gets credit\n  for this mad-but-workable scheme.\n  - The Preprocessor now holds on to a reference to a module loader,\n  which is responsible for loading named modules. CompilerInstance is\n  the only important module loader: it now knows how to create and\n  wire up an AST reader on demand to actually perform the module load.\n  - We search for modules in the include path, using the module name\n  with the suffix \".pcm\" (precompiled module) for the file name. This\n  is a temporary hack; we hope to improve the situation in the\n  future.\n\nllvm-svn: 138679"},
[f]=M,
[j]={{Nb,2469,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n///  module-declaration:  [C++20]\n///    \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n///  global-module-fragment:  [C++2a]\n///    \'module\' \';\' top-level-declaration-seq[opt]\n///  module-declaration:      [C++2a]\n///    \'export\'[opt] \'module\' module-name module-partition[opt]\n///            attribute-specifier-seq[opt] \';\'\n///  private-module-fragment: [C++2a]\n///    \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n  // ...\n  ExpectAndConsumeSemi(diag::err_module_expected_semi);"},{Nb,2584,"/// Parse a module import declaration. This is essentially the same for\n/// Objective-C and C++20 except for the leading \'@\' (in ObjC) and the\n/// trailing optional attributes (in C++).\n///\n/// [ObjC]  @import declaration:\n///          \'@\' \'import\' module-name \';\'\n/// [ModTS] module-import-declaration:\n///          \'import\' module-name attribute-specifier-seq[opt] \';\'\n/// [C++20] module-import-declaration:\n///          \'export\'[opt] \'import\' module-name\n///                  attribute-specifier-seq[opt] \';\'\n///          \'export\'[opt] \'import\' module-partition\n///                  attribute-specifier-seq[opt] \';\'\n///          \'export\'[opt] \'import\' header-name\n///                  attribute-specifier-seq[opt] \';\'\nDecl *Parser::ParseModuleImport(SourceLocation AtLoc, Sema::ModuleImportState &ImportState) {\n  // ...\n  if (SeenError) {\n    ExpectAndConsumeSemi(diag::err_module_expected_semi);"},{Nb,2595,"/// Parse a module import declaration. This is essentially the same for\n/// Objective-C and C++20 except for the leading \'@\' (in ObjC) and the\n/// trailing optional attributes (in C++).\n///\n/// [ObjC]  @import declaration:\n///          \'@\' \'import\' module-name \';\'\n/// [ModTS] module-import-declaration:\n///          \'import\' module-name attribute-specifier-seq[opt] \';\'\n/// [C++20] module-import-declaration:\n///          \'export\'[opt] \'import\' module-name\n///                  attribute-specifier-seq[opt] \';\'\n///          \'export\'[opt] \'import\' module-partition\n///                  attribute-specifier-seq[opt] \';\'\n///          \'export\'[opt] \'import\' header-name\n///                  attribute-specifier-seq[opt] \';\'\nDecl *Parser::ParseModuleImport(SourceLocation AtLoc, Sema::ModuleImportState &ImportState) {\n  // ...\n  ExpectAndConsumeSemi(diag::err_module_expected_semi);"}},
[c]={"081425343b18",1314402967,"Introduce support for a simple module import declaration, which","Introduce support for a simple module import declaration, which\nloads the named module. The syntax itself is intentionally hideous and\nwill be replaced at some later point with something more\npalatable. For now, we\'re focusing on the semantics:\n  - Module imports are handled first by the preprocessor (to get macro\n  definitions) and then the same tokens are also handled by the parser\n  (to get declarations). If both happen (as in normal compilation),\n  the second one is redundant, because we currently have no way to\n  hide macros or declarations when loading a module. Chris gets credit\n  for this mad-but-workable scheme.\n  - The Preprocessor now holds on to a reference to a module loader,\n  which is responsible for loading named modules. CompilerInstance is\n  the only important module loader: it now knows how to create and\n  wire up an AST reader on demand to actually perform the module load.\n  - We search for modules in the include path, using the module name\n  with the suffix \".pcm\" (precompiled module) for the file name. This\n  is a temporary hack; we hope to improve the situation in the\n  future.\n\nllvm-svn: 138679"},
[j]={{Cb,2469,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n///  module-declaration:  [C++20]\n///    \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n///  global-module-fragment:  [C++2a]\n///    \'module\' \';\' top-level-declaration-seq[opt]\n///  module-declaration:      [C++2a]\n///    \'export\'[opt] \'module\' module-name module-partition[opt]\n///            attribute-specifier-seq[opt] \';\'\n///  private-module-fragment: [C++2a]\n///    \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n  // ...\n  ExpectAndConsumeSemi(diag::err_module_expected_semi);"},{Cb,2584,"/// Parse a module import declaration. This is essentially the same for\n/// Objective-C and C++20 except for the leading \'@\' (in ObjC) and the\n/// trailing optional attributes (in C++).\n///\n/// [ObjC]  @import declaration:\n///          \'@\' \'import\' module-name \';\'\n/// [ModTS] module-import-declaration:\n///          \'import\' module-name attribute-specifier-seq[opt] \';\'\n/// [C++20] module-import-declaration:\n///          \'export\'[opt] \'import\' module-name\n///                  attribute-specifier-seq[opt] \';\'\n///          \'export\'[opt] \'import\' module-partition\n///                  attribute-specifier-seq[opt] \';\'\n///          \'export\'[opt] \'import\' header-name\n///                  attribute-specifier-seq[opt] \';\'\nDecl *Parser::ParseModuleImport(SourceLocation AtLoc, Sema::ModuleImportState &ImportState) {\n  // ...\n  if (SeenError) {\n    ExpectAndConsumeSemi(diag::err_module_expected_semi);"},{Cb,2595,"/// Parse a module import declaration. This is essentially the same for\n/// Objective-C and C++20 except for the leading \'@\' (in ObjC) and the\n/// trailing optional attributes (in C++).\n///\n/// [ObjC]  @import declaration:\n///          \'@\' \'import\' module-name \';\'\n/// [ModTS] module-import-declaration:\n///          \'import\' module-name attribute-specifier-seq[opt] \';\'\n/// [C++20] module-import-declaration:\n///          \'export\'[opt] \'import\' module-name\n///                  attribute-specifier-seq[opt] \';\'\n///          \'export\'[opt] \'import\' module-partition\n///                  attribute-specifier-seq[opt] \';\'\n///          \'export\'[opt] \'import\' header-name\n///                  attribute-specifier-seq[opt] \';\'\nDecl *Parser::ParseModuleImport(SourceLocation AtLoc, Sema::ModuleImportState &ImportState) {\n  // ...\n  ExpectAndConsumeSemi(diag::err_module_expected_semi);"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.link/p3.cpp"]={"clang/test/CXX/basic/basic.link/p3.cpp:32:9: error: expected \';\' after module name"}
["clang/test/CXX/basic/basic.link/p3.cpp"]={"clang/test/CXX/basic/basic.link/p3.cpp:32:9: error: expected \';\' after module name"}
Line 1,764: Line 1,765:
},
},
["err_module_file_conflict"]={
["err_module_file_conflict"]={
[i]="err_module_file_conflict",
[c]="err_module_file_conflict",
[h]="module \'%0\' is defined in both \'%1\' and \'%2\'",
[d]="module \'%0\' is defined in both \'%1\' and \'%2\'",
[g]="module \'A\' is defined in both \'B\' and \'C\'",
[e]="module \'A\' is defined in both \'B\' and \'C\'",
[b]=T,
[f]=V,
[e]="module \'(.*?)\' is defined in both \'(.*?)\' and \'(.*?)\'",
[g]="module \'(.*?)\' is defined in both \'(.*?)\' and \'(.*?)\'",
[d]=a,
[h]=a,
[f]=X,
[i]=bb,
[c]={"8a114ab557f0",1360190431,"Detect when we end up trying to load conflicting module files.","Detect when we end up trying to load conflicting module files.\n\nThis can happen when one abuses precompiled headers by passing more -D\noptions when using a precompiled hedaer than when it was built. This\nis intentionally permitted by precompiled headers (and is exploited by\nsome build environments), but causes problems for modules.\n\nFirst part of <rdar://problem/13165109>, detecting when something when\nhorribly wrong.\n\nllvm-svn: 174554"},
[b]={"8a114ab557f0",1360190431,"Detect when we end up trying to load conflicting module files.","Detect when we end up trying to load conflicting module files.\n\nThis can happen when one abuses precompiled headers by passing more -D\noptions when using a precompiled hedaer than when it was built. This\nis intentionally permitted by precompiled headers (and is exploited by\nsome build environments), but causes problems for modules.\n\nFirst part of <rdar://problem/13165109>, detecting when something when\nhorribly wrong.\n\nllvm-svn: 174554"},
[j]={{Ib,4011,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n    // ...\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          // ...\n          Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName << ASTFE->getName();"},{Ib,5658,"llvm::Error ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case SUBMODULE_DEFINITION: {\n      // ...\n      if (!ParentModule) {\n        if (const FileEntry *CurFile = CurrentModule->getASTFile()) {\n          // Don\'t emit module relocation error if we have -fno-validate-pch\n          if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation & DisableValidationForModuleKind::Module) && CurFile != F.File) {\n            auto ConflictError = PartialDiagnostic(diag::err_module_file_conflict, ContextObj->DiagAllocator) << CurrentModule->getTopLevelModuleName() << CurFile->getName() << F.File->getName();"}},
[j]={{Ib,4011,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n    // ...\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          // ...\n          Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName << ASTFE->getName();"},{Ib,5658,"llvm::Error ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case SUBMODULE_DEFINITION: {\n      // ...\n      if (!ParentModule) {\n        if (const FileEntry *CurFile = CurrentModule->getASTFile()) {\n          // Don\'t emit module relocation error if we have -fno-validate-pch\n          if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation & DisableValidationForModuleKind::Module) && CurFile != F.File) {\n            auto ConflictError = PartialDiagnostic(diag::err_module_file_conflict, ContextObj->DiagAllocator) << CurrentModule->getTopLevelModuleName() << CurFile->getName() << F.File->getName();"}},
[l]={
[l]={
Line 1,778: Line 1,779:
},
},
["err_module_file_missing_top_level_submodule"]={
["err_module_file_missing_top_level_submodule"]={
[i]={{nil,n,"err_module_file_missing_top_level_submodule"}},
[c]={{nil,n,"err_module_file_missing_top_level_submodule"}},
[h]={{nil,n,"module file \'%0\' is missing its top-level submodule"}},
[d]={{nil,n,"module file \'%0\' is missing its top-level submodule"}},
[g]={{nil,n,"module file \'A\' is missing its top-level submodule"}},
[e]={{nil,n,"module file \'A\' is missing its top-level submodule"}},
[b]=T,
[f]=V,
[e]="module file \'(.*?)\' is missing its top\\-level submodule",
[g]="module file \'(.*?)\' is missing its top\\-level submodule",
[d]=a,
[h]=a,
[f]={{nil,n,X}},
[i]={{nil,n,bb}},
[c]={"83dcb34b6bf4",1573420492,"clang/Modules: Error if ReadASTBlock does not find the main module","clang/Modules: Error if ReadASTBlock does not find the main module\n\nIf ReadASTBlock does not find its top-level submodule, there\'s something\nwrong the with the PCM.  Error in that case, to avoid hitting problems\nfurther from the source.\n\nNote that the Swift compiler sometimes hits a case in\nCompilerInstance::loadModule where the top-level submodule mysteriously\ndoes not have Module::IsFromModuleFile set.  That will emit a confusing\nwarn_missing_submodule, which was never intended for the main module.\nThe recent audit of error-handling in ReadAST may have rooted out the\nreal problem.  If not, this commit will help to clarify the real\nproblem, and replace a confusing warning with an error pointing at the\nmalformed PCM file.\n\nWe\'re specifically sniffing out whether the top-level submodule was\nfound/processed, in case there is a malformed module file that is\nmissing it.  If there is an error encountered during ReadSubmoduleBlock\nthe return status should already propagate through.  It would be nice to\ndetect other missing submodules around here to catch other instances of\nwarn_missing_submodule closer to the source, but that\'s left as a future\nexercise.\n\nhttps://reviews.llvm.org/D70063"},
[b]={"83dcb34b6bf4",1573420492,"clang/Modules: Error if ReadASTBlock does not find the main module","clang/Modules: Error if ReadASTBlock does not find the main module\n\nIf ReadASTBlock does not find its top-level submodule, there\'s something\nwrong the with the PCM.  Error in that case, to avoid hitting problems\nfurther from the source.\n\nNote that the Swift compiler sometimes hits a case in\nCompilerInstance::loadModule where the top-level submodule mysteriously\ndoes not have Module::IsFromModuleFile set.  That will emit a confusing\nwarn_missing_submodule, which was never intended for the main module.\nThe recent audit of error-handling in ReadAST may have rooted out the\nreal problem.  If not, this commit will help to clarify the real\nproblem, and replace a confusing warning with an error pointing at the\nmalformed PCM file.\n\nWe\'re specifically sniffing out whether the top-level submodule was\nfound/processed, in case there is a malformed module file that is\nmissing it.  If there is an error encountered during ReadSubmoduleBlock\nthe return status should already propagate through.  It would be nice to\ndetect other missing submodules around here to catch other instances of\nwarn_missing_submodule closer to the source, but that\'s left as a future\nexercise.\n\nhttps://reviews.llvm.org/D70063"},
[j]={{Ib,4342,"ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, unsigned ClientLoadCapabilities, SmallVectorImpl<ImportedSubmodule> *Imported) {\n  // ...\n  // Load the AST blocks of all of the modules that we loaded. We can still\n  // hit errors parsing the ASTs at this point.\n  for (ImportedModule &M : Loaded) {\n    // ...\n    // The AST block should always have a definition for the main module.\n    if (F.isModule() && !F.DidReadTopLevelSubmodule) {\n      Error(diag::err_module_file_missing_top_level_submodule, F.FileName);"}}
[j]={{Ib,4342,"ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, unsigned ClientLoadCapabilities, SmallVectorImpl<ImportedSubmodule> *Imported) {\n  // ...\n  // Load the AST blocks of all of the modules that we loaded. We can still\n  // hit errors parsing the ASTs at this point.\n  for (ImportedModule &M : Loaded) {\n    // ...\n    // The AST block should always have a definition for the main module.\n    if (F.isModule() && !F.DidReadTopLevelSubmodule) {\n      Error(diag::err_module_file_missing_top_level_submodule, F.FileName);"}}
},
},
["err_module_file_not_module"]={
["err_module_file_not_module"]={
[i]="err_module_file_not_module",
[c]="err_module_file_not_module",
[h]="AST file \'%0\' was not built as a module",
[d]="AST file \'%0\' was not built as a module",
[g]="AST file \'A\' was not built as a module",
[e]="AST file \'A\' was not built as a module",
[b]=T,
[f]=V,
[e]="AST file \'(.*?)\' was not built as a module",
[g]="AST file \'(.*?)\' was not built as a module",
[d]=a,
[h]=a,
[f]=X,
[i]=bb,
[c]={"e842a4745222",1413943546,"[modules] Initial support for explicitly loading .pcm files.","[modules] Initial support for explicitly loading .pcm files.\n\nImplicit module builds are not well-suited to a lot of build systems. In\nparticular, they fare badly in distributed build systems, and they lead to\nbuild artifacts that are not tracked as part of the usual dependency management\nprocess. This change allows explicitly-built module files (which are already\nsupported through the -emit-module flag) to be explicitly loaded into a build,\nallowing build systems to opt to manage module builds and dependencies\nthemselves.\n\nThis is only the first step in supporting such configurations, and it should\nbe considered experimental and subject to change or removal for now.\n\nllvm-svn: 220359"},
[b]={"e842a4745222",1413943546,"[modules] Initial support for explicitly loading .pcm files.","[modules] Initial support for explicitly loading .pcm files.\n\nImplicit module builds are not well-suited to a lot of build systems. In\nparticular, they fare badly in distributed build systems, and they lead to\nbuild artifacts that are not tracked as part of the usual dependency management\nprocess. This change allows explicitly-built module files (which are already\nsupported through the -emit-module flag) to be explicitly loaded into a build,\nallowing build systems to opt to manage module builds and dependencies\nthemselves.\n\nThis is only the first step in supporting such configurations, and it should\nbe considered experimental and subject to change or removal for now.\n\nllvm-svn: 220359"},
[j]={{Ib,4684,"ASTReader::ASTReadResult ASTReader::ReadASTCore(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, ModuleFile *ImportedBy, SmallVectorImpl<ImportedModule> &Loaded, off_t ExpectedSize, time_t ExpectedModTime, ASTFileSignature ExpectedSignature, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case CONTROL_BLOCK_ID:\n      // ...\n      case Success:\n        // Check that we didn\'t try to load a non-module AST file as a module.\n        //\n        // FIXME: Should we also perform the converse check? Loading a module as\n        // a PCH file sort of works, but it\'s a bit wonky.\n        if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule || Type == MK_PrebuiltModule) && F.ModuleName.empty()) {\n          // ...\n          if (Result != OutOfDate || (ClientLoadCapabilities & ARR_OutOfDate) == 0)\n            Diag(diag::err_module_file_not_module) << FileName;"}}
[j]={{Ib,4684,"ASTReader::ASTReadResult ASTReader::ReadASTCore(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, ModuleFile *ImportedBy, SmallVectorImpl<ImportedModule> &Loaded, off_t ExpectedSize, time_t ExpectedModTime, ASTFileSignature ExpectedSignature, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case CONTROL_BLOCK_ID:\n      // ...\n      case Success:\n        // Check that we didn\'t try to load a non-module AST file as a module.\n        //\n        // FIXME: Should we also perform the converse check? Loading a module as\n        // a PCH file sort of works, but it\'s a bit wonky.\n        if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule || Type == MK_PrebuiltModule) && F.ModuleName.empty()) {\n          // ...\n          if (Result != OutOfDate || (ClientLoadCapabilities & ARR_OutOfDate) == 0)\n            Diag(diag::err_module_file_not_module) << FileName;"}}
},
},
["err_module_format_unhandled"]={
["err_module_format_unhandled"]={
[i]="err_module_format_unhandled",
[c]="err_module_format_unhandled",
[h]="no handler registered for module format \'%0\'",
[d]="no handler registered for module format \'%0\'",
[g]="no handler registered for module format \'A\'",
[e]="no handler registered for module format \'A\'",
[b]=T,
[f]=V,
[e]="no handler registered for module format \'(.*?)\'",
[g]="no handler registered for module format \'(.*?)\'",
[d]=a,
[h]=a,
[f]=a,
[i]=w,
[c]={"fb2398d0c434",1437095994,"Make the clang module container format selectable from the command line.","Make the clang module container format selectable from the command line.\n- introduces a new cc1 option -fmodule-format=[raw,obj]\n  with \'raw\' being the default\n- supports arbitrary module container formats that libclang is agnostic to\n- adds the format to the module hash to avoid collisions\n- splits the old PCHContainerOperations into PCHContainerWriter and\n  a PCHContainerReader.\n\nThanks to Richard Smith for reviewing this patch!\n\nllvm-svn: 242499"}
[b]={"fb2398d0c434",1437095994,"Make the clang module container format selectable from the command line.","Make the clang module container format selectable from the command line.\n- introduces a new cc1 option -fmodule-format=[raw,obj]\n  with \'raw\' being the default\n- supports arbitrary module container formats that libclang is agnostic to\n- adds the format to the module hash to avoid collisions\n- splits the old PCHContainerOperations into PCHContainerWriter and\n  a PCHContainerReader.\n\nThanks to Richard Smith for reviewing this patch!\n\nllvm-svn: 242499"}
},
},
["err_module_fragment_exported"]={
["err_module_fragment_exported"]={
[i]={{nil,x,"err_module_fragment_exported"}},
[c]={{nil,z,"err_module_fragment_exported"}},
[h]={{nil,x,"%select{global|private}0 module fragment cannot be exported"}},
[d]={{nil,z,"%select{global|private}0 module fragment cannot be exported"}},
[g]={{nil,x,{{"global","private"}," module fragment cannot be exported"}}},
[e]={{nil,z,{{"global","private"}," module fragment cannot be exported"}}},
[b]=k,
[f]=k,
[e]="(?:global|private) module fragment cannot be exported",
[g]="(?:global|private) module fragment cannot be exported",
[d]=a,
[h]=a,
[f]={{nil,x,M}},
[i]={{nil,z,O}},
[c]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,\nand the global and private module fragment.\n\nFor now, the private module fragment introducer is ignored, but use of\nthe global module fragment introducer should be properly enforced.\n\nllvm-svn: 358353"},
[b]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,\nand the global and private module fragment.\n\nFor now, the private module fragment introducer is ignored, but use of\nthe global module fragment introducer should be properly enforced.\n\nllvm-svn: 358353"},
[j]={{Cb,2421,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n///  module-declaration:  [C++20]\n///    \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n///  global-module-fragment:  [C++2a]\n///    \'module\' \';\' top-level-declaration-seq[opt]\n///  module-declaration:      [C++2a]\n///    \'export\'[opt] \'module\' module-name module-partition[opt]\n///            attribute-specifier-seq[opt] \';\'\n///  private-module-fragment: [C++2a]\n///    \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n  // ...\n  // Parse a global-module-fragment, if present.\n  if (getLangOpts().CPlusPlusModules && Tok.is(tok::semi)) {\n    // ...\n    if (MDK == Sema::ModuleDeclKind::Interface) {\n      Diag(StartLoc, diag::err_module_fragment_exported) << /*global*/ 0 << FixItHint::CreateRemoval(StartLoc);"},{Cb,2432,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n///  module-declaration:  [C++20]\n///    \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n///  global-module-fragment:  [C++2a]\n///    \'module\' \';\' top-level-declaration-seq[opt]\n///  module-declaration:      [C++2a]\n///    \'export\'[opt] \'module\' module-name module-partition[opt]\n///            attribute-specifier-seq[opt] \';\'\n///  private-module-fragment: [C++2a]\n///    \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n  // ...\n  // Parse a private-module-fragment, if present.\n  if (getLangOpts().CPlusPlusModules && Tok.is(tok::colon) && NextToken().is(tok::kw_private)) {\n    if (MDK == Sema::ModuleDeclKind::Interface) {\n      Diag(StartLoc, diag::err_module_fragment_exported) << /*private*/ 1 << FixItHint::CreateRemoval(StartLoc);"}},
[j]={{Nb,2421,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n///  module-declaration:  [C++20]\n///    \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n///  global-module-fragment:  [C++2a]\n///    \'module\' \';\' top-level-declaration-seq[opt]\n///  module-declaration:      [C++2a]\n///    \'export\'[opt] \'module\' module-name module-partition[opt]\n///            attribute-specifier-seq[opt] \';\'\n///  private-module-fragment: [C++2a]\n///    \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n  // ...\n  // Parse a global-module-fragment, if present.\n  if (getLangOpts().CPlusPlusModules && Tok.is(tok::semi)) {\n    // ...\n    if (MDK == Sema::ModuleDeclKind::Interface) {\n      Diag(StartLoc, diag::err_module_fragment_exported) << /*global*/ 0 << FixItHint::CreateRemoval(StartLoc);"},{Nb,2432,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n///  module-declaration:  [C++20]\n///    \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n///  global-module-fragment:  [C++2a]\n///    \'module\' \';\' top-level-declaration-seq[opt]\n///  module-declaration:      [C++2a]\n///    \'export\'[opt] \'module\' module-name module-partition[opt]\n///            attribute-specifier-seq[opt] \';\'\n///  private-module-fragment: [C++2a]\n///    \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n  // ...\n  // Parse a private-module-fragment, if present.\n  if (getLangOpts().CPlusPlusModules && Tok.is(tok::colon) && NextToken().is(tok::kw_private)) {\n    if (MDK == Sema::ModuleDeclKind::Interface) {\n      Diag(StartLoc, diag::err_module_fragment_exported) << /*private*/ 1 << FixItHint::CreateRemoval(StartLoc);"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:13:1: error: global module fragment cannot be exported","clang/test/CXX/basic/basic.link/p1.cpp:41:1: error: private module fragment cannot be exported"}
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:13:1: error: global module fragment cannot be exported","clang/test/CXX/basic/basic.link/p1.cpp:41:1: error: private module fragment cannot be exported"}
Line 1,824: Line 1,825:
},
},
["err_module_header_file_not_found"]={
["err_module_header_file_not_found"]={
[i]={{nil,db,"err_module_header_file_not_found"}},
[c]={{nil,db,"err_module_header_file_not_found"}},
[h]={{nil,db,"module header file \'%0\' not found"}},
[d]={{nil,db,"module header file \'%0\' not found"}},
[g]={{nil,db,"module header file \'A\' not found"}},
[e]={{nil,db,"module header file \'A\' not found"}},
[b]=T,
[f]=V,
[e]="module header file \'(.*?)\' not found",
[g]="module header file \'(.*?)\' not found",
[d]=a,
[h]=a,
[f]={{nil,db,a}},
[i]={{nil,db,w}},
[c]={"d6509cf21dd0",1536974475,"[modules] Frontend support for building a header module from a list of","[modules] Frontend support for building a header module from a list of\nheadaer files.\n\nllvm-svn: 342304"},
[b]={"d6509cf21dd0",1536974475,"[modules] Frontend support for building a header module from a list of","[modules] Frontend support for building a header module from a list of\nheadaer files.\n\nllvm-svn: 342304"},
[j]={{Ob,838,"bool FrontendAction::BeginSourceFile(CompilerInstance &CI, const FrontendInputFile &RealInput) {\n  // ...\n  // Handle C++20 header units.\n  // Here, the user has the option to specify that the header name should be\n  // looked up in the pre-processor search paths (and the main filename as\n  // passed by the driver might therefore be incomplete until that look-up).\n  if (CI.getLangOpts().CPlusPlusModules && Input.getKind().isHeaderUnit() && !Input.getKind().isPreprocessed()) {\n    // ...\n    if (Kind.getHeaderUnitKind() != InputKind::HeaderUnit_Abs) {\n      // ...\n      if (!FE) {\n        CI.getDiagnostics().Report(diag::err_module_header_file_not_found) << FileName;"}}
[j]={{Pb,838,"bool FrontendAction::BeginSourceFile(CompilerInstance &CI, const FrontendInputFile &RealInput) {\n  // ...\n  // Handle C++20 header units.\n  // Here, the user has the option to specify that the header name should be\n  // looked up in the pre-processor search paths (and the main filename as\n  // passed by the driver might therefore be incomplete until that look-up).\n  if (CI.getLangOpts().CPlusPlusModules && Input.getKind().isHeaderUnit() && !Input.getKind().isPreprocessed()) {\n    // ...\n    if (Kind.getHeaderUnitKind() != InputKind::HeaderUnit_Abs) {\n      // ...\n      if (!FE) {\n        CI.getDiagnostics().Report(diag::err_module_header_file_not_found) << FileName;"}}
},
},
["err_module_header_missing"]={
["err_module_header_missing"]={
[i]="err_module_header_missing",
[c]="err_module_header_missing",
[h]="%select{|umbrella }0header \'%1\' not found",
[d]="%select{|umbrella }0header \'%1\' not found",
[g]={{nil,nil,{{a,"umbrella "},"header \'B\' not found"}}},
[e]={{nil,nil,{{a,"umbrella "},"header \'B\' not found"}}},
[b]=k,
[f]=k,
[e]="(?:|umbrella )header \'(.*?)\' not found",
[g]="(?:|umbrella )header \'(.*?)\' not found",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"0761a8a085f4",1387276297,"Modules: Don\'t warn upon missing headers while reading the module map.","Modules: Don\'t warn upon missing headers while reading the module map.\n\nInstead, mark the module as unavailable so that clang errors as soon as\nsomeone tries to build this module.\n\nThis works towards the long-term goal of not stat\'ing the header files at all\nwhile reading the module map and instead read them only when the module is\nbeing built (there is a corresponding FIXME in parseHeaderDecl()).  However, it\nseems non-trivial to get there and this unblock us and moves us into the right\ndirection.\n\nAlso changed the implementation to reuse the same DiagnosticsEngine.\n\nllvm-svn: 197485"},
[b]={"0761a8a085f4",1387276297,"Modules: Don\'t warn upon missing headers while reading the module map.","Modules: Don\'t warn upon missing headers while reading the module map.\n\nInstead, mark the module as unavailable so that clang errors as soon as\nsomeone tries to build this module.\n\nThis works towards the long-term goal of not stat\'ing the header files at all\nwhile reading the module map and instead read them only when the module is\nbeing built (there is a corresponding FIXME in parseHeaderDecl()).  However, it\nseems non-trivial to get there and this unblock us and moves us into the right\ndirection.\n\nAlso changed the implementation to reuse the same DiagnosticsEngine.\n\nllvm-svn: 197485"},
[j]={{Ob,350,"/// Collect the set of header includes needed to construct the given\n/// module and update the TopHeaders file set of the module.\n///\n/// \\param Module The module we\'re collecting includes from.\n///\n/// \\param Includes Will be augmented with the set of \\#includes or \\#imports\n/// needed to load all of the named headers.\nstatic std::error_code collectModuleHeaderIncludes(const LangOptions &LangOpts, FileManager &FileMgr, DiagnosticsEngine &Diag, ModuleMap &ModMap, clang::Module *Module, SmallVectorImpl<char> &Includes) {\n  // ...\n  // If any headers are missing, we can\'t build this module. In most cases,\n  // diagnostics for this should have already been produced; we only get here\n  // if explicit stat information was provided.\n  // FIXME: If the name resolves to a file with different stat information,\n  // produce a better diagnostic.\n  if (!Module->MissingHeaders.empty()) {\n    // ...\n    Diag.Report(MissingHeader.FileNameLoc, diag::err_module_header_missing) << MissingHeader.IsUmbrella << MissingHeader.FileName;"},{"clang/lib/Lex/PPDirectives.cpp",1907,"bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, const TargetInfo &TargetInfo, DiagnosticsEngine &Diags, Module *M) {\n  // ...\n  if (MissingHeader.FileNameLoc.isValid()) {\n    Diags.Report(MissingHeader.FileNameLoc, diag::err_module_header_missing) << MissingHeader.IsUmbrella << MissingHeader.FileName;"}},
[j]={{Pb,350,"/// Collect the set of header includes needed to construct the given\n/// module and update the TopHeaders file set of the module.\n///\n/// \\param Module The module we\'re collecting includes from.\n///\n/// \\param Includes Will be augmented with the set of \\#includes or \\#imports\n/// needed to load all of the named headers.\nstatic std::error_code collectModuleHeaderIncludes(const LangOptions &LangOpts, FileManager &FileMgr, DiagnosticsEngine &Diag, ModuleMap &ModMap, clang::Module *Module, SmallVectorImpl<char> &Includes) {\n  // ...\n  // If any headers are missing, we can\'t build this module. In most cases,\n  // diagnostics for this should have already been produced; we only get here\n  // if explicit stat information was provided.\n  // FIXME: If the name resolves to a file with different stat information,\n  // produce a better diagnostic.\n  if (!Module->MissingHeaders.empty()) {\n    // ...\n    Diag.Report(MissingHeader.FileNameLoc, diag::err_module_header_missing) << MissingHeader.IsUmbrella << MissingHeader.FileName;"},{"clang/lib/Lex/PPDirectives.cpp",1907,"bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, const TargetInfo &TargetInfo, DiagnosticsEngine &Diags, Module *M) {\n  // ...\n  if (MissingHeader.FileNameLoc.isValid()) {\n    Diags.Report(MissingHeader.FileNameLoc, diag::err_module_header_missing) << MissingHeader.IsUmbrella << MissingHeader.FileName;"}},
[l]={
[l]={
["clang/test/Modules/dependency-gen.modulemap"]={"clang/test/Modules/dependency-gen.modulemap:12:10: error: header \'Inputs/dependency-gen.h\' not found"}
["clang/test/Modules/dependency-gen.modulemap"]={"clang/test/Modules/dependency-gen.modulemap:12:10: error: header \'Inputs/dependency-gen.h\' not found"}
Line 1,849: Line 1,850:
},
},
["err_module_import_in_implementation"]={
["err_module_import_in_implementation"]={
[i]="err_module_import_in_implementation",
[c]="err_module_import_in_implementation",
[h]="@import of module \'%0\' in implementation of \'%1\'; use #import",
[d]="@import of module \'%0\' in implementation of \'%1\'; use #import",
[g]="@import of module \'A\' in implementation of \'B\'; use #import",
[e]="@import of module \'A\' in implementation of \'B\'; use #import",
[b]=k,
[f]=k,
[e]="@import of module \'(.*?)\' in implementation of \'(.*?)\'; use \\#import",
[g]="@import of module \'(.*?)\' in implementation of \'(.*?)\'; use \\#import",
[d]=a,
[h]=a,
[f]=M,
[i]=O,
[c]={"b537a3a65180",1406129423,"Add stopgap option -fmodule-implementation-of <name>","Add stopgap option -fmodule-implementation-of <name>\n\nThis flag specifies that we are building an implementation file of the\nmodule <name>, preventing importing <name> as a module. This does not\nconsider this to be the \'current module\' for the purposes of doing\nmodular checks like decluse or non-modular-include warnings, unlike\n-fmodule-name.\n\nThis is needed as a stopgap until:\n1) we can resolve relative includes to a VFS-mapped module (or can\n  safely import a header textually and as part of a module)\n\nand ideally\n2) we can safely do incremental rebuilding when implementation files\n  import submodules.\n\nllvm-svn: 213767"},
[b]={"b537a3a65180",1406129423,"Add stopgap option -fmodule-implementation-of <name>","Add stopgap option -fmodule-implementation-of <name>\n\nThis flag specifies that we are building an implementation file of the\nmodule <name>, preventing importing <name> as a module. This does not\nconsider this to be the \'current module\' for the purposes of doing\nmodular checks like decluse or non-modular-include warnings, unlike\n-fmodule-name.\n\nThis is needed as a stopgap until:\n1) we can resolve relative includes to a VFS-mapped module (or can\n  safely import a header textually and as part of a module)\n\nand ideally\n2) we can safely do incremental rebuilding when implementation files\n  import submodules.\n\nllvm-svn: 213767"},
[j]={{mb,564,"DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, SourceLocation ExportLoc, SourceLocation ImportLoc, Module *Mod, ModuleIdPath Path) {\n  // ...\n  // FIXME: we should support importing a submodule within a different submodule\n  // of the same top-level module. Until we do, make it an error rather than\n  // silently ignoring the import.\n  // FIXME: Should we warn on a redundant import of the current module?\n  if (Mod->isForBuilding(getLangOpts())) {\n    Diag(ImportLoc, getLangOpts().isCompilingModule() ? diag::err_module_self_import : diag::err_module_import_in_implementation) << Mod->getFullModuleName() << getLangOpts().CurrentModule;"}},
[j]={{nb,564,"DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, SourceLocation ExportLoc, SourceLocation ImportLoc, Module *Mod, ModuleIdPath Path) {\n  // ...\n  // FIXME: we should support importing a submodule within a different submodule\n  // of the same top-level module. Until we do, make it an error rather than\n  // silently ignoring the import.\n  // FIXME: Should we warn on a redundant import of the current module?\n  if (Mod->isForBuilding(getLangOpts())) {\n    Diag(ImportLoc, getLangOpts().isCompilingModule() ? diag::err_module_self_import : diag::err_module_import_in_implementation) << Mod->getFullModuleName() << getLangOpts().CurrentModule;"}},
[l]={
[l]={
["clang/test/Modules/implementation-of-module.m"]={"clang/test/Modules/implementation-of-module.m:19:2: error: @import of module \'category_left\' in implementation of \'category_left\'; use #import","clang/test/Modules/implementation-of-module.m:20:2: error: @import of module \'category_left.sub\' in implementation of \'category_left\'; use #import"}
["clang/test/Modules/implementation-of-module.m"]={"clang/test/Modules/implementation-of-module.m:19:2: error: @import of module \'category_left\' in implementation of \'category_left\'; use #import","clang/test/Modules/implementation-of-module.m:20:2: error: @import of module \'category_left.sub\' in implementation of \'category_left\'; use #import"}
Line 1,863: Line 1,864:
},
},
["err_module_import_not_at_top_level_fatal"]={
["err_module_import_not_at_top_level_fatal"]={
[i]="err_module_import_not_at_top_level_fatal",
[c]="err_module_import_not_at_top_level_fatal",
[h]="import of module \'%0\' appears within %1",
[d]="import of module \'%0\' appears within %1",
[g]="import of module \'A\' appears within B",
[e]="import of module \'A\' appears within B",
[b]=T,
[f]=V,
[e]="import of module \'(.*?)\' appears within (.*?)",
[g]="import of module \'(.*?)\' appears within (.*?)",
[d]=a,
[h]=a,
[f]=M,
[i]=O,
[c]={"c4e04a296403",1442640777,"[Modules] More descriptive diagnostics for misplaced import directive","[Modules] More descriptive diagnostics for misplaced import directive\n\nIf an import directive was put into wrong context, the error message was obscure,\ncomplaining on misbalanced braces. To get more descriptive messages, annotation\ntokens related to modules are processed where they must not be seen.\n\nDifferential Revision: http://reviews.llvm.org/D11844\n\nllvm-svn: 248085"},
[b]={"c4e04a296403",1442640777,"[Modules] More descriptive diagnostics for misplaced import directive","[Modules] More descriptive diagnostics for misplaced import directive\n\nIf an import directive was put into wrong context, the error message was obscure,\ncomplaining on misbalanced braces. To get more descriptive messages, annotation\ntokens related to modules are processed where they must not be seen.\n\nDifferential Revision: http://reviews.llvm.org/D11844\n\nllvm-svn: 248085"},
[j]={{mb,48,"static void checkModuleImportContext(Sema &S, Module *M, SourceLocation ImportLoc, DeclContext *DC, bool FromInclude = false) {\n  // ...\n  if (!isa<TranslationUnitDecl>(DC)) {\n    S.Diag(ImportLoc, (FromInclude && S.isModuleVisible(M)) ? diag::ext_module_import_not_at_top_level_noop : diag::err_module_import_not_at_top_level_fatal) << M->getFullModuleName() << DC;"}},
[j]={{nb,48,"static void checkModuleImportContext(Sema &S, Module *M, SourceLocation ImportLoc, DeclContext *DC, bool FromInclude = false) {\n  // ...\n  if (!isa<TranslationUnitDecl>(DC)) {\n    S.Diag(ImportLoc, (FromInclude && S.isModuleVisible(M)) ? diag::ext_module_import_not_at_top_level_noop : diag::err_module_import_not_at_top_level_fatal) << M->getFullModuleName() << DC;"}},
[l]={
[l]={
["clang/test/Modules/misplaced-3.cpp"]={"clang/test/Modules/misplaced-3.cpp:5:1: fatal error: import of module \'dummy\' appears within \'C1\'"}
["clang/test/Modules/misplaced-3.cpp"]={"clang/test/Modules/misplaced-3.cpp:5:1: fatal error: import of module \'dummy\' appears within \'C1\'"}
Line 1,877: Line 1,878:
},
},
["err_module_interface_implementation_mismatch"]={
["err_module_interface_implementation_mismatch"]={
[i]="err_module_interface_implementation_mismatch",
[c]="err_module_interface_implementation_mismatch",
[h]="%select{\'module\'|\'module partition\'|\'module implementation\'}0 declaration found while %select{not |not |}0building module interface",
[d]="%select{\'module\'|\'module partition\'|\'module implementation\'}0 declaration found while %select{not |not |}0building module interface",
[g]={{nil,r,"missing \'export\' specifier in module declaration while building module interface"},{nil,nil,{{"\'module\'","\'module partition\'","\'module implementation\'"}," declaration found while ",{"not ","not ",a},"building module interface"}}},
[e]={{nil,r,"missing \'export\' specifier in module declaration while building module interface"},{nil,nil,{{"\'module\'","\'module partition\'","\'module implementation\'"}," declaration found while ",{"not ","not ",a},"building module interface"}}},
[b]=k,
[f]=k,
[e]="missing \'export\' specifier in module declaration while building module interface",
[g]="missing \'export\' specifier in module declaration while building module interface",
[d]=a,
[h]=a,
[f]=M,
[i]=O,
[c]={"964cc53d9a74",1471570986,"C++ Modules TS: support parsing the \'module\' declaration (including extensions","C++ Modules TS: support parsing the \'module\' declaration (including extensions\nfrom p0273r0 approved by EWG). We\'ll eventually need to handle this from the\nlexer as well, in order to disallow preprocessor directives preceding the\nmodule declaration and to support macro import.\n\nllvm-svn: 279196"},
[b]={"964cc53d9a74",1471570986,"C++ Modules TS: support parsing the \'module\' declaration (including extensions","C++ Modules TS: support parsing the \'module\' declaration (including extensions\nfrom p0273r0 approved by EWG). We\'ll eventually need to handle this from the\nlexer as well, in order to disallow preprocessor directives preceding the\nmodule declaration and to support macro import.\n\nllvm-svn: 279196"},
[j]={{mb,215,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case LangOptions::CMK_ModuleInterface:\n    // ...\n    Diag(ModuleLoc, diag::err_module_interface_implementation_mismatch) << FixItHint::CreateInsertion(ModuleLoc, \"export \");"}}
[j]={{nb,215,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case LangOptions::CMK_ModuleInterface:\n    // ...\n    Diag(ModuleLoc, diag::err_module_interface_implementation_mismatch) << FixItHint::CreateInsertion(ModuleLoc, \"export \");"}}
},
},
["err_module_interface_requires_cpp_modules"]={
["err_module_interface_requires_cpp_modules"]={
[i]={{nil,x,"err_module_interface_requires_cpp_modules"}},
[c]={{nil,z,"err_module_interface_requires_cpp_modules"}},
[h]="module interface compilation requires \'-std=c++20\'",
[d]="module interface compilation requires \'-std=c++20\'",
[g]="module interface compilation requires \'-std=c++20\'",
[e]="module interface compilation requires \'-std=c++20\'",
[b]=k,
[f]=k,
[e]="module interface compilation requires \'\\-std\\=c\\+\\+20\'",
[g]="module interface compilation requires \'\\-std\\=c\\+\\+20\'",
[d]=a,
[h]=a,
[f]={{nil,x,a}},
[i]={{nil,z,w}},
[c]={"b1b580e047ad",1555240297,"[c++20] Enable driver and frontend support for building and using","[c++20] Enable driver and frontend support for building and using\nmodules when -std=c++2a is specified.\n\nllvm-svn: 358355"},
[b]={"b1b580e047ad",1555240297,"[c++20] Enable driver and frontend support for building and using","[c++20] Enable driver and frontend support for building and using\nmodules when -std=c++2a is specified.\n\nllvm-svn: 358355"},
[j]={{"clang/lib/Frontend/FrontendActions.cpp",268,"bool GenerateHeaderUnitAction::BeginSourceFileAction(CompilerInstance &CI) {\n  if (!CI.getLangOpts().CPlusPlusModules) {\n    CI.getDiagnostics().Report(diag::err_module_interface_requires_cpp_modules);"}}
[j]={{"clang/lib/Frontend/FrontendActions.cpp",268,"bool GenerateHeaderUnitAction::BeginSourceFileAction(CompilerInstance &CI) {\n  if (!CI.getLangOpts().CPlusPlusModules) {\n    CI.getDiagnostics().Report(diag::err_module_interface_requires_cpp_modules);"}}
},
},
["err_module_map_not_found"]={
["err_module_map_not_found"]={
[i]="err_module_map_not_found",
[c]="err_module_map_not_found",
[h]="module map file \'%0\' not found",
[d]="module map file \'%0\' not found",
[g]="module map file \'A\' not found",
[e]="module map file \'A\' not found",
[b]=T,
[f]=V,
[e]="module map file \'(.*?)\' not found",
[g]="module map file \'(.*?)\' not found",
[d]=a,
[h]=a,
[f]=a,
[i]=w,
[c]={"2b20cb87f5b6",1321402146,"Add support for building a module from a module map to the -cc1","Add support for building a module from a module map to the -cc1\ninterface. This is currently limited to modules with umbrella\nheaders.\n\nllvm-svn: 144736"},
[b]={"2b20cb87f5b6",1321402146,"Add support for building a module from a module map to the -cc1","Add support for building a module from a module map to the -cc1\ninterface. This is currently limited to modules with umbrella\nheaders.\n\nllvm-svn: 144736"},
[j]={{Ob,527,"static Module *prepareToBuildModule(CompilerInstance &CI, StringRef ModuleMapFilename) {\n  // ...\n  if (!OriginalModuleMapName.empty()) {\n    // ...\n    if (!OriginalModuleMap) {\n      CI.getDiagnostics().Report(diag::err_module_map_not_found) << OriginalModuleMapName;"},{Ob,919,"bool FrontendAction::BeginSourceFile(CompilerInstance &CI, const FrontendInputFile &RealInput) {\n  // ...\n  // If we were asked to load any module map files, do so now.\n  for (const auto &Filename : CI.getFrontendOpts().ModuleMapFiles) {\n    if (auto File = CI.getFileManager().getOptionalFileRef(Filename))\n    // ...\n    else\n      CI.getDiagnostics().Report(diag::err_module_map_not_found) << Filename;"}},
[j]={{Pb,527,"static Module *prepareToBuildModule(CompilerInstance &CI, StringRef ModuleMapFilename) {\n  // ...\n  if (!OriginalModuleMapName.empty()) {\n    // ...\n    if (!OriginalModuleMap) {\n      CI.getDiagnostics().Report(diag::err_module_map_not_found) << OriginalModuleMapName;"},{Pb,919,"bool FrontendAction::BeginSourceFile(CompilerInstance &CI, const FrontendInputFile &RealInput) {\n  // ...\n  // If we were asked to load any module map files, do so now.\n  for (const auto &Filename : CI.getFrontendOpts().ModuleMapFiles) {\n    if (auto File = CI.getFileManager().getOptionalFileRef(Filename))\n    // ...\n    else\n      CI.getDiagnostics().Report(diag::err_module_map_not_found) << Filename;"}},
[l]={
[l]={
["clang/test/Modules/module_map_cwd.c"]={"fatal error: module map file \'map\' not found"}
["clang/test/Modules/module_map_cwd.c"]={"fatal error: module map file \'map\' not found"}
Line 1,913: Line 1,914:
},
},
["err_module_no_size_mtime_for_header"]={
["err_module_no_size_mtime_for_header"]={
[i]={{nil,r,"err_module_no_size_mtime_for_header"}},
[c]={{nil,r,"err_module_no_size_mtime_for_header"}},
[h]={{nil,r,"cannot emit module %0: %select{size|mtime}1 must be explicitly specified for missing header file \"%2\""}},
[d]={{nil,r,"cannot emit module %0: %select{size|mtime}1 must be explicitly specified for missing header file \"%2\""}},
[g]={{nil,r,{"cannot emit module A: ",{"size","mtime"}," must be explicitly specified for missing header file \"C\""}}},
[e]={{nil,r,{"cannot emit module A: ",{"size","mtime"}," must be explicitly specified for missing header file \"C\""}}},
[b]=k,
[f]=k,
[e]="cannot emit module (.*?)\\: (?:size|mtime) must be explicitly specified for missing header file \"(.*?)\"",
[g]="cannot emit module (.*?)\\: (?:size|mtime) must be explicitly specified for missing header file \"(.*?)\"",
[d]=a,
[h]=a,
[f]={{nil,r,"AST Serialization Issue"}},
[i]={{nil,r,"AST Serialization Issue"}},
[c]={"040e12662a67",1496368539,"Support lazy stat\'ing of files referenced by module maps.","Support lazy stat\'ing of files referenced by module maps.\n\nThis patch adds support for a `header` declaration in a module map to specify\ncertain `stat` information (currently, size and mtime) about that header file.\nThis has two purposes:\n\n- It removes the need to eagerly `stat` every file referenced by a module map.\n  Instead, we track a list of unresolved header files with each size / mtime\n  (actually, for simplicity, we track submodules with such headers), and when\n  attempting to look up a header file based on a `FileEntry`, we check if there\n  are any unresolved header directives with that `FileEntry`\'s size / mtime and\n  perform deferred `stat`s if so.\n\n- It permits a preprocessed module to be compiled without the original files\n  being present on disk. The only reason we used to need those files was to get\n  the `stat` information in order to do header -> module lookups when using the\n  module. If we\'re provided with the `stat` information in the preprocessed\n  module, we can avoid requiring the files to exist.\n\nUnlike most `header` directives, if a `header` directive with `stat`\ninformation has no corresponding on-disk file the enclosing module is *not*\nmarked unavailable (so that behavior is consistent regardless of whether we\'ve\nresolved a header directive, and so that preprocessed modules don\'t get marked\nunavailable). We could actually do this for all `header` directives: the only\nreason we mark the module unavailable if headers are missing is to give a\ndiagnostic slightly earlier (rather than waiting until we actually try to build\nthe module / load and validate its .pcm file).\n\nDifferential Revision: https://reviews.llvm.org/D33703\n\nllvm-svn: 304515"},
[b]={"040e12662a67",1496368539,"Support lazy stat\'ing of files referenced by module maps.","Support lazy stat\'ing of files referenced by module maps.\n\nThis patch adds support for a `header` declaration in a module map to specify\ncertain `stat` information (currently, size and mtime) about that header file.\nThis has two purposes:\n\n- It removes the need to eagerly `stat` every file referenced by a module map.\n  Instead, we track a list of unresolved header files with each size / mtime\n  (actually, for simplicity, we track submodules with such headers), and when\n  attempting to look up a header file based on a `FileEntry`, we check if there\n  are any unresolved header directives with that `FileEntry`\'s size / mtime and\n  perform deferred `stat`s if so.\n\n- It permits a preprocessed module to be compiled without the original files\n  being present on disk. The only reason we used to need those files was to get\n  the `stat` information in order to do header -> module lookups when using the\n  module. If we\'re provided with the `stat` information in the preprocessed\n  module, we can avoid requiring the files to exist.\n\nUnlike most `header` directives, if a `header` directive with `stat`\ninformation has no corresponding on-disk file the enclosing module is *not*\nmarked unavailable (so that behavior is consistent regardless of whether we\'ve\nresolved a header directive, and so that preprocessed modules don\'t get marked\nunavailable). We could actually do this for all `header` directives: the only\nreason we mark the module unavailable if headers are missing is to give a\ndiagnostic slightly earlier (rather than waiting until we actually try to build\nthe module / load and validate its .pcm file).\n\nDifferential Revision: https://reviews.llvm.org/D33703\n\nllvm-svn: 304515"},
[j]={{"clang/lib/Serialization/ASTWriter.cpp",1906,"/// Write the header search block for the list of files that\n///\n/// \\param HS The header search structure to save.\nvoid ASTWriter::WriteHeaderSearch(const HeaderSearch &HS) {\n  // ...\n  if (WritingModule) {\n    // ...\n    while (!Worklist.empty()) {\n      // ...\n      // If the file didn\'t exist, we can still create a module if we were given\n      // enough information in the module map.\n      for (const auto &U : M->MissingHeaders) {\n        // Check that we were given enough information to build a module\n        // without this file existing on disk.\n        if (!U.Size || (!U.ModTime && IncludeTimestamps)) {\n          PP->Diag(U.FileNameLoc, diag::err_module_no_size_mtime_for_header) << WritingModule->getFullModuleName() << U.Size.has_value() << U.FileName;"}}
[j]={{"clang/lib/Serialization/ASTWriter.cpp",1906,"/// Write the header search block for the list of files that\n///\n/// \\param HS The header search structure to save.\nvoid ASTWriter::WriteHeaderSearch(const HeaderSearch &HS) {\n  // ...\n  if (WritingModule) {\n    // ...\n    while (!Worklist.empty()) {\n      // ...\n      // If the file didn\'t exist, we can still create a module if we were given\n      // enough information in the module map.\n      for (const auto &U : M->MissingHeaders) {\n        // Check that we were given enough information to build a module\n        // without this file existing on disk.\n        if (!U.Size || (!U.ModTime && IncludeTimestamps)) {\n          PP->Diag(U.FileNameLoc, diag::err_module_no_size_mtime_for_header) << WritingModule->getFullModuleName() << U.Size.has_value() << U.FileName;"}}
},
},
["err_module_not_built"]={
["err_module_not_built"]={
[i]="err_module_not_built",
[c]="err_module_not_built",
[h]="could not build module \'%0\'",
[d]="could not build module \'%0\'",
[g]="could not build module \'A\'",
[e]="could not build module \'A\'",
[b]=T,
[f]=V,
[e]="could not build module \'(.*?)\'",
[g]="could not build module \'(.*?)\'",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"faeb1d465862",1315870284,"When an import statement fails to find a module in the module cache,","When an import statement fails to find a module in the module cache,\nbut there is a corresponding umbrella header in a framework, build the\nmodule on-the-fly so it can be immediately loaded at the import\nstatement. This is very much proof-of-concept code, with details to be\nfleshed out over time.\n\nllvm-svn: 139558"},
[b]={"faeb1d465862",1315870284,"When an import statement fails to find a module in the module cache,","When an import statement fails to find a module in the module cache,\nbut there is a corresponding umbrella header in a framework, build the\nmodule on-the-fly so it can be immediately loaded at the import\nstatement. This is very much proof-of-concept code, with details to be\nfleshed out over time.\n\nllvm-svn: 139558"},
[j]={{wb,1402,"/// Read the AST right after compiling the module.\nstatic bool readASTAfterCompileModule(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName, bool *OutOfDate) {\n  // ...\n  // The ASTReader didn\'t diagnose the error, so conservatively report it.\n  if (ReadResult == ASTReader::Missing || !Diags.hasErrorOccurred())\n    Diags.Report(ModuleNameLoc, diag::err_module_not_built) << Module->Name << SourceRange(ImportLoc, ModuleNameLoc);"},{wb,1418,"/// Compile a module in a separate compiler instance and read the AST,\n/// returning true if the module compiles without errors.\nstatic bool compileModuleAndReadASTImpl(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) {\n  if (!compileModule(ImportingInstance, ModuleNameLoc, Module, ModuleFileName)) {\n    ImportingInstance.getDiagnostics().Report(ModuleNameLoc, diag::err_module_not_built) << Module->Name << SourceRange(ImportLoc, ModuleNameLoc);"},{wb,1947,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  // Check whether we have already attempted to build this module (but\n  // failed).\n  if (getPreprocessorOpts().FailedModules && getPreprocessorOpts().FailedModules->hasAlreadyFailed(ModuleName)) {\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_not_built) << ModuleName << SourceRange(ImportLoc, ModuleNameLoc);"}},
[j]={{wb,1402,"/// Read the AST right after compiling the module.\nstatic bool readASTAfterCompileModule(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName, bool *OutOfDate) {\n  // ...\n  // The ASTReader didn\'t diagnose the error, so conservatively report it.\n  if (ReadResult == ASTReader::Missing || !Diags.hasErrorOccurred())\n    Diags.Report(ModuleNameLoc, diag::err_module_not_built) << Module->Name << SourceRange(ImportLoc, ModuleNameLoc);"},{wb,1418,"/// Compile a module in a separate compiler instance and read the AST,\n/// returning true if the module compiles without errors.\nstatic bool compileModuleAndReadASTImpl(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) {\n  if (!compileModule(ImportingInstance, ModuleNameLoc, Module, ModuleFileName)) {\n    ImportingInstance.getDiagnostics().Report(ModuleNameLoc, diag::err_module_not_built) << Module->Name << SourceRange(ImportLoc, ModuleNameLoc);"},{wb,1947,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  // Check whether we have already attempted to build this module (but\n  // failed).\n  if (getPreprocessorOpts().FailedModules && getPreprocessorOpts().FailedModules->hasAlreadyFailed(ModuleName)) {\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_not_built) << ModuleName << SourceRange(ImportLoc, ModuleNameLoc);"}},
[l]={
[l]={
Line 1,938: Line 1,939:
},
},
["err_module_not_defined"]={
["err_module_not_defined"]={
[i]={{nil,t,"err_module_not_defined"}},
[c]={{nil,t,"err_module_not_defined"}},
[h]={{nil,t,"definition of module \'%0\' is not available; use -fmodule-file= to specify path to precompiled module interface"}},
[d]={{nil,t,"definition of module \'%0\' is not available; use -fmodule-file= to specify path to precompiled module interface"}},
[g]={{nil,t,"definition of module \'A\' is not available; use -fmodule-file= to specify path to precompiled module interface"}},
[e]={{nil,t,"definition of module \'A\' is not available; use -fmodule-file= to specify path to precompiled module interface"}},
[b]=k,
[f]=k,
[e]="definition of module \'(.*?)\' is not available; use \\-fmodule\\-file\\= to specify path to precompiled module interface",
[g]="definition of module \'(.*?)\' is not available; use \\-fmodule\\-file\\= to specify path to precompiled module interface",
[d]=a,
[h]=a,
[f]={{nil,t,M}},
[i]={{nil,t,O}},
[c]={"d97d35e1500d",1507674927,"[Modules TS] Diagnose attempts to enter module implementation units without the module interface bei...","[Modules TS] Diagnose attempts to enter module implementation units without the module interface being available.\n\nllvm-svn: 315381"},
[b]={"d97d35e1500d",1507674927,"[Modules TS] Diagnose attempts to enter module implementation units without the module interface bei...","[Modules TS] Diagnose attempts to enter module implementation units without the module interface being available.\n\nllvm-svn: 315381"},
[j]={{mb,350,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case ModuleDeclKind::Implementation: {\n    // ...\n    if (!Interface) {\n      Diag(ModuleLoc, diag::err_module_not_defined) << ModuleName;"}}
[j]={{nb,350,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case ModuleDeclKind::Implementation: {\n    // ...\n    if (!Interface) {\n      Diag(ModuleLoc, diag::err_module_not_defined) << ModuleName;"}}
},
},
["err_module_not_found"]={
["err_module_not_found"]={
[i]="err_module_not_found",
[c]="err_module_not_found",
[h]="module \'%0\' not found",
[d]="module \'%0\' not found",
[g]="module \'A\' not found",
[e]="module \'A\' not found",
[b]=T,
[f]=V,
[e]="module \'(.*?)\' not found",
[g]="module \'(.*?)\' not found",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"dd8a2fe0be34",1314827541,"Switch the \"no module found\" default-fatal warning to a default-fatal error.","Switch the \"no module found\" default-fatal warning to a default-fatal error.\n\nllvm-svn: 138909"},
[b]={"dd8a2fe0be34",1314827541,"Switch the \"no module found\" default-fatal warning to a default-fatal error.","Switch the \"no module found\" default-fatal warning to a default-fatal error.\n\nllvm-svn: 138909"},
[j]={{wb,1821,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  if (Source == MS_ModuleNotFound) {\n    // ...\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_not_found) << ModuleName << SourceRange(ImportLoc, ModuleNameLoc);"}},
[j]={{wb,1821,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  if (Source == MS_ModuleNotFound) {\n    // ...\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_not_found) << ModuleName << SourceRange(ImportLoc, ModuleNameLoc);"}},
[l]={
[l]={
Line 1,963: Line 1,964:
},
},
["err_module_odr_violation_definition_data"]={
["err_module_odr_violation_definition_data"]={
[i]={{nil,t,"err_module_odr_violation_definition_data"}},
[c]={{nil,t,"err_module_odr_violation_definition_data"}},
[h]={{nil,t,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%4 base %plural{1:class|:classes}4|%4 virtual base %plural{1:class|:classes}4|%ordinal4 base class with type %5|%ordinal4 %select{non-virtual|virtual}5 base class %6|%ordinal4 base class %5 with %select{public|protected|private|no}6 access specifier}3"}},
[d]={{nil,t,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%4 base %plural{1:class|:classes}4|%4 virtual base %plural{1:class|:classes}4|%ordinal4 base class with type %5|%ordinal4 %select{non-virtual|virtual}5 base class %6|%ordinal4 base class %5 with %select{public|protected|private|no}6 access specifier}3"}},
[g]={{nil,t,{Z,{R,J},ab,{{"E base ",{ib,"classes"}},{"E virtual base ",{ib,"classes"}},"E base class with type F",{"E ",{"non-virtual","virtual"}," base class G"},{"E base class F with ",{"public","protected","private",nc}," access specifier"}}}}},
[e]={{nil,t,{ab,{R,L},Z,{{"E base ",{mb,"classes"}},{"E virtual base ",{mb,"classes"}},"E base class with type F",{"E ",{"non-virtual","virtual"}," base class G"},{"E base class F with ",{"public","protected","private",Bc}," access specifier"}}}}},
[b]=k,
[f]=k,
[e]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(.*?) base (?:class|classes)|(.*?) virtual base (?:class|classes)|(.*?) base class with type (.*?)|(.*?) (?:non\\-virtual|virtual) base class (.*?)|(.*?) base class (.*?) with (?:public|protected|private|no) access specifier)",
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(.*?) base (?:class|classes)|(.*?) virtual base (?:class|classes)|(.*?) base class with type (.*?)|(.*?) (?:non\\-virtual|virtual) base class (.*?)|(.*?) base class (.*?) with (?:public|protected|private|no) access specifier)",
[d]=a,
[h]=a,
[f]={{nil,p,a},{s,t,X}},
[i]={{nil,p,w},{s,t,bb}},
[c]={"e13eabe7d339",1506737957,"[ODRHash] Add base classes to hashing CXXRecordDecl.","[ODRHash] Add base classes to hashing CXXRecordDecl.\n\nllvm-svn: 314581"},
[b]={"e13eabe7d339",1506737957,"[ODRHash] Add base classes to hashing CXXRecordDecl.","[ODRHash] Add base classes to hashing CXXRecordDecl.\n\nllvm-svn: 314581"},
[j]={{U,733,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  // ...\n  // Diagnostics from DefinitionData are emitted here.\n  if (FirstDD != SecondDD) {\n    // ...\n    auto DiagBaseError = [FirstRecord, &FirstModule, this](SourceLocation Loc, SourceRange Range, ODRDefinitionDataDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_definition_data) << FirstRecord << FirstModule.empty() << FirstModule << Range << DiffType; };"}},
[j]={{U,733,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  // ...\n  // Diagnostics from DefinitionData are emitted here.\n  if (FirstDD != SecondDD) {\n    // ...\n    auto DiagBaseError = [FirstRecord, &FirstModule, this](SourceLocation Loc, SourceRange Range, ODRDefinitionDataDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_definition_data) << FirstRecord << FirstModule.empty() << FirstModule << Range << DiffType; };"}},
[l]={
[l]={
[hc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2685:8: error: \'BaseClass::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 0 base classes","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2696:8: error: \'BaseClass::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1 base class","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2708:8: error: \'BaseClass::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1 virtual base class","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2720:8: error: \'BaseClass::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class with type \'B4b\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2732:8: error: \'BaseClass::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 0 virtual base classes","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2744:8: error: \'BaseClass::S6\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1 virtual base class","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2756:8: error: \'BaseClass::S7\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class \'B7a\' with no access specifier","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2768:8: error: \'BaseClass::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class \'B8a\' with private access specifier","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2780:8: error: \'BaseClass::S9\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class \'B9a\' with public access specifier","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2792:8: error: \'BaseClass::S10\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class \'B10a\' with protected access specifier"}
[fc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2685:8: error: \'BaseClass::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 0 base classes","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2696:8: error: \'BaseClass::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1 base class","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2708:8: error: \'BaseClass::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1 virtual base class","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2720:8: error: \'BaseClass::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class with type \'B4b\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2732:8: error: \'BaseClass::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 0 virtual base classes","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2744:8: error: \'BaseClass::S6\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1 virtual base class","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2756:8: error: \'BaseClass::S7\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class \'B7a\' with no access specifier","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2768:8: error: \'BaseClass::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class \'B8a\' with private access specifier","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2780:8: error: \'BaseClass::S9\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class \'B9a\' with public access specifier","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2792:8: error: \'BaseClass::S10\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class \'B10a\' with protected access specifier"}
}
}
},
},
["err_module_odr_violation_different_definitions"]={
["err_module_odr_violation_different_definitions"]={
[i]="err_module_odr_violation_different_definitions",
[c]="err_module_odr_violation_different_definitions",
[h]="%q0 has different definitions in different modules; %select{definition in module \'%2\' is here|defined here}1",
[d]="%q0 has different definitions in different modules; %select{definition in module \'%2\' is here|defined here}1",
[g]={{nil,nil,{"A has different definitions in different modules; ",{"definition in module \'C\' is here",J}}}},
[e]={{nil,nil,{"A has different definitions in different modules; ",{"definition in module \'C\' is here",L}}}},
[b]=k,
[f]=k,
[e]="(.*?) has different definitions in different modules; (?:definition in module \'(.*?)\' is here|defined here)",
[g]="(.*?) has different definitions in different modules; (?:definition in module \'(.*?)\' is here|defined here)",
[d]=a,
[h]=a,
[f]={{nil,p,a},{s,nil,X}},
[i]={{nil,p,w},{s,nil,bb}},
[c]={"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\nllvm-svn: 206680"},
[b]={"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\nllvm-svn: 206680"},
[j]={{U,653,"void ODRDiagsEmitter::diagnoseSubMismatchUnexpected(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n  Diag(FirstRecord->getLocation(), diag::err_module_odr_violation_different_definitions) << FirstRecord << FirstModule.empty() << FirstModule;"}}
[j]={{U,653,"void ODRDiagsEmitter::diagnoseSubMismatchUnexpected(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n  Diag(FirstRecord->getLocation(), diag::err_module_odr_violation_different_definitions) << FirstRecord << FirstModule.empty() << FirstModule;"}}
},
},
["err_module_odr_violation_different_instantiations"]={
["err_module_odr_violation_different_instantiations"]={
[i]="err_module_odr_violation_different_instantiations",
[c]="err_module_odr_violation_different_instantiations",
[h]="instantiation of %q0 is different in different modules",
[d]="instantiation of %q0 is different in different modules",
[g]="instantiation of A is different in different modules",
[e]="instantiation of A is different in different modules",
[b]=k,
[f]=k,
[e]="instantiation of (.*?) is different in different modules",
[g]="instantiation of (.*?) is different in different modules",
[d]=a,
[h]=a,
[f]=X,
[i]=bb,
[c]={"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\nllvm-svn: 206680"},
[b]={"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\nllvm-svn: 206680"},
[j]={{Ib,9797,"void ASTReader::diagnoseOdrViolations() {\n  // ...\n  // Issue any pending ODR-failure diagnostics.\n  for (auto &Merge : OdrMergeFailures) {\n    // ...\n    if (!Diagnosed) {\n      // ...\n      Diag(Merge.first->getLocation(), diag::err_module_odr_violation_different_instantiations) << Merge.first;"}}
[j]={{Ib,9797,"void ASTReader::diagnoseOdrViolations() {\n  // ...\n  // Issue any pending ODR-failure diagnostics.\n  for (auto &Merge : OdrMergeFailures) {\n    // ...\n    if (!Diagnosed) {\n      // ...\n      Diag(Merge.first->getLocation(), diag::err_module_odr_violation_different_instantiations) << Merge.first;"}}
},
},
["err_module_odr_violation_enum"]={
["err_module_odr_violation_enum"]={
[i]={{nil,q,"err_module_odr_violation_enum"}},
[c]={{nil,q,"err_module_odr_violation_enum"}},
[h]={{nil,s,"%q0 has different definitions in different modules; %select{definition in module \'%2\'|defined here}1 first difference is %select{enum that is %select{not scoped|scoped}4|enum scoped with keyword %select{struct|class}4|enum %select{without|with}4 specified type|enum with specified type %4|enum with %4 element%s4|%ordinal4 element has name %5|%ordinal4 element %5 %select{has|does not have}6 an initializer|%ordinal4 element %5 has an initializer|}3"},{S,q,"%q0 has different definitions in different modules; %select{definition in module \'%2\'|defined here}1 first difference is %select{enum that is %select{not scoped|scoped}4|enum scoped with keyword %select{struct|class}4|enum %select{without|with}4 specified type|enum with specified type %4|enum with %4 element%s4|%ordinal4 element has name %5|%ordinal4 element %5 %select{has|does not have}6 an initilizer|%ordinal4 element %5 has an initializer|}3"}},
[d]={{nil,s,"%q0 has different definitions in different modules; %select{definition in module \'%2\'|defined here}1 first difference is %select{enum that is %select{not scoped|scoped}4|enum scoped with keyword %select{struct|class}4|enum %select{without|with}4 specified type|enum with specified type %4|enum with %4 element%s4|%ordinal4 element has name %5|%ordinal4 element %5 %select{has|does not have}6 an initializer|%ordinal4 element %5 has an initializer|}3"},{S,q,"%q0 has different definitions in different modules; %select{definition in module \'%2\'|defined here}1 first difference is %select{enum that is %select{not scoped|scoped}4|enum scoped with keyword %select{struct|class}4|enum %select{without|with}4 specified type|enum with specified type %4|enum with %4 element%s4|%ordinal4 element has name %5|%ordinal4 element %5 %select{has|does not have}6 an initilizer|%ordinal4 element %5 has an initializer|}3"}},
[g]={{nil,s,{"A has different definitions in different modules; ",{R,J}," first difference is ",{{"enum that is ",{"not scoped","scoped"}},{"enum scoped with keyword ",{"struct",ib}},{"enum ",{"without","with"}," specified type"},"enum with specified type E","enum with E elementE","E element has name F",{"E element F ",{"has","does not have"}," an initializer"},"E element F has an initializer",a}}},{S,q,{"A has different definitions in different modules; ",{R,J}," first difference is ",{{"enum that is ",{"not scoped","scoped"}},{"enum scoped with keyword ",{"struct",ib}},{"enum ",{"without","with"}," specified type"},"enum with specified type E","enum with E elementE","E element has name F",{"E element F ",{"has","does not have"}," an initilizer"},"E element F has an initializer",a}}}},
[e]={{nil,s,{"A has different definitions in different modules; ",{R,L}," first difference is ",{{"enum that is ",{"not scoped","scoped"}},{"enum scoped with keyword ",{"struct",mb}},{"enum ",{"without","with"}," specified type"},"enum with specified type E","enum with E elementE","E element has name F",{"E element F ",{"has","does not have"}," an initializer"},"E element F has an initializer",a}}},{S,q,{"A has different definitions in different modules; ",{R,L}," first difference is ",{{"enum that is ",{"not scoped","scoped"}},{"enum scoped with keyword ",{"struct",mb}},{"enum ",{"without","with"}," specified type"},"enum with specified type E","enum with E elementE","E element has name F",{"E element F ",{"has","does not have"}," an initilizer"},"E element F has an initializer",a}}}},
[b]=k,
[f]=k,
[e]="(.*?) has different definitions in different modules; (?:definition in module \'(.*?)\'|defined here) first difference is (?: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 an initializer|)",
[g]="(.*?) has different definitions in different modules; (?:definition in module \'(.*?)\'|defined here) first difference is (?: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 an initializer|)",
[d]=a,
[h]=a,
[f]={{nil,p,a},{s,q,X}},
[i]={{nil,p,w},{s,q,bb}},
[c]={"ab4d730f14d1",1532559125,"[ODRHash] Support hashing enums.","[ODRHash] Support hashing enums.\n\nllvm-svn: 337978"},
[b]={"ab4d730f14d1",1532559125,"[ODRHash] Support hashing enums.","[ODRHash] Support hashing enums.\n\nllvm-svn: 337978"},
[j]={{U,1810,"bool ODRDiagsEmitter::diagnoseMismatch(const EnumDecl *FirstEnum, const EnumDecl *SecondEnum) const {\n  // ...\n  auto DiagError = [FirstEnum, &FirstModule, this](const auto *DiagAnchor, ODREnumDifference DiffType) { return Diag(DiagAnchor->getLocation(), diag::err_module_odr_violation_enum) << FirstEnum << FirstModule.empty() << FirstModule << DiagAnchor->getSourceRange() << DiffType; };"}},
[j]={{U,1810,"bool ODRDiagsEmitter::diagnoseMismatch(const EnumDecl *FirstEnum, const EnumDecl *SecondEnum) const {\n  // ...\n  auto DiagError = [FirstEnum, &FirstModule, this](const auto *DiagAnchor, ODREnumDifference DiffType) { return Diag(DiagAnchor->getLocation(), diag::err_module_odr_violation_enum) << FirstEnum << FirstModule.empty() << FirstModule << DiagAnchor->getSourceRange() << DiffType; };"}},
[l]={
[l]={
[hc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3409:6: error: \'Enums::E2\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum with 1 element","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3429:6: error: \'Enums::E4\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum with 2 elements","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3449:11: error: \'Enums::E6\' has different definitions in different modules; definition in module \'SecondModule\' first difference is 1st element has name \'x62\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3459:11: error: \'Enums::E7\' has different definitions in different modules; definition in module \'SecondModule\' first difference is 1st element \'x71\' has an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3469:11: error: \'Enums::E8\' has different definitions in different modules; definition in module \'SecondModule\' first difference is 1st element \'x81\' does not have an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3479:20: error: \'Enums::E9\' has different definitions in different modules; definition in module \'SecondModule\' first difference is 2nd element \'x92\' has an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3489:12: error: \'Enums::E10\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum without specified type","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3499:6: error: \'Enums::E11\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum with specified type","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3509:13: error: \'Enums::E12\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum with specified type \'int\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3519:6: error: \'Enums::E13\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum that is not scoped","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3529:13: error: \'Enums::E14\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum that is scoped","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3539:13: error: \'Enums::E15\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum scoped with keyword struct","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3549:12: error: \'Enums::E16\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum scoped with keyword class"}
[fc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3409:6: error: \'Enums::E2\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum with 1 element","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3429:6: error: \'Enums::E4\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum with 2 elements","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3449:11: error: \'Enums::E6\' has different definitions in different modules; definition in module \'SecondModule\' first difference is 1st element has name \'x62\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3459:11: error: \'Enums::E7\' has different definitions in different modules; definition in module \'SecondModule\' first difference is 1st element \'x71\' has an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3469:11: error: \'Enums::E8\' has different definitions in different modules; definition in module \'SecondModule\' first difference is 1st element \'x81\' does not have an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3479:20: error: \'Enums::E9\' has different definitions in different modules; definition in module \'SecondModule\' first difference is 2nd element \'x92\' has an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3489:12: error: \'Enums::E10\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum without specified type","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3499:6: error: \'Enums::E11\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum with specified type","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3509:13: error: \'Enums::E12\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum with specified type \'int\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3519:6: error: \'Enums::E13\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum that is not scoped","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3529:13: error: \'Enums::E14\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum that is scoped","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3539:13: error: \'Enums::E15\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum scoped with keyword struct","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3549:12: error: \'Enums::E16\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum scoped with keyword class"}
}
}
},
},
["err_module_odr_violation_field"]={
["err_module_odr_violation_field"]={
[i]={{nil,s,"err_module_odr_violation_field"}},
[c]={{nil,s,"err_module_odr_violation_field"}},
[h]="%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{field %4|field %4 with type %5|%select{non-|}5bitfield %4|bitfield %4 with one width expression|%select{non-|}5mutable field %4|field %4 with %select{no|an}5 initializer|field %4 with an initializer}3",
[d]="%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{field %4|field %4 with type %5|%select{non-|}5bitfield %4|bitfield %4 with one width expression|%select{non-|}5mutable field %4|field %4 with %select{no|an}5 initializer|field %4 with an initializer}3",
[g]={{nil,nil,{Z,{R,J},ab,{"field E","field E with type F",{{"non-",a},"bitfield E"},"bitfield E with one width expression",{{"non-",a},"mutable field E"},{"field E with ",{nc,"an"}," initializer"},"field E with an initializer"}}},{p,s,{Z,{R,J},ab,{"field E","field E with type F",{{"non-",a},"bitfield E"},"bitfield E with one width expression",{{"non-",a},"mutable field E"},{"field E with ",{nc,"an"}," initalizer"},"field E with an initializer"}}}},
[e]={{nil,nil,{ab,{R,L},Z,{"field E","field E with type F",{{"non-",a},"bitfield E"},"bitfield E with one width expression",{{"non-",a},"mutable field E"},{"field E with ",{Bc,"an"}," initializer"},"field E with an initializer"}}},{p,s,{ab,{R,L},Z,{"field E","field E with type F",{{"non-",a},"bitfield E"},"bitfield E with one width expression",{{"non-",a},"mutable field E"},{"field E with ",{Bc,"an"}," initalizer"},"field E with an initializer"}}}},
[b]=k,
[f]=k,
[e]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:field (.*?)|field (.*?) with type (.*?)|(?:non\\-|)bitfield (.*?)|bitfield (.*?) with one width expression|(?:non\\-|)mutable field (.*?)|field (.*?) with (?:no|an) initializer|field (.*?) with an initializer)",
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:field (.*?)|field (.*?) with type (.*?)|(?:non\\-|)bitfield (.*?)|bitfield (.*?) with one width expression|(?:non\\-|)mutable field (.*?)|field (.*?) with (?:no|an) initializer|field (.*?) with an initializer)",
[d]=a,
[h]=a,
[f]={{nil,p,a},{s,s,X}},
[i]={{nil,p,w},{s,s,bb}},
[c]={Qb,1643408541,Pb,Vb},
[b]={Yb,1643408541,Xb,Wb},
[j]={{U,160,"bool ODRDiagsEmitter::diagnoseSubMismatchField(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const FieldDecl *FirstField, const FieldDecl *SecondField) const {\n  // ...\n  auto DiagError = [FirstRecord, FirstField, FirstModule, this](ODRFieldDifference DiffType) { return Diag(FirstField->getLocation(), diag::err_module_odr_violation_field) << FirstRecord << FirstModule.empty() << FirstModule << FirstField->getSourceRange() << DiffType; };"}},
[j]={{U,160,"bool ODRDiagsEmitter::diagnoseSubMismatchField(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const FieldDecl *FirstField, const FieldDecl *SecondField) const {\n  // ...\n  auto DiagError = [FirstRecord, FirstField, FirstModule, this](ODRFieldDifference DiffType) { return Diag(FirstField->getLocation(), diag::err_module_odr_violation_field) << FirstRecord << FirstModule.empty() << FirstModule << FirstField->getSourceRange() << DiffType; };"}},
[l]={
[l]={
Line 2,027: Line 2,028:
},
},
["err_module_odr_violation_function"]={
["err_module_odr_violation_function"]={
[i]={{nil,t,"err_module_odr_violation_function"}},
[c]={{nil,t,"err_module_odr_violation_function"}},
[h]={{nil,t,"%q0 has different definitions in different modules; %select{definition in module \'%2\'|defined here}1 first difference is %select{return type is %4|%ordinal4 parameter with name %5|%ordinal4 parameter with type %5%select{| decayed from %7}6|%ordinal4 parameter with%select{out|}5 a default argument|%ordinal4 parameter with a default argument|function body}3"}},
[d]={{nil,t,"%q0 has different definitions in different modules; %select{definition in module \'%2\'|defined here}1 first difference is %select{return type is %4|%ordinal4 parameter with name %5|%ordinal4 parameter with type %5%select{| decayed from %7}6|%ordinal4 parameter with%select{out|}5 a default argument|%ordinal4 parameter with a default argument|function body}3"}},
[g]={{nil,t,{"A has different definitions in different modules; ",{R,J}," first difference is ",{"return type is E","E parameter with name F",{"E parameter with type F",{a," decayed from H"}},{"E parameter with",{"out",a}," a default argument"},"E parameter with a default argument","function body"}}}},
[e]={{nil,t,{"A has different definitions in different modules; ",{R,L}," first difference is ",{"return type is E","E parameter with name F",{"E parameter with type F",{a," decayed from H"}},{"E parameter with",{"out",a}," a default argument"},"E parameter with a default argument","function body"}}}},
[b]=k,
[f]=k,
[e]="(.*?) has different definitions in different modules; (?:definition in module \'(.*?)\'|defined here) first difference is (?:return type is (.*?)|(.*?) parameter with name (.*?)|(.*?) parameter with type (.*?)(?:| decayed from (.*?))|(.*?) parameter with(?:out|) a default argument|(.*?) parameter with a default argument|function body)",
[g]="(.*?) has different definitions in different modules; (?:definition in module \'(.*?)\'|defined here) first difference is (?:return type is (.*?)|(.*?) parameter with name (.*?)|(.*?) parameter with type (.*?)(?:| decayed from (.*?))|(.*?) parameter with(?:out|) a default argument|(.*?) parameter with a default argument|function body)",
[d]=a,
[h]=a,
[f]={{nil,p,a},{s,t,X}},
[i]={{nil,p,w},{s,t,bb}},
[c]={"e81caeb3147f",1512782980,"[ODRHash] Support ODR violation detection in functions.","[ODRHash] Support ODR violation detection in functions.\n\nExtend the hashing to functions, which allows detection of function definition\nmismatches across modules.\n\nllvm-svn: 320230"},
[b]={"e81caeb3147f",1512782980,"[ODRHash] Support ODR violation detection in functions.","[ODRHash] Support ODR violation detection in functions.\n\nExtend the hashing to functions, which allows detection of function definition\nmismatches across modules.\n\nllvm-svn: 320230"},
[j]={{U,1677,"bool ODRDiagsEmitter::diagnoseMismatch(const FunctionDecl *FirstFunction, const FunctionDecl *SecondFunction) const {\n  // ...\n  auto DiagError = [FirstFunction, &FirstModule, this](SourceLocation Loc, SourceRange Range, ODRFunctionDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_function) << FirstFunction << FirstModule.empty() << FirstModule << Range << DiffType; };"}},
[j]={{U,1677,"bool ODRDiagsEmitter::diagnoseMismatch(const FunctionDecl *FirstFunction, const FunctionDecl *SecondFunction) const {\n  // ...\n  auto DiagError = [FirstFunction, &FirstModule, this](SourceLocation Loc, SourceRange Range, ODRFunctionDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_function) << FirstFunction << FirstModule.empty() << FirstModule << Range << DiffType; };"}},
[l]={
[l]={
Line 2,041: Line 2,042:
},
},
["err_module_odr_violation_method_params"]={
["err_module_odr_violation_method_params"]={
[i]={{nil,p,"err_module_odr_violation_method_params"}},
[c]={{nil,p,"err_module_odr_violation_method_params"}},
[h]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%select{method %5|constructor|destructor}4 that has %6 parameter%s6|%select{method %5|constructor|destructor}4 with %ordinal6 parameter of type %7%select{| decayed from %9}8|%select{method %5|constructor|destructor}4 with %ordinal6 parameter named %7}3"}},
[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%select{method %5|constructor|destructor}4 that has %6 parameter%s6|%select{method %5|constructor|destructor}4 with %ordinal6 parameter of type %7%select{| decayed from %9}8|%select{method %5|constructor|destructor}4 with %ordinal6 parameter named %7}3"}},
[g]={{nil,p,{Z,{R,J},ab,{{{D,B,A}," that has G parameterG"},{{D,B,A}," with G parameter of type H",{a," decayed from J"}},{{D,B,A}," with G parameter named H"}}}}},
[e]={{nil,p,{ab,{R,L},Z,{{{E,C,B}," that has G parameterG"},{{E,C,B}," with G parameter of type H",{a," decayed from J"}},{{E,C,B}," with G parameter named H"}}}}},
[b]=k,
[f]=k,
[e]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(?:method (.*?)|constructor|destructor) that has (.*?) parameter(.*?)|(?:method (.*?)|constructor|destructor) with (.*?) parameter of type (.*?)(?:| decayed from (.*?))|(?:method (.*?)|constructor|destructor) with (.*?) parameter named (.*?))",
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(?:method (.*?)|constructor|destructor) that has (.*?) parameter(.*?)|(?:method (.*?)|constructor|destructor) with (.*?) parameter of type (.*?)(?:| decayed from (.*?))|(?:method (.*?)|constructor|destructor) with (.*?) parameter named (.*?))",
[d]=a,
[h]=a,
[f]={{nil,p,a}},
[i]={{nil,p,w}},
[c]={Qb,1643408541,Pb,Vb},
[b]={Yb,1643408541,Xb,Wb},
[j]={{U,83,"template <typename MethodT> static bool diagnoseSubMismatchMethodParameters(DiagnosticsEngine &Diags, const NamedDecl *FirstContainer, StringRef FirstModule, StringRef SecondModule, const MethodT *FirstMethod, const MethodT *SecondMethod) {\n  // ...\n  auto DiagError = [&Diags, &GetDiagMethodType, FirstContainer, FirstModule, FirstMethod](ODRMethodParametersDifference DiffType) {\n    // ...\n    return Diags.Report(FirstMethod->getLocation(), diag::err_module_odr_violation_method_params) << FirstContainer << FirstModule.empty() << FirstModule << FirstMethod->getSourceRange() << DiffType << FirstMethodType << FirstName;"}},
[j]={{U,83,"template <typename MethodT> static bool diagnoseSubMismatchMethodParameters(DiagnosticsEngine &Diags, const NamedDecl *FirstContainer, StringRef FirstModule, StringRef SecondModule, const MethodT *FirstMethod, const MethodT *SecondMethod) {\n  // ...\n  auto DiagError = [&Diags, &GetDiagMethodType, FirstContainer, FirstModule, FirstMethod](ODRMethodParametersDifference DiffType) {\n    // ...\n    return Diags.Report(FirstMethod->getLocation(), diag::err_module_odr_violation_method_params) << FirstContainer << FirstModule.empty() << FirstModule << FirstMethod->getSourceRange() << DiffType << FirstMethodType << FirstName;"}},
[l]={
[l]={
[hc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:552:8: error: \'Method::S9\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' that has 2 parameters","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:568:8: error: \'Method::S10\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter of type \'float\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:583:8: error: \'Method::S11\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter named \'y\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:625:8: error: \'Method::S14\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter of type \'int *\' decayed from \'int[3]\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:902:3: error: \'Constructor::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found constructor that has 2 parameters","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3915:12: error: \'Types::PackExpansion::Invalid::L2::L3\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'run\' with 1st parameter of type \'A...\'"}
[fc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:552:8: error: \'Method::S9\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' that has 2 parameters","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:568:8: error: \'Method::S10\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter of type \'float\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:583:8: error: \'Method::S11\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter named \'y\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:625:8: error: \'Method::S14\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter of type \'int *\' decayed from \'int[3]\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:902:3: error: \'Constructor::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found constructor that has 2 parameters","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3915:12: error: \'Types::PackExpansion::Invalid::L2::L3\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'run\' with 1st parameter of type \'A...\'"}
}
}
},
},
["err_module_odr_violation_mismatch_decl"]={
["err_module_odr_violation_mismatch_decl"]={
[i]={{nil,r,"err_module_odr_violation_mismatch_decl"}},
[c]={{nil,r,"err_module_odr_violation_mismatch_decl"}},
[h]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 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}3"},{s,q,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 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}3"},{t,r,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 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}3"}},
[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 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}3"},{s,q,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 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}3"},{t,r,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 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}3"}},
[g]={{nil,p,{Z,{R,J},ab,{"end of class","public access specifier","private access specifier","protected access specifier",dc,ec,pb,Nb,ob,ic,gc,"function template",pb,"instance variable","property"}}},{s,q,{Z,{R,J},ab,{"end of class","public access specifier","private access specifier","protected access specifier",dc,ec,pb,Nb,ob,ic,gc,"function template"}}},{t,r,{Z,{R,J},ab,{"end of class","public access specifier","private access specifier","protected access specifier",dc,ec,pb,Nb,ob,ic,gc}}}},
[e]={{nil,p,{ab,{R,L},Z,{"end of class","public access specifier","private access specifier","protected access specifier",jc,ic,ob,Eb,yb,ec,hc,"function template",ob,"instance variable","property"}}},{s,q,{ab,{R,L},Z,{"end of class","public access specifier","private access specifier","protected access specifier",jc,ic,ob,Eb,yb,ec,hc,"function template"}}},{t,r,{ab,{R,L},Z,{"end of class","public access specifier","private access specifier","protected access specifier",jc,ic,ob,Eb,yb,ec,hc}}}},
[b]=k,
[f]=k,
[e]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined 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)",
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template|method|instance variable|property)",
[d]=a,
[h]=a,
[f]={{nil,p,a},{s,r,X}},
[i]={{nil,p,w},{s,r,bb}},
[c]={"fa3d93a148d4",1485827055,"Add better ODR checking for modules.","Add better ODR checking for modules.\n\nWhen objects are imported for modules, there is a chance that a name collision\nwill cause an ODR violation.  Previously, only a small number of such\nviolations were detected.  This patch provides a stronger check based on\nAST nodes.\n\nThe information needed to uniquely identify an object is taked from the AST and\nput into a one-dimensional byte stream.  This stream is then hashed to give\na value to represent the object, which is stored with the other object data\nin the module.\n\nWhen modules are loaded, and Decl\'s are merged, the hash values of the two\nDecl\'s are compared.  Only Decl\'s with matched hash values will be merged.\nMismatch hashes will generate a module error, and if possible, point to the\nfirst difference between the two objects.\n\nThe transform from AST to byte stream is a modified depth first algorithm.\nDue to references between some AST nodes, a pure depth first algorithm could\ngenerate loops.  For Stmt nodes, a straight depth first processing occurs.\nFor Type and Decl nodes, they are replaced with an index number and only on\nfirst visit will these nodes be processed.  As an optimization, boolean\nvalues are saved and stored together in reverse order at the end of the\nbyte stream to lower the ammount of data that needs to be hashed.\n\nCompile time impact was measured at 1.5-2.0% during module building, and\nnegligible during builds without module building.\n\nDifferential Revision: https://reviews.llvm.org/D21675\n\nllvm-svn: 293585"},
[b]={"fa3d93a148d4",1485827055,"Add better ODR checking for modules.","Add better ODR checking for modules.\n\nWhen objects are imported for modules, there is a chance that a name collision\nwill cause an ODR violation.  Previously, only a small number of such\nviolations were detected.  This patch provides a stronger check based on\nAST nodes.\n\nThe information needed to uniquely identify an object is taked from the AST and\nput into a one-dimensional byte stream.  This stream is then hashed to give\na value to represent the object, which is stored with the other object data\nin the module.\n\nWhen modules are loaded, and Decl\'s are merged, the hash values of the two\nDecl\'s are compared.  Only Decl\'s with matched hash values will be merged.\nMismatch hashes will generate a module error, and if possible, point to the\nfirst difference between the two objects.\n\nThe transform from AST to byte stream is a modified depth first algorithm.\nDue to references between some AST nodes, a pure depth first algorithm could\ngenerate loops.  For Stmt nodes, a straight depth first processing occurs.\nFor Type and Decl nodes, they are replaced with an index number and only on\nfirst visit will these nodes be processed.  As an optimization, boolean\nvalues are saved and stored together in reverse order at the end of the\nbyte stream to lower the ammount of data that needs to be hashed.\n\nCompile time impact was measured at 1.5-2.0% during module building, and\nnegligible during builds without module building.\n\nDifferential Revision: https://reviews.llvm.org/D21675\n\nllvm-svn: 293585"},
[j]={{U,694,"void ODRDiagsEmitter::diagnoseSubMismatchDifferentDeclKinds(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n  // ...\n  Diag(FirstDiagInfo.first, diag::err_module_odr_violation_mismatch_decl) << FirstRecord << FirstModule.empty() << FirstModule << FirstDiagInfo.second << DR.FirstDiffType;"}},
[j]={{U,694,"void ODRDiagsEmitter::diagnoseSubMismatchDifferentDeclKinds(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n  // ...\n  Diag(FirstDiagInfo.first, diag::err_module_odr_violation_mismatch_decl) << FirstRecord << FirstModule.empty() << FirstModule << FirstDiagInfo.second << DR.FirstDiffType;"}},
[l]={
[l]={
Line 2,069: Line 2,070:
},
},
["err_module_odr_violation_mismatch_decl_unknown"]={
["err_module_odr_violation_mismatch_decl_unknown"]={
[i]={{nil,r,"err_module_odr_violation_mismatch_decl_unknown"}},
[c]={{nil,r,"err_module_odr_violation_mismatch_decl_unknown"}},
[h]={{nil,p,"%q0 %select{with definition in module \'%2\'|defined here}1 has different definitions in different modules; first difference is this %select{||||static assert|field|method|type alias|typedef|data member|friend declaration|function template|method|instance variable|property|unexpected decl}3"},{s,s,"%q0 %select{with definition in module \'%2\'|defined here}1 has different definitions in different modules; first difference is this %select{||||static assert|field|method|type alias|typedef|data member|friend declaration|function template|unexpected decl}3"},{S,r,"%q0 %select{with definition in module \'%2\'|defined here}1 has different definitions in different modules; first difference is this %select{||||static assert|field|method|type alias|typedef|data member|friend declaration|unexpected decl}3"}},
[d]={{nil,p,"%q0 %select{with definition in module \'%2\'|defined here}1 has different definitions in different modules; first difference is this %select{||||static assert|field|method|type alias|typedef|data member|friend declaration|function template|method|instance variable|property|unexpected decl}3"},{s,s,"%q0 %select{with definition in module \'%2\'|defined here}1 has different definitions in different modules; first difference is this %select{||||static assert|field|method|type alias|typedef|data member|friend declaration|function template|unexpected decl}3"},{S,r,"%q0 %select{with definition in module \'%2\'|defined here}1 has different definitions in different modules; first difference is this %select{||||static assert|field|method|type alias|typedef|data member|friend declaration|unexpected decl}3"}},
[g]={{nil,p,{"A ",{"with definition in module \'C\'",J}," has different definitions in different modules; first difference is this ",{a,a,a,a,dc,ec,pb,Nb,ob,ic,gc,"function template",pb,"instance variable","property","unexpected decl"}}},{s,s,{"A ",{"with definition in module \'C\'",J}," has different definitions in different modules; first difference is this ",{a,a,a,a,dc,ec,pb,Nb,ob,ic,gc,"function template","unexpected decl"}}},{S,r,{"A ",{"with definition in module \'C\'",J}," has different definitions in different modules; first difference is this ",{a,a,a,a,dc,ec,pb,Nb,ob,ic,gc,"unexpected decl"}}}},
[e]={{nil,p,{"A ",{"with definition in module \'C\'",L}," has different definitions in different modules; first difference is this ",{a,a,a,a,jc,ic,ob,Eb,yb,ec,hc,"function template",ob,"instance variable","property","unexpected decl"}}},{s,s,{"A ",{"with definition in module \'C\'",L}," has different definitions in different modules; first difference is this ",{a,a,a,a,jc,ic,ob,Eb,yb,ec,hc,"function template","unexpected decl"}}},{S,r,{"A ",{"with definition in module \'C\'",L}," has different definitions in different modules; first difference is this ",{a,a,a,a,jc,ic,ob,Eb,yb,ec,hc,"unexpected decl"}}}},
[b]=k,
[f]=k,
[e]="(.*?) (?:with definition in module \'(.*?)\'|defined here) has different definitions in different modules; first difference is this (?:||||static assert|field|method|type alias|typedef|data member|friend declaration|function template|method|instance variable|property|unexpected decl)",
[g]="(.*?) (?:with definition in module \'(.*?)\'|defined here) has different definitions in different modules; first difference is this (?:||||static assert|field|method|type alias|typedef|data member|friend declaration|function template|method|instance variable|property|unexpected decl)",
[d]=a,
[h]=a,
[f]={{nil,p,a},{s,r,X}},
[i]={{nil,p,w},{s,r,bb}},
[c]={"708859a71326",1496883381,"[ODRHash] Change the fall-back diagnostic error.","[ODRHash] Change the fall-back diagnostic error.\n\nProvide a little more information when a ODR violation is detected, but the\nspecific error could not be diagnosed.\n\nllvm-svn: 304956"},
[b]={"708859a71326",1496883381,"[ODRHash] Change the fall-back diagnostic error.","[ODRHash] Change the fall-back diagnostic error.\n\nProvide a little more information when a ODR violation is detected, but the\nspecific error could not be diagnosed.\n\nllvm-svn: 304956"},
[j]={{U,1549,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  // ...\n  Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_mismatch_decl_unknown) << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType << FirstDecl->getSourceRange();"},{U,1645,"bool ODRDiagsEmitter::diagnoseMismatch(const RecordDecl *FirstRecord, const RecordDecl *SecondRecord) const {\n  // ...\n  Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_mismatch_decl_unknown) << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType << FirstDecl->getSourceRange();"},{U,2098,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCInterfaceDecl *FirstID, const ObjCInterfaceDecl *SecondID, const struct ObjCInterfaceDecl::DefinitionData *SecondDD) const {\n  // ...\n  Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_mismatch_decl_unknown) << FirstID << FirstModule.empty() << FirstModule << FirstDiffType << FirstDecl->getSourceRange();"},{U,2204,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCProtocolDecl *FirstProtocol, const ObjCProtocolDecl *SecondProtocol, const struct ObjCProtocolDecl::DefinitionData *SecondDD) const {\n  // ...\n  Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_mismatch_decl_unknown) << FirstProtocol << FirstModule.empty() << FirstModule << FirstDiffType << FirstDecl->getSourceRange();"}}
[j]={{U,1549,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  // ...\n  Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_mismatch_decl_unknown) << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType << FirstDecl->getSourceRange();"},{U,1645,"bool ODRDiagsEmitter::diagnoseMismatch(const RecordDecl *FirstRecord, const RecordDecl *SecondRecord) const {\n  // ...\n  Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_mismatch_decl_unknown) << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType << FirstDecl->getSourceRange();"},{U,2098,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCInterfaceDecl *FirstID, const ObjCInterfaceDecl *SecondID, const struct ObjCInterfaceDecl::DefinitionData *SecondDD) const {\n  // ...\n  Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_mismatch_decl_unknown) << FirstID << FirstModule.empty() << FirstModule << FirstDiffType << FirstDecl->getSourceRange();"},{U,2204,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCProtocolDecl *FirstProtocol, const ObjCProtocolDecl *SecondProtocol, const struct ObjCProtocolDecl::DefinitionData *SecondDD) const {\n  // ...\n  Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_mismatch_decl_unknown) << FirstProtocol << FirstModule.empty() << FirstModule << FirstDiffType << FirstDecl->getSourceRange();"}}
},
},
["err_module_odr_violation_missing_decl"]={
["err_module_odr_violation_missing_decl"]={
[i]="err_module_odr_violation_missing_decl",
[c]="err_module_odr_violation_missing_decl",
[h]="%q0 from module \'%1\' is not present in definition of %q2%select{ in module \'%4\'| provided earlier}3",
[d]="%q0 from module \'%1\' is not present in definition of %q2%select{ in module \'%4\'| provided earlier}3",
[g]={{nil,nil,{"A from module \'B\' is not present in definition of C",{" in module \'E\'"," provided earlier"}}}},
[e]={{nil,nil,{"A from module \'B\' is not present in definition of C",{" in module \'E\'"," provided earlier"}}}},
[b]=k,
[f]=k,
[e]="(.*?) from module \'(.*?)\' is not present in definition of (.*?)(?: in module \'(.*?)\'| provided earlier)",
[g]="(.*?) from module \'(.*?)\' is not present in definition of (.*?)(?: in module \'(.*?)\'| provided earlier)",
[d]=a,
[h]=a,
[f]=X,
[i]=bb,
[c]={"2b9e3e396a6f",1382076318,"Basic ODR checking for C++ modules:","Basic ODR checking for C++ modules:\n\nIf we have multiple definitions of the same entity from different modules, we\nnominate the first definition which we see as being the canonical definition.\nIf we load a declaration from a different definition and we can\'t find a\ncorresponding declaration in the canonical definition, issue a diagnostic.\n\nThis is insufficient to prevent things from going horribly wrong in all cases\n-- we might be in the middle of emitting IR for a function when we trigger some\ndeserialization and discover that it refers to an incoherent piece of the AST,\nby which point it\'s probably too late to bail out -- but we\'ll at least produce\na diagnostic.\n\nllvm-svn: 192950"},
[b]={"2b9e3e396a6f",1382076318,"Basic ODR checking for C++ modules:","Basic ODR checking for C++ modules:\n\nIf we have multiple definitions of the same entity from different modules, we\nnominate the first definition which we see as being the canonical definition.\nIf we load a declaration from a different definition and we can\'t find a\ncorresponding declaration in the canonical definition, issue a diagnostic.\n\nThis is insufficient to prevent things from going horribly wrong in all cases\n-- we might be in the middle of emitting IR for a function when we trigger some\ndeserialization and discover that it refers to an incoherent piece of the AST,\nby which point it\'s probably too late to bail out -- but we\'ll at least produce\na diagnostic.\n\nllvm-svn: 192950"},
[j]={{Ib,9745,"void ASTReader::diagnoseOdrViolations() {\n  // ...\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    // ...\n    if (!Found) {\n      // ...\n      Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl) << D << ODRDiagsEmitter::getOwningModuleNameForDiagnostic(D) << CanonDef << CanonDefModule.empty() << CanonDefModule;"}},
[j]={{Ib,9745,"void ASTReader::diagnoseOdrViolations() {\n  // ...\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    // ...\n    if (!Found) {\n      // ...\n      Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl) << D << ODRDiagsEmitter::getOwningModuleNameForDiagnostic(D) << CanonDef << CanonDefModule.empty() << CanonDefModule;"}},
[l]={
[l]={
Line 2,094: Line 2,095:
},
},
["err_module_odr_violation_objc_interface"]={
["err_module_odr_violation_objc_interface"]={
[i]={{nil,p,"err_module_odr_violation_objc_interface"}},
[c]={{nil,p,"err_module_odr_violation_objc_interface"}},
[h]={{nil,p,"%0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%select{no super class|super class with type %5}4|instance variable \'%4\' access control is %select{|@private|@protected|@public|@package}5}3"}},
[d]={{nil,p,"%0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%select{no super class|super class with type %5}4|instance variable \'%4\' access control is %select{|@private|@protected|@public|@package}5}3"}},
[g]={{nil,p,{Z,{R,J},ab,{{{"no super class","super class with type F"}},{"instance variable \'E\' access control is ",{a,"@private","@protected","@public","@package"}}}}}},
[e]={{nil,p,{ab,{R,L},Z,{{{"no super class","super class with type F"}},{"instance variable \'E\' access control is ",{a,"@private","@protected","@public","@package"}}}}}},
[b]=k,
[f]=k,
[e]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(?:no super class|super class with type (.*?))|instance variable \'(.*?)\' access control is (?:|@private|@protected|@public|@package))",
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(?:no super class|super class with type (.*?))|instance variable \'(.*?)\' access control is (?:|@private|@protected|@public|@package))",
[d]=a,
[h]=a,
[f]={{nil,p,a}},
[i]={{nil,p,w}},
[c]={"f27afedc6c86",1662843785,"[Clang] Implement P2738R1 - constexpr cast from void*","[Clang] Implement P2738R1 - constexpr cast from void*\n\nReviewed By: #clang-language-wg, erichkeane\n\nDifferential Revision: https://reviews.llvm.org/D153702"},
[b]={"f27afedc6c86",1662843785,"[Clang] Implement P2738R1 - constexpr cast from void*","[Clang] Implement P2738R1 - constexpr cast from void*\n\nReviewed By: #clang-language-wg, erichkeane\n\nDifferential Revision: https://reviews.llvm.org/D153702"},
[j]={{U,1942,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCInterfaceDecl *FirstID, const ObjCInterfaceDecl *SecondID, const struct ObjCInterfaceDecl::DefinitionData *SecondDD) const {\n  // ...\n  auto DiagError = [FirstID, &FirstModule, this](SourceLocation Loc, SourceRange Range, ODRInterfaceDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_objc_interface) << FirstID << FirstModule.empty() << FirstModule << Range << DiffType; };"}},
[j]={{U,1942,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCInterfaceDecl *FirstID, const ObjCInterfaceDecl *SecondID, const struct ObjCInterfaceDecl::DefinitionData *SecondDD) const {\n  // ...\n  auto DiagError = [FirstID, &FirstModule, this](SourceLocation Loc, SourceRange Range, ODRInterfaceDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_objc_interface) << FirstID << FirstModule.empty() << FirstModule << Range << DiffType; };"}},
[l]={
[l]={
Line 2,108: Line 2,109:
},
},
["err_module_odr_violation_objc_method"]={
["err_module_odr_violation_objc_method"]={
[i]="err_module_odr_violation_objc_method",
[c]={{nil,p,"err_module_odr_violation_objc_method"}},
[h]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{method %4 with return type %5|%select{class|instance}5 method %4|%select{no|\'required\'|\'optional\'}4 method control|method %4 with %select{no designated initializer|designated initializer}5|%select{regular|direct}5 method %4|method %4}3"}},
[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{method %4 with return type %5|%select{class|instance}5 method %4|%select{no|\'required\'|\'optional\'}4 method control|method %4 with %select{no designated initializer|designated initializer}5|%select{regular|direct}5 method %4|method %4}3"}},
[g]={{nil,p,{Z,{R,J},ab,{"method E with return type F",{{ib,"instance"}," method E"},{{nc,"\'required\'","\'optional\'"}," method control"},{"method E with ",{"no designated initializer","designated initializer"}},{{"regular","direct"}," method E"},"method E"}}}},
[e]={{nil,p,{ab,{R,L},Z,{"method E with return type F",{{mb,"instance"}," method E"},{{Bc,"\'required\'","\'optional\'"}," method control"},{"method E with ",{"no designated initializer","designated initializer"}},{{"regular","direct"}," method E"},"method E"}}}},
[b]=k,
[f]=k,
[e]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:method (.*?) with return type (.*?)|(?:class|instance) method (.*?)|(?:no|\'required\'|\'optional\') method control|method (.*?) with (?:no designated initializer|designated initializer)|(?:regular|direct) method (.*?)|method (.*?))",
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:method (.*?) with return type (.*?)|(?:class|instance) method (.*?)|(?:no|\'required\'|\'optional\') method control|method (.*?) with (?:no designated initializer|designated initializer)|(?:regular|direct) method (.*?)|method (.*?))",
[d]=a,
[h]=a,
[f]={{nil,p,a}},
[i]={{nil,p,w}},
[c]={Qb,1643408541,Pb,Vb},
[b]={Yb,1643408541,Xb,Wb},
[j]={{U,437,"bool ODRDiagsEmitter::diagnoseSubMismatchObjCMethod(const NamedDecl *FirstObjCContainer, StringRef FirstModule, StringRef SecondModule, const ObjCMethodDecl *FirstMethod, const ObjCMethodDecl *SecondMethod) const {\n  // ...\n  auto DiagError = [FirstObjCContainer, FirstModule, FirstMethod, this](ODRMethodDifference DiffType) { return Diag(FirstMethod->getLocation(), diag::err_module_odr_violation_objc_method) << FirstObjCContainer << FirstModule.empty() << FirstModule << FirstMethod->getSourceRange() << DiffType; };"}}
[j]={{U,437,"bool ODRDiagsEmitter::diagnoseSubMismatchObjCMethod(const NamedDecl *FirstObjCContainer, StringRef FirstModule, StringRef SecondModule, const ObjCMethodDecl *FirstMethod, const ObjCMethodDecl *SecondMethod) const {\n  // ...\n  auto DiagError = [FirstObjCContainer, FirstModule, FirstMethod, this](ODRMethodDifference DiffType) { return Diag(FirstMethod->getLocation(), diag::err_module_odr_violation_objc_method) << FirstObjCContainer << FirstModule.empty() << FirstModule << FirstMethod->getSourceRange() << DiffType; };"}}
},
},
["err_module_odr_violation_objc_property"]={
["err_module_odr_violation_objc_property"]={
[i]={{nil,p,"err_module_odr_violation_objc_property"}},
[c]={{nil,p,"err_module_odr_violation_objc_property"}},
[h]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{property %4|property %4 with type %5|%select{no|\'required\'|\'optional\'}4 property control|property %4 with %select{default |}6\'%select{none|readonly|getter|assign|readwrite|retain|copy|nonatomic|setter|atomic|weak|strong|unsafe_unretained|nullability|null_resettable|class|direct}5\' attribute}3"}},
[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{property %4|property %4 with type %5|%select{no|\'required\'|\'optional\'}4 property control|property %4 with %select{default |}6\'%select{none|readonly|getter|assign|readwrite|retain|copy|nonatomic|setter|atomic|weak|strong|unsafe_unretained|nullability|null_resettable|class|direct}5\' attribute}3"}},
[g]={{nil,p,{Z,{R,J},ab,{"property E","property E with type F",{{nc,"\'required\'","\'optional\'"}," property control"},{"property E with ",{"default ",a},"\'",{"none","readonly","getter","assign","readwrite","retain","copy","nonatomic","setter","atomic","weak","strong","unsafe_unretained","nullability","null_resettable",ib,"direct"},"\' attribute"}}}}},
[e]={{nil,p,{ab,{R,L},Z,{"property E","property E with type F",{{Bc,"\'required\'","\'optional\'"}," property control"},{"property E with ",{"default ",a},"\'",{"none","readonly","getter","assign","readwrite","retain","copy","nonatomic","setter","atomic","weak","strong","unsafe_unretained","nullability","null_resettable",mb,"direct"},"\' attribute"}}}}},
[b]=k,
[f]=k,
[e]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:property (.*?)|property (.*?) with type (.*?)|(?:no|\'required\'|\'optional\') property control|property (.*?) with (?:default |)\'(?:none|readonly|getter|assign|readwrite|retain|copy|nonatomic|setter|atomic|weak|strong|unsafe_unretained|nullability|null_resettable|class|direct)\' attribute)",
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:property (.*?)|property (.*?) with type (.*?)|(?:no|\'required\'|\'optional\') property control|property (.*?) with (?:default |)\'(?:none|readonly|getter|assign|readwrite|retain|copy|nonatomic|setter|atomic|weak|strong|unsafe_unretained|nullability|null_resettable|class|direct)\' attribute)",
[d]=a,
[h]=a,
[f]={{nil,p,a}},
[i]={{nil,p,w}},
[c]={"dcb71b5e1d13",1657144706,"[ODRHash] Hash `ObjCPropertyDecl` and diagnose discovered mismatches.","[ODRHash] Hash `ObjCPropertyDecl` and diagnose discovered mismatches.\n\nDifferential Revision: https://reviews.llvm.org/D130326"},
[b]={"dcb71b5e1d13",1657144706,"[ODRHash] Hash `ObjCPropertyDecl` and diagnose discovered mismatches.","[ODRHash] Hash `ObjCPropertyDecl` and diagnose discovered mismatches.\n\nDifferential Revision: https://reviews.llvm.org/D130326"},
[j]={{U,516,"bool ODRDiagsEmitter::diagnoseSubMismatchObjCProperty(const NamedDecl *FirstObjCContainer, StringRef FirstModule, StringRef SecondModule, const ObjCPropertyDecl *FirstProp, const ObjCPropertyDecl *SecondProp) const {\n  // ...\n  auto DiagError = [FirstObjCContainer, FirstModule, FirstProp, this](SourceLocation Loc, ODRPropertyDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_objc_property) << FirstObjCContainer << FirstModule.empty() << FirstModule << FirstProp->getSourceRange() << DiffType; };"}}
[j]={{U,516,"bool ODRDiagsEmitter::diagnoseSubMismatchObjCProperty(const NamedDecl *FirstObjCContainer, StringRef FirstModule, StringRef SecondModule, const ObjCPropertyDecl *FirstProp, const ObjCPropertyDecl *SecondProp) const {\n  // ...\n  auto DiagError = [FirstObjCContainer, FirstModule, FirstProp, this](SourceLocation Loc, ODRPropertyDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_objc_property) << FirstObjCContainer << FirstModule.empty() << FirstModule << FirstProp->getSourceRange() << DiffType; };"}}
},
},
["err_module_odr_violation_record"]={
["err_module_odr_violation_record"]={
[i]="err_module_odr_violation_record",
[c]={{nil,s,"err_module_odr_violation_record"}},
[h]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{static assert with condition|static assert with message|static assert with %select{|no }4message|%select{method %5|constructor|destructor}4|%select{method %5|constructor|destructor}4 is %select{not deleted|deleted}6|%select{method %5|constructor|destructor}4 is %select{not defaulted|defaulted}6|%select{method %5|constructor|destructor}4 is %select{|pure }6%select{not virtual|virtual}7|%select{method %5|constructor|destructor}4 is %select{not static|static}6|%select{method %5|constructor|destructor}4 is %select{not volatile|volatile}6|%select{method %5|constructor|destructor}4 is %select{not const|const}6|%select{method %5|constructor|destructor}4 is %select{not inline|inline}6|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with%select{out|}7 a default argument|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with a default argument|%select{method %5|constructor|destructor}4 with %select{no |}6template arguments|%select{method %5|constructor|destructor}4 with %6 template argument%s6|%select{method %5|constructor|destructor}4 with %6 for %ordinal7 template argument|%select{method %5|constructor|destructor}4 with %select{no body|body}6|%select{method %5|constructor|destructor}4 with body|friend %select{class|function}4|friend %4|friend function %4|function template %4 with %5 template parameter%s5|function template %4 with %ordinal5 template parameter being a %select{type|non-type|template}6 template parameter|function template %4 with %ordinal5 template parameter %select{with no name|named %7}6|function template %4 with %ordinal5 template parameter with %select{no |}6default argument|function template %4 with %ordinal5 template parameter with default argument %6|function template %4 with %ordinal5 template parameter with one type|function template %4 with %ordinal5 template parameter %select{not |}6being a template parameter pack|}3"},{s,s,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{static assert with condition|static assert with message|static assert with %select{|no }4message|%select{method %5|constructor|destructor}4|%select{method %5|constructor|destructor}4 is %select{not deleted|deleted}6|%select{method %5|constructor|destructor}4 is %select{not defaulted|defaulted}6|%select{method %5|constructor|destructor}4 is %select{|pure }6%select{not virtual|virtual}7|%select{method %5|constructor|destructor}4 is %select{not static|static}6|%select{method %5|constructor|destructor}4 is %select{not volatile|volatile}6|%select{method %5|constructor|destructor}4 is %select{not const|const}6|%select{method %5|constructor|destructor}4 is %select{not inline|inline}6|%select{method %5|constructor|destructor}4 that has %6 parameter%s6|%select{method %5|constructor|destructor}4 with %ordinal6 parameter of type %7%select{| decayed from %9}8|%select{method %5|constructor|destructor}4 with %ordinal6 parameter named %7|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with%select{out|}7 a default argument|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with a default argument|%select{method %5|constructor|destructor}4 with %select{no |}6template arguments|%select{method %5|constructor|destructor}4 with %6 template argument%s6|%select{method %5|constructor|destructor}4 with %6 for %ordinal7 template argument|%select{method %5|constructor|destructor}4 with %select{no body|body}6|%select{method %5|constructor|destructor}4 with body|friend %select{class|function}4|friend %4|friend function %4|function template %4 with %5 template parameter%s5|function template %4 with %ordinal5 template parameter being a %select{type|non-type|template}6 template parameter|function template %4 with %ordinal5 template parameter %select{with no name|named %7}6|function template %4 with %ordinal5 template parameter with %select{no |}6default argument|function template %4 with %ordinal5 template parameter with default argument %6|function template %4 with %ordinal5 template parameter with one type|function template %4 with %ordinal5 template parameter %select{not |}6being a template parameter pack|}3"}},
[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{static assert with condition|static assert with message|static assert with %select{|no }4message|%select{method %5|constructor|destructor}4|%select{method %5|constructor|destructor}4 is %select{not deleted|deleted}6|%select{method %5|constructor|destructor}4 is %select{not defaulted|defaulted}6|%select{method %5|constructor|destructor}4 is %select{|pure }6%select{not virtual|virtual}7|%select{method %5|constructor|destructor}4 is %select{not static|static}6|%select{method %5|constructor|destructor}4 is %select{not volatile|volatile}6|%select{method %5|constructor|destructor}4 is %select{not const|const}6|%select{method %5|constructor|destructor}4 is %select{not inline|inline}6|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with%select{out|}7 a default argument|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with a default argument|%select{method %5|constructor|destructor}4 with %select{no |}6template arguments|%select{method %5|constructor|destructor}4 with %6 template argument%s6|%select{method %5|constructor|destructor}4 with %6 for %ordinal7 template argument|%select{method %5|constructor|destructor}4 with %select{no body|body}6|%select{method %5|constructor|destructor}4 with body|friend %select{class|function}4|friend %4|friend function %4|function template %4 with %5 template parameter%s5|function template %4 with %ordinal5 template parameter being a %select{type|non-type|template}6 template parameter|function template %4 with %ordinal5 template parameter %select{with no name|named %7}6|function template %4 with %ordinal5 template parameter with %select{no |}6default argument|function template %4 with %ordinal5 template parameter with default argument %6|function template %4 with %ordinal5 template parameter with one type|function template %4 with %ordinal5 template parameter %select{not |}6being a template parameter pack|}3"},{s,s,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{static assert with condition|static assert with message|static assert with %select{|no }4message|%select{method %5|constructor|destructor}4|%select{method %5|constructor|destructor}4 is %select{not deleted|deleted}6|%select{method %5|constructor|destructor}4 is %select{not defaulted|defaulted}6|%select{method %5|constructor|destructor}4 is %select{|pure }6%select{not virtual|virtual}7|%select{method %5|constructor|destructor}4 is %select{not static|static}6|%select{method %5|constructor|destructor}4 is %select{not volatile|volatile}6|%select{method %5|constructor|destructor}4 is %select{not const|const}6|%select{method %5|constructor|destructor}4 is %select{not inline|inline}6|%select{method %5|constructor|destructor}4 that has %6 parameter%s6|%select{method %5|constructor|destructor}4 with %ordinal6 parameter of type %7%select{| decayed from %9}8|%select{method %5|constructor|destructor}4 with %ordinal6 parameter named %7|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with%select{out|}7 a default argument|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with a default argument|%select{method %5|constructor|destructor}4 with %select{no |}6template arguments|%select{method %5|constructor|destructor}4 with %6 template argument%s6|%select{method %5|constructor|destructor}4 with %6 for %ordinal7 template argument|%select{method %5|constructor|destructor}4 with %select{no body|body}6|%select{method %5|constructor|destructor}4 with body|friend %select{class|function}4|friend %4|friend function %4|function template %4 with %5 template parameter%s5|function template %4 with %ordinal5 template parameter being a %select{type|non-type|template}6 template parameter|function template %4 with %ordinal5 template parameter %select{with no name|named %7}6|function template %4 with %ordinal5 template parameter with %select{no |}6default argument|function template %4 with %ordinal5 template parameter with default argument %6|function template %4 with %ordinal5 template parameter with one type|function template %4 with %ordinal5 template parameter %select{not |}6being a template parameter pack|}3"}},
[g]={{nil,p,{Z,{R,J},ab,{"static assert with condition","static assert with message",{"static assert with ",{a,xb},"message"},{{D,B,A}},{{D,B,A},bb,{"not deleted","deleted"}},{{D,B,A},bb,{"not defaulted","defaulted"}},{{D,B,A},bb,{a,"pure "},{"not virtual","virtual"}},{{D,B,A},bb,{"not static","static"}},{{D,B,A},bb,{"not volatile","volatile"}},{{D,B,A},bb,{"not const","const"}},{{D,B,A},bb,{"not inline","inline"}},{{D,B,A}," with G parameter with",{"out",a}," a default argument"},{{D,B,A}," with G parameter with a default argument"},{{D,B,A}," with ",{xb,a},"template arguments"},{{D,B,A}," with G template argumentG"},{{D,B,A}," with G for H template argument"},{{D,B,A}," with ",{"no body","body"}},{{D,B,A}," with body"},{"friend ",{ib,"function"}},"friend E","friend function E","function template E with F template parameterF",{"function template E with F template parameter being a ",{"type","non-type","template"}," template parameter"},{"function template E with F template parameter ",{"with no name","named H"}},{"function template E with F template parameter with ",{xb,a},Wb},"function template E with F template parameter with default argument G","function template E with F template parameter with one type",{"function template E with F template parameter ",{"not ",a},"being a template parameter pack"},a}}},{s,s,{Z,{R,J},ab,{"static assert with condition","static assert with message",{"static assert with ",{a,xb},"message"},{{D,B,A}},{{D,B,A},bb,{"not deleted","deleted"}},{{D,B,A},bb,{"not defaulted","defaulted"}},{{D,B,A},bb,{a,"pure "},{"not virtual","virtual"}},{{D,B,A},bb,{"not static","static"}},{{D,B,A},bb,{"not volatile","volatile"}},{{D,B,A},bb,{"not const","const"}},{{D,B,A},bb,{"not inline","inline"}},{{D,B,A}," that has G parameterG"},{{D,B,A}," with G parameter of type H",{a," decayed from J"}},{{D,B,A}," with G parameter named H"},{{D,B,A}," with G parameter with",{"out",a}," a default argument"},{{D,B,A}," with G parameter with a default argument"},{{D,B,A}," with ",{xb,a},"template arguments"},{{D,B,A}," with G template argumentG"},{{D,B,A}," with G for H template argument"},{{D,B,A}," with ",{"no body","body"}},{{D,B,A}," with body"},{"friend ",{ib,"function"}},"friend E","friend function E","function template E with F template parameterF",{"function template E with F template parameter being a ",{"type","non-type","template"}," template parameter"},{"function template E with F template parameter ",{"with no name","named H"}},{"function template E with F template parameter with ",{xb,a},Wb},"function template E with F template parameter with default argument G","function template E with F template parameter with one type",{"function template E with F template parameter ",{"not ",a},"being a template parameter pack"},a}}}},
[e]={{nil,p,{ab,{R,L},Z,{"static assert with condition","static assert with message",{"static assert with ",{a,vb},"message"},{{E,C,B}},{{E,C,B},eb,{"not deleted","deleted"}},{{E,C,B},eb,{"not defaulted","defaulted"}},{{E,C,B},eb,{a,"pure "},{"not virtual","virtual"}},{{E,C,B},eb,{"not static","static"}},{{E,C,B},eb,{"not volatile","volatile"}},{{E,C,B},eb,{"not const","const"}},{{E,C,B},eb,{"not inline","inline"}},{{E,C,B}," with G parameter with",{"out",a}," a default argument"},{{E,C,B}," with G parameter with a default argument"},{{E,C,B}," with ",{vb,a},"template arguments"},{{E,C,B}," with G template argumentG"},{{E,C,B}," with G for H template argument"},{{E,C,B}," with ",{"no body","body"}},{{E,C,B}," with body"},{"friend ",{mb,"function"}},"friend E","friend function E","function template E with F template parameterF",{"function template E with F template parameter being a ",{"type","non-type","template"}," template parameter"},{"function template E with F template parameter ",{"with no name","named H"}},{"function template E with F template parameter with ",{vb,a},dc},"function template E with F template parameter with default argument G","function template E with F template parameter with one type",{"function template E with F template parameter ",{"not ",a},"being a template parameter pack"},a}}},{s,s,{ab,{R,L},Z,{"static assert with condition","static assert with message",{"static assert with ",{a,vb},"message"},{{E,C,B}},{{E,C,B},eb,{"not deleted","deleted"}},{{E,C,B},eb,{"not defaulted","defaulted"}},{{E,C,B},eb,{a,"pure "},{"not virtual","virtual"}},{{E,C,B},eb,{"not static","static"}},{{E,C,B},eb,{"not volatile","volatile"}},{{E,C,B},eb,{"not const","const"}},{{E,C,B},eb,{"not inline","inline"}},{{E,C,B}," that has G parameterG"},{{E,C,B}," with G parameter of type H",{a," decayed from J"}},{{E,C,B}," with G parameter named H"},{{E,C,B}," with G parameter with",{"out",a}," a default argument"},{{E,C,B}," with G parameter with a default argument"},{{E,C,B}," with ",{vb,a},"template arguments"},{{E,C,B}," with G template argumentG"},{{E,C,B}," with G for H template argument"},{{E,C,B}," with ",{"no body","body"}},{{E,C,B}," with body"},{"friend ",{mb,"function"}},"friend E","friend function E","function template E with F template parameterF",{"function template E with F template parameter being a ",{"type","non-type","template"}," template parameter"},{"function template E with F template parameter ",{"with no name","named H"}},{"function template E with F template parameter with ",{vb,a},dc},"function template E with F template parameter with default argument G","function template E with F template parameter with one type",{"function template E with F template parameter ",{"not ",a},"being a template parameter pack"},a}}}},
[b]=k,
[f]=k,
[e]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:static assert with condition|static assert with 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 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 body|friend (?:class|function)|friend (.*?)|friend function (.*?)|function template (.*?) with (.*?) template parameter(.*?)|function template (.*?) with (.*?) template parameter 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 one type|function template (.*?) with (.*?) template parameter (?:not |)being a template parameter pack|)",
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:static assert with condition|static assert with 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 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 body|friend (?:class|function)|friend (.*?)|friend function (.*?)|function template (.*?) with (.*?) template parameter(.*?)|function template (.*?) with (.*?) template parameter 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 one type|function template (.*?) with (.*?) template parameter (?:not |)being a template parameter pack|)",
[d]=a,
[h]=a,
[f]={{nil,p,a},{s,s,X}},
[i]={{nil,p,w},{s,s,bb}},
[c]={Qb,1643408541,Pb,Vb},
[b]={Yb,1643408541,Xb,Wb},
[j]={{U,960,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  // ...\n  auto DiagError = [FirstRecord, &FirstModule, this](SourceLocation Loc, SourceRange Range, ODRCXXRecordDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_record) << FirstRecord << FirstModule.empty() << FirstModule << Range << DiffType; };"}},
[j]={{U,960,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  // ...\n  auto DiagError = [FirstRecord, &FirstModule, this](SourceLocation Loc, SourceRange Range, ODRCXXRecordDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_record) << FirstRecord << FirstModule.empty() << FirstModule << Range << DiffType; };"}},
[l]={
[l]={
[hc]={
[fc]={
[1]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:107:25: error: \'StaticAssert::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found static assert with message",
[1]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:107:25: error: \'StaticAssert::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found static assert with message",
[2]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:121:3: error: \'StaticAssert::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found static assert with no message",
[2]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:121:3: error: \'StaticAssert::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found static assert with no message",
Line 2,204: Line 2,205:
},
},
["err_module_odr_violation_referenced_protocols"]={
["err_module_odr_violation_referenced_protocols"]={
[i]={{nil,p,"err_module_odr_violation_referenced_protocols"}},
[c]={{nil,p,"err_module_odr_violation_referenced_protocols"}},
[h]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%4 referenced %plural{1:protocol|:protocols}4|%ordinal4 referenced protocol with name %5}3"}},
[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%4 referenced %plural{1:protocol|:protocols}4|%ordinal4 referenced protocol with name %5}3"}},
[g]={{nil,p,{Z,{R,J},ab,{{"E referenced ",{"protocol","protocols"}},"E referenced protocol with name F"}}}},
[e]={{nil,p,{ab,{R,L},Z,{{"E referenced ",{"protocol","protocols"}},"E referenced protocol with name F"}}}},
[b]=k,
[f]=k,
[e]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(.*?) referenced (?:protocol|protocols)|(.*?) referenced protocol with name (.*?))",
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(.*?) referenced (?:protocol|protocols)|(.*?) referenced protocol with name (.*?))",
[d]=a,
[h]=a,
[f]={{nil,p,a}},
[i]={{nil,p,w}},
[c]={Qb,1643408541,Pb,Vb},
[b]={Yb,1643408541,Xb,Wb},
[j]={{U,375,"bool ODRDiagsEmitter::diagnoseSubMismatchProtocols(const ObjCProtocolList &FirstProtocols, const ObjCContainerDecl *FirstContainer, StringRef FirstModule, const ObjCProtocolList &SecondProtocols, const ObjCContainerDecl *SecondContainer, StringRef SecondModule) const {\n  // ...\n  auto DiagRefProtocolError = [FirstContainer, FirstModule, this](SourceLocation Loc, SourceRange Range, ODRReferencedProtocolDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_referenced_protocols) << FirstContainer << FirstModule.empty() << FirstModule << Range << DiffType; };"}}
[j]={{U,375,"bool ODRDiagsEmitter::diagnoseSubMismatchProtocols(const ObjCProtocolList &FirstProtocols, const ObjCContainerDecl *FirstContainer, StringRef FirstModule, const ObjCProtocolList &SecondProtocols, const ObjCContainerDecl *SecondContainer, StringRef SecondModule) const {\n  // ...\n  auto DiagRefProtocolError = [FirstContainer, FirstModule, this](SourceLocation Loc, SourceRange Range, ODRReferencedProtocolDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_referenced_protocols) << FirstContainer << FirstModule.empty() << FirstModule << Range << DiffType; };"}}
},
},
["err_module_odr_violation_template_parameter"]={
["err_module_odr_violation_template_parameter"]={
[i]={{nil,t,"err_module_odr_violation_template_parameter"}},
[c]={{nil,t,"err_module_odr_violation_template_parameter"}},
[h]={{nil,s,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{unnamed template parameter|template parameter %5|template parameter with %select{no |}4default argument|template parameter with default argument}3"},{S,t,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{unnamed template parameter|template parameter %4|template parameter with %select{no |}4default argument|template parameter with default argument}3"}},
[d]={{nil,s,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{unnamed template parameter|template parameter %5|template parameter with %select{no |}4default argument|template parameter with default argument}3"},{S,t,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{unnamed template parameter|template parameter %4|template parameter with %select{no |}4default argument|template parameter with default argument}3"}},
[g]={{nil,s,{Z,{R,J},ab,{"unnamed template parameter","template parameter F",{"template parameter with ",{xb,a},Wb},"template parameter with default argument"}}},{S,t,{Z,{R,J},ab,{"unnamed template parameter","template parameter E",{"template parameter with ",{xb,a},Wb},"template parameter with default argument"}}}},
[e]={{nil,s,{ab,{R,L},Z,{"unnamed template parameter","template parameter F",{"template parameter with ",{vb,a},dc},"template parameter with default argument"}}},{S,t,{ab,{R,L},Z,{"unnamed template parameter","template parameter E",{"template parameter with ",{vb,a},dc},"template parameter with default argument"}}}},
[b]=k,
[f]=k,
[e]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:unnamed template parameter|template parameter (.*?)|template parameter with (?:no |)default argument|template parameter with default argument)",
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:unnamed template parameter|template parameter (.*?)|template parameter with (?:no |)default argument|template parameter with default argument)",
[d]=a,
[h]=a,
[f]={{nil,p,a},{s,t,X}},
[i]={{nil,p,w},{s,t,bb}},
[c]={"498117bf11d8",1503456239,"[ODRHash] Diagnose differing template parameters.","[ODRHash] Diagnose differing template parameters.\n\nllvm-svn: 311519"},
[b]={"498117bf11d8",1503456239,"[ODRHash] Diagnose differing template parameters.","[ODRHash] Diagnose differing template parameters.\n\nllvm-svn: 311519"},
[j]={{U,880,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  // ...\n  if (FirstTemplate && SecondTemplate) {\n    // ...\n    for (auto Pair : llvm::zip(FirstTemplateParams, SecondTemplateParams)) {\n      // ...\n      Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_template_parameter) << FirstRecord << FirstModule.empty() << FirstModule << FirstDecl->getSourceRange() << ErrDiffType << hasFirstArg << FirstName;"}},
[j]={{U,880,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  // ...\n  if (FirstTemplate && SecondTemplate) {\n    // ...\n    for (auto Pair : llvm::zip(FirstTemplateParams, SecondTemplateParams)) {\n      // ...\n      Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_template_parameter) << FirstRecord << FirstModule.empty() << FirstModule << FirstDecl->getSourceRange() << ErrDiffType << hasFirstArg << FirstName;"}},
[l]={
[l]={
[hc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2490:17: error: \'TemplateParameters::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter \'B\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2502:17: error: \'TemplateParameters::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2514:17: error: \'TemplateParameters::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with no default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2526:15: error: \'TemplateParameters::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2540:31: error: \'TemplateParameters::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2552:16: error: \'TemplateParameters::S6\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found unnamed template parameter","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2564:15: error: \'TemplateParameters::S7\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2577:16: error: \'TemplateParameters::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument"}
[fc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2490:17: error: \'TemplateParameters::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter \'B\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2502:17: error: \'TemplateParameters::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2514:17: error: \'TemplateParameters::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with no default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2526:15: error: \'TemplateParameters::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2540:31: error: \'TemplateParameters::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2552:16: error: \'TemplateParameters::S6\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found unnamed template parameter","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2564:15: error: \'TemplateParameters::S7\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2577:16: error: \'TemplateParameters::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument"}
}
}
},
},
["err_module_odr_violation_typedef"]={
["err_module_odr_violation_typedef"]={
[i]={{nil,s,"err_module_odr_violation_typedef"}},
[c]={{nil,s,"err_module_odr_violation_typedef"}},
[h]={{nil,s,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%select{typedef|type alias}4 name %5|%select{typedef|type alias}4 %5 with underlying type %6}3"}},
[d]={{nil,s,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%select{typedef|type alias}4 name %5|%select{typedef|type alias}4 %5 with underlying type %6}3"}},
[g]={{nil,s,{Z,{R,J},ab,{{{ob,Nb}," name F"},{{ob,Nb}," F with underlying type G"}}}}},
[e]={{nil,s,{ab,{R,L},Z,{{{yb,Eb}," name F"},{{yb,Eb}," F with underlying type G"}}}}},
[b]=k,
[f]=k,
[e]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(?:typedef|type alias) name (.*?)|(?:typedef|type alias) (.*?) with underlying type (.*?))",
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(?:typedef|type alias) name (.*?)|(?:typedef|type alias) (.*?) with underlying type (.*?))",
[d]=a,
[h]=a,
[f]={{nil,p,a},{s,s,X}},
[i]={{nil,p,w},{s,s,bb}},
[c]={Qb,1643408541,Pb,Vb},
[b]={Yb,1643408541,Xb,Wb},
[j]={{U,258,"bool ODRDiagsEmitter::diagnoseSubMismatchTypedef(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const TypedefNameDecl *FirstTD, const TypedefNameDecl *SecondTD, bool IsTypeAlias) const {\n  // ...\n  auto DiagError = [FirstRecord, FirstTD, FirstModule, this](ODRTypedefDifference DiffType) { return Diag(FirstTD->getLocation(), diag::err_module_odr_violation_typedef) << FirstRecord << FirstModule.empty() << FirstModule << FirstTD->getSourceRange() << DiffType; };"}},
[j]={{U,258,"bool ODRDiagsEmitter::diagnoseSubMismatchTypedef(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const TypedefNameDecl *FirstTD, const TypedefNameDecl *SecondTD, bool IsTypeAlias) const {\n  // ...\n  auto DiagError = [FirstRecord, FirstTD, FirstModule, this](ODRTypedefDifference DiffType) { return Diag(FirstTD->getLocation(), diag::err_module_odr_violation_typedef) << FirstRecord << FirstModule.empty() << FirstModule << FirstTD->getSourceRange() << DiffType; };"}},
[l]={
[l]={
Line 2,243: Line 2,244:
},
},
["err_module_odr_violation_variable"]={
["err_module_odr_violation_variable"]={
[i]={{nil,s,"err_module_odr_violation_variable"}},
[c]={{nil,s,"err_module_odr_violation_variable"}},
[h]={{nil,s,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{data member with name %4|data member %4 with type %5|data member %4 with%select{out|}5 an initializer|data member %4 with an initializer|data member %4 %select{is constexpr|is not constexpr}5}3"}},
[d]={{nil,s,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{data member with name %4|data member %4 with type %5|data member %4 with%select{out|}5 an initializer|data member %4 with an initializer|data member %4 %select{is constexpr|is not constexpr}5}3"}},
[g]={{nil,s,{Z,{R,J},ab,{"data member with name E","data member E with type F",{"data member E with",{"out",a}," an initializer"},"data member E with an initializer",{"data member E ",{"is constexpr","is not constexpr"}}}}}},
[e]={{nil,s,{ab,{R,L},Z,{"data member with name E","data member E with type F",{"data member E with",{"out",a}," an initializer"},"data member E with an initializer",{"data member E ",{"is constexpr","is not constexpr"}}}}}},
[b]=k,
[f]=k,
[e]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:data member with name (.*?)|data member (.*?) with type (.*?)|data member (.*?) with(?:out|) an initializer|data member (.*?) with an initializer|data member (.*?) (?:is constexpr|is not constexpr))",
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:data member with name (.*?)|data member (.*?) with type (.*?)|data member (.*?) with(?:out|) an initializer|data member (.*?) with an initializer|data member (.*?) (?:is constexpr|is not constexpr))",
[d]=a,
[h]=a,
[f]={{nil,p,a},{s,s,X}},
[i]={{nil,p,w},{s,s,bb}},
[c]={Qb,1643408541,Pb,Vb},
[b]={Yb,1643408541,Xb,Wb},
[j]={{U,302,"bool ODRDiagsEmitter::diagnoseSubMismatchVar(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const VarDecl *FirstVD, const VarDecl *SecondVD) const {\n  // ...\n  auto DiagError = [FirstRecord, FirstVD, FirstModule, this](ODRVarDifference DiffType) { return Diag(FirstVD->getLocation(), diag::err_module_odr_violation_variable) << FirstRecord << FirstModule.empty() << FirstModule << FirstVD->getSourceRange() << DiffType; };"}},
[j]={{U,302,"bool ODRDiagsEmitter::diagnoseSubMismatchVar(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const VarDecl *FirstVD, const VarDecl *SecondVD) const {\n  // ...\n  auto DiagError = [FirstRecord, FirstVD, FirstModule, this](ODRVarDifference DiffType) { return Diag(FirstVD->getLocation(), diag::err_module_odr_violation_variable) << FirstRecord << FirstModule.empty() << FirstModule << FirstVD->getSourceRange() << DiffType; };"}},
[l]={
[l]={
[hc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2235:14: error: \'VarDecl::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member with name \'y\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2251:12: error: \'VarDecl::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member \'x\' with type \'I\' (aka \'int\')","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2265:20: error: \'VarDecl::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member \'x\' with an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2279:20: error: \'VarDecl::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member \'x\' with an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2293:24: error: \'VarDecl::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member \'x\' is not constexpr"}
[fc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2235:14: error: \'VarDecl::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member with name \'y\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2251:12: error: \'VarDecl::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member \'x\' with type \'I\' (aka \'int\')","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2265:20: error: \'VarDecl::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member \'x\' with an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2279:20: error: \'VarDecl::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member \'x\' with an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2293:24: error: \'VarDecl::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member \'x\' is not constexpr"}
}
}
},
},
["err_module_prebuilt"]={
["err_module_prebuilt"]={
[i]="err_module_prebuilt",
[c]="err_module_prebuilt",
[h]="error in loading module \'%0\' from prebuilt module path",
[d]="error in loading module \'%0\' from prebuilt module path",
[g]="error in loading module \'A\' from prebuilt module path",
[e]="error in loading module \'A\' from prebuilt module path",
[b]=T,
[f]=V,
[e]="error in loading module \'(.*?)\' from prebuilt module path",
[g]="error in loading module \'(.*?)\' from prebuilt module path",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"11f2a477721c",1471542135,"Module: add -fprebuilt-module-path to support loading prebuilt modules.","Module: add -fprebuilt-module-path to support loading prebuilt modules.\n\nIn this mode, there is no need to load any module map and the programmer can\nsimply use \"@import\" syntax to load the module directly from a prebuilt\nmodule path. When loading from prebuilt module path, we don\'t support\nrebuilding of the module files and we ignore compatible configuration\nmismatches.\n\nrdar://27290316\nDifferential Revision: http://reviews.llvm.org/D23125\n\nllvm-svn: 279096"},
[b]={"11f2a477721c",1471542135,"Module: add -fprebuilt-module-path to support loading prebuilt modules.","Module: add -fprebuilt-module-path to support loading prebuilt modules.\n\nIn this mode, there is no need to load any module map and the programmer can\nsimply use \"@import\" syntax to load the module directly from a prebuilt\nmodule path. When loading from prebuilt module path, we don\'t support\nrebuilding of the module files and we ignore compatible configuration\nmismatches.\n\nrdar://27290316\nDifferential Revision: http://reviews.llvm.org/D23125\n\nllvm-svn: 279096"},
[j]={{wb,1880,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  case ASTReader::Success: {\n    // ...\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_prebuilt) << ModuleName;"}}
[j]={{wb,1880,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  case ASTReader::Success: {\n    // ...\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_prebuilt) << ModuleName;"}}
},
},
["err_module_private_local"]={
["err_module_private_local"]={
[i]="err_module_private_local",
[c]="err_module_private_local",
[h]="%select{local variable|parameter|typedef}0 %1 cannot be declared __module_private__",
[d]="%select{local variable|parameter|typedef}0 %1 cannot be declared __module_private__",
[g]={{nil,nil,{{"local variable","parameter",ob}," B cannot be declared __module_private__"}}},
[e]={{nil,nil,{{"local variable","parameter",yb}," B cannot be declared __module_private__"}}},
[b]=k,
[f]=k,
[e]="(?:local variable|parameter|typedef) (.*?) cannot be declared __module_private__",
[g]="(?:local variable|parameter|typedef) (.*?) cannot be declared __module_private__",
[d]=a,
[h]=a,
[f]=M,
[i]=O,
[c]={"41866816ce5c",1315852658,"Diagnose attempt to mark function-local declarations as __module_private__.","Diagnose attempt to mark function-local declarations as __module_private__.\n\nllvm-svn: 139519"},
[b]={"41866816ce5c",1315852658,"Diagnose attempt to mark function-local declarations as __module_private__.","Diagnose attempt to mark function-local declarations as __module_private__.\n\nllvm-svn: 139519"},
[j]={{o,7846,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (D.getDeclSpec().isModulePrivateSpecified()) {\n    if (IsVariableTemplateSpecialization)\n    // ...\n    else if (IsMemberSpecialization)\n    // ...\n    else if (NewVD->hasLocalStorage())\n      Diag(NewVD->getLocation(), diag::err_module_private_local) << 0 << NewVD << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"},{o,14816,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (D.getDeclSpec().isModulePrivateSpecified())\n    Diag(New->getLocation(), diag::err_module_private_local) << 1 << New << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"},{o,16431,"TypedefDecl *Sema::ParseTypedefDecl(Scope *S, Declarator &D, QualType T, TypeSourceInfo *TInfo) {\n  // ...\n  if (D.getDeclSpec().isModulePrivateSpecified()) {\n    if (CurContext->isFunctionOrMethod())\n      Diag(NewTD->getLocation(), diag::err_module_private_local) << 2 << NewTD << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"}},
[j]={{o,7846,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (D.getDeclSpec().isModulePrivateSpecified()) {\n    if (IsVariableTemplateSpecialization)\n    // ...\n    else if (IsMemberSpecialization)\n    // ...\n    else if (NewVD->hasLocalStorage())\n      Diag(NewVD->getLocation(), diag::err_module_private_local) << 0 << NewVD << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"},{o,14816,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (D.getDeclSpec().isModulePrivateSpecified())\n    Diag(New->getLocation(), diag::err_module_private_local) << 1 << New << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"},{o,16431,"TypedefDecl *Sema::ParseTypedefDecl(Scope *S, Declarator &D, QualType T, TypeSourceInfo *TInfo) {\n  // ...\n  if (D.getDeclSpec().isModulePrivateSpecified()) {\n    if (CurContext->isFunctionOrMethod())\n      Diag(NewTD->getLocation(), diag::err_module_private_local) << 2 << NewTD << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"}},
[l]={
[l]={
Line 2,282: Line 2,283:
},
},
["err_module_private_local_class"]={
["err_module_private_local_class"]={
[i]="err_module_private_local_class",
[c]="err_module_private_local_class",
[h]="local %select{struct|interface|union|class|enum}0 cannot be declared __module_private__",
[d]="local %select{struct|interface|union|class|enum}0 cannot be declared __module_private__",
[g]={{nil,nil,{"local ",{"struct","interface","union",ib,"enum"}," cannot be declared __module_private__"}}},
[e]={{nil,nil,{"local ",{"struct","interface","union",mb,"enum"}," cannot be declared __module_private__"}}},
[b]=k,
[f]=k,
[e]="local (?:struct|interface|union|class|enum) cannot be declared __module_private__",
[g]="local (?:struct|interface|union|class|enum) cannot be declared __module_private__",
[d]=a,
[h]=a,
[f]=M,
[i]=O,
[c]={"41866816ce5c",1315852658,"Diagnose attempt to mark function-local declarations as __module_private__.","Diagnose attempt to mark function-local declarations as __module_private__.\n\nllvm-svn: 139519"},
[b]={"41866816ce5c",1315852658,"Diagnose attempt to mark function-local declarations as __module_private__.","Diagnose attempt to mark function-local declarations as __module_private__.\n\nllvm-svn: 139519"},
[j]={{o,5247,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  // ...\n  if (DS.isModulePrivateSpecified() && Tag && Tag->getDeclContext()->isFunctionOrMethod())\n    Diag(DS.getModulePrivateSpecLoc(), diag::err_module_private_local_class) << Tag->getTagKind() << FixItHint::CreateRemoval(DS.getModulePrivateSpecLoc());"}},
[j]={{o,5247,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  // ...\n  if (DS.isModulePrivateSpecified() && Tag && Tag->getDeclContext()->isFunctionOrMethod())\n    Diag(DS.getModulePrivateSpecLoc(), diag::err_module_private_local_class) << Tag->getTagKind() << FixItHint::CreateRemoval(DS.getModulePrivateSpecLoc());"}},
[l]={
[l]={
Line 2,296: Line 2,297:
},
},
["err_module_private_specialization"]={
["err_module_private_specialization"]={
[i]="err_module_private_specialization",
[c]="err_module_private_specialization",
[h]="%select{template|partial|member}0 specialization cannot be declared __module_private__",
[d]="%select{template|partial|member}0 specialization cannot be declared __module_private__",
[g]={{nil,nil,{{"template","partial","member"}," specialization cannot be declared __module_private__"}}},
[e]={{nil,nil,{{"template","partial","member"}," specialization cannot be declared __module_private__"}}},
[b]=k,
[f]=k,
[e]="(?:template|partial|member) specialization cannot be declared __module_private__",
[g]="(?:template|partial|member) specialization cannot be declared __module_private__",
[d]=a,
[h]=a,
[f]=M,
[i]=O,
[c]={"3c7cd6a0c448",1315601618,"Specializations cannot be module-hidden. Diagnose attempts to do so.","Specializations cannot be module-hidden. Diagnose attempts to do so.\n\nllvm-svn: 139406"},
[b]={"3c7cd6a0c448",1315601618,"Specializations cannot be module-hidden. Diagnose attempts to do so.","Specializations cannot be module-hidden. Diagnose attempts to do so.\n\nllvm-svn: 139406"},
[j]={{o,7837,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (D.getDeclSpec().isModulePrivateSpecified()) {\n    if (IsVariableTemplateSpecialization)\n      Diag(NewVD->getLocation(), diag::err_module_private_specialization) << (IsPartialSpecialization ? 1 : 0) << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"},{o,7842,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (D.getDeclSpec().isModulePrivateSpecified()) {\n    if (IsVariableTemplateSpecialization)\n    // ...\n    else if (IsMemberSpecialization)\n      Diag(NewVD->getLocation(), diag::err_module_private_specialization) << 2 << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"},{o,9989,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    // If __module_private__ was specified, mark the function accordingly.\n    if (D.getDeclSpec().isModulePrivateSpecified()) {\n      if (isFunctionTemplateSpecialization) {\n        // ...\n        Diag(ModulePrivateLoc, diag::err_module_private_specialization) << 0 << FixItHint::CreateRemoval(ModulePrivateLoc);"},{o,17605,"CreateNewDecl:\n  // ...\n  if (ModulePrivateLoc.isValid()) {\n    if (isMemberSpecialization)\n      Diag(New->getLocation(), diag::err_module_private_specialization) << 2 << FixItHint::CreateRemoval(ModulePrivateLoc);"},{Y,8921,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (ModulePrivateLoc.isValid())\n    Diag(Specialization->getLocation(), diag::err_module_private_specialization) << (isPartialSpecialization ? 1 : 0) << FixItHint::CreateRemoval(ModulePrivateLoc);"}},
[j]={{o,7837,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (D.getDeclSpec().isModulePrivateSpecified()) {\n    if (IsVariableTemplateSpecialization)\n      Diag(NewVD->getLocation(), diag::err_module_private_specialization) << (IsPartialSpecialization ? 1 : 0) << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"},{o,7842,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (D.getDeclSpec().isModulePrivateSpecified()) {\n    if (IsVariableTemplateSpecialization)\n    // ...\n    else if (IsMemberSpecialization)\n      Diag(NewVD->getLocation(), diag::err_module_private_specialization) << 2 << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"},{o,9989,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    // If __module_private__ was specified, mark the function accordingly.\n    if (D.getDeclSpec().isModulePrivateSpecified()) {\n      if (isFunctionTemplateSpecialization) {\n        // ...\n        Diag(ModulePrivateLoc, diag::err_module_private_specialization) << 0 << FixItHint::CreateRemoval(ModulePrivateLoc);"},{o,17605,"CreateNewDecl:\n  // ...\n  if (ModulePrivateLoc.isValid()) {\n    if (isMemberSpecialization)\n      Diag(New->getLocation(), diag::err_module_private_specialization) << 2 << FixItHint::CreateRemoval(ModulePrivateLoc);"},{Y,8921,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (ModulePrivateLoc.isValid())\n    Diag(Specialization->getLocation(), diag::err_module_private_specialization) << (isPartialSpecialization ? 1 : 0) << FixItHint::CreateRemoval(ModulePrivateLoc);"}},
[l]={
[l]={
Line 2,310: Line 2,311:
},
},
["err_module_rebuild_finalized"]={
["err_module_rebuild_finalized"]={
[i]={{nil,u,"err_module_rebuild_finalized"}},
[c]={{nil,u,"err_module_rebuild_finalized"}},
[h]={{nil,u,"cannot rebuild module \'%0\' as it is already finalized"}},
[d]={{nil,u,"cannot rebuild module \'%0\' as it is already finalized"}},
[g]={{nil,u,"cannot rebuild module \'A\' as it is already finalized"}},
[e]={{nil,u,"cannot rebuild module \'A\' as it is already finalized"}},
[b]=T,
[f]=V,
[e]="cannot rebuild module \'(.*?)\' as it is already finalized",
[g]="cannot rebuild module \'(.*?)\' as it is already finalized",
[d]=a,
[h]=a,
[f]={{nil,u,y}},
[i]={{nil,u,y}},
[c]={"ff13189c5d0d",1624436334,"[RISCV] Unify the arch string parsing logic to to RISCVISAInfo.","[RISCV] Unify the arch string parsing logic to to RISCVISAInfo.\n\nHow many place you need to modify when implementing a new extension for RISC-V?\n\nAt least 7 places as I know:\n\n- Add new SubtargetFeature at RISCV.td\n- -march parser in RISCV.cpp\n- RISCVTargetInfo::initFeatureMap@RISCV.cpp for handling feature vector.\n- RISCVTargetInfo::getTargetDefines@RISCV.cpp for pre-define marco.\n- Arch string parser for ELF attribute in RISCVAsmParser.cpp\n- ELF attribute emittion in RISCVAsmParser.cpp, and make sure it\'s in\n  canonical order...\n- ELF attribute emittion in RISCVTargetStreamer.cpp, and again, must in\n  canonical order...\n\nAnd now, this patch provide an unified infrastructure for handling (almost)\neverything of RISC-V arch string.\n\nAfter this patch, you only need to update 2 places for implement an extension\nfor RISC-V:\n- Add new SubtargetFeature at RISCV.td, hmmm, it\'s hard to avoid.\n- Add new entry to RISCVSupportedExtension@RISCVISAInfo.cpp or\n  SupportedExperimentalExtensions@RISCVISAInfo.cpp .\n\nMost codes are come from existing -march parser, but with few new feature/bug\nfixes:\n- Accept version for -march, e.g. -march=rv32i2p0.\n- Reject version info with `p` but without minor version number like `rv32i2p`.\n\nDifferential Revision: https://reviews.llvm.org/D105168"},
[b]={"ff13189c5d0d",1624436334,"[RISCV] Unify the arch string parsing logic to to RISCVISAInfo.","[RISCV] Unify the arch string parsing logic to to RISCVISAInfo.\n\nHow many place you need to modify when implementing a new extension for RISC-V?\n\nAt least 7 places as I know:\n\n- Add new SubtargetFeature at RISCV.td\n- -march parser in RISCV.cpp\n- RISCVTargetInfo::initFeatureMap@RISCV.cpp for handling feature vector.\n- RISCVTargetInfo::getTargetDefines@RISCV.cpp for pre-define marco.\n- Arch string parser for ELF attribute in RISCVAsmParser.cpp\n- ELF attribute emittion in RISCVAsmParser.cpp, and make sure it\'s in\n  canonical order...\n- ELF attribute emittion in RISCVTargetStreamer.cpp, and again, must in\n  canonical order...\n\nAnd now, this patch provide an unified infrastructure for handling (almost)\neverything of RISC-V arch string.\n\nAfter this patch, you only need to update 2 places for implement an extension\nfor RISC-V:\n- Add new SubtargetFeature at RISCV.td, hmmm, it\'s hard to avoid.\n- Add new entry to RISCVSupportedExtension@RISCVISAInfo.cpp or\n  SupportedExperimentalExtensions@RISCVISAInfo.cpp .\n\nMost codes are come from existing -march parser, but with few new feature/bug\nfixes:\n- Accept version for -march, e.g. -march=rv32i2p0.\n- Reject version info with `p` but without minor version number like `rv32i2p`.\n\nDifferential Revision: https://reviews.llvm.org/D105168"},
[j]={{wb,1162,"/// Compile a module file for the given module, using the options\n/// provided by the importing compiler instance. Returns true if the module\n/// was built without errors.\nstatic bool compileModuleImpl(\n  // ...\n  // Never compile a module that\'s already finalized - this would cause the\n  // existing module to be freed, causing crashes if it is later referenced\n  if (ImportingInstance.getModuleCache().isPCMFinal(ModuleFileName)) {\n    ImportingInstance.getDiagnostics().Report(ImportLoc, diag::err_module_rebuild_finalized) << ModuleName;"}}
[j]={{wb,1162,"/// Compile a module file for the given module, using the options\n/// provided by the importing compiler instance. Returns true if the module\n/// was built without errors.\nstatic bool compileModuleImpl(\n  // ...\n  // Never compile a module that\'s already finalized - this would cause the\n  // existing module to be freed, causing crashes if it is later referenced\n  if (ImportingInstance.getModuleCache().isPCMFinal(ModuleFileName)) {\n    ImportingInstance.getDiagnostics().Report(ImportLoc, diag::err_module_rebuild_finalized) << ModuleName;"}}
},
},
["err_module_redeclaration"]={
["err_module_redeclaration"]={
[i]={{nil,t,"err_module_redeclaration"}},
[c]={{nil,t,"err_module_redeclaration"}},
[h]={{nil,t,"translation unit contains multiple module declarations"}},
[d]={{nil,t,"translation unit contains multiple module declarations"}},
[g]={{nil,t,"translation unit contains multiple module declarations"}},
[e]={{nil,t,"translation unit contains multiple module declarations"}},
[b]=k,
[f]=k,
[e]="translation unit contains multiple module declarations",
[g]="translation unit contains multiple module declarations",
[d]=a,
[h]=a,
[f]={{nil,t,M}},
[i]={{nil,t,O}},
[c]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration.","[Modules TS] Diagnose missing/duplicate module-declaration.\n\nllvm-svn: 315397"},
[b]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration.","[Modules TS] Diagnose missing/duplicate module-declaration.\n\nllvm-svn: 315397"},
[j]={{mb,236,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  // Only one module-declaration is permitted per source file.\n  if (isCurrentModulePurview()) {\n    Diag(ModuleLoc, diag::err_module_redeclaration);"}},
[j]={{nb,236,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  // Only one module-declaration is permitted per source file.\n  if (isCurrentModulePurview()) {\n    Diag(ModuleLoc, diag::err_module_redeclaration);"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.link/p3.cpp"]={"clang/test/CXX/basic/basic.link/p3.cpp:32:1: error: translation unit contains multiple module declarations"}
["clang/test/CXX/basic/basic.link/p3.cpp"]={"clang/test/CXX/basic/basic.link/p3.cpp:32:1: error: translation unit contains multiple module declarations"}
Line 2,335: Line 2,336:
},
},
["err_module_redefinition"]={
["err_module_redefinition"]={
[i]="err_module_redefinition",
[c]="err_module_redefinition",
[h]="redefinition of module \'%0\'",
[d]="redefinition of module \'%0\'",
[g]="redefinition of module \'A\'",
[e]="redefinition of module \'A\'",
[b]=k,
[f]=k,
[e]="redefinition of module \'(.*?)\'",
[g]="redefinition of module \'(.*?)\'",
[d]=a,
[h]=a,
[f]=M,
[i]=O,
[c]={"bbcc9f0462c1",1472170478,"C++ Modules TS: add frontend support for building pcm files from module","C++ Modules TS: add frontend support for building pcm files from module\ninterface files. At the moment, all declarations (and no macros) are exported,\nand \'export\' declarations are not supported yet.\n\nllvm-svn: 279794"},
[b]={"bbcc9f0462c1",1472170478,"C++ Modules TS: add frontend support for building pcm files from module","C++ Modules TS: add frontend support for building pcm files from module\ninterface files. At the moment, all declarations (and no macros) are exported,\nand \'export\' declarations are not supported yet.\n\nllvm-svn: 279794"},
[j]={{mb,313,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case ModuleDeclKind::Interface:\n  case ModuleDeclKind::PartitionInterface: {\n    // We can\'t have parsed or imported a definition of this module or parsed a\n    // module map defining it already.\n    if (auto *M = Map.findModule(ModuleName)) {\n      Diag(Path[0].second, diag::err_module_redefinition) << ModuleName;"}}
[j]={{nb,313,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case ModuleDeclKind::Interface:\n  case ModuleDeclKind::PartitionInterface: {\n    // We can\'t have parsed or imported a definition of this module or parsed a\n    // module map defining it already.\n    if (auto *M = Map.findModule(ModuleName)) {\n      Diag(Path[0].second, diag::err_module_redefinition) << ModuleName;"}}
},
},
["err_module_self_import"]={
["err_module_self_import"]={
[i]="err_module_self_import",
[c]="err_module_self_import",
[h]="import of module \'%0\' appears within same top-level module \'%1\'",
[d]="import of module \'%0\' appears within same top-level module \'%1\'",
[g]="import of module \'A\' appears within same top-level module \'B\'",
[e]="import of module \'A\' appears within same top-level module \'B\'",
[b]=k,
[f]=k,
[e]="import of module \'(.*?)\' appears within same top\\-level module \'(.*?)\'",
[g]="import of module \'(.*?)\' appears within same top\\-level module \'(.*?)\'",
[d]=a,
[h]=a,
[f]=M,
[i]=O,
[c]={"527040e0c87a",1399267893,"Make module self-import an error","Make module self-import an error\n\nIdeally, importing Foo.a from Foo.b would \"do the right thing\", but\nuntil it does, this patch makes it an error rather than allow it to\nsilently be ignored.\n\nllvm-svn: 207948"},
[b]={"527040e0c87a",1399267893,"Make module self-import an error","Make module self-import an error\n\nIdeally, importing Foo.a from Foo.b would \"do the right thing\", but\nuntil it does, this patch makes it an error rather than allow it to\nsilently be ignored.\n\nllvm-svn: 207948"},
[j]={{mb,563,"DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, SourceLocation ExportLoc, SourceLocation ImportLoc, Module *Mod, ModuleIdPath Path) {\n  // ...\n  // FIXME: we should support importing a submodule within a different submodule\n  // of the same top-level module. Until we do, make it an error rather than\n  // silently ignoring the import.\n  // FIXME: Should we warn on a redundant import of the current module?\n  if (Mod->isForBuilding(getLangOpts())) {\n    Diag(ImportLoc, getLangOpts().isCompilingModule() ? diag::err_module_self_import : diag::err_module_import_in_implementation) << Mod->getFullModuleName() << getLangOpts().CurrentModule;"}}
[j]={{nb,563,"DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, SourceLocation ExportLoc, SourceLocation ImportLoc, Module *Mod, ModuleIdPath Path) {\n  // ...\n  // FIXME: we should support importing a submodule within a different submodule\n  // of the same top-level module. Until we do, make it an error rather than\n  // silently ignoring the import.\n  // FIXME: Should we warn on a redundant import of the current module?\n  if (Mod->isForBuilding(getLangOpts())) {\n    Diag(ImportLoc, getLangOpts().isCompilingModule() ? diag::err_module_self_import : diag::err_module_import_in_implementation) << Mod->getFullModuleName() << getLangOpts().CurrentModule;"}}
},
},
["err_module_self_import_cxx20"]={
["err_module_self_import_cxx20"]={
[i]={{nil,s,"err_module_self_import_cxx20"}},
[c]={{nil,s,"err_module_self_import_cxx20"}},
[h]={{nil,s,"import of module \'%0\' appears within its own %select{interface|implementation}1"}},
[d]={{nil,s,"import of module \'%0\' appears within its own %select{interface|implementation}1"}},
[g]={{nil,s,{"import of module \'A\' appears within its own ",{"interface","implementation"}}}},
[e]={{nil,s,{"import of module \'A\' appears within its own ",{"interface","implementation"}}}},
[b]=k,
[f]=k,
[e]="import of module \'(.*?)\' appears within its own (?:interface|implementation)",
[g]="import of module \'(.*?)\' appears within its own (?:interface|implementation)",
[d]=a,
[h]=a,
[f]={{nil,s,M}},
[i]={{nil,s,O}},
[c]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.","[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[b]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.","[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[j]={{mb,525,"DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, SourceLocation ExportLoc, SourceLocation ImportLoc, ModuleIdPath Path, bool IsPartition) {\n  // ...\n  if (getLangOpts().CPlusPlusModules && isCurrentModulePurview() && getCurrentModule()->Name == ModuleName) {\n    Diag(ImportLoc, diag::err_module_self_import_cxx20) << ModuleName << !ModuleScopes.back().ModuleInterface;"}}
[j]={{nb,525,"DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, SourceLocation ExportLoc, SourceLocation ImportLoc, ModuleIdPath Path, bool IsPartition) {\n  // ...\n  if (getLangOpts().CPlusPlusModules && isCurrentModulePurview() && getCurrentModule()->Name == ModuleName) {\n    Diag(ImportLoc, diag::err_module_self_import_cxx20) << ModuleName << !ModuleScopes.back().ModuleInterface;"}}
},
},
["err_module_shadowed"]={
["err_module_shadowed"]={
[i]={{nil,q,"err_module_shadowed"}},
[c]={{nil,q,"err_module_shadowed"}},
[h]={{nil,q,"import of shadowed module \'%0\'"}},
[d]={{nil,q,"import of shadowed module \'%0\'"}},
[g]={{nil,q,"import of shadowed module \'A\'"}},
[e]={{nil,q,"import of shadowed module \'A\'"}},
[b]=T,
[f]=V,
[e]="import of shadowed module \'(.*?)\'",
[g]="import of shadowed module \'(.*?)\'",
[d]=a,
[h]=a,
[f]={{nil,q,y}},
[i]={{nil,q,y}},
[c]={"b6ec4a33fb2b",1515032260,"[Modules] Allow modules specified by -fmodule-map-file to shadow implicitly found ones","[Modules] Allow modules specified by -fmodule-map-file to shadow implicitly found ones\n\nWhen modules come from module map files explicitly specified by\n-fmodule-map-file= arguments, allow those to override/shadow modules\nwith the same name that are found implicitly by header search. If such a\nmodule is looked up by name (e.g. @import), we will always find the one\nfrom -fmodule-map-file. If we try to use a shadowed module by including\none of its headers report an error.\n\nThis enables developers to force use of a specific copy of their module\nto be used if there are multiple copies that would otherwise be visible,\nfor example if they develop modules that are installed in the default\nsearch paths.\n\nPatch originally by Ben Langmuir,\nhttp://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20151116/143425.html\n\nBased on cfe-dev discussion:\nhttp://lists.llvm.org/pipermail/cfe-dev/2015-November/046164.html\n\nDifferential Revision: https://reviews.llvm.org/D31269\n\nrdar://problem/23612102\n\nllvm-svn: 321781"},
[b]={"b6ec4a33fb2b",1515032260,"[Modules] Allow modules specified by -fmodule-map-file to shadow implicitly found ones","[Modules] Allow modules specified by -fmodule-map-file to shadow implicitly found ones\n\nWhen modules come from module map files explicitly specified by\n-fmodule-map-file= arguments, allow those to override/shadow modules\nwith the same name that are found implicitly by header search. If such a\nmodule is looked up by name (e.g. @import), we will always find the one\nfrom -fmodule-map-file. If we try to use a shadowed module by including\none of its headers report an error.\n\nThis enables developers to force use of a specific copy of their module\nto be used if there are multiple copies that would otherwise be visible,\nfor example if they develop modules that are installed in the default\nsearch paths.\n\nPatch originally by Ben Langmuir,\nhttp://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20151116/143425.html\n\nBased on cfe-dev discussion:\nhttp://lists.llvm.org/pipermail/cfe-dev/2015-November/046164.html\n\nDifferential Revision: https://reviews.llvm.org/D31269\n\nrdar://problem/23612102\n\nllvm-svn: 321781"},
[j]={{"clang/lib/Lex/PPDirectives.cpp",1910,"bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, const TargetInfo &TargetInfo, DiagnosticsEngine &Diags, Module *M) {\n  // ...\n  if (MissingHeader.FileNameLoc.isValid()) {\n  // ...\n  } else if (ShadowingModule) {\n    Diags.Report(M->DefinitionLoc, diag::err_module_shadowed) << M->Name;"}},
[j]={{"clang/lib/Lex/PPDirectives.cpp",1910,"bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, const TargetInfo &TargetInfo, DiagnosticsEngine &Diags, Module *M) {\n  // ...\n  if (MissingHeader.FileNameLoc.isValid()) {\n  // ...\n  } else if (ShadowingModule) {\n    Diags.Report(M->DefinitionLoc, diag::err_module_shadowed) << M->Name;"}},
[l]={
[l]={
Line 2,382: Line 2,383:
},
},
["err_module_unable_to_hash_content"]={
["err_module_unable_to_hash_content"]={
[i]={{nil,n,"err_module_unable_to_hash_content"}},
[c]={{nil,n,"err_module_unable_to_hash_content"}},
[h]={{nil,n,"failed to hash content for \'%0\' because memory buffer cannot be retrieved"}},
[d]={{nil,n,"failed to hash content for \'%0\' because memory buffer cannot be retrieved"}},
[g]={{nil,n,"failed to hash content for \'A\' because memory buffer cannot be retrieved"}},
[e]={{nil,n,"failed to hash content for \'A\' because memory buffer cannot be retrieved"}},
[b]=k,
[f]=k,
[e]="failed to hash content for \'(.*?)\' because memory buffer cannot be retrieved",
[g]="failed to hash content for \'(.*?)\' because memory buffer cannot be retrieved",
[d]=a,
[h]=a,
[f]={{nil,n,"AST Serialization Issue"}},
[i]={{nil,n,"AST Serialization Issue"}},
[c]={"2a1386c81de5",1571094123,"[Modules][PCH] Hash input files content","[Modules][PCH] Hash input files content\n\nSummary:\nWhen files often get touched during builds, the mtime based validation\nleads to different problems in implicit modules builds, even when the\ncontent doesn\'t actually change:\n\n- Modules only: module invalidation due to out of date files. Usually causing rebuild traffic.\n- Modules + PCH: build failures because clang cannot rebuild a module if it comes from building a PCH.\n- PCH: build failures because clang cannot rebuild a PCH in case one of the input headers has different mtime.\n\nThis patch proposes hashing the content of input files (headers and\nmodule maps), which is performed during serialization time. When looking\nat input files for validation, clang only computes the hash in case\nthere\'s a mtime mismatch.\n\nI\'ve tested a couple of different hash algorithms availble in LLVM in\nface of building modules+pch for `#import <Cocoa/Cocoa.h>`:\n- `hash_code`: performace diff within the noise, total module cache increased by 0.07%.\n- `SHA1`: 5% slowdown. Haven\'t done real size measurements, but it\'d be BLOCK_ID+20 bytes per input file, instead of BLOCK_ID+8 bytes from `hash_code`.\n- `MD5`: 3% slowdown. Like above, but BLOCK_ID+16 bytes per input file.\n\nGiven the numbers above, the patch uses `hash_code`. The patch also\nimproves invalidation error msgs to point out which type of problem the\nuser is facing: \"mtime\", \"size\" or \"content\".\n\nrdar://problem/29320105\n\nReviewers: dexonsmith, arphaman, rsmith, aprantl\n\nSubscribers: jkorous, cfe-commits, ributzka\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67249\n\nllvm-svn: 374841"},
[b]={"2a1386c81de5",1571094123,"[Modules][PCH] Hash input files content","[Modules][PCH] Hash input files content\n\nSummary:\nWhen files often get touched during builds, the mtime based validation\nleads to different problems in implicit modules builds, even when the\ncontent doesn\'t actually change:\n\n- Modules only: module invalidation due to out of date files. Usually causing rebuild traffic.\n- Modules + PCH: build failures because clang cannot rebuild a module if it comes from building a PCH.\n- PCH: build failures because clang cannot rebuild a PCH in case one of the input headers has different mtime.\n\nThis patch proposes hashing the content of input files (headers and\nmodule maps), which is performed during serialization time. When looking\nat input files for validation, clang only computes the hash in case\nthere\'s a mtime mismatch.\n\nI\'ve tested a couple of different hash algorithms availble in LLVM in\nface of building modules+pch for `#import <Cocoa/Cocoa.h>`:\n- `hash_code`: performace diff within the noise, total module cache increased by 0.07%.\n- `SHA1`: 5% slowdown. Haven\'t done real size measurements, but it\'d be BLOCK_ID+20 bytes per input file, instead of BLOCK_ID+8 bytes from `hash_code`.\n- `MD5`: 3% slowdown. Like above, but BLOCK_ID+16 bytes per input file.\n\nGiven the numbers above, the patch uses `hash_code`. The patch also\nimproves invalidation error msgs to point out which type of problem the\nuser is facing: \"mtime\", \"size\" or \"content\".\n\nrdar://problem/29320105\n\nReviewers: dexonsmith, arphaman, rsmith, aprantl\n\nSubscribers: jkorous, cfe-commits, ributzka\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67249\n\nllvm-svn: 374841"},
[j]={{"clang/lib/Serialization/ASTWriter.cpp",1597,"void ASTWriter::WriteInputFiles(SourceManager &SourceMgr, HeaderSearchOptions &HSOpts) {\n  // ...\n  for (unsigned I = 1, N = SourceMgr.local_sloc_entry_size(); I != N; ++I) {\n    // ...\n    if (PP->getHeaderSearchInfo().getHeaderSearchOpts().ValidateASTInputFilesContent) {\n      // ...\n      if (MemBuff)\n      // ...\n      else\n        PP->Diag(SourceLocation(), diag::err_module_unable_to_hash_content) << Entry.File.getName();"}}
[j]={{"clang/lib/Serialization/ASTWriter.cpp",1597,"void ASTWriter::WriteInputFiles(SourceManager &SourceMgr, HeaderSearchOptions &HSOpts) {\n  // ...\n  for (unsigned I = 1, N = SourceMgr.local_sloc_entry_size(); I != N; ++I) {\n    // ...\n    if (PP->getHeaderSearchInfo().getHeaderSearchOpts().ValidateASTInputFilesContent) {\n      // ...\n      if (MemBuff)\n      // ...\n      else\n        PP->Diag(SourceLocation(), diag::err_module_unable_to_hash_content) << Entry.File.getName();"}}
},
},
["err_module_unavailable"]={
["err_module_unavailable"]={
[i]="err_module_unavailable",
[c]="err_module_unavailable",
[h]="module \'%0\' %select{is incompatible with|requires}1 feature \'%2\'",
[d]="module \'%0\' %select{is incompatible with|requires}1 feature \'%2\'",
[g]={{nil,nil,{"module \'A\' ",{"is incompatible with","requires"}," feature \'C\'"}}},
[e]={{nil,nil,{"module \'A\' ",{"is incompatible with","requires"}," feature \'C\'"}}},
[b]=k,
[f]=k,
[e]="module \'(.*?)\' (?:is incompatible with|requires) feature \'(.*?)\'",
[g]="module \'(.*?)\' (?:is incompatible with|requires) feature \'(.*?)\'",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"1fb5c3a63a88",1325304344,"Implement support for module requirements, which indicate the language","Implement support for module requirements, which indicate the language\nfeatures needed for a particular module to be available. This allows\nmixed-language modules, where certain headers only work under some\nlanguage variants (e.g., in C++, std.tuple might only be available in\nC++11 mode).\n\nllvm-svn: 147387"},
[b]={"1fb5c3a63a88",1325304344,"Implement support for module requirements, which indicate the language","Implement support for module requirements, which indicate the language\nfeatures needed for a particular module to be available. This allows\nmixed-language modules, where certain headers only work under some\nlanguage variants (e.g., in C++, std.tuple might only be available in\nC++11 mode).\n\nllvm-svn: 147387"},
[j]={{"clang/lib/Lex/PPDirectives.cpp",1916,"bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, const TargetInfo &TargetInfo, DiagnosticsEngine &Diags, Module *M) {\n  // ...\n  if (MissingHeader.FileNameLoc.isValid()) {\n  // ...\n  } else if (ShadowingModule) {\n  // ...\n  } else {\n    // ...\n    Diags.Report(M->DefinitionLoc, diag::err_module_unavailable) << M->getFullModuleName() << Requirement.second << Requirement.first;"}},
[j]={{"clang/lib/Lex/PPDirectives.cpp",1916,"bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, const TargetInfo &TargetInfo, DiagnosticsEngine &Diags, Module *M) {\n  // ...\n  if (MissingHeader.FileNameLoc.isValid()) {\n  // ...\n  } else if (ShadowingModule) {\n  // ...\n  } else {\n    // ...\n    Diags.Report(M->DefinitionLoc, diag::err_module_unavailable) << M->getFullModuleName() << Requirement.second << Requirement.first;"}},
[l]={
[l]={
Line 2,407: Line 2,408:
},
},
["err_module_unimported_use"]={
["err_module_unimported_use"]={
[i]="err_module_unimported_use",
[c]="err_module_unimported_use",
[h]="%select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from module \'%2\' before it is required",
[d]="%select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from module \'%2\' before it is required",
[g]={{nil,nil,{{jc,fc,Wb,"explicit specialization","partial specialization"}," of B must be imported from module \'C\' before it is required"}}},
[e]={{nil,nil,{{yc,gc,dc,"explicit specialization","partial specialization"}," of B must be imported from module \'C\' before it is required"}}},
[b]=k,
[f]=k,
[e]="(?:declaration|definition|default argument|explicit specialization|partial specialization) of (.*?) must be imported from module \'(.*?)\' before it is required",
[g]="(?:declaration|definition|default argument|explicit specialization|partial specialization) of (.*?) must be imported from module \'(.*?)\' before it is required",
[d]=a,
[h]=a,
[f]=M,
[i]=O,
[c]={"35c1df5cb6da",1434572192,"[modules] Improve diagnostic for a template-id that\'s invalid because a default","[modules] Improve diagnostic for a template-id that\'s invalid because a default\nargument is not visible.\n\nllvm-svn: 239934"},
[b]={"35c1df5cb6da",1434572192,"[modules] Improve diagnostic for a template-id that\'s invalid because a default","[modules] Improve diagnostic for a template-id that\'s invalid because a default\nargument is not visible.\n\nllvm-svn: 239934"},
[j]={{"clang/lib/Sema/SemaLookup.cpp",5752,"void Sema::diagnoseMissingImport(SourceLocation UseLoc, const NamedDecl *Decl, SourceLocation DeclLoc, ArrayRef<Module *> Modules, MissingImportKind MIK, bool Recover) {\n  // ...\n  if (Modules.size() > 1) {\n  // ...\n  } else {\n    // ...\n    Diag(UseLoc, diag::err_module_unimported_use) << (int)MIK << Decl << Modules[0]->getFullModuleName();"}},
[j]={{"clang/lib/Sema/SemaLookup.cpp",5752,"void Sema::diagnoseMissingImport(SourceLocation UseLoc, const NamedDecl *Decl, SourceLocation DeclLoc, ArrayRef<Module *> Modules, MissingImportKind MIK, bool Recover) {\n  // ...\n  if (Modules.size() > 1) {\n  // ...\n  } else {\n    // ...\n    Diag(UseLoc, diag::err_module_unimported_use) << (int)MIK << Decl << Modules[0]->getFullModuleName();"}},
[l]={
[l]={
Line 2,421: Line 2,422:
},
},
["err_module_unimported_use_header"]={
["err_module_unimported_use_header"]={
[i]="err_module_unimported_use_header",
[c]="err_module_unimported_use_header",
[h]={{nil,w,"%select{missing \'#include\'|missing \'#include %3\'}2; %select{||default argument of |explicit specialization of |partial specialization of }0%1 must be %select{declared|defined|defined|declared|declared}0 before it is used"},{n,nil,"missing \'#include %3\'; %select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from module \'%2\' before it is required"}},
[d]={{nil,x,"%select{missing \'#include\'|missing \'#include %3\'}2; %select{||default argument of |explicit specialization of |partial specialization of }0%1 must be %select{declared|defined|defined|declared|declared}0 before it is used"},{n,nil,"missing \'#include %3\'; %select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from module \'%2\' before it is required"}},
[g]={{nil,w,{{"missing \'#include\'","missing \'#include D\'"},"; ",{a,a,"default argument of ","explicit specialization of ","partial specialization of "},"B must be ",{"declared","defined","defined","declared","declared"}," before it is used"}},{n,nil,{"missing \'#include D\'; ",{jc,fc,Wb,"explicit specialization","partial specialization"}," of B must be imported from module \'C\' before it is required"}}},
[e]={{nil,x,{{"missing \'#include\'","missing \'#include D\'"},"; ",{a,a,"default argument of ","explicit specialization of ","partial specialization of "},"B must be ",{"declared","defined","defined","declared","declared"}," before it is used"}},{n,nil,{"missing \'#include D\'; ",{yc,gc,dc,"explicit specialization","partial specialization"}," of B must be imported from module \'C\' before it is required"}}},
[b]=k,
[f]=k,
[e]="(?:missing \'\\#include\'|missing \'\\#include (.*?)\'); (?:||default argument of |explicit specialization of |partial specialization of )(.*?) must be (?:declared|defined|defined|declared|declared) before it is used",
[g]="(?:missing \'\\#include\'|missing \'\\#include (.*?)\'); (?:||default argument of |explicit specialization of |partial specialization of )(.*?) must be (?:declared|defined|defined|declared|declared) before it is used",
[d]=a,
[h]=a,
[f]=M,
[i]=O,
[c]={"4eb8393c636b",1461794225,"[modules] When diagnosing a missing module import, suggest adding a #include if","[modules] When diagnosing a missing module import, suggest adding a #include if\nthe current language doesn\'t have an import syntax and we can figure out a\nsuitable file to include.\n\nllvm-svn: 267802"},
[b]={"4eb8393c636b",1461794225,"[modules] When diagnosing a missing module import, suggest adding a #include if","[modules] When diagnosing a missing module import, suggest adding a #include if\nthe current language doesn\'t have an import syntax and we can figure out a\nsuitable file to include.\n\nllvm-svn: 267802"},
[j]={{"clang/lib/Sema/SemaLookup.cpp",5725,"void Sema::diagnoseMissingImport(SourceLocation UseLoc, const NamedDecl *Decl, SourceLocation DeclLoc, ArrayRef<Module *> Modules, MissingImportKind MIK, bool Recover) {\n  // ...\n  // If we have a #include we should suggest, or if all definition locations\n  // were in global module fragments, don\'t suggest an import.\n  if (!HeaderName.empty() || UniqueModules.empty()) {\n    // ...\n    Diag(UseLoc, diag::err_module_unimported_use_header) << (int)MIK << Decl << !HeaderName.empty() << HeaderName;"}},
[j]={{"clang/lib/Sema/SemaLookup.cpp",5725,"void Sema::diagnoseMissingImport(SourceLocation UseLoc, const NamedDecl *Decl, SourceLocation DeclLoc, ArrayRef<Module *> Modules, MissingImportKind MIK, bool Recover) {\n  // ...\n  // If we have a #include we should suggest, or if all definition locations\n  // were in global module fragments, don\'t suggest an import.\n  if (!HeaderName.empty() || UniqueModules.empty()) {\n    // ...\n    Diag(UseLoc, diag::err_module_unimported_use_header) << (int)MIK << Decl << !HeaderName.empty() << HeaderName;"}},
[l]={
[l]={
Line 2,435: Line 2,436:
},
},
["err_module_unimported_use_multiple"]={
["err_module_unimported_use_multiple"]={
[i]="err_module_unimported_use_multiple",
[c]="err_module_unimported_use_multiple",
[h]="%select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from one of the following modules before it is required:%2",
[d]="%select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from one of the following modules before it is required:%2",
[g]={{nil,nil,{{jc,fc,Wb,"explicit specialization","partial specialization"}," of B must be imported from one of the following modules before it is required:C"}}},
[e]={{nil,nil,{{yc,gc,dc,"explicit specialization","partial specialization"}," of B must be imported from one of the following modules before it is required:C"}}},
[b]=k,
[f]=k,
[e]="(?:declaration|definition|default argument|explicit specialization|partial specialization) of (.*?) must be imported from one of the following modules before it is required\\:(.*?)",
[g]="(?:declaration|definition|default argument|explicit specialization|partial specialization) of (.*?) must be imported from one of the following modules before it is required\\:(.*?)",
[d]=a,
[h]=a,
[f]=M,
[i]=O,
[c]={"35c1df5cb6da",1434572192,"[modules] Improve diagnostic for a template-id that\'s invalid because a default","[modules] Improve diagnostic for a template-id that\'s invalid because a default\nargument is not visible.\n\nllvm-svn: 239934"},
[b]={"35c1df5cb6da",1434572192,"[modules] Improve diagnostic for a template-id that\'s invalid because a default","[modules] Improve diagnostic for a template-id that\'s invalid because a default\nargument is not visible.\n\nllvm-svn: 239934"},
[j]={{"clang/lib/Sema/SemaLookup.cpp",5748,"void Sema::diagnoseMissingImport(SourceLocation UseLoc, const NamedDecl *Decl, SourceLocation DeclLoc, ArrayRef<Module *> Modules, MissingImportKind MIK, bool Recover) {\n  // ...\n  if (Modules.size() > 1) {\n    // ...\n    Diag(UseLoc, diag::err_module_unimported_use_multiple) << (int)MIK << Decl << ModuleList;"}}
[j]={{"clang/lib/Sema/SemaLookup.cpp",5748,"void Sema::diagnoseMissingImport(SourceLocation UseLoc, const NamedDecl *Decl, SourceLocation DeclLoc, ArrayRef<Module *> Modules, MissingImportKind MIK, bool Recover) {\n  // ...\n  if (Modules.size() > 1) {\n    // ...\n    Diag(UseLoc, diag::err_module_unimported_use_multiple) << (int)MIK << Decl << ModuleList;"}}
},
},
["err_modules_embed_file_not_found"]={
["err_modules_embed_file_not_found"]={
[i]="err_modules_embed_file_not_found",
[c]="err_modules_embed_file_not_found",
[h]="file \'%0\' specified by \'-fmodules-embed-file=\' not found",
[d]="file \'%0\' specified by \'-fmodules-embed-file=\' not found",
[g]="file \'A\' specified by \'-fmodules-embed-file=\' not found",
[e]="file \'A\' specified by \'-fmodules-embed-file=\' not found",
[b]=T,
[f]=V,
[e]="file \'(.*?)\' specified by \'\\-fmodules\\-embed\\-file\\=\' not found",
[g]="file \'(.*?)\' specified by \'\\-fmodules\\-embed\\-file\\=\' not found",
[d]=a,
[h]=a,
[f]=a,
[i]=w,
[c]={"fb1e7f7d1aca",1439528578,"[modules] Add an experimental -cc1 feature to embed the contents of an input","[modules] Add an experimental -cc1 feature to embed the contents of an input\nfile in the .pcm files. This allows a smaller set of files to be sent to a\nremote build worker when building with explicit modules (for instance, module\nmap files need not be sent along with the corresponding precompiled modules).\n\nThis doesn\'t actually make the embedded files visible to header search, so\nit\'s not useful as a packaging format for public header files.\n\nllvm-svn: 245028"},
[b]={"fb1e7f7d1aca",1439528578,"[modules] Add an experimental -cc1 feature to embed the contents of an input","[modules] Add an experimental -cc1 feature to embed the contents of an input\nfile in the .pcm files. This allows a smaller set of files to be sent to a\nremote build worker when building with explicit modules (for instance, module\nmap files need not be sent along with the corresponding precompiled modules).\n\nThis doesn\'t actually make the embedded files visible to header search, so\nit\'s not useful as a packaging format for public header files.\n\nllvm-svn: 245028"},
[j]={{Ob,744,"bool FrontendAction::BeginSourceFile(CompilerInstance &CI, const FrontendInputFile &RealInput) {\n  // ...\n  // Set up embedding for any specified files. Do this before we load any\n  // source files, including the primary module map for the compilation.\n  for (const auto &F : CI.getFrontendOpts().ModulesEmbedFiles) {\n    if (auto FE = CI.getFileManager().getFile(F, /*openFile*/ true))\n    // ...\n    else\n      CI.getDiagnostics().Report(diag::err_modules_embed_file_not_found) << F;"}}
[j]={{Pb,744,"bool FrontendAction::BeginSourceFile(CompilerInstance &CI, const FrontendInputFile &RealInput) {\n  // ...\n  // Set up embedding for any specified files. Do this before we load any\n  // source files, including the primary module map for the compilation.\n  for (const auto &F : CI.getFrontendOpts().ModulesEmbedFiles) {\n    if (auto FE = CI.getFileManager().getFile(F, /*openFile*/ true))\n    // ...\n    else\n      CI.getDiagnostics().Report(diag::err_modules_embed_file_not_found) << F;"}}
},
},
["err_ms___leave_not_in___try"]={
["err_ms___leave_not_in___try"]={
[i]="err_ms___leave_not_in___try",
[c]="err_ms___leave_not_in___try",
[h]="\'__leave\' statement not in __try block",
[d]="\'__leave\' statement not in __try block",
[e]="\'__leave\' statement not in __try block",
[f]=k,
[g]="\'__leave\' statement not in __try block",
[g]="\'__leave\' statement not in __try block",
[b]=k,
[h]=a,
[e]="\'__leave\' statement not in __try block",
[i]=m,
[d]=a,
[b]={"eb61d4d7c2fd",1404687199,"Sema: Check that __leave is contained in a __try block.","Sema: Check that __leave is contained in a __try block.\n\nGive scope a SEHTryScope bit, set that in ParseSEHTry(), and let Sema\nwalk the scope chain to find the SEHTry parent on __leave statements.\n(They are rare enough that it seems better to do the walk instead of\ngiving Scope a SEHTryParent pointer -- this is similar to AtCatchScope.)\n\nllvm-svn: 212422"},
[f]=m,
[j]={{F,4647,"StmtResult Sema::ActOnSEHLeaveStmt(SourceLocation Loc, Scope *CurScope) {\n  // ...\n  if (!SEHTryParent)\n    return StmtError(Diag(Loc, diag::err_ms___leave_not_in___try));"}},
[c]={"eb61d4d7c2fd",1404687199,"Sema: Check that __leave is contained in a __try block.","Sema: Check that __leave is contained in a __try block.\n\nGive scope a SEHTryScope bit, set that in ParseSEHTry(), and let Sema\nwalk the scope chain to find the SEHTry parent on __leave statements.\n(They are rare enough that it seems better to do the walk instead of\ngiving Scope a SEHTryParent pointer -- this is similar to AtCatchScope.)\n\nllvm-svn: 212422"},
[j]={{E,4647,"StmtResult Sema::ActOnSEHLeaveStmt(SourceLocation Loc, Scope *CurScope) {\n  // ...\n  if (!SEHTryParent)\n    return StmtError(Diag(Loc, diag::err_ms___leave_not_in___try));"}},
[l]={
[l]={
["clang/test/SemaCXX/__try.cpp"]={"clang/test/SemaCXX/__try.cpp:86:5: error: \'__leave\' statement not in __try block"}
["clang/test/SemaCXX/__try.cpp"]={"clang/test/SemaCXX/__try.cpp:86:5: error: \'__leave\' statement not in __try block"}
Line 2,471: Line 2,472:
},
},
["err_ms_asm_bitfield_unsupported"]={
["err_ms_asm_bitfield_unsupported"]={
[i]={{nil,p,"err_ms_asm_bitfield_unsupported"}},
[c]={{nil,p,"err_ms_asm_bitfield_unsupported"}},
[h]={{nil,p,"an inline asm block cannot have an operand which is a bit-field"}},
[d]={{nil,p,"an inline asm block cannot have an operand which is a bit-field"}},
[g]={{nil,p,"an inline asm block cannot have an operand which is a bit-field"}},
[e]={{nil,p,"an inline asm block cannot have an operand which is a bit-field"}},
[b]=k,
[f]=k,
[e]="an inline asm block cannot have an operand which is a bit\\-field",
[g]="an inline asm block cannot have an operand which is a bit\\-field",
[d]=a,
[h]=a,
[f]={{nil,p,"Inline Assembly Issue"}},
[i]={{nil,p,"Inline Assembly Issue"}},
[c]={"0982db188b66",1665177226,"[Clang] reject bit-fields as instruction operands in Microsoft style inline asm blocks.","[Clang] reject bit-fields as instruction operands in Microsoft style inline asm blocks.\n\nMSVC allows bit-fields to be specified as instruction operands in inline asm\nblocks. Such references are resolved to the address of the allocation unit that\nthe named bitfield is a part of. The result is that reads and writes of such\noperands will read or mutate nearby bit-fields stored in the same allocation\nunit. This is a surprising behavior for which MSVC issues warning C4401,\n\"\'<identifier>\': member is bit field\". Intel\'s icc compiler also allows such\nbit-field references, but does not issue a diagnostic.\n\nPrior to this change, Clang fails the following assertion when a bit-field is\nreferenced in such instructions:\n  clang/lib/CodeGen/CGValue.h:338: llvm::Value* clang::CodeGen::LValue::getPointer(clang::CodeGen::CodeGenFunction&) const: Assertion `isSimple()\' failed.\nIn non-assert enabled builds, Clang\'s behavior appears to match the behavior\nof the MSVC and icc compilers, though it is unknown if that is by design or\nhappenstance.\n\nFollowing this change, attempts to use a bit-field as an instruction operand\nin Microsoft style asm blocks is diagnosed as an error due to the risk of\nunintentionally reading or writing nearby bit-fields.\n\nFixes https://github.com/llvm/llvm-project/issues/57791\n\nReviewed By: erichkeane, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D135500"},
[b]={"0982db188b66",1665177226,"[Clang] reject bit-fields as instruction operands in Microsoft style inline asm blocks.","[Clang] reject bit-fields as instruction operands in Microsoft style inline asm blocks.\n\nMSVC allows bit-fields to be specified as instruction operands in inline asm\nblocks. Such references are resolved to the address of the allocation unit that\nthe named bitfield is a part of. The result is that reads and writes of such\noperands will read or mutate nearby bit-fields stored in the same allocation\nunit. This is a surprising behavior for which MSVC issues warning C4401,\n\"\'<identifier>\': member is bit field\". Intel\'s icc compiler also allows such\nbit-field references, but does not issue a diagnostic.\n\nPrior to this change, Clang fails the following assertion when a bit-field is\nreferenced in such instructions:\n  clang/lib/CodeGen/CGValue.h:338: llvm::Value* clang::CodeGen::LValue::getPointer(clang::CodeGen::CodeGenFunction&) const: Assertion `isSimple()\' failed.\nIn non-assert enabled builds, Clang\'s behavior appears to match the behavior\nof the MSVC and icc compilers, though it is unknown if that is by design or\nhappenstance.\n\nFollowing this change, attempts to use a bit-field as an instruction operand\nin Microsoft style asm blocks is diagnosed as an error due to the risk of\nunintentionally reading or writing nearby bit-fields.\n\nFixes https://github.com/llvm/llvm-project/issues/57791\n\nReviewed By: erichkeane, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D135500"},
[j]={{"clang/lib/Sema/SemaStmtAsm.cpp",954,"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  // ...\n  for (uint64_t I = 0; I < NumOutputs + NumInputs; ++I) {\n    // ...\n    if (E->getType()->isBitIntType()) {\n    // ...\n    } else if (E->refersToBitField()) {\n      // ...\n      Diag(E->getBeginLoc(), diag::err_ms_asm_bitfield_unsupported) << E->getSourceRange();"}},
[j]={{"clang/lib/Sema/SemaStmtAsm.cpp",954,"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  // ...\n  for (uint64_t I = 0; I < NumOutputs + NumInputs; ++I) {\n    // ...\n    if (E->getType()->isBitIntType()) {\n    // ...\n    } else if (E->refersToBitField()) {\n      // ...\n      Diag(E->getBeginLoc(), diag::err_ms_asm_bitfield_unsupported) << E->getSourceRange();"}},
[l]={
[l]={
Line 2,485: Line 2,486:
},
},
["err_ms_attributes_not_enabled"]={
["err_ms_attributes_not_enabled"]={
[i]={{nil,r,"err_ms_attributes_not_enabled"}},
[c]={{nil,r,"err_ms_attributes_not_enabled"}},
[h]={{nil,r,"\'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes"}},
[d]={{nil,r,"\'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes"}},
[g]={{nil,r,"\'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes"}},
[e]={{nil,r,"\'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes"}},
[b]=k,
[f]=k,
[e]="\'__declspec\' attributes are not enabled; use \'\\-fdeclspec\' or \'\\-fms\\-extensions\' to enable support for __declspec attributes",
[g]="\'__declspec\' attributes are not enabled; use \'\\-fdeclspec\' or \'\\-fms\\-extensions\' to enable support for __declspec attributes",
[d]=a,
[h]=a,
[f]={{nil,r,y}},
[i]={{nil,r,y}},
[c]={"52d0aaac139a",1487112440,"Improve diagnostic reporting when using __declspec without enabling __declspec as a keyword.","Improve diagnostic reporting when using __declspec without enabling __declspec as a keyword.\n\nFixes PR31936.\n\nllvm-svn: 295114"},
[b]={"52d0aaac139a",1487112440,"Improve diagnostic reporting when using __declspec without enabling __declspec as a keyword.","Improve diagnostic reporting when using __declspec without enabling __declspec as a keyword.\n\nFixes PR31936.\n\nllvm-svn: 295114"},
[j]={{eb,3639,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  while (true) {\n    // ...\n    ParseIdentifier : {\n      // ...\n      // If the token is an identifier named \"__declspec\" and Microsoft\n      // extensions are not enabled, it is likely that there will be cascading\n      // parse errors if this really is a __declspec attribute. Attempt to\n      // recognize that scenario and recover gracefully.\n      if (!getLangOpts().DeclSpecKeyword && Tok.is(tok::identifier) && Tok.getIdentifierInfo()->getName().equals(\"__declspec\")) {\n        Diag(Loc, diag::err_ms_attributes_not_enabled);"}},
[j]={{hb,3639,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  while (true) {\n    // ...\n    ParseIdentifier : {\n      // ...\n      // If the token is an identifier named \"__declspec\" and Microsoft\n      // extensions are not enabled, it is likely that there will be cascading\n      // parse errors if this really is a __declspec attribute. Attempt to\n      // recognize that scenario and recover gracefully.\n      if (!getLangOpts().DeclSpecKeyword && Tok.is(tok::identifier) && Tok.getIdentifierInfo()->getName().equals(\"__declspec\")) {\n        Diag(Loc, diag::err_ms_attributes_not_enabled);"}},
[l]={
[l]={
["clang/test/Parser/declspec-recovery.c"]={"clang/test/Parser/declspec-recovery.c:3:1: error: \'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes","clang/test/Parser/declspec-recovery.c:6:3: error: \'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes"}
["clang/test/Parser/declspec-recovery.c"]={"clang/test/Parser/declspec-recovery.c:3:1: error: \'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes","clang/test/Parser/declspec-recovery.c:6:3: error: \'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes"}
Line 2,499: Line 2,500:
},
},
["err_ms_declspec_type"]={
["err_ms_declspec_type"]={
[i]="err_ms_declspec_type",
[c]="err_ms_declspec_type",
[h]="__declspec attributes must be an identifier or string literal",
[d]="__declspec attributes must be an identifier or string literal",
[e]="__declspec attributes must be an identifier or string literal",
[f]=k,
[g]="__declspec attributes must be an identifier or string literal",
[g]="__declspec attributes must be an identifier or string literal",
[b]=k,
[h]=a,
[e]="__declspec attributes must be an identifier or string literal",
[i]=y,
[d]=a,
[b]={"38c9ad9e725c",1340113766,"Improves parsing and semantic analysis for MS __declspec attributes.  This includes support for the ...","Improves parsing and semantic analysis for MS __declspec attributes.  This includes support for the align (which fixes PR12631).\n\nllvm-svn: 158717"},
[f]=y,
[j]={{hb,787,"/// [MS] decl-specifier:\n///            __declspec ( extended-decl-modifier-seq )\n///\n/// [MS] extended-decl-modifier-seq:\n///            extended-decl-modifier[opt]\n///            extended-decl-modifier extended-decl-modifier-seq\nvoid Parser::ParseMicrosoftDeclSpecs(ParsedAttributes &Attrs) {\n  // ...\n  while (Tok.is(tok::kw___declspec)) {\n    // ...\n    // An empty declspec is perfectly legal and should not warn.  Additionally,\n    // you can specify multiple attributes per declspec.\n    while (Tok.isNot(tok::r_paren)) {\n      // ...\n      if (!IsString && Tok.getKind() != tok::identifier && Tok.getKind() != tok::kw_restrict) {\n        Diag(Tok, diag::err_ms_declspec_type);"}},
[c]={"38c9ad9e725c",1340113766,"Improves parsing and semantic analysis for MS __declspec attributes.  This includes support for the ...","Improves parsing and semantic analysis for MS __declspec attributes.  This includes support for the align (which fixes PR12631).\n\nllvm-svn: 158717"},
[j]={{eb,787,"/// [MS] decl-specifier:\n///            __declspec ( extended-decl-modifier-seq )\n///\n/// [MS] extended-decl-modifier-seq:\n///            extended-decl-modifier[opt]\n///            extended-decl-modifier extended-decl-modifier-seq\nvoid Parser::ParseMicrosoftDeclSpecs(ParsedAttributes &Attrs) {\n  // ...\n  while (Tok.is(tok::kw___declspec)) {\n    // ...\n    // An empty declspec is perfectly legal and should not warn.  Additionally,\n    // you can specify multiple attributes per declspec.\n    while (Tok.isNot(tok::r_paren)) {\n      // ...\n      if (!IsString && Tok.getKind() != tok::identifier && Tok.getKind() != tok::kw_restrict) {\n        Diag(Tok, diag::err_ms_declspec_type);"}},
[l]={
[l]={
["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:68:19: error: __declspec attributes must be an identifier or string literal"}
["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:68:19: error: __declspec attributes must be an identifier or string literal"}
Line 2,513: Line 2,514:
},
},
["err_ms_property_duplicate_accessor"]={
["err_ms_property_duplicate_accessor"]={
[i]="err_ms_property_duplicate_accessor",
[c]="err_ms_property_duplicate_accessor",
[h]="property declaration specifies \'%0\' accessor twice",
[d]="property declaration specifies \'%0\' accessor twice",
[g]="property declaration specifies \'A\' accessor twice",
[e]="property declaration specifies \'A\' accessor twice",
[b]=k,
[f]=k,
[e]="property declaration specifies \'(.*?)\' accessor twice",
[g]="property declaration specifies \'(.*?)\' accessor twice",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={Fb,1366097310,Mb,Jb},
[b]={Jb,1366097310,Kb,Lb},
[j]={{eb,708,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      if (Kind == AK_Invalid) {\n      // ...\n      } else if (AccessorNames[Kind] != nullptr) {\n        // ...\n        Diag(KindLoc, diag::err_ms_property_duplicate_accessor) << KindStr;"}},
[j]={{hb,708,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      if (Kind == AK_Invalid) {\n      // ...\n      } else if (AccessorNames[Kind] != nullptr) {\n        // ...\n        Diag(KindLoc, diag::err_ms_property_duplicate_accessor) << KindStr;"}},
[l]={
[l]={
[Bb]={"clang/test/Parser/MicrosoftExtensions.cpp:367:41: error: property declaration specifies \'get\' accessor twice"}
[Mb]={"clang/test/Parser/MicrosoftExtensions.cpp:367:41: error: property declaration specifies \'get\' accessor twice"}
}
}
},
},
["err_ms_property_expected_accessor_name"]={
["err_ms_property_expected_accessor_name"]={
[i]="err_ms_property_expected_accessor_name",
[c]="err_ms_property_expected_accessor_name",
[h]="expected name of accessor method",
[d]="expected name of accessor method",
[e]="expected name of accessor method",
[f]=k,
[g]="expected name of accessor method",
[g]="expected name of accessor method",
[b]=k,
[h]=a,
[e]="expected name of accessor method",
[i]=y,
[d]=a,
[b]={Jb,1366097310,Kb,Lb},
[f]=y,
[j]={{hb,700,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      // Expect the method name.\n      if (!Tok.is(tok::identifier)) {\n        Diag(Tok.getLocation(), diag::err_ms_property_expected_accessor_name);"}},
[c]={Fb,1366097310,Mb,Jb},
[j]={{eb,700,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      // Expect the method name.\n      if (!Tok.is(tok::identifier)) {\n        Diag(Tok.getLocation(), diag::err_ms_property_expected_accessor_name);"}},
[l]={
[l]={
[Bb]={"clang/test/Parser/MicrosoftExtensions.cpp:362:27: error: expected name of accessor method"}
[Mb]={"clang/test/Parser/MicrosoftExtensions.cpp:362:27: error: expected name of accessor method"}
}
}
},
},
["err_ms_property_expected_comma_or_rparen"]={
["err_ms_property_expected_comma_or_rparen"]={
[i]="err_ms_property_expected_comma_or_rparen",
[c]="err_ms_property_expected_comma_or_rparen",
[h]="expected \',\' or \')\' at end of property accessor list",
[d]="expected \',\' or \')\' at end of property accessor list",
[g]="expected \',\' or \')\' at end of property accessor list",
[e]="expected \',\' or \')\' at end of property accessor list",
[b]=k,
[f]=k,
[e]="expected \',\' or \'\\)\' at end of property accessor list",
[g]="expected \',\' or \'\\)\' at end of property accessor list",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={Fb,1366097310,Mb,Jb},
[b]={Jb,1366097310,Kb,Lb},
[j]={{eb,723,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    next_property_accessor:\n      // ...\n      Diag(Tok.getLocation(), diag::err_ms_property_expected_comma_or_rparen);"}},
[j]={{hb,723,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    next_property_accessor:\n      // ...\n      Diag(Tok.getLocation(), diag::err_ms_property_expected_comma_or_rparen);"}},
[l]={
[l]={
[Bb]={"clang/test/Parser/MicrosoftExtensions.cpp:364:31: error: expected \',\' or \')\' at end of property accessor list"}
[Mb]={"clang/test/Parser/MicrosoftExtensions.cpp:364:31: error: expected \',\' or \')\' at end of property accessor list"}
}
}
},
},
["err_ms_property_expected_equal"]={
["err_ms_property_expected_equal"]={
[i]="err_ms_property_expected_equal",
[c]="err_ms_property_expected_equal",
[h]="expected \'=\' after \'%0\'",
[d]="expected \'=\' after \'%0\'",
[g]="expected \'=\' after \'A\'",
[e]="expected \'=\' after \'A\'",
[b]=k,
[f]=k,
[e]="expected \'\\=\' after \'(.*?)\'",
[g]="expected \'\\=\' after \'(.*?)\'",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={Fb,1366097310,Mb,Jb},
[b]={Jb,1366097310,Kb,Lb},
[j]={{eb,693,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      // Consume the \'=\'.\n      if (!TryConsumeToken(tok::equal)) {\n        Diag(Tok.getLocation(), diag::err_ms_property_expected_equal) << KindStr;"}},
[j]={{hb,693,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      // Consume the \'=\'.\n      if (!TryConsumeToken(tok::equal)) {\n        Diag(Tok.getLocation(), diag::err_ms_property_expected_equal) << KindStr;"}},
[l]={
[l]={
["clang/test/Parser/attr-availability.c"]={"clang/test/Parser/attr-availability.c:36:68: error: expected \'=\' after \'message\'"}
["clang/test/Parser/attr-availability.c"]={"clang/test/Parser/attr-availability.c:36:68: error: expected \'=\' after \'message\'"}
Line 2,569: Line 2,570:
},
},
["err_ms_property_has_set_accessor"]={
["err_ms_property_has_set_accessor"]={
[i]="err_ms_property_has_set_accessor",
[c]="err_ms_property_has_set_accessor",
[h]="putter for property must be specified as \'put\', not \'set\'",
[d]="putter for property must be specified as \'put\', not \'set\'",
[e]="putter for property must be specified as \'put\', not \'set\'",
[f]=k,
[g]="putter for property must be specified as \'put\', not \'set\'",
[g]="putter for property must be specified as \'put\', not \'set\'",
[b]=k,
[h]=a,
[e]="putter for property must be specified as \'put\', not \'set\'",
[i]=y,
[d]=a,
[b]={Jb,1366097310,Kb,Lb},
[f]=y,
[j]={{hb,665,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      if (KindStr == \"get\") {\n      // ...\n      } else if (KindStr == \"put\") {\n      // ...\n      } else if (KindStr == \"set\") {\n        Diag(KindLoc, diag::err_ms_property_has_set_accessor) << FixItHint::CreateReplacement(KindLoc, \"put\");"}},
[c]={Fb,1366097310,Mb,Jb},
[j]={{eb,665,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      if (KindStr == \"get\") {\n      // ...\n      } else if (KindStr == \"put\") {\n      // ...\n      } else if (KindStr == \"set\") {\n        Diag(KindLoc, diag::err_ms_property_has_set_accessor) << FixItHint::CreateReplacement(KindLoc, \"put\");"}},
[l]={
[l]={
[Bb]={"clang/test/Parser/MicrosoftExtensions.cpp:357:23: error: putter for property must be specified as \'put\', not \'set\'"}
[Mb]={"clang/test/Parser/MicrosoftExtensions.cpp:357:23: error: putter for property must be specified as \'put\', not \'set\'"}
}
}
},
},
["err_ms_property_initializer"]={
["err_ms_property_initializer"]={
[i]="err_ms_property_initializer",
[c]="err_ms_property_initializer",
[h]={{nil,C,"property declaration cannot have a default member initializer"},{"11.1",nil,"property declaration cannot have an in-class initializer"}},
[d]={{nil,D,"property declaration cannot have a default member initializer"},{"11.1",nil,"property declaration cannot have an in-class initializer"}},
[g]={{nil,C,"property declaration cannot have a default member initializer"},{"11.1",nil,"property declaration cannot have an in-class initializer"}},
[e]={{nil,D,"property declaration cannot have a default member initializer"},{"11.1",nil,"property declaration cannot have an in-class initializer"}},
[b]=k,
[f]=k,
[e]="property declaration cannot have a default member initializer",
[g]="property declaration cannot have a default member initializer",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"87ff66ccc750",1418470456,"Parse: MS property members cannot have an in-class initializer","Parse: MS property members cannot have an in-class initializer\n\nWe would crash trying to treat a property member as a field.  These\nshoudl be forbidden anyway, reject programs which contain them.\n\nThis fixes PR21840.\n\nllvm-svn: 224193"},
[b]={"87ff66ccc750",1418470456,"Parse: MS property members cannot have an in-class initializer","Parse: MS property members cannot have an in-class initializer\n\nWe would crash trying to treat a property member as a field.  These\nshoudl be forbidden anyway, reject programs which contain them.\n\nThis fixes PR21840.\n\nllvm-svn: 224193"},
[j]={{"clang/lib/Parse/ParseDeclCXX.cpp",3263,"/// ParseCXXMemberInitializer - Parse the brace-or-equal-initializer.\n/// Also detect and reject any attempted defaulted/deleted function definition.\n/// The location of the \'=\', if any, will be placed in EqualLoc.\n///\n/// This does not check for a pure-specifier; that\'s handled elsewhere.\n///\n///  brace-or-equal-initializer:\n///    \'=\' initializer-expression\n///    braced-init-list\n///\n///  initializer-clause:\n///    assignment-expression\n///    braced-init-list\n///\n///  defaulted/deleted function-definition:\n///    \'=\' \'default\'\n///    \'=\' \'delete\'\n///\n/// Prior to C++0x, the assignment-expression in an initializer-clause must\n/// be a constant-expression.\nExprResult Parser::ParseCXXMemberInitializer(Decl *D, bool IsFunction, SourceLocation &EqualLoc) {\n  // ...\n  if (const auto *PD = dyn_cast_or_null<MSPropertyDecl>(D)) {\n    Diag(Tok, diag::err_ms_property_initializer) << PD;"}},
[j]={{"clang/lib/Parse/ParseDeclCXX.cpp",3263,"/// ParseCXXMemberInitializer - Parse the brace-or-equal-initializer.\n/// Also detect and reject any attempted defaulted/deleted function definition.\n/// The location of the \'=\', if any, will be placed in EqualLoc.\n///\n/// This does not check for a pure-specifier; that\'s handled elsewhere.\n///\n///  brace-or-equal-initializer:\n///    \'=\' initializer-expression\n///    braced-init-list\n///\n///  initializer-clause:\n///    assignment-expression\n///    braced-init-list\n///\n///  defaulted/deleted function-definition:\n///    \'=\' \'default\'\n///    \'=\' \'delete\'\n///\n/// Prior to C++0x, the assignment-expression in an initializer-clause must\n/// be a constant-expression.\nExprResult Parser::ParseCXXMemberInitializer(Decl *D, bool IsFunction, SourceLocation &EqualLoc) {\n  // ...\n  if (const auto *PD = dyn_cast_or_null<MSPropertyDecl>(D)) {\n    Diag(Tok, diag::err_ms_property_initializer) << PD;"}},
[l]={
[l]={
[Bb]={"clang/test/Parser/MicrosoftExtensions.cpp:368:44: error: property declaration cannot have a default member initializer"}
[Mb]={"clang/test/Parser/MicrosoftExtensions.cpp:368:44: error: property declaration cannot have a default member initializer"}
}
}
},
},
["err_ms_property_missing_accessor_kind"]={
["err_ms_property_missing_accessor_kind"]={
[i]="err_ms_property_missing_accessor_kind",
[c]="err_ms_property_missing_accessor_kind",
[h]="missing \'get=\' or \'put=\'",
[d]="missing \'get=\' or \'put=\'",
[g]="missing \'get=\' or \'put=\'",
[e]="missing \'get=\' or \'put=\'",
[b]=k,
[f]=k,
[e]="missing \'get\\=\' or \'put\\=\'",
[g]="missing \'get\\=\' or \'put\\=\'",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={Fb,1366097310,Mb,Jb},
[b]={Jb,1366097310,Kb,Lb},
[j]={{eb,672,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      if (KindStr == \"get\") {\n      // ...\n      } else if (KindStr == \"put\") {\n      // ...\n      } else if (KindStr == \"set\") {\n      // ...\n      } else if (NextToken().is(tok::comma) || NextToken().is(tok::r_paren)) {\n        Diag(KindLoc, diag::err_ms_property_missing_accessor_kind);"}},
[j]={{hb,672,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      if (KindStr == \"get\") {\n      // ...\n      } else if (KindStr == \"put\") {\n      // ...\n      } else if (KindStr == \"set\") {\n      // ...\n      } else if (NextToken().is(tok::comma) || NextToken().is(tok::r_paren)) {\n        Diag(KindLoc, diag::err_ms_property_missing_accessor_kind);"}},
[l]={
[l]={
[Bb]={"clang/test/Parser/MicrosoftExtensions.cpp:358:23: error: missing \'get=\' or \'put=\'"}
[Mb]={"clang/test/Parser/MicrosoftExtensions.cpp:358:23: error: missing \'get=\' or \'put=\'"}
}
}
},
},
["err_ms_property_no_getter_or_putter"]={
["err_ms_property_no_getter_or_putter"]={
[i]="err_ms_property_no_getter_or_putter",
[c]="err_ms_property_no_getter_or_putter",
[h]="property does not specify a getter or a putter",
[d]="property does not specify a getter or a putter",
[e]="property does not specify a getter or a putter",
[f]=k,
[g]="property does not specify a getter or a putter",
[g]="property does not specify a getter or a putter",
[b]=k,
[h]=a,
[e]="property does not specify a getter or a putter",
[i]=y,
[d]=a,
[b]={Jb,1366097310,Kb,Lb},
[f]=y,
[j]={{hb,647,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // Stop if this doesn\'t look like an accessor spec.\n      if (!Tok.is(tok::identifier)) {\n        // If the user wrote a completely empty list, use a special diagnostic.\n        if (Tok.is(tok::r_paren) && !HasInvalidAccessor && AccessorNames[AK_Put] == nullptr && AccessorNames[AK_Get] == nullptr) {\n          Diag(AttrNameLoc, diag::err_ms_property_no_getter_or_putter);"}},
[c]={Fb,1366097310,Mb,Jb},
[j]={{eb,647,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // Stop if this doesn\'t look like an accessor spec.\n      if (!Tok.is(tok::identifier)) {\n        // If the user wrote a completely empty list, use a special diagnostic.\n        if (Tok.is(tok::r_paren) && !HasInvalidAccessor && AccessorNames[AK_Put] == nullptr && AccessorNames[AK_Get] == nullptr) {\n          Diag(AttrNameLoc, diag::err_ms_property_no_getter_or_putter);"}},
[l]={
[l]={
[Bb]={"clang/test/Parser/MicrosoftExtensions.cpp:356:14: error: property does not specify a getter or a putter"}
[Mb]={"clang/test/Parser/MicrosoftExtensions.cpp:356:14: error: property does not specify a getter or a putter"}
}
}
},
},
["err_ms_property_unknown_accessor"]={
["err_ms_property_unknown_accessor"]={
[i]="err_ms_property_unknown_accessor",
[c]="err_ms_property_unknown_accessor",
[h]="expected \'get\' or \'put\' in property declaration",
[d]="expected \'get\' or \'put\' in property declaration",
[e]="expected \'get\' or \'put\' in property declaration",
[f]=k,
[g]="expected \'get\' or \'put\' in property declaration",
[g]="expected \'get\' or \'put\' in property declaration",
[b]=k,
[h]=a,
[e]="expected \'get\' or \'put\' in property declaration",
[i]=y,
[d]=a,
[b]={Jb,1366097310,Kb,Lb},
[f]=y,
[j]={{hb,651,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // Stop if this doesn\'t look like an accessor spec.\n      if (!Tok.is(tok::identifier)) {\n        // ...\n        Diag(Tok.getLocation(), diag::err_ms_property_unknown_accessor);"},{hb,679,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      if (KindStr == \"get\") {\n      // ...\n      } else if (KindStr == \"put\") {\n      // ...\n      } else if (KindStr == \"set\") {\n      // ...\n      } else if (NextToken().is(tok::comma) || NextToken().is(tok::r_paren)) {\n      // ...\n      } else {\n        Diag(KindLoc, diag::err_ms_property_unknown_accessor);"}},
[c]={Fb,1366097310,Mb,Jb},
[j]={{eb,651,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // Stop if this doesn\'t look like an accessor spec.\n      if (!Tok.is(tok::identifier)) {\n        // ...\n        Diag(Tok.getLocation(), diag::err_ms_property_unknown_accessor);"},{eb,679,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      if (KindStr == \"get\") {\n      // ...\n      } else if (KindStr == \"put\") {\n      // ...\n      } else if (KindStr == \"set\") {\n      // ...\n      } else if (NextToken().is(tok::comma) || NextToken().is(tok::r_paren)) {\n      // ...\n      } else {\n        Diag(KindLoc, diag::err_ms_property_unknown_accessor);"}},
[l]={
[l]={
[Bb]={"clang/test/Parser/MicrosoftExtensions.cpp:359:23: error: expected \'get\' or \'put\' in property declaration","clang/test/Parser/MicrosoftExtensions.cpp:365:32: error: expected \'get\' or \'put\' in property declaration"}
[Mb]={"clang/test/Parser/MicrosoftExtensions.cpp:359:23: error: expected \'get\' or \'put\' in property declaration","clang/test/Parser/MicrosoftExtensions.cpp:365:32: error: expected \'get\' or \'put\' in property declaration"}
}
}
},
},
["err_ms_va_start_used_in_sysv_function"]={
["err_ms_va_start_used_in_sysv_function"]={
[i]="err_ms_va_start_used_in_sysv_function",
[c]="err_ms_va_start_used_in_sysv_function",
[h]="\'__builtin_ms_va_start\' used in System V ABI function",
[d]="\'__builtin_ms_va_start\' used in System V ABI function",
[e]="\'__builtin_ms_va_start\' used in System V ABI function",
[f]=k,
[g]="\'__builtin_ms_va_start\' used in System V ABI function",
[g]="\'__builtin_ms_va_start\' used in System V ABI function",
[b]=k,
[h]=a,
[e]="\'__builtin_ms_va_start\' used in System V ABI function",
[i]=m,
[d]=a,
[b]={"c7d5c94f78c7",1442523333,"Support __builtin_ms_va_list.","Support __builtin_ms_va_list.\n\nSummary:\nThis change adds support for `__builtin_ms_va_list`, a GCC extension for\nvariadic `ms_abi` functions. The existing `__builtin_va_list` support is\ninadequate for this because `va_list` is defined differently in the Win64\nABI vs. the System V/AMD64 ABI.\n\nDepends on D1622.\n\nReviewers: rsmith, rnk, rjmccall\n\nCC: cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D1623\n\nllvm-svn: 247941"},
[f]=m,
[j]={{X,8043,"/// Check that the user is calling the appropriate va_start builtin for the\n/// target and calling convention.\nstatic bool checkVAStartABI(Sema &S, unsigned BuiltinID, Expr *Fn) {\n  // ...\n  if (IsX64 || IsAArch64) {\n    // ...\n    if (IsMSVAStart) {\n      // Don\'t allow this in System V ABI functions.\n      if (CC == CC_X86_64SysV || (!IsWindows && CC != CC_Win64))\n        return S.Diag(Fn->getBeginLoc(), diag::err_ms_va_start_used_in_sysv_function);"}},
[c]={"c7d5c94f78c7",1442523333,"Support __builtin_ms_va_list.","Support __builtin_ms_va_list.\n\nSummary:\nThis change adds support for `__builtin_ms_va_list`, a GCC extension for\nvariadic `ms_abi` functions. The existing `__builtin_va_list` support is\ninadequate for this because `va_list` is defined differently in the Win64\nABI vs. the System V/AMD64 ABI.\n\nDepends on D1622.\n\nReviewers: rsmith, rnk, rjmccall\n\nCC: cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D1623\n\nllvm-svn: 247941"},
[j]={{W,8043,"/// Check that the user is calling the appropriate va_start builtin for the\n/// target and calling convention.\nstatic bool checkVAStartABI(Sema &S, unsigned BuiltinID, Expr *Fn) {\n  // ...\n  if (IsX64 || IsAArch64) {\n    // ...\n    if (IsMSVAStart) {\n      // Don\'t allow this in System V ABI functions.\n      if (CC == CC_X86_64SysV || (!IsWindows && CC != CC_Win64))\n        return S.Diag(Fn->getBeginLoc(), diag::err_ms_va_start_used_in_sysv_function);"}},
[l]={
[l]={
["clang/test/Sema/varargs-aarch64.c"]={"clang/test/Sema/varargs-aarch64.c:5:3: error: \'__builtin_ms_va_start\' used in System V ABI function"}
["clang/test/Sema/varargs-aarch64.c"]={"clang/test/Sema/varargs-aarch64.c:5:3: error: \'__builtin_ms_va_start\' used in System V ABI function"}
Line 2,653: Line 2,654:
},
},
["err_msasm_unable_to_create_target"]={
["err_msasm_unable_to_create_target"]={
[i]="err_msasm_unable_to_create_target",
[c]="err_msasm_unable_to_create_target",
[h]="MS-style inline assembly is not available: %0",
[d]="MS-style inline assembly is not available: %0",
[g]="MS-style inline assembly is not available: A",
[e]="MS-style inline assembly is not available: A",
[b]=k,
[f]=k,
[e]="MS\\-style inline assembly is not available\\: (.*?)",
[g]="MS\\-style inline assembly is not available\\: (.*?)",
[d]=a,
[h]=a,
[f]="Inline Assembly Issue",
[i]="Inline Assembly Issue",
[c]={"45cf31f7d390",1383143368,"Recover instead of crashing on MS assembly when no target is loaded","Recover instead of crashing on MS assembly when no target is loaded\n\nIt\'s possible to embed the frontend in applications that haven\'t initialized\nbackend targets so we need to handle this condition gracefully.\n\nllvm-svn: 193685"},
[b]={"45cf31f7d390",1383143368,"Recover instead of crashing on MS assembly when no target is loaded","Recover instead of crashing on MS assembly when no target is loaded\n\nIt\'s possible to embed the frontend in applications that haven\'t initialized\nbackend targets so we need to handle this condition gracefully.\n\nllvm-svn: 193685"},
[j]={{uc,543,"/// 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  // ...\n  if (!TheTriple.isX86()) {\n  // ...\n  } else {\n    // ...\n    if (!TheTarget)\n      Diag(AsmLoc, diag::err_msasm_unable_to_create_target) << Error;"},{uc,571,"/// 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  // ...\n  if (!MRI) {\n    Diag(AsmLoc, diag::err_msasm_unable_to_create_target) << \"target MC unavailable\";"},{uc,586,"/// 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  // ...\n  if (!MAI || !MII || !STI) {\n    Diag(AsmLoc, diag::err_msasm_unable_to_create_target) << \"target MC unavailable\";"},{uc,611,"/// 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  // ...\n  // Target AsmParser may not be linked in clang-based tools.\n  if (!TargetParser) {\n    Diag(AsmLoc, diag::err_msasm_unable_to_create_target) << \"target ASM parser unavailable\";"}}
[j]={{wc,543,"/// 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  // ...\n  if (!TheTriple.isX86()) {\n  // ...\n  } else {\n    // ...\n    if (!TheTarget)\n      Diag(AsmLoc, diag::err_msasm_unable_to_create_target) << Error;"},{wc,571,"/// 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  // ...\n  if (!MRI) {\n    Diag(AsmLoc, diag::err_msasm_unable_to_create_target) << \"target MC unavailable\";"},{wc,586,"/// 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  // ...\n  if (!MAI || !MII || !STI) {\n    Diag(AsmLoc, diag::err_msasm_unable_to_create_target) << \"target MC unavailable\";"},{wc,611,"/// 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  // ...\n  // Target AsmParser may not be linked in clang-based tools.\n  if (!TargetParser) {\n    Diag(AsmLoc, diag::err_msasm_unable_to_create_target) << \"target ASM parser unavailable\";"}}
},
},
["err_msasm_unsupported_arch"]={
["err_msasm_unsupported_arch"]={
[i]="err_msasm_unsupported_arch",
[c]="err_msasm_unsupported_arch",
[h]={{nil,u,"unsupported architecture \'%0\' for MS-style inline assembly"},{C,nil,"Unsupported architecture \'%0\' for MS-style inline assembly"}},
[d]={{nil,u,"unsupported architecture \'%0\' for MS-style inline assembly"},{D,nil,"Unsupported architecture \'%0\' for MS-style inline assembly"}},
[g]={{nil,u,"unsupported architecture \'A\' for MS-style inline assembly"},{C,nil,"Unsupported architecture \'A\' for MS-style inline assembly"}},
[e]={{nil,u,"unsupported architecture \'A\' for MS-style inline assembly"},{D,nil,"Unsupported architecture \'A\' for MS-style inline assembly"}},
[b]=k,
[f]=k,
[e]="unsupported architecture \'(.*?)\' for MS\\-style inline assembly",
[g]="unsupported architecture \'(.*?)\' for MS\\-style inline assembly",
[d]=a,
[h]=a,
[f]="Inline Assembly Issue",
[i]="Inline Assembly Issue",
[c]={"282d675b2878",1359059074,"[ms-inline asm] Add an error when trying to compile MS-style inline assembly","[ms-inline asm] Add an error when trying to compile MS-style inline assembly\nfor an unsupported architecture.\nrdar://13063988\n\nllvm-svn: 173364"},
[b]={"282d675b2878",1359059074,"[ms-inline asm] Add an error when trying to compile MS-style inline assembly","[ms-inline asm] Add an error when trying to compile MS-style inline assembly\nfor an unsupported architecture.\nrdar://13063988\n\nllvm-svn: 173364"},
[j]={{uc,538,"/// 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  // ...\n  if (!TheTriple.isX86()) {\n    Diag(AsmLoc, diag::err_msasm_unsupported_arch) << TheTriple.getArchName();"}},
[j]={{wc,538,"/// 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  // ...\n  if (!TheTriple.isX86()) {\n    Diag(AsmLoc, diag::err_msasm_unsupported_arch) << TheTriple.getArchName();"}},
[l]={
[l]={
["clang/test/Sema/ms-inline-asm-invalid-arch.c"]={"clang/test/Sema/ms-inline-asm-invalid-arch.c:4:3: error: unsupported architecture \'powerpc64\' for MS-style inline assembly"}
["clang/test/Sema/ms-inline-asm-invalid-arch.c"]={"clang/test/Sema/ms-inline-asm-invalid-arch.c:4:3: error: unsupported architecture \'powerpc64\' for MS-style inline assembly"}
Line 2,678: Line 2,679:
},
},
["err_msvc_annotation_wide_str"]={
["err_msvc_annotation_wide_str"]={
[i]={{nil,t,"err_msvc_annotation_wide_str"}},
[c]={{nil,t,"err_msvc_annotation_wide_str"}},
[h]={{nil,t,"arguments to __annotation must be wide string constants"}},
[d]={{nil,t,"arguments to __annotation must be wide string constants"}},
[g]={{nil,t,"arguments to __annotation must be wide string constants"}},
[e]={{nil,t,"arguments to __annotation must be wide string constants"}},
[b]=k,
[f]=k,
[e]="arguments to __annotation must be wide string constants",
[g]="arguments to __annotation must be wide string constants",
[d]=a,
[h]=a,
[f]={{nil,t,m}},
[i]={{nil,t,m}},
[c]={"30701edf761c",1504643255,"[ms] Implement the __annotation intrinsic","[ms] Implement the __annotation intrinsic\n\nllvm-svn: 312572"},
[b]={"30701edf761c",1504643255,"[ms] Implement the __annotation intrinsic","[ms] Implement the __annotation intrinsic\n\nllvm-svn: 312572"},
[j]={{W,229,"static bool SemaBuiltinMSVCAnnotation(Sema &S, CallExpr *TheCall) {\n  // ...\n  // All arguments should be wide string literals.\n  for (Expr *Arg : TheCall->arguments()) {\n    // ...\n    if (!Literal || !Literal->isWide()) {\n      S.Diag(Arg->getBeginLoc(), diag::err_msvc_annotation_wide_str) << Arg->getSourceRange();"}},
[j]={{X,229,"static bool SemaBuiltinMSVCAnnotation(Sema &S, CallExpr *TheCall) {\n  // ...\n  // All arguments should be wide string literals.\n  for (Expr *Arg : TheCall->arguments()) {\n    // ...\n    if (!Literal || !Literal->isWide()) {\n      S.Diag(Arg->getBeginLoc(), diag::err_msvc_annotation_wide_str) << Arg->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/ms-annotation.c"]={"clang/test/Sema/ms-annotation.c:7:16: error: arguments to __annotation must be wide string constants","clang/test/Sema/ms-annotation.c:10:30: error: arguments to __annotation must be wide string constants"}
["clang/test/Sema/ms-annotation.c"]={"clang/test/Sema/ms-annotation.c:7:16: error: arguments to __annotation must be wide string constants","clang/test/Sema/ms-annotation.c:10:30: error: arguments to __annotation must be wide string constants"}
Line 2,692: Line 2,693:
},
},
["err_mt_message"]={
["err_mt_message"]={
[i]="err_mt_message",
[c]="err_mt_message",
[h]="[rewriter] %0",
[d]="[rewriter] %0",
[g]="[rewriter] A",
[e]="[rewriter] A",
[b]=k,
[f]=k,
[e]="\\[rewriter\\] (.*?)",
[g]="\\[rewriter\\] (.*?)",
[d]=a,
[h]=a,
[f]=a,
[i]=w,
[c]={"42aa21222d37",1390712852,"ARCMigrate: Introduce proper diagnostics for TransformActions","ARCMigrate: Introduce proper diagnostics for TransformActions\n\nThis starts to switch ARCMT to use proper diagnostic messages. The old use was\nbased on incorrect example code from the documentation.\n\nThe logic of the previous report() functions has been retained to support any\nexternal consumers that might be intercepting diagnostic messages through the\nold interface.\n\nNote that the change in test/Misc/warning-flags.c isn\'t a new warning without a\nflag, rather one that was previously invisible to the test. Adding a flag might\nbe a good idea though.\n\nllvm-svn: 200124"},
[b]={"42aa21222d37",1390712852,"ARCMigrate: Introduce proper diagnostics for TransformActions","ARCMigrate: Introduce proper diagnostics for TransformActions\n\nThis starts to switch ARCMT to use proper diagnostic messages. The old use was\nbased on incorrect example code from the documentation.\n\nThe logic of the previous report() functions has been retained to support any\nexternal consumers that might be intercepting diagnostic messages through the\nold interface.\n\nNote that the change in test/Misc/warning-flags.c isn\'t a new warning without a\nflag, rather one that was previously invisible to the test. Adding a flag might\nbe a good idea though.\n\nllvm-svn: 200124"},
[j]={{"clang/lib/ARCMigrate/TransformActions.cpp",690,"void TransformActions::reportError(StringRef message, SourceLocation loc, SourceRange range) { report(loc, diag::err_mt_message, range) << message; }"}},
[j]={{"clang/lib/ARCMigrate/TransformActions.cpp",690,"void TransformActions::reportError(StringRef message, SourceLocation loc, SourceRange range) { report(loc, diag::err_mt_message, range) << message; }"}},
[l]={
[l]={
Line 2,706: Line 2,707:
},
},
["err_multichar_character_literal"]={
["err_multichar_character_literal"]={
[i]={{nil,S,"err_multichar_character_literal"}},
[c]={{nil,S,"err_multichar_character_literal"}},
[h]={{nil,S,"%select{wide|Unicode}0 character literals may not contain multiple characters"}},
[d]={{nil,S,"%select{wide|Unicode}0 character literals may not contain multiple characters"}},
[g]={{nil,S,{{"wide","Unicode"}," character literals may not contain multiple characters"}}},
[e]={{nil,S,{{"wide","Unicode"}," character literals may not contain multiple characters"}}},
[b]=k,
[f]=k,
[e]="(?:wide|Unicode) character literals may not contain multiple characters",
[g]="(?:wide|Unicode) character literals may not contain multiple characters",
[d]=a,
[h]=a,
[f]={{nil,S,z}},
[i]={{nil,S,A}},
[c]={Ac,1625925174,zc,sc},
[b]={nc,1625925174,kc,Dc},
[j]={{"clang/lib/Lex/LiteralSupport.cpp",1800,"/// \\verbatim\n///      user-defined-character-literal: [C++11 lex.ext]\n///        character-literal ud-suffix\n///      ud-suffix:\n///        identifier\n///      character-literal: [C++11 lex.ccon]\n///        \' c-char-sequence \'\n///        u\' c-char-sequence \'\n///        U\' c-char-sequence \'\n///        L\' c-char-sequence \'\n///        u8\' c-char-sequence \' [C++1z lex.ccon]\n///      c-char-sequence:\n///        c-char\n///        c-char-sequence c-char\n///      c-char:\n///        any member of the source character set except the single-quote \',\n///          backslash \\, or new-line character\n///        escape-sequence\n///        universal-character-name\n///      escape-sequence:\n///        simple-escape-sequence\n///        octal-escape-sequence\n///        hexadecimal-escape-sequence\n///      simple-escape-sequence:\n///        one of \\\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v\n///      octal-escape-sequence:\n///        \\ octal-digit\n///        \\ octal-digit octal-digit\n///        \\ octal-digit octal-digit octal-digit\n///      hexadecimal-escape-sequence:\n///        \\x hexadecimal-digit\n///        hexadecimal-escape-sequence hexadecimal-digit\n///      universal-character-name: [C++11 lex.charset]\n///        \\u hex-quad\n///        \\U hex-quad hex-quad\n///      hex-quad:\n///        hex-digit hex-digit hex-digit hex-digit\n/// \\endverbatim\n///\nCharLiteralParser::CharLiteralParser(const char *begin, const char *end, SourceLocation Loc, Preprocessor &PP, tok::TokenKind kind) {\n  // ...\n  if (NumCharsSoFar > 1) {\n    if (isOrdinary() && NumCharsSoFar == 4)\n    // ...\n    else if (isOrdinary())\n    // ...\n    else {\n      PP.Diag(Loc, diag::err_multichar_character_literal) << (isWide() ? 0 : 1);"}},
[j]={{"clang/lib/Lex/LiteralSupport.cpp",1800,"/// \\verbatim\n///      user-defined-character-literal: [C++11 lex.ext]\n///        character-literal ud-suffix\n///      ud-suffix:\n///        identifier\n///      character-literal: [C++11 lex.ccon]\n///        \' c-char-sequence \'\n///        u\' c-char-sequence \'\n///        U\' c-char-sequence \'\n///        L\' c-char-sequence \'\n///        u8\' c-char-sequence \' [C++1z lex.ccon]\n///      c-char-sequence:\n///        c-char\n///        c-char-sequence c-char\n///      c-char:\n///        any member of the source character set except the single-quote \',\n///          backslash \\, or new-line character\n///        escape-sequence\n///        universal-character-name\n///      escape-sequence:\n///        simple-escape-sequence\n///        octal-escape-sequence\n///        hexadecimal-escape-sequence\n///      simple-escape-sequence:\n///        one of \\\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v\n///      octal-escape-sequence:\n///        \\ octal-digit\n///        \\ octal-digit octal-digit\n///        \\ octal-digit octal-digit octal-digit\n///      hexadecimal-escape-sequence:\n///        \\x hexadecimal-digit\n///        hexadecimal-escape-sequence hexadecimal-digit\n///      universal-character-name: [C++11 lex.charset]\n///        \\u hex-quad\n///        \\U hex-quad hex-quad\n///      hex-quad:\n///        hex-digit hex-digit hex-digit hex-digit\n/// \\endverbatim\n///\nCharLiteralParser::CharLiteralParser(const char *begin, const char *end, SourceLocation Loc, Preprocessor &PP, tok::TokenKind kind) {\n  // ...\n  if (NumCharsSoFar > 1) {\n    if (isOrdinary() && NumCharsSoFar == 4)\n    // ...\n    else if (isOrdinary())\n    // ...\n    else {\n      PP.Diag(Loc, diag::err_multichar_character_literal) << (isWide() ? 0 : 1);"}},
[l]={
[l]={
Line 2,720: Line 2,721:
},
},
["err_multiple_base_initialization"]={
["err_multiple_base_initialization"]={
[i]="err_multiple_base_initialization",
[c]="err_multiple_base_initialization",
[h]="multiple initializations given for base %0",
[d]="multiple initializations given for base %0",
[g]="multiple initializations given for base A",
[e]="multiple initializations given for base A",
[b]=k,
[f]=k,
[e]="multiple initializations given for base (.*?)",
[g]="multiple initializations given for base (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"23eebd9c1ee8",1270891731,"Diagnose more cases of initializing distinct members of an anonymous union","Diagnose more cases of initializing distinct members of an anonymous union\nmember.  Use a better diagnostic for this case.  Also fix a bug with nested\nanonymous structs/unions for -Wreorder;  this last was PR6575.\n\nllvm-svn: 100923"},
[b]={"23eebd9c1ee8",1270891731,"Diagnose more cases of initializing distinct members of an anonymous union","Diagnose more cases of initializing distinct members of an anonymous union\nmember.  Use a better diagnostic for this case.  Also fix a bug with nested\nanonymous structs/unions for -Wreorder;  this last was PR6575.\n\nllvm-svn: 100923"},
[j]={{O,5640,"bool CheckRedundantInit(Sema &S, CXXCtorInitializer *Init, CXXCtorInitializer *&PrevInit) {\n  // ...\n  if (FieldDecl *Field = Init->getAnyMember())\n  // ...\n  else {\n    // ...\n    S.Diag(Init->getSourceLocation(), diag::err_multiple_base_initialization) << QualType(BaseClass, 0) << Init->getSourceRange();"}},
[j]={{Q,5640,"bool CheckRedundantInit(Sema &S, CXXCtorInitializer *Init, CXXCtorInitializer *&PrevInit) {\n  // ...\n  if (FieldDecl *Field = Init->getAnyMember())\n  // ...\n  else {\n    // ...\n    S.Diag(Init->getSourceLocation(), diag::err_multiple_base_initialization) << QualType(BaseClass, 0) << Init->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/class-base-member-init.cpp"]={"clang/test/SemaCXX/class-base-member-init.cpp:14:5: error: multiple initializations given for base \'S\'","clang/test/SemaCXX/class-base-member-init.cpp:35:7: error: multiple initializations given for base \'A<T>\'","clang/test/SemaCXX/class-base-member-init.cpp:42:7: error: multiple initializations given for base \'T\'","clang/test/SemaCXX/class-base-member-init.cpp:86:14: error: multiple initializations given for base \'decltype(Base(1))\' (aka \'test5::Base\')"}
["clang/test/SemaCXX/class-base-member-init.cpp"]={"clang/test/SemaCXX/class-base-member-init.cpp:14:5: error: multiple initializations given for base \'S\'","clang/test/SemaCXX/class-base-member-init.cpp:35:7: error: multiple initializations given for base \'A<T>\'","clang/test/SemaCXX/class-base-member-init.cpp:42:7: error: multiple initializations given for base \'T\'","clang/test/SemaCXX/class-base-member-init.cpp:86:14: error: multiple initializations given for base \'decltype(Base(1))\' (aka \'test5::Base\')"}
Line 2,734: Line 2,735:
},
},
["err_multiple_def_index"]={
["err_multiple_def_index"]={
[i]={{nil,t,"err_multiple_def_index"}},
[c]={{nil,t,"err_multiple_def_index"}},
[h]={{nil,t,"multiple definitions are found for the same key in index "}},
[d]={{nil,t,"multiple definitions are found for the same key in index "}},
[g]={{nil,t,"multiple definitions are found for the same key in index "}},
[e]={{nil,t,"multiple definitions are found for the same key in index "}},
[b]=k,
[f]=k,
[e]="multiple definitions are found for the same key in index ",
[g]="multiple definitions are found for the same key in index ",
[d]=a,
[h]=a,
[f]={{nil,t,a}},
[i]={{nil,t,w}},
[c]={"e350b0a19629",1506078661,"Add Cross Translation Unit support library","Add Cross Translation Unit support library\n\nThis patch introduces a class that can help to build tools that require cross\ntranslation unit facilities. This class allows function definitions to be loaded\nfrom external AST files based on an index. In order to use this functionality an\nindex is required. The index format is a flat text file but it might be\nreplaced with a different solution in the near future. USRs are used as names to\nlook up the functions definitions. This class also does caching to avoid\nredundant loading of AST files.\n\nRight now only function defnitions can be loaded using this API because this is\nwhat the in progress cross translation unit feature of the Static Analyzer\nrequires. In to future this might be extended to classes, types etc.\n\nDifferential Revision: https://reviews.llvm.org/D34512\n\nllvm-svn: 313975"},
[b]={"e350b0a19629",1506078661,"Add Cross Translation Unit support library","Add Cross Translation Unit support library\n\nThis patch introduces a class that can help to build tools that require cross\ntranslation unit facilities. This class allows function definitions to be loaded\nfrom external AST files based on an index. In order to use this functionality an\nindex is required. The index format is a flat text file but it might be\nreplaced with a different solution in the near future. USRs are used as names to\nlook up the functions definitions. This class also does caching to avoid\nredundant loading of AST files.\n\nRight now only function defnitions can be loaded using this API because this is\nwhat the in progress cross translation unit feature of the Static Analyzer\nrequires. In to future this might be extended to classes, types etc.\n\nDifferential Revision: https://reviews.llvm.org/D34512\n\nllvm-svn: 313975"},
[j]={{"clang/lib/CrossTU/CrossTranslationUnit.cpp",382,"void CrossTranslationUnitContext::emitCrossTUDiagnostics(const IndexError &IE) {\n  // ...\n  case index_error_code::multiple_definitions:\n    Context.getDiagnostics().Report(diag::err_multiple_def_index) << IE.getLineNum();"}}
[j]={{"clang/lib/CrossTU/CrossTranslationUnit.cpp",382,"void CrossTranslationUnitContext::emitCrossTUDiagnostics(const IndexError &IE) {\n  // ...\n  case index_error_code::multiple_definitions:\n    Context.getDiagnostics().Report(diag::err_multiple_def_index) << IE.getLineNum();"}}
},
},
["err_multiple_default_labels_defined"]={
["err_multiple_default_labels_defined"]={
[i]="err_multiple_default_labels_defined",
[c]="err_multiple_default_labels_defined",
[h]="multiple default labels in one switch",
[d]="multiple default labels in one switch",
[e]="multiple default labels in one switch",
[f]=k,
[g]="multiple default labels in one switch",
[g]="multiple default labels in one switch",
[b]=k,
[h]=a,
[e]="multiple default labels in one switch",
[i]=m,
[d]=a,
[b]={ib,1237025389,fb,gb},
[f]=m,
[j]={{F,1280,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  // ...\n  for (SwitchCase *SC = SS->getSwitchCaseList(); SC && !HasDependentValue; SC = SC->getNextSwitchCase()) {\n    if (DefaultStmt *DS = dyn_cast<DefaultStmt>(SC)) {\n      if (TheDefaultStmt) {\n        Diag(DS->getDefaultLoc(), diag::err_multiple_default_labels_defined);"}},
[c]={hb,1237025389,gb,fb},
[j]={{E,1280,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  // ...\n  for (SwitchCase *SC = SS->getSwitchCaseList(); SC && !HasDependentValue; SC = SC->getNextSwitchCase()) {\n    if (DefaultStmt *DS = dyn_cast<DefaultStmt>(SC)) {\n      if (TheDefaultStmt) {\n        Diag(DS->getDefaultLoc(), diag::err_multiple_default_labels_defined);"}},
[l]={
[l]={
["clang/test/CXX/stmt.stmt/stmt.label/p1.cpp"]={"clang/test/CXX/stmt.stmt/stmt.label/p1.cpp:22:5: error: multiple default labels in one switch"}
["clang/test/CXX/stmt.stmt/stmt.label/p1.cpp"]={"clang/test/CXX/stmt.stmt/stmt.label/p1.cpp:22:5: error: multiple default labels in one switch"}
Line 2,759: Line 2,760:
},
},
["err_multiple_final_overriders"]={
["err_multiple_final_overriders"]={
[i]="err_multiple_final_overriders",
[c]="err_multiple_final_overriders",
[h]="virtual function %q0 has more than one final overrider in %1",
[d]="virtual function %q0 has more than one final overrider in %1",
[g]="virtual function A has more than one final overrider in B",
[e]="virtual function A has more than one final overrider in B",
[b]=k,
[f]=k,
[e]="virtual function (.*?) has more than one final overrider in (.*?)",
[g]="virtual function (.*?) has more than one final overrider in (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"4165bd677248",1269388076,"Implement computation of the final overriders for each virtual","Implement computation of the final overriders for each virtual\nfunction within a class hierarchy (C++ [class.virtual]p2).\n\nWe use the final-overrider computation to determine when a particular\nclass is ill-formed because it has multiple final overriders for a\ngiven virtual function (e.g., because two virtual functions override\nthe same virtual function in the same virtual base class). Fixes\nPR5973.\n\nWe also use the final-overrider computation to determine which virtual\nmember functions are pure when determining whether a class is\nabstract or diagnosing the improper use of an abstract class. The\nprior approach to determining whether there were any pure virtual\nfunctions in a class didn\'t cope with virtual base class subobjects\nproperly, and could not easily be fixed to deal with the oddities of\nsubobject hiding. Fixes PR6631.\n\nllvm-svn: 99351"},
[b]={"4165bd677248",1269388076,"Implement computation of the final overriders for each virtual","Implement computation of the final overriders for each virtual\nfunction within a class hierarchy (C++ [class.virtual]p2).\n\nWe use the final-overrider computation to determine when a particular\nclass is ill-formed because it has multiple final overriders for a\ngiven virtual function (e.g., because two virtual functions override\nthe same virtual function in the same virtual base class). Fixes\nPR5973.\n\nWe also use the final-overrider computation to determine which virtual\nmember functions are pure when determining whether a class is\nabstract or diagnosing the improper use of an abstract class. The\nprior approach to determining whether there were any pure virtual\nfunctions in a class didn\'t cope with virtual base class subobjects\nproperly, and could not easily be fixed to deal with the oddities of\nsubobject hiding. Fixes PR6631.\n\nllvm-svn: 99351"},
[j]={{o,18999,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  // ...\n  // Okay, we successfully defined \'Record\'.\n  if (Record) {\n    // ...\n    if (CXXRecord) {\n      // ...\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            // ...\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                // ...\n                Diag(Record->getLocation(), diag::err_multiple_final_overriders) << (const NamedDecl *)M->first << Record;"}},
[j]={{o,18999,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  // ...\n  // Okay, we successfully defined \'Record\'.\n  if (Record) {\n    // ...\n    if (CXXRecord) {\n      // ...\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            // ...\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                // ...\n                Diag(Record->getLocation(), diag::err_multiple_final_overriders) << (const NamedDecl *)M->first << Record;"}},
[l]={
[l]={
Line 2,773: Line 2,774:
},
},
["err_multiple_mem_initialization"]={
["err_multiple_mem_initialization"]={
[i]="err_multiple_mem_initialization",
[c]="err_multiple_mem_initialization",
[h]="multiple initializations given for non-static member %0",
[d]="multiple initializations given for non-static member %0",
[g]="multiple initializations given for non-static member A",
[e]="multiple initializations given for non-static member A",
[b]=k,
[f]=k,
[e]="multiple initializations given for non\\-static member (.*?)",
[g]="multiple initializations given for non\\-static member (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"23eebd9c1ee8",1270891731,"Diagnose more cases of initializing distinct members of an anonymous union","Diagnose more cases of initializing distinct members of an anonymous union\nmember.  Use a better diagnostic for this case.  Also fix a bug with nested\nanonymous structs/unions for -Wreorder;  this last was PR6575.\n\nllvm-svn: 100923"},
[b]={"23eebd9c1ee8",1270891731,"Diagnose more cases of initializing distinct members of an anonymous union","Diagnose more cases of initializing distinct members of an anonymous union\nmember.  Use a better diagnostic for this case.  Also fix a bug with nested\nanonymous structs/unions for -Wreorder;  this last was PR6575.\n\nllvm-svn: 100923"},
[j]={{O,5633,"bool CheckRedundantInit(Sema &S, CXXCtorInitializer *Init, CXXCtorInitializer *&PrevInit) {\n  // ...\n  if (FieldDecl *Field = Init->getAnyMember())\n    S.Diag(Init->getSourceLocation(), diag::err_multiple_mem_initialization) << Field->getDeclName() << Init->getSourceRange();"}},
[j]={{Q,5633,"bool CheckRedundantInit(Sema &S, CXXCtorInitializer *Init, CXXCtorInitializer *&PrevInit) {\n  // ...\n  if (FieldDecl *Field = Init->getAnyMember())\n    S.Diag(Init->getSourceLocation(), diag::err_multiple_mem_initialization) << Field->getDeclName() << Init->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/class-base-member-init.cpp"]={"clang/test/SemaCXX/class-base-member-init.cpp:12:5: error: multiple initializations given for non-static member \'b1\'","clang/test/SemaCXX/class-base-member-init.cpp:51:7: error: multiple initializations given for non-static member \'t\'","clang/test/SemaCXX/class-base-member-init.cpp:97:11: error: multiple initializations given for non-static member \'a\'"}
["clang/test/SemaCXX/class-base-member-init.cpp"]={"clang/test/SemaCXX/class-base-member-init.cpp:12:5: error: multiple initializations given for non-static member \'b1\'","clang/test/SemaCXX/class-base-member-init.cpp:51:7: error: multiple initializations given for non-static member \'t\'","clang/test/SemaCXX/class-base-member-init.cpp:97:11: error: multiple initializations given for non-static member \'a\'"}
Line 2,787: Line 2,788:
},
},
["err_multiple_mem_union_initialization"]={
["err_multiple_mem_union_initialization"]={
[i]="err_multiple_mem_union_initialization",
[c]="err_multiple_mem_union_initialization",
[h]="initializing multiple members of union",
[d]="initializing multiple members of union",
[e]="initializing multiple members of union",
[f]=k,
[g]="initializing multiple members of union",
[g]="initializing multiple members of union",
[b]=k,
[h]=a,
[e]="initializing multiple members of union",
[i]=m,
[d]=a,
[b]={"23eebd9c1ee8",1270891731,"Diagnose more cases of initializing distinct members of an anonymous union","Diagnose more cases of initializing distinct members of an anonymous union\nmember.  Use a better diagnostic for this case.  Also fix a bug with nested\nanonymous structs/unions for -Wreorder;  this last was PR6575.\n\nllvm-svn: 100923"},
[f]=m,
[j]={{o,5484,"static void checkDuplicateDefaultInit(Sema &S, CXXRecordDecl *Parent, SourceLocation DefaultInitLoc) {\n  // ...\n  S.Diag(DefaultInitLoc, diag::err_multiple_mem_union_initialization);"},{Q,5665,"bool CheckRedundantUnionInit(Sema &S, CXXCtorInitializer *Init, RedundantUnionMap &Unions) {\n  // ...\n  while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) {\n    if (Parent->isUnion()) {\n      // ...\n      if (En.first && En.first != Child) {\n        S.Diag(Init->getSourceLocation(), diag::err_multiple_mem_union_initialization) << Field->getDeclName() << Init->getSourceRange();"}},
[c]={"23eebd9c1ee8",1270891731,"Diagnose more cases of initializing distinct members of an anonymous union","Diagnose more cases of initializing distinct members of an anonymous union\nmember.  Use a better diagnostic for this case.  Also fix a bug with nested\nanonymous structs/unions for -Wreorder;  this last was PR6575.\n\nllvm-svn: 100923"},
[j]={{o,5484,"static void checkDuplicateDefaultInit(Sema &S, CXXRecordDecl *Parent, SourceLocation DefaultInitLoc) {\n  // ...\n  S.Diag(DefaultInitLoc, diag::err_multiple_mem_union_initialization);"},{O,5665,"bool CheckRedundantUnionInit(Sema &S, CXXCtorInitializer *Init, RedundantUnionMap &Unions) {\n  // ...\n  while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) {\n    if (Parent->isUnion()) {\n      // ...\n      if (En.first && En.first != Child) {\n        S.Diag(Init->getSourceLocation(), diag::err_multiple_mem_union_initialization) << Field->getDeclName() << Init->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp"]={"clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp:20:8: error: initializing multiple members of union","clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp:26:15: error: initializing multiple members of union"}
["clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp"]={"clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp:20:8: error: initializing multiple members of union","clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp:26:15: error: initializing multiple members of union"}
Line 2,801: Line 2,802:
},
},
["err_multiple_template_declarators"]={
["err_multiple_template_declarators"]={
[i]="err_multiple_template_declarators",
[c]="err_multiple_template_declarators",
[h]="%select{|a template declaration|an explicit template specialization|an explicit template instantiation}0 can only %select{|declare|declare|instantiate}0 a single entity",
[d]="%select{|a template declaration|an explicit template specialization|an explicit template instantiation}0 can only %select{|declare|declare|instantiate}0 a single entity",
[g]={{nil,nil,{{a,"a template declaration","an explicit template specialization","an explicit template instantiation"}," can only ",{a,"declare","declare","instantiate"}," a single entity"}}},
[e]={{nil,nil,{{a,"a template declaration","an explicit template specialization","an explicit template instantiation"}," can only ",{a,"declare","declare","instantiate"}," a single entity"}}},
[b]=k,
[f]=k,
[e]="(?:|a template declaration|an explicit template specialization|an explicit template instantiation) can only (?:|declare|declare|instantiate) a single entity",
[g]="(?:|a template declaration|an explicit template specialization|an explicit template instantiation) can only (?:|declare|declare|instantiate) a single entity",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"2399628cea7b",1242163911,"Refactor the parsing of declarations so that template declarations can","Refactor the parsing of declarations so that template declarations can\nparse just a single declaration and provide a reasonable diagnostic\nwhen the \"only one declarator per template declaration\" rule is\nviolated. This eliminates some ugly, ugly hackery where we used to\nrequire thatn the layout of a DeclGroup of a single element be the\nsame as the layout of a single declaration.\n\nllvm-svn: 71596"},
[b]={"2399628cea7b",1242163911,"Refactor the parsing of declarations so that template declarations can","Refactor the parsing of declarations so that template declarations can\nparse just a single declaration and provide a reasonable diagnostic\nwhen the \"only one declarator per template declaration\" rule is\nviolated. This eliminates some ugly, ugly hackery where we used to\nrequire thatn the layout of a DeclGroup of a single element be the\nsame as the layout of a single declaration.\n\nllvm-svn: 71596"},
[j]={{"clang/lib/Parse/ParseTemplate.cpp",367,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n  // ...\n  if (Tok.is(tok::comma)) {\n    Diag(Tok, diag::err_multiple_template_declarators) << (int)TemplateInfo.Kind;"}},
[j]={{"clang/lib/Parse/ParseTemplate.cpp",367,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n  // ...\n  if (Tok.is(tok::comma)) {\n    Diag(Tok, diag::err_multiple_template_declarators) << (int)TemplateInfo.Kind;"}},
[l]={
[l]={
Line 2,815: Line 2,816:
},
},
["err_multiversion_after_used"]={
["err_multiversion_after_used"]={
[i]={{nil,q,"err_multiversion_after_used"}},
[c]={{nil,q,"err_multiversion_after_used"}},
[h]={{nil,q,"function declaration cannot become a multiversioned function after first usage"}},
[d]={{nil,q,"function declaration cannot become a multiversioned function after first usage"}},
[g]={{nil,q,"function declaration cannot become a multiversioned function after first usage"}},
[e]={{nil,q,"function declaration cannot become a multiversioned function after first usage"}},
[b]=k,
[f]=k,
[e]="function declaration cannot become a multiversioned function after first usage",
[g]="function declaration cannot become a multiversioned function after first usage",
[d]=a,
[h]=a,
[f]={{nil,q,a}},
[i]={{nil,q,w}},
[c]={bc,1515447257,cc,ac},
[b]={bc,1515447257,Zb,ac},
[j]={{o,11187,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  // ...\n  // Only allow transition to MultiVersion if it hasn\'t been used.\n  if (OldFD && CausesMV && OldFD->isUsed(false))\n    return S.Diag(NewFD->getLocation(), diag::err_multiversion_after_used);"},{o,11661,"/// Check the validity of a mulitversion function declaration.\n/// Also sets the multiversion\'ness\' of the function itself.\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionFunction(Sema &S, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  if (!OldFD->isMultiVersion()) {\n    // ...\n    case MultiVersionKind::TargetClones:\n      if (OldFD->isUsed(false)) {\n        // ...\n        return S.Diag(NewFD->getLocation(), diag::err_multiversion_after_used);"}},
[j]={{o,11187,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  // ...\n  // Only allow transition to MultiVersion if it hasn\'t been used.\n  if (OldFD && CausesMV && OldFD->isUsed(false))\n    return S.Diag(NewFD->getLocation(), diag::err_multiversion_after_used);"},{o,11661,"/// Check the validity of a mulitversion function declaration.\n/// Also sets the multiversion\'ness\' of the function itself.\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionFunction(Sema &S, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  if (!OldFD->isMultiVersion()) {\n    // ...\n    case MultiVersionKind::TargetClones:\n      if (OldFD->isUsed(false)) {\n        // ...\n        return S.Diag(NewFD->getLocation(), diag::err_multiversion_after_used);"}},
[l]={
[l]={
Line 2,829: Line 2,830:
},
},
["err_multiversion_diff"]={
["err_multiversion_diff"]={
[i]={{nil,q,"err_multiversion_diff"}},
[c]={{nil,q,"err_multiversion_diff"}},
[h]={{nil,S,"multiversioned function declaration has a different %select{calling convention|return type|constexpr specification|inline specification|linkage|language linkage}0"},{u,q,"multiversioned function declaration has a different %select{calling convention|return type|constexpr specification|inline specification|storage class|linkage}0"}},
[d]={{nil,S,"multiversioned function declaration has a different %select{calling convention|return type|constexpr specification|inline specification|linkage|language linkage}0"},{u,q,"multiversioned function declaration has a different %select{calling convention|return type|constexpr specification|inline specification|storage class|linkage}0"}},
[g]={{nil,S,{"multiversioned function declaration has a different ",{"calling convention","return type","constexpr specification","inline specification","linkage","language linkage"}}},{u,q,{"multiversioned function declaration has a different ",{"calling convention","return type","constexpr specification","inline specification","storage class","linkage"}}}},
[e]={{nil,S,{"multiversioned function declaration has a different ",{"calling convention","return type","constexpr specification","inline specification","linkage","language linkage"}}},{u,q,{"multiversioned function declaration has a different ",{"calling convention","return type","constexpr specification","inline specification","storage class","linkage"}}}},
[b]=k,
[f]=k,
[e]="multiversioned function declaration has a different (?:calling convention|return type|constexpr specification|inline specification|linkage|language linkage)",
[g]="multiversioned function declaration has a different (?:calling convention|return type|constexpr specification|inline specification|linkage|language linkage)",
[d]=a,
[h]=a,
[f]={{nil,q,a}},
[i]={{nil,q,w}},
[c]={bc,1515447257,cc,ac},
[b]={bc,1515447257,Zb,ac},
[j]={{o,11197,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  // ...\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)),"}},
[j]={{o,11197,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  // ...\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)),"}},
[l]={
[l]={
[wc]={"clang/test/Sema/attr-target-mv.c:108:63: error: multiversioned function declaration has a different calling convention","clang/test/Sema/attr-target-mv.c:112:52: error: multiversioned function declaration has a different return type"}
[mc]={"clang/test/Sema/attr-target-mv.c:108:63: error: multiversioned function declaration has a different calling convention","clang/test/Sema/attr-target-mv.c:112:52: error: multiversioned function declaration has a different return type"}
}
}
},
},
["err_multiversion_disallowed_other_attr"]={
["err_multiversion_disallowed_other_attr"]={
[i]={{nil,C,"err_multiversion_disallowed_other_attr"}},
[c]={{nil,D,"err_multiversion_disallowed_other_attr"}},
[h]={{nil,p,"attribute \'%select{|target|cpu_specific|cpu_dispatch|target_clones|target_version}0\' multiversioning cannot be combined with attribute %1"},{s,S,"attribute \'%select{|target|cpu_specific|cpu_dispatch|target_clones}0\' multiversioning cannot be combined with attribute %1"},{u,C,"attribute \'%select{target|cpu_specific|cpu_dispatch}0\' multiversioning cannot be combined with attribute %1"}},
[d]={{nil,p,"attribute \'%select{|target|cpu_specific|cpu_dispatch|target_clones|target_version}0\' multiversioning cannot be combined with attribute %1"},{s,S,"attribute \'%select{|target|cpu_specific|cpu_dispatch|target_clones}0\' multiversioning cannot be combined with attribute %1"},{u,D,"attribute \'%select{target|cpu_specific|cpu_dispatch}0\' multiversioning cannot be combined with attribute %1"}},
[g]={{nil,p,{Sb,{a,Zb,Yb,Xb,"target_clones","target_version"},"\' multiversioning cannot be combined with attribute B"}},{s,S,{Sb,{a,Zb,Yb,Xb,"target_clones"},"\' multiversioning cannot be combined with attribute B"}},{u,C,{Sb,{Zb,Yb,Xb},"\' multiversioning cannot be combined with attribute B"}}},
[e]={{nil,p,{Ub,{a,Sb,Rb,Qb,"target_clones","target_version"},"\' multiversioning cannot be combined with attribute B"}},{s,S,{Ub,{a,Sb,Rb,Qb,"target_clones"},"\' multiversioning cannot be combined with attribute B"}},{u,D,{Ub,{Sb,Rb,Qb},"\' multiversioning cannot be combined with attribute B"}}},
[b]=k,
[f]=k,
[e]="attribute \'(?:|target|cpu_specific|cpu_dispatch|target_clones|target_version)\' multiversioning cannot be combined with attribute (.*?)",
[g]="attribute \'(?:|target|cpu_specific|cpu_dispatch|target_clones|target_version)\' multiversioning cannot be combined with attribute (.*?)",
[d]=a,
[h]=a,
[f]={{nil,C,a}},
[i]={{nil,D,w}},
[c]={vc,1582847864,yc,xc},
[b]={tc,1582847864,uc,vc},
[j]={{o,11014,"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    S.Diag(FD->getLocation(), diag::err_multiversion_disallowed_other_attr) << static_cast<unsigned>(MVKind) << A;"}},
[j]={{o,11014,"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    S.Diag(FD->getLocation(), diag::err_multiversion_disallowed_other_attr) << static_cast<unsigned>(MVKind) << A;"}},
[l]={
[l]={
[wc]={"clang/test/Sema/attr-target-mv.c:91:1: error: attribute \'target\' multiversioning cannot be combined with attribute \'no_caller_saved_registers\'","clang/test/Sema/attr-target-mv.c:94:68: error: attribute \'target\' multiversioning cannot be combined with attribute \'no_caller_saved_registers\'","clang/test/Sema/attr-target-mv.c:98:66: error: attribute \'target\' multiversioning cannot be combined with attribute \'no_caller_saved_registers\'","clang/test/Sema/attr-target-mv.c:104:75: error: attribute \'target\' multiversioning cannot be combined with attribute \'no_caller_saved_registers\'","clang/test/Sema/attr-target-mv.c:135:73: error: attribute \'target\' multiversioning cannot be combined with attribute \'overloadable\'","clang/test/Sema/attr-target-mv.c:140:83: error: attribute \'target\' multiversioning cannot be combined with attribute \'overloadable\'","clang/test/Sema/attr-target-mv.c:155:73: error: attribute \'target\' multiversioning cannot be combined with attribute \'overloadable\'","clang/test/Sema/attr-target-mv.c:162:73: error: attribute \'target\' multiversioning cannot be combined with attribute \'overloadable\'"}
[mc]={"clang/test/Sema/attr-target-mv.c:91:1: error: attribute \'target\' multiversioning cannot be combined with attribute \'no_caller_saved_registers\'","clang/test/Sema/attr-target-mv.c:94:68: error: attribute \'target\' multiversioning cannot be combined with attribute \'no_caller_saved_registers\'","clang/test/Sema/attr-target-mv.c:98:66: error: attribute \'target\' multiversioning cannot be combined with attribute \'no_caller_saved_registers\'","clang/test/Sema/attr-target-mv.c:104:75: error: attribute \'target\' multiversioning cannot be combined with attribute \'no_caller_saved_registers\'","clang/test/Sema/attr-target-mv.c:135:73: error: attribute \'target\' multiversioning cannot be combined with attribute \'overloadable\'","clang/test/Sema/attr-target-mv.c:140:83: error: attribute \'target\' multiversioning cannot be combined with attribute \'overloadable\'","clang/test/Sema/attr-target-mv.c:155:73: error: attribute \'target\' multiversioning cannot be combined with attribute \'overloadable\'","clang/test/Sema/attr-target-mv.c:162:73: error: attribute \'target\' multiversioning cannot be combined with attribute \'overloadable\'"}
}
}
},
},
["err_multiversion_doesnt_support"]={
["err_multiversion_doesnt_support"]={
[i]={{nil,q,"err_multiversion_doesnt_support"}},
[c]={{nil,q,"err_multiversion_doesnt_support"}},
[h]={{nil,p,"attribute \'%select{|target|cpu_specific|cpu_dispatch|target_clones|target_version}0\' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function|lambdas}1"},{s,S,"attribute \'%select{|target|cpu_specific|cpu_dispatch|target_clones}0\' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function|lambdas}1"},{u,x,"attribute \'%select{target|cpu_specific|cpu_dispatch}0\' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function}1"},{db,q,"attribute \'%select{target|cpu_specific|cpu_dispatch}0\' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions}1"}},
[d]={{nil,p,"attribute \'%select{|target|cpu_specific|cpu_dispatch|target_clones|target_version}0\' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function|lambdas}1"},{s,S,"attribute \'%select{|target|cpu_specific|cpu_dispatch|target_clones}0\' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function|lambdas}1"},{u,z,"attribute \'%select{target|cpu_specific|cpu_dispatch}0\' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function}1"},{db,q,"attribute \'%select{target|cpu_specific|cpu_dispatch}0\' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions}1"}},
[g]={{nil,p,{Sb,{a,Zb,Yb,Xb,"target_clones","target_version"},"\' multiversioned functions do not yet support ",{"function templates","virtual functions","deduced return types","constructors","destructors","deleted functions","defaulted functions","constexpr functions","consteval function","lambdas"}}},{s,S,{Sb,{a,Zb,Yb,Xb,"target_clones"},"\' multiversioned functions do not yet support ",{"function templates","virtual functions","deduced return types","constructors","destructors","deleted functions","defaulted functions","constexpr functions","consteval function","lambdas"}}},{u,x,{Sb,{Zb,Yb,Xb},"\' multiversioned functions do not yet support ",{"function templates","virtual functions","deduced return types","constructors","destructors","deleted functions","defaulted functions","constexpr functions","consteval function"}}},{db,q,{Sb,{Zb,Yb,Xb},"\' multiversioned functions do not yet support ",{"function templates","virtual functions","deduced return types","constructors","destructors","deleted functions","defaulted functions","constexpr functions"}}}},
[e]={{nil,p,{Ub,{a,Sb,Rb,Qb,"target_clones","target_version"},"\' multiversioned functions do not yet support ",{"function templates","virtual functions","deduced return types","constructors","destructors","deleted functions","defaulted functions","constexpr functions","consteval function","lambdas"}}},{s,S,{Ub,{a,Sb,Rb,Qb,"target_clones"},"\' multiversioned functions do not yet support ",{"function templates","virtual functions","deduced return types","constructors","destructors","deleted functions","defaulted functions","constexpr functions","consteval function","lambdas"}}},{u,z,{Ub,{Sb,Rb,Qb},"\' multiversioned functions do not yet support ",{"function templates","virtual functions","deduced return types","constructors","destructors","deleted functions","defaulted functions","constexpr functions","consteval function"}}},{db,q,{Ub,{Sb,Rb,Qb},"\' multiversioned functions do not yet support ",{"function templates","virtual functions","deduced return types","constructors","destructors","deleted functions","defaulted functions","constexpr functions"}}}},
[b]=k,
[f]=k,
[e]="attribute \'(?:|target|cpu_specific|cpu_dispatch|target_clones|target_version)\' multiversioned functions do not yet support (?:function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function|lambdas)",
[g]="attribute \'(?:|target|cpu_specific|cpu_dispatch|target_clones|target_version)\' multiversioned functions do not yet support (?:function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function|lambdas)",
[d]=a,
[h]=a,
[f]={{nil,q,a}},
[i]={{nil,q,w}},
[c]={bc,1515447257,cc,ac},
[b]={bc,1515447257,Zb,ac},
[j]={{o,11194,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  // ...\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)),"},{K,3662,"static void handleTargetClonesAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // FIXME: We could probably figure out how to get this to work for lambdas\n  // someday.\n  if (const auto *MD = dyn_cast<CXXMethodDecl>(D)) {\n    if (MD->getParent()->isLambda()) {\n      S.Diag(D->getLocation(), diag::err_multiversion_doesnt_support) << static_cast<unsigned>(MultiVersionKind::TargetClones) << /*Lambda*/ 9;"}},
[j]={{o,11194,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  // ...\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)),"},{K,3662,"static void handleTargetClonesAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // FIXME: We could probably figure out how to get this to work for lambdas\n  // someday.\n  if (const auto *MD = dyn_cast<CXXMethodDecl>(D)) {\n    if (MD->getParent()->isLambda()) {\n      S.Diag(D->getLocation(), diag::err_multiversion_doesnt_support) << static_cast<unsigned>(MultiVersionKind::TargetClones) << /*Lambda*/ 9;"}},
[l]={
[l]={
Line 2,871: Line 2,872:
},
},
["err_multiversion_duplicate"]={
["err_multiversion_duplicate"]={
[i]={{nil,q,"err_multiversion_duplicate"}},
[c]={{nil,q,"err_multiversion_duplicate"}},
[h]={{nil,q,"multiversioned function redeclarations require identical target attributes"}},
[d]={{nil,q,"multiversioned function redeclarations require identical target attributes"}},
[g]={{nil,q,"multiversioned function redeclarations require identical target attributes"}},
[e]={{nil,q,"multiversioned function redeclarations require identical target attributes"}},
[b]=k,
[f]=k,
[e]="multiversioned function redeclarations require identical target attributes",
[g]="multiversioned function redeclarations require identical target attributes",
[d]=a,
[h]=a,
[f]={{nil,q,a}},
[i]={{nil,q,w}},
[c]={bc,1515447257,cc,ac},
[b]={bc,1515447257,Zb,ac},
[j]={{o,11301,"static bool CheckTargetCausesMultiVersioning(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  if (NewTA) {\n    // ...\n    if (OldParsed == NewParsed) {\n      S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);"},{o,11317,"static bool CheckTargetCausesMultiVersioning(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  if (NewTVA) {\n    // ...\n    if (Feats == NewFeats) {\n      S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);"},{o,11438,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Next, check ALL non-invalid non-overloads to see if this is a redeclaration\n  // of a previous member of the MultiVersion set.\n  for (NamedDecl *ND : Previous) {\n    // ...\n    case MultiVersionKind::Target: {\n      // ...\n      if (CurParsed == NewParsed) {\n        S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);"},{o,11459,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Next, check ALL non-invalid non-overloads to see if this is a redeclaration\n  // of a previous member of the MultiVersion set.\n  for (NamedDecl *ND : Previous) {\n    // ...\n    case MultiVersionKind::TargetVersion: {\n      // ...\n      if (CurFeats == NewFeats) {\n        S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);"}},
[j]={{o,11301,"static bool CheckTargetCausesMultiVersioning(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  if (NewTA) {\n    // ...\n    if (OldParsed == NewParsed) {\n      S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);"},{o,11317,"static bool CheckTargetCausesMultiVersioning(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  if (NewTVA) {\n    // ...\n    if (Feats == NewFeats) {\n      S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);"},{o,11438,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Next, check ALL non-invalid non-overloads to see if this is a redeclaration\n  // of a previous member of the MultiVersion set.\n  for (NamedDecl *ND : Previous) {\n    // ...\n    case MultiVersionKind::Target: {\n      // ...\n      if (CurParsed == NewParsed) {\n        S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);"},{o,11459,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Next, check ALL non-invalid non-overloads to see if this is a redeclaration\n  // of a previous member of the MultiVersion set.\n  for (NamedDecl *ND : Previous) {\n    // ...\n    case MultiVersionKind::TargetVersion: {\n      // ...\n      if (CurFeats == NewFeats) {\n        S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);"}},
[l]={
[l]={
[wc]={"clang/test/Sema/attr-target-mv.c:75:57: error: multiversioned function redeclarations require identical target attributes"}
[mc]={"clang/test/Sema/attr-target-mv.c:75:57: error: multiversioned function redeclarations require identical target attributes"}
}
}
},
},
["err_multiversion_noproto"]={
["err_multiversion_noproto"]={
[i]={{nil,q,"err_multiversion_noproto"}},
[c]={{nil,q,"err_multiversion_noproto"}},
[h]={{nil,q,"multiversioned function must have a prototype"}},
[d]={{nil,q,"multiversioned function must have a prototype"}},
[g]={{nil,q,"multiversioned function must have a prototype"}},
[e]={{nil,q,"multiversioned function must have a prototype"}},
[b]=k,
[f]=k,
[e]="multiversioned function must have a prototype",
[g]="multiversioned function must have a prototype",
[d]=a,
[h]=a,
[f]={{nil,q,a}},
[i]={{nil,q,w}},
[c]={bc,1515447257,cc,ac},
[b]={bc,1515447257,Zb,ac},
[j]={{o,11190,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  // ...\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)),"}},
[j]={{o,11190,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  // ...\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)),"}},
[l]={
[l]={
[wc]={"clang/test/Sema/attr-target-mv.c:20:39: error: multiversioned function must have a prototype"}
[mc]={"clang/test/Sema/attr-target-mv.c:20:39: error: multiversioned function must have a prototype"}
}
}
},
},
["err_multiversion_not_allowed_on_main"]={
["err_multiversion_not_allowed_on_main"]={
[i]={{nil,q,"err_multiversion_not_allowed_on_main"}},
[c]={{nil,q,"err_multiversion_not_allowed_on_main"}},
[h]={{nil,q,"\'main\' cannot be a multiversioned function"}},
[d]={{nil,q,"\'main\' cannot be a multiversioned function"}},
[g]={{nil,q,"\'main\' cannot be a multiversioned function"}},
[e]={{nil,q,"\'main\' cannot be a multiversioned function"}},
[b]=k,
[f]=k,
[e]="\'main\' cannot be a multiversioned function",
[g]="\'main\' cannot be a multiversioned function",
[d]=a,
[h]=a,
[f]={{nil,q,a}},
[i]={{nil,q,w}},
[c]={bc,1515447257,cc,ac},
[b]={bc,1515447257,Zb,ac},
[j]={{o,11601,"/// Check the validity of a mulitversion function declaration.\n/// Also sets the multiversion\'ness\' of the function itself.\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionFunction(Sema &S, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Main isn\'t allowed to become a multiversion function, however it IS\n  // permitted to have \'main\' be marked with the \'target\' optimization hint,\n  // for \'target_version\' only default is allowed.\n  if (NewFD->isMain()) {\n    if (MVKind != MultiVersionKind::None && !(MVKind == MultiVersionKind::Target && !NewTA->isDefaultVersion()) && !(MVKind == MultiVersionKind::TargetVersion && NewTVA->isDefaultVersion())) {\n      S.Diag(NewFD->getLocation(), diag::err_multiversion_not_allowed_on_main);"}},
[j]={{o,11601,"/// Check the validity of a mulitversion function declaration.\n/// Also sets the multiversion\'ness\' of the function itself.\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionFunction(Sema &S, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Main isn\'t allowed to become a multiversion function, however it IS\n  // permitted to have \'main\' be marked with the \'target\' optimization hint,\n  // for \'target_version\' only default is allowed.\n  if (NewFD->isMain()) {\n    if (MVKind != MultiVersionKind::None && !(MVKind == MultiVersionKind::Target && !NewTA->isDefaultVersion()) && !(MVKind == MultiVersionKind::TargetVersion && NewTVA->isDefaultVersion())) {\n      S.Diag(NewFD->getLocation(), diag::err_multiversion_not_allowed_on_main);"}},
[l]={
[l]={
Line 2,913: Line 2,914:
},
},
["err_multiversion_not_supported"]={
["err_multiversion_not_supported"]={
[i]={{nil,q,"err_multiversion_not_supported"}},
[c]={{nil,q,"err_multiversion_not_supported"}},
[h]={{nil,q,"function multiversioning is not supported on the current target"}},
[d]={{nil,q,"function multiversioning is not supported on the current target"}},
[g]={{nil,q,"function multiversioning is not supported on the current target"}},
[e]={{nil,q,"function multiversioning is not supported on the current target"}},
[b]=k,
[f]=k,
[e]="function multiversioning is not supported on the current target",
[g]="function multiversioning is not supported on the current target",
[d]=a,
[h]=a,
[f]={{nil,q,a}},
[i]={{nil,q,w}},
[c]={bc,1515447257,cc,ac},
[b]={bc,1515447257,Zb,ac},
[j]={{o,11168,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  if (!S.getASTContext().getTargetInfo().supportsMultiVersioning()) {\n    S.Diag(NewFD->getLocation(), diag::err_multiversion_not_supported);"}},
[j]={{o,11168,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  if (!S.getASTContext().getTargetInfo().supportsMultiVersioning()) {\n    S.Diag(NewFD->getLocation(), diag::err_multiversion_not_supported);"}},
[l]={
[l]={
Line 2,927: Line 2,928:
},
},
["err_multiversion_required_in_redecl"]={
["err_multiversion_required_in_redecl"]={
[i]={{nil,q,"err_multiversion_required_in_redecl"}},
[c]={{nil,q,"err_multiversion_required_in_redecl"}},
[h]={{nil,p,"function declaration is missing %select{\'target\'|\'cpu_specific\' or \'cpu_dispatch\'|\'target_version\'}0 attribute in a multiversioned function"},{s,q,"function declaration is missing %select{\'target\'|\'cpu_specific\' or \'cpu_dispatch\'}0 attribute in a multiversioned function"}},
[d]={{nil,p,"function declaration is missing %select{\'target\'|\'cpu_specific\' or \'cpu_dispatch\'|\'target_version\'}0 attribute in a multiversioned function"},{s,q,"function declaration is missing %select{\'target\'|\'cpu_specific\' or \'cpu_dispatch\'}0 attribute in a multiversioned function"}},
[g]={{nil,p,{"function declaration is missing ",{"\'target\'","\'cpu_specific\' or \'cpu_dispatch\'","\'target_version\'"}," attribute in a multiversioned function"}},{s,q,{"function declaration is missing ",{"\'target\'","\'cpu_specific\' or \'cpu_dispatch\'"}," attribute in a multiversioned function"}}},
[e]={{nil,p,{"function declaration is missing ",{"\'target\'","\'cpu_specific\' or \'cpu_dispatch\'","\'target_version\'"}," attribute in a multiversioned function"}},{s,q,{"function declaration is missing ",{"\'target\'","\'cpu_specific\' or \'cpu_dispatch\'"}," attribute in a multiversioned function"}}},
[b]=k,
[f]=k,
[e]="function declaration is missing (?:\'target\'|\'cpu_specific\' or \'cpu_dispatch\'|\'target_version\') attribute in a multiversioned function",
[g]="function declaration is missing (?:\'target\'|\'cpu_specific\' or \'cpu_dispatch\'|\'target_version\') attribute in a multiversioned function",
[d]=a,
[h]=a,
[f]={{nil,q,a}},
[i]={{nil,q,w}},
[c]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning","Implement cpu_dispatch/cpu_specific Multiversioning\n\nAs documented here: https://software.intel.com/en-us/node/682969 and\nhttps://software.intel.com/en-us/node/523346. cpu_dispatch multiversioning\nis an ICC feature that provides for function multiversioning.\n\nThis feature is implemented with two attributes: First, cpu_specific,\nwhich specifies the individual function versions. Second, cpu_dispatch,\nwhich specifies the location of the resolver function and the list of\nresolvable functions.\n\nThis is valuable since it provides a mechanism where the resolver\'s TU\ncan be specified in one location, and the individual implementions\neach in their own translation units.\n\nThe goal of this patch is to be source-compatible with ICC, so this\nimplementation diverges from the ICC implementation in a few ways:\n1- Linux x86/64 only: This implementation uses ifuncs in order to\nproperly dispatch functions. This is is a valuable performance benefit\nover the ICC implementation. A future patch will be provided to enable\nthis feature on Windows, but it will obviously more closely fit ICC\'s\nimplementation.\n2- CPU Identification functions: ICC uses a set of custom functions to identify\nthe feature list of the host processor. This patch uses the cpu_supports\nfunctionality in order to better align with \'target\' multiversioning.\n1- cpu_dispatch function def/decl: ICC\'s cpu_dispatch requires that the function\nmarked cpu_dispatch be an empty definition. This patch supports that as well,\nhowever declarations are also permitted, since the linker will solve the\nissue of multiple emissions.\n\nDifferential Revision: https://reviews.llvm.org/D47474\n\nllvm-svn: 337552"},
[b]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning","Implement cpu_dispatch/cpu_specific Multiversioning\n\nAs documented here: https://software.intel.com/en-us/node/682969 and\nhttps://software.intel.com/en-us/node/523346. cpu_dispatch multiversioning\nis an ICC feature that provides for function multiversioning.\n\nThis feature is implemented with two attributes: First, cpu_specific,\nwhich specifies the individual function versions. Second, cpu_dispatch,\nwhich specifies the location of the resolver function and the list of\nresolvable functions.\n\nThis is valuable since it provides a mechanism where the resolver\'s TU\ncan be specified in one location, and the individual implementions\neach in their own translation units.\n\nThe goal of this patch is to be source-compatible with ICC, so this\nimplementation diverges from the ICC implementation in a few ways:\n1- Linux x86/64 only: This implementation uses ifuncs in order to\nproperly dispatch functions. This is is a valuable performance benefit\nover the ICC implementation. A future patch will be provided to enable\nthis feature on Windows, but it will obviously more closely fit ICC\'s\nimplementation.\n2- CPU Identification functions: ICC uses a set of custom functions to identify\nthe feature list of the host processor. This patch uses the cpu_supports\nfunctionality in order to better align with \'target\' multiversioning.\n1- cpu_dispatch function def/decl: ICC\'s cpu_dispatch requires that the function\nmarked cpu_dispatch be an empty definition. This patch supports that as well,\nhowever declarations are also permitted, since the linker will solve the\nissue of multiple emissions.\n\nDifferential Revision: https://reviews.llvm.org/D47474\n\nllvm-svn: 337552"},
[j]={{o,11332,"static bool CheckTargetCausesMultiVersioning(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  for (const auto *FD : OldFD->redecls()) {\n    // ...\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(FD->getLocation(), diag::err_multiversion_required_in_redecl) << (NewTA ? 0 : 2);"},{o,11646,"/// Check the validity of a mulitversion function declaration.\n/// Also sets the multiversion\'ness\' of the function itself.\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionFunction(Sema &S, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Multiversioned redeclarations aren\'t allowed to omit the attribute, except\n  // for target_clones and target_version.\n  if (OldFD->isMultiVersion() && MVKind == MultiVersionKind::None && OldFD->getMultiVersionKind() != MultiVersionKind::TargetClones && OldFD->getMultiVersionKind() != MultiVersionKind::TargetVersion) {\n    S.Diag(NewFD->getLocation(), diag::err_multiversion_required_in_redecl) << (OldFD->getMultiVersionKind() != MultiVersionKind::Target);"}},
[j]={{o,11332,"static bool CheckTargetCausesMultiVersioning(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  for (const auto *FD : OldFD->redecls()) {\n    // ...\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(FD->getLocation(), diag::err_multiversion_required_in_redecl) << (NewTA ? 0 : 2);"},{o,11646,"/// Check the validity of a mulitversion function declaration.\n/// Also sets the multiversion\'ness\' of the function itself.\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionFunction(Sema &S, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Multiversioned redeclarations aren\'t allowed to omit the attribute, except\n  // for target_clones and target_version.\n  if (OldFD->isMultiVersion() && MVKind == MultiVersionKind::None && OldFD->getMultiVersionKind() != MultiVersionKind::TargetClones && OldFD->getMultiVersionKind() != MultiVersionKind::TargetVersion) {\n    S.Diag(NewFD->getLocation(), diag::err_multiversion_required_in_redecl) << (OldFD->getMultiVersionKind() != MultiVersionKind::Target);"}},
[l]={
[l]={
[wc]={"clang/test/Sema/attr-target-mv.c:83:5: error: function declaration is missing \'target\' attribute in a multiversioned function","clang/test/Sema/attr-target-mv.c:123:5: error: function declaration is missing \'target\' attribute in a multiversioned function"}
[mc]={"clang/test/Sema/attr-target-mv.c:83:5: error: function declaration is missing \'target\' attribute in a multiversioned function","clang/test/Sema/attr-target-mv.c:123:5: error: function declaration is missing \'target\' attribute in a multiversioned function"}
}
}
},
},
["err_multiversion_types_mixed"]={
["err_multiversion_types_mixed"]={
[i]={{nil,q,"err_multiversion_types_mixed"}},
[c]={{nil,q,"err_multiversion_types_mixed"}},
[h]={{nil,q,"multiversioning attributes cannot be combined"}},
[d]={{nil,q,"multiversioning attributes cannot be combined"}},
[g]={{nil,q,"multiversioning attributes cannot be combined"}},
[e]={{nil,q,"multiversioning attributes cannot be combined"}},
[b]=k,
[f]=k,
[e]="multiversioning attributes cannot be combined",
[g]="multiversioning attributes cannot be combined",
[d]=a,
[h]=a,
[f]={{nil,q,a}},
[i]={{nil,q,w}},
[c]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning","Implement cpu_dispatch/cpu_specific Multiversioning\n\nAs documented here: https://software.intel.com/en-us/node/682969 and\nhttps://software.intel.com/en-us/node/523346. cpu_dispatch multiversioning\nis an ICC feature that provides for function multiversioning.\n\nThis feature is implemented with two attributes: First, cpu_specific,\nwhich specifies the individual function versions. Second, cpu_dispatch,\nwhich specifies the location of the resolver function and the list of\nresolvable functions.\n\nThis is valuable since it provides a mechanism where the resolver\'s TU\ncan be specified in one location, and the individual implementions\neach in their own translation units.\n\nThe goal of this patch is to be source-compatible with ICC, so this\nimplementation diverges from the ICC implementation in a few ways:\n1- Linux x86/64 only: This implementation uses ifuncs in order to\nproperly dispatch functions. This is is a valuable performance benefit\nover the ICC implementation. A future patch will be provided to enable\nthis feature on Windows, but it will obviously more closely fit ICC\'s\nimplementation.\n2- CPU Identification functions: ICC uses a set of custom functions to identify\nthe feature list of the host processor. This patch uses the cpu_supports\nfunctionality in order to better align with \'target\' multiversioning.\n1- cpu_dispatch function def/decl: ICC\'s cpu_dispatch requires that the function\nmarked cpu_dispatch be an empty definition. This patch supports that as well,\nhowever declarations are also permitted, since the linker will solve the\nissue of multiple emissions.\n\nDifferential Revision: https://reviews.llvm.org/D47474\n\nllvm-svn: 337552"},
[b]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning","Implement cpu_dispatch/cpu_specific Multiversioning\n\nAs documented here: https://software.intel.com/en-us/node/682969 and\nhttps://software.intel.com/en-us/node/523346. cpu_dispatch multiversioning\nis an ICC feature that provides for function multiversioning.\n\nThis feature is implemented with two attributes: First, cpu_specific,\nwhich specifies the individual function versions. Second, cpu_dispatch,\nwhich specifies the location of the resolver function and the list of\nresolvable functions.\n\nThis is valuable since it provides a mechanism where the resolver\'s TU\ncan be specified in one location, and the individual implementions\neach in their own translation units.\n\nThe goal of this patch is to be source-compatible with ICC, so this\nimplementation diverges from the ICC implementation in a few ways:\n1- Linux x86/64 only: This implementation uses ifuncs in order to\nproperly dispatch functions. This is is a valuable performance benefit\nover the ICC implementation. A future patch will be provided to enable\nthis feature on Windows, but it will obviously more closely fit ICC\'s\nimplementation.\n2- CPU Identification functions: ICC uses a set of custom functions to identify\nthe feature list of the host processor. This patch uses the cpu_supports\nfunctionality in order to better align with \'target\' multiversioning.\n1- cpu_dispatch function def/decl: ICC\'s cpu_dispatch requires that the function\nmarked cpu_dispatch be an empty definition. This patch supports that as well,\nhowever declarations are also permitted, since the linker will solve the\nissue of multiple emissions.\n\nDifferential Revision: https://reviews.llvm.org/D47474\n\nllvm-svn: 337552"},
[j]={{o,11372,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Disallow mixing of multiversioning types.\n  if (!MultiVersionTypesCompatible(OldMVKind, NewMVKind)) {\n    S.Diag(NewFD->getLocation(), diag::err_multiversion_types_mixed);"}},
[j]={{o,11372,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Disallow mixing of multiversioning types.\n  if (!MultiVersionTypesCompatible(OldMVKind, NewMVKind)) {\n    S.Diag(NewFD->getLocation(), diag::err_multiversion_types_mixed);"}},
[l]={
[l]={
Line 2,955: Line 2,956:
},
},
["err_musttail_callconv_mismatch"]={
["err_musttail_callconv_mismatch"]={
[i]={{nil,u,"err_musttail_callconv_mismatch"}},
[c]={{nil,u,"err_musttail_callconv_mismatch"}},
[h]={{nil,u,"cannot perform a tail call to function%select{| %1}0 because it uses an incompatible calling convention"}},
[d]={{nil,u,"cannot perform a tail call to function%select{| %1}0 because it uses an incompatible calling convention"}},
[g]={{nil,u,{"cannot perform a tail call to function",{a," B"}," because it uses an incompatible calling convention"}}},
[e]={{nil,u,{"cannot perform a tail call to function",{a," B"}," because it uses an incompatible calling convention"}}},
[b]=k,
[f]=k,
[e]="cannot perform a tail call to function(?:| (.*?)) because it uses an incompatible calling convention",
[g]="cannot perform a tail call to function(?:| (.*?)) because it uses an incompatible calling convention",
[d]=a,
[h]=a,
[f]={{nil,u,m}},
[i]={{nil,u,m}},
[c]={vb,1607502387,rb,nb},
[b]={pb,1607502387,qb,sb},
[j]={{E,774,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\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    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl()))\n      Diag(St->getBeginLoc(), diag::err_musttail_callconv_mismatch) << true << ND->getDeclName();"},{E,777,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\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    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl()))\n    // ...\n    else\n      Diag(St->getBeginLoc(), diag::err_musttail_callconv_mismatch) << false;"}},
[j]={{F,774,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\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    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl()))\n      Diag(St->getBeginLoc(), diag::err_musttail_callconv_mismatch) << true << ND->getDeclName();"},{F,777,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\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    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl()))\n    // ...\n    else\n      Diag(St->getBeginLoc(), diag::err_musttail_callconv_mismatch) << false;"}},
[l]={
[l]={
[Ub]={"clang/test/SemaCXX/attr-musttail.cpp:157:3: error: cannot perform a tail call to function \'RegCallReturnsInt\' because it uses an incompatible calling convention"}
[Vb]={"clang/test/SemaCXX/attr-musttail.cpp:157:3: error: cannot perform a tail call to function \'RegCallReturnsInt\' because it uses an incompatible calling convention"}
}
}
},
},
["err_musttail_forbidden_from_this_context"]={
["err_musttail_forbidden_from_this_context"]={
[i]={{nil,u,"err_musttail_forbidden_from_this_context"}},
[c]={{nil,u,"err_musttail_forbidden_from_this_context"}},
[h]={{nil,u,"%0 attribute cannot be used from %select{a block|an Objective-C function|this context}1"}},
[d]={{nil,u,"%0 attribute cannot be used from %select{a block|an Objective-C function|this context}1"}},
[g]={{nil,u,{"A attribute cannot be used from ",{"a block","an Objective-C function","this context"}}}},
[e]={{nil,u,{"A attribute cannot be used from ",{"a block","an Objective-C function","this context"}}}},
[b]=k,
[f]=k,
[e]="(.*?) attribute cannot be used from (?:a block|an Objective\\-C function|this context)",
[g]="(.*?) attribute cannot be used from (?:a block|an Objective\\-C function|this context)",
[d]=a,
[h]=a,
[f]={{nil,u,m}},
[i]={{nil,u,m}},
[c]={vb,1607502387,rb,nb},
[b]={pb,1607502387,qb,sb},
[j]={{E,711,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Find caller function signature.\n  if (!CallerDecl) {\n    // ...\n    Diag(St->getBeginLoc(), diag::err_musttail_forbidden_from_this_context) << &MTA << ContextType;"}},
[j]={{F,711,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Find caller function signature.\n  if (!CallerDecl) {\n    // ...\n    Diag(St->getBeginLoc(), diag::err_musttail_forbidden_from_this_context) << &MTA << ContextType;"}},
[l]={
[l]={
["clang/test/Sema/attr-musttail.m"]={"clang/test/Sema/attr-musttail.m:5:31: error: \'musttail\' attribute cannot be used from a block","clang/test/Sema/attr-musttail.m:23:29: error: \'musttail\' attribute cannot be used from an Objective-C function"}
["clang/test/Sema/attr-musttail.m"]={"clang/test/Sema/attr-musttail.m:5:31: error: \'musttail\' attribute cannot be used from a block","clang/test/Sema/attr-musttail.m:23:29: error: \'musttail\' attribute cannot be used from an Objective-C function"}
Line 2,983: Line 2,984:
},
},
["err_musttail_member_mismatch"]={
["err_musttail_member_mismatch"]={
[i]={{nil,u,"err_musttail_member_mismatch"}},
[c]={{nil,u,"err_musttail_member_mismatch"}},
[h]={{nil,u,"%select{non-member|static member|non-static member}0 function cannot perform a tail call to %select{non-member|static member|non-static member|pointer-to-member}1 function%select{| %3}2"}},
[d]={{nil,u,"%select{non-member|static member|non-static member}0 function cannot perform a tail call to %select{non-member|static member|non-static member|pointer-to-member}1 function%select{| %3}2"}},
[g]={{nil,u,{{"non-member","static member","non-static member"}," function cannot perform a tail call to ",{"non-member","static member","non-static member","pointer-to-member"}," function",{a," D"}}}},
[e]={{nil,u,{{"non-member","static member","non-static member"}," function cannot perform a tail call to ",{"non-member","static member","non-static member","pointer-to-member"}," function",{a," D"}}}},
[b]=k,
[f]=k,
[e]="(?:non\\-member|static member|non\\-static member) function cannot perform a tail call to (?:non\\-member|static member|non\\-static member|pointer\\-to\\-member) function(?:| (.*?))",
[g]="(?:non\\-member|static member|non\\-static member) function cannot perform a tail call to (?:non\\-member|static member|non\\-static member|pointer\\-to\\-member) function(?:| (.*?))",
[d]=a,
[h]=a,
[f]={{nil,u,m}},
[i]={{nil,u,m}},
[c]={vb,1607502387,rb,nb},
[b]={pb,1607502387,qb,sb},
[j]={{E,793,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\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(St->getBeginLoc(), diag::err_musttail_member_mismatch) << CallerType.MemberType << CalleeType.MemberType << true << ND->getDeclName();"},{E,799,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\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    // ...\n    } else\n      Diag(St->getBeginLoc(), diag::err_musttail_member_mismatch) << CallerType.MemberType << CalleeType.MemberType << false;"}},
[j]={{F,793,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\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(St->getBeginLoc(), diag::err_musttail_member_mismatch) << CallerType.MemberType << CalleeType.MemberType << true << ND->getDeclName();"},{F,799,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\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    // ...\n    } else\n      Diag(St->getBeginLoc(), diag::err_musttail_member_mismatch) << CallerType.MemberType << CalleeType.MemberType << false;"}},
[l]={
[l]={
[Ub]={"clang/test/SemaCXX/attr-musttail.cpp:41:3: error: non-member function cannot perform a tail call to non-static member function \'MemberFunction\'","clang/test/SemaCXX/attr-musttail.cpp:48:5: error: non-static member function cannot perform a tail call to non-member function \'ReturnsVoid\'","clang/test/SemaCXX/attr-musttail.cpp:87:3: error: non-member function cannot perform a tail call to pointer-to-member function \'p_mem\'","clang/test/SemaCXX/attr-musttail.cpp:163:3: error: non-member function cannot perform a tail call to non-static member function \'operator()\'","clang/test/SemaCXX/attr-musttail.cpp:175:3: error: non-member function cannot perform a tail call to non-static member function \'operator()\'","clang/test/SemaCXX/attr-musttail.cpp:253:3: error: static member function cannot perform a tail call to pointer-to-member function"}
[Vb]={"clang/test/SemaCXX/attr-musttail.cpp:41:3: error: non-member function cannot perform a tail call to non-static member function \'MemberFunction\'","clang/test/SemaCXX/attr-musttail.cpp:48:5: error: non-static member function cannot perform a tail call to non-member function \'ReturnsVoid\'","clang/test/SemaCXX/attr-musttail.cpp:87:3: error: non-member function cannot perform a tail call to pointer-to-member function \'p_mem\'","clang/test/SemaCXX/attr-musttail.cpp:163:3: error: non-member function cannot perform a tail call to non-static member function \'operator()\'","clang/test/SemaCXX/attr-musttail.cpp:175:3: error: non-member function cannot perform a tail call to non-static member function \'operator()\'","clang/test/SemaCXX/attr-musttail.cpp:253:3: error: static member function cannot perform a tail call to pointer-to-member function"}
}
}
},
},
["err_musttail_mismatch"]={
["err_musttail_mismatch"]={
[i]={{nil,u,"err_musttail_mismatch"}},
[c]={{nil,u,"err_musttail_mismatch"}},
[h]={{nil,u,"cannot perform a tail call to function%select{| %1}0 because its signature is incompatible with the calling function"}},
[d]={{nil,u,"cannot perform a tail call to function%select{| %1}0 because its signature is incompatible with the calling function"}},
[g]={{nil,u,{"cannot perform a tail call to function",{a," B"}," because its signature is incompatible with the calling function"}}},
[e]={{nil,u,{"cannot perform a tail call to function",{a," B"}," because its signature is incompatible with the calling function"}}},
[b]=k,
[f]=k,
[e]="cannot perform a tail call to function(?:| (.*?)) because its signature is incompatible with the calling function",
[g]="cannot perform a tail call to function(?:| (.*?)) because its signature is incompatible with the calling function",
[d]=a,
[h]=a,
[f]={{nil,u,m}},
[i]={{nil,u,m}},
[c]={vb,1607502387,rb,nb},
[b]={pb,1607502387,qb,sb},
[j]={{E,854,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (!CheckTypesMatch(CallerType, CalleeType, PD)) {\n    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl()))\n      Diag(St->getBeginLoc(), diag::err_musttail_mismatch) << true << ND->getDeclName();"},{E,857,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (!CheckTypesMatch(CallerType, CalleeType, PD)) {\n    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl()))\n    // ...\n    else\n      Diag(St->getBeginLoc(), diag::err_musttail_mismatch) << false;"}},
[j]={{F,854,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (!CheckTypesMatch(CallerType, CalleeType, PD)) {\n    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl()))\n      Diag(St->getBeginLoc(), diag::err_musttail_mismatch) << true << ND->getDeclName();"},{F,857,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (!CheckTypesMatch(CallerType, CalleeType, PD)) {\n    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl()))\n    // ...\n    else\n      Diag(St->getBeginLoc(), diag::err_musttail_mismatch) << false;"}},
[l]={
[l]={
[Ub]={"clang/test/SemaCXX/attr-musttail.cpp:20:3: error: cannot perform a tail call to function \'NoParams\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:26:3: error: cannot perform a tail call to function \'LongParam\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:32:3: error: cannot perform a tail call to function \'ReturnsLong\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:136:3: error: cannot perform a tail call to function \'TakesShortParam\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:140:3: error: cannot perform a tail call to function \'TakesIntParam\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:150:5: error: cannot perform a tail call to function \'ToFunction\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:234:3: error: cannot perform a tail call to function because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:111:3: error: cannot perform a tail call to function \'TemplateFunc\' because its signature is incompatible with the calling function"}
[Vb]={"clang/test/SemaCXX/attr-musttail.cpp:20:3: error: cannot perform a tail call to function \'NoParams\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:26:3: error: cannot perform a tail call to function \'LongParam\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:32:3: error: cannot perform a tail call to function \'ReturnsLong\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:136:3: error: cannot perform a tail call to function \'TakesShortParam\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:140:3: error: cannot perform a tail call to function \'TakesIntParam\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:150:5: error: cannot perform a tail call to function \'ToFunction\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:234:3: error: cannot perform a tail call to function because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:111:3: error: cannot perform a tail call to function \'TemplateFunc\' because its signature is incompatible with the calling function"}
}
}
},
},
["err_musttail_needs_call"]={
["err_musttail_needs_call"]={
[i]={{nil,u,"err_musttail_needs_call"}},
[c]={{nil,u,"err_musttail_needs_call"}},
[h]={{nil,u,"%0 attribute requires that the return value is the result of a function call"}},
[d]={{nil,u,"%0 attribute requires that the return value is the result of a function call"}},
[g]={{nil,u,"A attribute requires that the return value is the result of a function call"}},
[e]={{nil,u,"A attribute requires that the return value is the result of a function call"}},
[b]=k,
[f]=k,
[e]="(.*?) attribute requires that the return value is the result of a function call",
[g]="(.*?) attribute requires that the return value is the result of a function call",
[d]=a,
[h]=a,
[f]={{nil,u,m}},
[i]={{nil,u,m}},
[c]={vb,1607502387,rb,nb},
[b]={pb,1607502387,qb,sb},
[j]={{E,653,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (!CE) {\n    Diag(St->getBeginLoc(), diag::err_musttail_needs_call) << &MTA;"}},
[j]={{F,653,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (!CE) {\n    Diag(St->getBeginLoc(), diag::err_musttail_needs_call) << &MTA;"}},
[l]={
[l]={
[Ub]={"clang/test/SemaCXX/attr-musttail.cpp:7:23: error: \'musttail\' attribute requires that the return value is the result of a function call","clang/test/SemaCXX/attr-musttail.cpp:12:23: error: \'musttail\' attribute requires that the return value is the result of a function call","clang/test/SemaCXX/attr-musttail.cpp:78:23: error: \'musttail\' attribute requires that the return value is the result of a function call","clang/test/SemaCXX/attr-musttail.cpp:204:23: error: \'musttail\' attribute requires that the return value is the result of a function call"}
[Vb]={"clang/test/SemaCXX/attr-musttail.cpp:7:23: error: \'musttail\' attribute requires that the return value is the result of a function call","clang/test/SemaCXX/attr-musttail.cpp:12:23: error: \'musttail\' attribute requires that the return value is the result of a function call","clang/test/SemaCXX/attr-musttail.cpp:78:23: error: \'musttail\' attribute requires that the return value is the result of a function call","clang/test/SemaCXX/attr-musttail.cpp:204:23: error: \'musttail\' attribute requires that the return value is the result of a function call"}
}
}
},
},
["err_musttail_needs_prototype"]={
["err_musttail_needs_prototype"]={
[i]={{nil,u,"err_musttail_needs_prototype"}},
[c]={{nil,u,"err_musttail_needs_prototype"}},
[h]={{nil,u,"%0 attribute requires that both caller and callee functions have a prototype"}},
[d]={{nil,u,"%0 attribute requires that both caller and callee functions have a prototype"}},
[g]={{nil,u,"A attribute requires that both caller and callee functions have a prototype"}},
[e]={{nil,u,"A attribute requires that both caller and callee functions have a prototype"}},
[b]=k,
[f]=k,
[e]="(.*?) attribute requires that both caller and callee functions have a prototype",
[g]="(.*?) attribute requires that both caller and callee functions have a prototype",
[d]=a,
[h]=a,
[f]={{nil,u,m}},
[i]={{nil,u,m}},
[c]={vb,1607502387,rb,nb},
[b]={pb,1607502387,qb,sb},
[j]={{E,755,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Both caller and callee must have a prototype (no K&R declarations).\n  if (!CalleeType.Func || !CallerType.Func) {\n    Diag(St->getBeginLoc(), diag::err_musttail_needs_prototype) << &MTA;"}},
[j]={{F,755,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Both caller and callee must have a prototype (no K&R declarations).\n  if (!CalleeType.Func || !CallerType.Func) {\n    Diag(St->getBeginLoc(), diag::err_musttail_needs_prototype) << &MTA;"}},
[l]={
[l]={
["clang/test/Sema/attr-musttail.c"]={"clang/test/Sema/attr-musttail.c:5:29: error: \'musttail\' attribute requires that both caller and callee functions have a prototype","clang/test/Sema/attr-musttail.c:10:29: error: \'musttail\' attribute requires that both caller and callee functions have a prototype"}
["clang/test/Sema/attr-musttail.c"]={"clang/test/Sema/attr-musttail.c:5:29: error: \'musttail\' attribute requires that both caller and callee functions have a prototype","clang/test/Sema/attr-musttail.c:10:29: error: \'musttail\' attribute requires that both caller and callee functions have a prototype"}
Line 3,039: Line 3,040:
},
},
["err_musttail_needs_trivial_args"]={
["err_musttail_needs_trivial_args"]={
[i]={{nil,u,"err_musttail_needs_trivial_args"}},
[c]={{nil,u,"err_musttail_needs_trivial_args"}},
[h]={{nil,u,"tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible"}},
[d]={{nil,u,"tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible"}},
[g]={{nil,u,"tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible"}},
[e]={{nil,u,"tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible"}},
[b]=k,
[f]=k,
[e]="tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible",
[g]="tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible",
[d]=a,
[h]=a,
[f]={{nil,u,m}},
[i]={{nil,u,m}},
[c]={vb,1607502387,rb,nb},
[b]={pb,1607502387,qb,sb},
[j]={{E,659,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (const auto *EWC = dyn_cast<ExprWithCleanups>(E)) {\n    if (EWC->cleanupsHaveSideEffects()) {\n      Diag(St->getBeginLoc(), diag::err_musttail_needs_trivial_args) << &MTA;"}},
[j]={{F,659,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (const auto *EWC = dyn_cast<ExprWithCleanups>(E)) {\n    if (EWC->cleanupsHaveSideEffects()) {\n      Diag(St->getBeginLoc(), diag::err_musttail_needs_trivial_args) << &MTA;"}},
[l]={
[l]={
[Ub]={"clang/test/SemaCXX/attr-musttail.cpp:66:23: error: tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible","clang/test/SemaCXX/attr-musttail.cpp:74:23: error: tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible","clang/test/SemaCXX/attr-musttail.cpp:124:23: error: tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible","clang/test/SemaCXX/attr-musttail.cpp:179:23: error: tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible"}
[Vb]={"clang/test/SemaCXX/attr-musttail.cpp:66:23: error: tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible","clang/test/SemaCXX/attr-musttail.cpp:74:23: error: tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible","clang/test/SemaCXX/attr-musttail.cpp:124:23: error: tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible","clang/test/SemaCXX/attr-musttail.cpp:179:23: error: tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible"}
}
}
},
},
["err_musttail_no_variadic"]={
["err_musttail_no_variadic"]={
[i]={{nil,u,"err_musttail_no_variadic"}},
[c]={{nil,u,"err_musttail_no_variadic"}},
[h]={{nil,u,"%0 attribute may not be used with variadic functions"}},
[d]={{nil,u,"%0 attribute may not be used with variadic functions"}},
[g]={{nil,u,"A attribute may not be used with variadic functions"}},
[e]={{nil,u,"A attribute may not be used with variadic functions"}},
[b]=k,
[f]=k,
[e]="(.*?) attribute may not be used with variadic functions",
[g]="(.*?) attribute may not be used with variadic functions",
[d]=a,
[h]=a,
[f]={{nil,u,m}},
[i]={{nil,u,m}},
[c]={vb,1607502387,rb,nb},
[b]={pb,1607502387,qb,sb},
[j]={{E,786,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (CalleeType.Func->isVariadic() || CallerType.Func->isVariadic()) {\n    Diag(St->getBeginLoc(), diag::err_musttail_no_variadic) << &MTA;"}},
[j]={{F,786,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (CalleeType.Func->isVariadic() || CallerType.Func->isVariadic()) {\n    Diag(St->getBeginLoc(), diag::err_musttail_no_variadic) << &MTA;"}},
[l]={
[l]={
[Ub]={"clang/test/SemaCXX/attr-musttail.cpp:129:23: error: \'musttail\' attribute may not be used with variadic functions"}
[Vb]={"clang/test/SemaCXX/attr-musttail.cpp:129:23: error: \'musttail\' attribute may not be used with variadic functions"}
}
}
},
},
["err_musttail_scope"]={
["err_musttail_scope"]={
[i]={{nil,u,"err_musttail_scope"}},
[c]={{nil,u,"err_musttail_scope"}},
[h]={{nil,u,"cannot perform a tail call from this return statement"}},
[d]={{nil,u,"cannot perform a tail call from this return statement"}},
[g]={{nil,u,"cannot perform a tail call from this return statement"}},
[e]={{nil,u,"cannot perform a tail call from this return statement"}},
[b]=k,
[f]=k,
[e]="cannot perform a tail call from this return statement",
[g]="cannot perform a tail call from this return statement",
[d]=a,
[h]=a,
[f]={{nil,u,m}},
[i]={{nil,u,m}},
[c]={vb,1607502387,rb,nb},
[b]={pb,1607502387,qb,sb},
[j]={{"clang/lib/Sema/JumpDiagnostics.cpp",1006,"void JumpScopeChecker::VerifyMustTailStmts() {\n  for (AttributedStmt *AS : MustTailStmts) {\n    for (unsigned I = LabelAndGotoScopes[AS]; I; I = Scopes[I].ParentScope) {\n      if (Scopes[I].OutDiag) {\n        S.Diag(AS->getBeginLoc(), diag::err_musttail_scope);"}},
[j]={{"clang/lib/Sema/JumpDiagnostics.cpp",1006,"void JumpScopeChecker::VerifyMustTailStmts() {\n  for (AttributedStmt *AS : MustTailStmts) {\n    for (unsigned I = LabelAndGotoScopes[AS]; I; I = Scopes[I].ParentScope) {\n      if (Scopes[I].OutDiag) {\n        S.Diag(AS->getBeginLoc(), diag::err_musttail_scope);"}},
[l]={
[l]={
Line 3,081: Line 3,082:
},
},
["err_musttail_structors_forbidden"]={
["err_musttail_structors_forbidden"]={
[i]={{nil,u,"err_musttail_structors_forbidden"}},
[c]={{nil,u,"err_musttail_structors_forbidden"}},
[h]={{nil,u,"cannot perform a tail call %select{from|to}0 a %select{constructor|destructor}1"}},
[d]={{nil,u,"cannot perform a tail call %select{from|to}0 a %select{constructor|destructor}1"}},
[g]={{nil,u,{"cannot perform a tail call ",{"from","to"}," a ",{B,A}}}},
[e]={{nil,u,{"cannot perform a tail call ",{"from","to"}," a ",{C,B}}}},
[b]=k,
[f]=k,
[e]="cannot perform a tail call (?:from|to) a (?:constructor|destructor)",
[g]="cannot perform a tail call (?:from|to) a (?:constructor|destructor)",
[d]=a,
[h]=a,
[f]={{nil,u,m}},
[i]={{nil,u,m}},
[c]={vb,1607502387,rb,nb},
[b]={pb,1607502387,qb,sb},
[j]={{E,682,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  auto GetMethodType = [this, St, MTA](const CXXMethodDecl *CMD, FuncType &Type, bool IsCallee) -> bool {\n    if (isa<CXXConstructorDecl, CXXDestructorDecl>(CMD)) {\n      Diag(St->getBeginLoc(), diag::err_musttail_structors_forbidden) << IsCallee << isa<CXXDestructorDecl>(CMD);"},{E,743,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Find callee function signature.\n  if (const CXXMethodDecl *CMD = dyn_cast_or_null<CXXMethodDecl>(CE->getCalleeDecl())) {\n  // ...\n  } else if (CalleeBinOp && CalleeBinOp->isPtrMemOp()) {\n  // ...\n  } else if (isa<CXXPseudoDestructorExpr>(CalleeExpr)) {\n    Diag(St->getBeginLoc(), diag::err_musttail_structors_forbidden) << /* IsCallee = */ 1 << /* IsDestructor = */ 1;"}},
[j]={{F,682,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  auto GetMethodType = [this, St, MTA](const CXXMethodDecl *CMD, FuncType &Type, bool IsCallee) -> bool {\n    if (isa<CXXConstructorDecl, CXXDestructorDecl>(CMD)) {\n      Diag(St->getBeginLoc(), diag::err_musttail_structors_forbidden) << IsCallee << isa<CXXDestructorDecl>(CMD);"},{F,743,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Find callee function signature.\n  if (const CXXMethodDecl *CMD = dyn_cast_or_null<CXXMethodDecl>(CE->getCalleeDecl())) {\n  // ...\n  } else if (CalleeBinOp && CalleeBinOp->isPtrMemOp()) {\n  // ...\n  } else if (isa<CXXPseudoDestructorExpr>(CalleeExpr)) {\n    Diag(St->getBeginLoc(), diag::err_musttail_structors_forbidden) << /* IsCallee = */ 1 << /* IsDestructor = */ 1;"}},
[l]={
[l]={
[Ub]={"clang/test/SemaCXX/attr-musttail.cpp:186:5: error: cannot perform a tail call from a destructor","clang/test/SemaCXX/attr-musttail.cpp:193:5: error: cannot perform a tail call to a destructor","clang/test/SemaCXX/attr-musttail.cpp:212:3: error: cannot perform a tail call to a constructor","clang/test/SemaCXX/attr-musttail.cpp:241:3: error: cannot perform a tail call to a destructor"}
[Vb]={"clang/test/SemaCXX/attr-musttail.cpp:186:5: error: cannot perform a tail call from a destructor","clang/test/SemaCXX/attr-musttail.cpp:193:5: error: cannot perform a tail call to a destructor","clang/test/SemaCXX/attr-musttail.cpp:212:3: error: cannot perform a tail call to a constructor","clang/test/SemaCXX/attr-musttail.cpp:241:3: error: cannot perform a tail call to a destructor"}
}
}
},
},
["err_mutable_const"]={
["err_mutable_const"]={
[i]="err_mutable_const",
[c]="err_mutable_const",
[h]="\'mutable\' and \'const\' cannot be mixed",
[d]="\'mutable\' and \'const\' cannot be mixed",
[e]="\'mutable\' and \'const\' cannot be mixed",
[f]=k,
[g]="\'mutable\' and \'const\' cannot be mixed",
[g]="\'mutable\' and \'const\' cannot be mixed",
[b]=k,
[h]=a,
[e]="\'mutable\' and \'const\' cannot be mixed",
[i]=m,
[d]=a,
[b]={J,1236199783,H,I},
[f]=m,
[c]={H,1236199783,I,G},
[j]={{o,18189,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n  // ...\n  // Check that \'mutable\' is consistent with the type of the declaration.\n  if (!InvalidDecl && Mutable) {\n    // ...\n    if (T->isReferenceType())\n    // ...\n    else if (T.isConstQualified())\n      DiagID = diag::err_mutable_const;"}},
[j]={{o,18189,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n  // ...\n  // Check that \'mutable\' is consistent with the type of the declaration.\n  if (!InvalidDecl && Mutable) {\n    // ...\n    if (T->isReferenceType())\n    // ...\n    else if (T.isConstQualified())\n      DiagID = diag::err_mutable_const;"}},
[l]={
[l]={
Line 3,109: Line 3,110:
},
},
["err_mutable_function"]={
["err_mutable_function"]={
[i]="err_mutable_function",
[c]="err_mutable_function",
[h]="\'mutable\' cannot be applied to functions",
[d]="\'mutable\' cannot be applied to functions",
[e]="\'mutable\' cannot be applied to functions",
[f]=k,
[g]="\'mutable\' cannot be applied to functions",
[g]="\'mutable\' cannot be applied to functions",
[b]=k,
[h]=a,
[e]="\'mutable\' cannot be applied to functions",
[i]=m,
[d]=a,
[b]={J,1236199783,H,I},
[f]=m,
[j]={{Q,3486,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  case DeclSpec::SCS_mutable:\n    if (isFunc) {\n      Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_function);"}},
[c]={H,1236199783,I,G},
[j]={{O,3486,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  case DeclSpec::SCS_mutable:\n    if (isFunc) {\n      Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_function);"}},
[l]={
[l]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:12:3: error: \'mutable\' cannot be applied to functions"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:12:3: error: \'mutable\' cannot be applied to functions"}
Line 3,123: Line 3,124:
},
},
["err_mutable_nonmember"]={
["err_mutable_nonmember"]={
[i]="err_mutable_nonmember",
[c]="err_mutable_nonmember",
[h]="\'mutable\' can only be applied to member variables",
[d]="\'mutable\' can only be applied to member variables",
[e]="\'mutable\' can only be applied to member variables",
[f]=k,
[g]="\'mutable\' can only be applied to member variables",
[g]="\'mutable\' can only be applied to member variables",
[b]=k,
[h]=a,
[e]="\'mutable\' can only be applied to member variables",
[i]=m,
[d]=a,
[b]={J,1236199783,H,I},
[f]=m,
[c]={H,1236199783,I,G},
[j]={{o,5290,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  // ...\n  // Note that a linkage-specification sets a storage class, but\n  // \'extern \"C\" struct foo;\' is actually valid and not theoretically\n  // useless.\n  if (DeclSpec::SCS SCS = DS.getStorageClassSpec()) {\n    if (SCS == DeclSpec::SCS_mutable)\n      // ...\n      Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_nonmember);"},{o,5716,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  // ...\n  if (RecordDecl *OwningClass = dyn_cast<RecordDecl>(Owner)) {\n  // ...\n  } else {\n    // ...\n    if (SCSpec == DeclSpec::SCS_mutable) {\n      // ...\n      Diag(Record->getLocation(), diag::err_mutable_nonmember);"},{o,7484,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (SCSpec == DeclSpec::SCS_mutable) {\n    // ...\n    Diag(D.getIdentifierLoc(), diag::err_mutable_nonmember);"}},
[j]={{o,5290,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  // ...\n  // Note that a linkage-specification sets a storage class, but\n  // \'extern \"C\" struct foo;\' is actually valid and not theoretically\n  // useless.\n  if (DeclSpec::SCS SCS = DS.getStorageClassSpec()) {\n    if (SCS == DeclSpec::SCS_mutable)\n      // ...\n      Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_nonmember);"},{o,5716,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  // ...\n  if (RecordDecl *OwningClass = dyn_cast<RecordDecl>(Owner)) {\n  // ...\n  } else {\n    // ...\n    if (SCSpec == DeclSpec::SCS_mutable) {\n      // ...\n      Diag(Record->getLocation(), diag::err_mutable_nonmember);"},{o,7484,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (SCSpec == DeclSpec::SCS_mutable) {\n    // ...\n    Diag(D.getIdentifierLoc(), diag::err_mutable_nonmember);"}},
[l]={
[l]={
Line 3,137: Line 3,138:
},
},
["err_mutable_reference"]={
["err_mutable_reference"]={
[i]="err_mutable_reference",
[c]="err_mutable_reference",
[h]="\'mutable\' cannot be applied to references",
[d]="\'mutable\' cannot be applied to references",
[e]="\'mutable\' cannot be applied to references",
[f]=k,
[g]="\'mutable\' cannot be applied to references",
[g]="\'mutable\' cannot be applied to references",
[b]=k,
[h]=a,
[e]="\'mutable\' cannot be applied to references",
[i]=m,
[d]=a,
[b]={J,1236199783,H,I},
[f]=m,
[c]={H,1236199783,I,G},
[j]={{o,18187,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n  // ...\n  // Check that \'mutable\' is consistent with the type of the declaration.\n  if (!InvalidDecl && Mutable) {\n    // ...\n    if (T->isReferenceType())\n      DiagID = getLangOpts().MSVCCompat ? diag::ext_mutable_reference : diag::err_mutable_reference;"}},
[j]={{o,18187,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n  // ...\n  // Check that \'mutable\' is consistent with the type of the declaration.\n  if (!InvalidDecl && Mutable) {\n    // ...\n    if (T->isReferenceType())\n      DiagID = getLangOpts().MSVCCompat ? diag::ext_mutable_reference : diag::err_mutable_reference;"}},
[l]={
[l]={
Line 3,151: Line 3,152:
},
},
["err_namespace_nonnamespace_scope"]={
["err_namespace_nonnamespace_scope"]={
[i]="err_namespace_nonnamespace_scope",
[c]="err_namespace_nonnamespace_scope",
[h]="namespaces can only be defined in global or namespace scope",
[d]="namespaces can only be defined in global or namespace scope",
[e]="namespaces can only be defined in global or namespace scope",
[f]=k,
[g]="namespaces can only be defined in global or namespace scope",
[g]="namespaces can only be defined in global or namespace scope",
[b]=k,
[h]=a,
[e]="namespaces can only be defined in global or namespace scope",
[i]=y,
[d]=a,
[b]={"05cfc295f45d",1273813702,"Namespaces can only be defined at global or namespace scope. Fixes PR6596.","Namespaces can only be defined at global or namespace scope. Fixes PR6596.\n\nllvm-svn: 103767"},
[f]=y,
[c]={"05cfc295f45d",1273813702,"Namespaces can only be defined at global or namespace scope. Fixes PR6596.","Namespaces can only be defined at global or namespace scope. Fixes PR6596.\n\nllvm-svn: 103767"},
[j]={{"clang/lib/Parse/ParseDeclCXX.cpp",164,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  // ...\n  if (getCurScope()->isClassScope() || getCurScope()->isTemplateParamScope() || getCurScope()->isInObjcMethodScope() || getCurScope()->getBlockParent() || getCurScope()->getFnParent()) {\n    Diag(T.getOpenLocation(), diag::err_namespace_nonnamespace_scope);"}},
[j]={{"clang/lib/Parse/ParseDeclCXX.cpp",164,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///      namespace-definition: [C++: namespace.def]\n///        named-namespace-definition\n///        unnamed-namespace-definition\n///        nested-namespace-definition\n///\n///      named-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///        namespace-body \'}\'\n///\n///      unnamed-namespace-definition:\n///        \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///      nested-namespace-definition:\n///        \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///        identifier \'{\' namespace-body \'}\'\n///\n///      enclosing-namespace-specifier:\n///        identifier\n///        enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///      namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///        \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  // ...\n  if (getCurScope()->isClassScope() || getCurScope()->isTemplateParamScope() || getCurScope()->isInObjcMethodScope() || getCurScope()->getBlockParent() || getCurScope()->getFnParent()) {\n    Diag(T.getOpenLocation(), diag::err_namespace_nonnamespace_scope);"}},
[l]={
[l]={
Line 3,165: Line 3,166:
},
},
["err_need_header_before_placement_new"]={
["err_need_header_before_placement_new"]={
[i]={{nil,u,"err_need_header_before_placement_new"}},
[c]={{nil,u,"err_need_header_before_placement_new"}},
[h]={{nil,u,"no matching %0 function for non-allocating placement new expression; include <new>"}},
[d]={{nil,u,"no matching %0 function for non-allocating placement new expression; include <new>"}},
[g]={{nil,u,"no matching A function for non-allocating placement new expression; include <new>"}},
[e]={{nil,u,"no matching A function for non-allocating placement new expression; include <new>"}},
[b]=k,
[f]=k,
[e]="no matching (.*?) function for non\\-allocating placement new expression; include \\<new\\>",
[g]="no matching (.*?) function for non\\-allocating placement new expression; include \\<new\\>",
[d]=a,
[h]=a,
[f]={{nil,u,m}},
[i]={{nil,u,m}},
[c]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726"},
[b]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726"},
[j]={{tb,2568,"static bool resolveAllocationOverload(Sema &S, LookupResult &R, SourceRange Range, SmallVectorImpl<Expr *> &Args, bool &PassAlignment, FunctionDecl *&Operator, OverloadCandidateSet *AlignedCandidates, Expr *AlignArg, bool Diagnose) {\n  // ...\n  case OR_No_Viable_Function:\n    // ...\n    if (Diagnose) {\n      // If this is an allocation of the form \'new (p) X\' for some object\n      // pointer p (or an expression that will decay to such a pointer),\n      // diagnose the missing inclusion of <new>.\n      if (!R.isClassLookup() && Args.size() == 2 && (Args[1]->getType()->isObjectPointerType() || Args[1]->getType()->isArrayType())) {\n        S.Diag(R.getNameLoc(), diag::err_need_header_before_placement_new) << R.getLookupName() << Range;"}},
[j]={{tb,2568,"static bool resolveAllocationOverload(Sema &S, LookupResult &R, SourceRange Range, SmallVectorImpl<Expr *> &Args, bool &PassAlignment, FunctionDecl *&Operator, OverloadCandidateSet *AlignedCandidates, Expr *AlignArg, bool Diagnose) {\n  // ...\n  case OR_No_Viable_Function:\n    // ...\n    if (Diagnose) {\n      // If this is an allocation of the form \'new (p) X\' for some object\n      // pointer p (or an expression that will decay to such a pointer),\n      // diagnose the missing inclusion of <new>.\n      if (!R.isClassLookup() && Args.size() == 2 && (Args[1]->getType()->isObjectPointerType() || Args[1]->getType()->isArrayType())) {\n        S.Diag(R.getNameLoc(), diag::err_need_header_before_placement_new) << R.getLookupName() << Range;"}},
[l]={
[l]={
Line 3,179: Line 3,180:
},
},
["err_need_header_before_typeid"]={
["err_need_header_before_typeid"]={
[i]="err_need_header_before_typeid",
[c]="err_need_header_before_typeid",
[h]="you need to include <typeinfo> before using the \'typeid\' operator",
[d]="you need to include <typeinfo> before using the \'typeid\' operator",
[g]="you need to include <typeinfo> before using the \'typeid\' operator",
[e]="you need to include <typeinfo> before using the \'typeid\' operator",
[b]=k,
[f]=k,
[e]="you need to include \\<typeinfo\\> before using the \'typeid\' operator",
[g]="you need to include \\<typeinfo\\> before using the \'typeid\' operator",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={hb,1237025389,gb,fb},
[b]={ib,1237025389,fb,gb},
[j]={{tb,661,"/// ActOnCXXTypeidOfType - Parse typeid( type-id ) or typeid (expression);\nExprResult Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, bool isType, void *TyOrExpr, SourceLocation RParenLoc) {\n  // ...\n  // Find the std::type_info type.\n  if (!getStdNamespace())\n    return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid));"},{tb,675,"/// ActOnCXXTypeidOfType - Parse typeid( type-id ) or typeid (expression);\nExprResult Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, bool isType, void *TyOrExpr, SourceLocation RParenLoc) {\n  // ...\n  if (!CXXTypeInfoDecl) {\n    // ...\n    if (!CXXTypeInfoDecl)\n      return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid));"}},
[j]={{tb,661,"/// ActOnCXXTypeidOfType - Parse typeid( type-id ) or typeid (expression);\nExprResult Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, bool isType, void *TyOrExpr, SourceLocation RParenLoc) {\n  // ...\n  // Find the std::type_info type.\n  if (!getStdNamespace())\n    return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid));"},{tb,675,"/// ActOnCXXTypeidOfType - Parse typeid( type-id ) or typeid (expression);\nExprResult Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, bool isType, void *TyOrExpr, SourceLocation RParenLoc) {\n  // ...\n  if (!CXXTypeInfoDecl) {\n    // ...\n    if (!CXXTypeInfoDecl)\n      return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid));"}},
[l]={
[l]={
Line 3,193: Line 3,194:
},
},
["err_nested_name_member_ref_lookup_ambiguous"]={
["err_nested_name_member_ref_lookup_ambiguous"]={
[i]="err_nested_name_member_ref_lookup_ambiguous",
[c]="err_nested_name_member_ref_lookup_ambiguous",
[h]="lookup of %0 in member access expression is ambiguous",
[d]="lookup of %0 in member access expression is ambiguous",
[g]="lookup of A in member access expression is ambiguous",
[e]="lookup of A in member access expression is ambiguous",
[b]=k,
[f]=k,
[e]="lookup of (.*?) in member access expression is ambiguous",
[g]="lookup of (.*?) in member access expression is ambiguous",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"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\n  x->Base::f\n\nWe no longer try to \"enter\" the context of the type that \"x\" points\nto. Instead, we drag that object type through the parser and pass it\ninto the Sema routines that need to know how to perform lookup within\nmember access expressions.\n\nWe now implement most of the crazy name lookup rules in C++\n[basic.lookup.classref] for non-templated code, including performing\nlookup both in the context of the type referred to by the member\naccess and in the scope of the member access itself and then detecting\nambiguities when the two lookups collide (p1 and p4; p3 and p7 are\nstill TODO). This change also corrects our handling of name lookup\nwithin template arguments of template-ids inside the\nnested-name-specifier (p6; we used to look into the scope of the\nobject expression for them) and fixes PR4703.\n\nI have disabled some tests that involve member access expressions\nwhere the object expression has dependent type, because we don\'t yet\nhave the ability to describe dependent nested-name-specifiers starting\nwith an identifier.\n\nllvm-svn: 80843"},
[b]={"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\n  x->Base::f\n\nWe no longer try to \"enter\" the context of the type that \"x\" points\nto. Instead, we drag that object type through the parser and pass it\ninto the Sema routines that need to know how to perform lookup within\nmember access expressions.\n\nWe now implement most of the crazy name lookup rules in C++\n[basic.lookup.classref] for non-templated code, including performing\nlookup both in the context of the type referred to by the member\naccess and in the scope of the member access itself and then detecting\nambiguities when the two lookups collide (p1 and p4; p3 and p7 are\nstill TODO). This change also corrects our handling of name lookup\nwithin template arguments of template-ids inside the\nnested-name-specifier (p6; we used to look into the scope of the\nobject expression for them) and fixes PR4703.\n\nI have disabled some tests that involve member access expressions\nwhere the object expression has dependent type, because we don\'t yet\nhave the ability to describe dependent nested-name-specifiers starting\nwith an identifier.\n\nllvm-svn: 80843"},
[j]={{Tb,682,"/// 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  // ...\n  if (AcceptSpec) {\n    if (!ObjectType.isNull() && !ObjectTypeSearchedInScope && !getLangOpts().CPlusPlus11) {\n      // ...\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        // ...\n        Diag(IdInfo.IdentifierLoc, diag::err_nested_name_member_ref_lookup_ambiguous) << IdInfo.Identifier;"}},
[j]={{cc,682,"/// 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  // ...\n  if (AcceptSpec) {\n    if (!ObjectType.isNull() && !ObjectTypeSearchedInScope && !getLangOpts().CPlusPlus11) {\n      // ...\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        // ...\n        Diag(IdInfo.IdentifierLoc, diag::err_nested_name_member_ref_lookup_ambiguous) << IdInfo.Identifier;"}},
[l]={
[l]={
["clang/test/SemaCXX/qual-id-test.cpp"]={"clang/test/SemaCXX/qual-id-test.cpp:98:10: error: lookup of \'base\' in member access expression is ambiguous"}
["clang/test/SemaCXX/qual-id-test.cpp"]={"clang/test/SemaCXX/qual-id-test.cpp:98:10: error: lookup of \'base\' in member access expression is ambiguous"}
Line 3,207: Line 3,208:
},
},
["err_nested_name_spec_is_not_class"]={
["err_nested_name_spec_is_not_class"]={
[i]="err_nested_name_spec_is_not_class",
[c]="err_nested_name_spec_is_not_class",
[h]="%0 cannot appear before \'::\' because it is not a class%select{ or namespace|, namespace, or enumeration}1; did you mean \':\'?",
[d]="%0 cannot appear before \'::\' because it is not a class%select{ or namespace|, namespace, or enumeration}1; did you mean \':\'?",
[g]={{nil,nil,{"A cannot appear before \'::\' because it is not a class",{" or namespace",", namespace, or enumeration"},"; did you mean \':\'?"}}},
[e]={{nil,nil,{"A cannot appear before \'::\' because it is not a class",{" or namespace",", namespace, or enumeration"},"; did you mean \':\'?"}}},
[b]=k,
[f]=k,
[e]="(.*?) cannot appear before \'\\:\\:\' because it is not a class(?: or namespace|, namespace, or enumeration); did you mean \'\\:\'\\?",
[g]="(.*?) cannot appear before \'\\:\\:\' because it is not a class(?: or namespace|, namespace, or enumeration); did you mean \'\\:\'\\?",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"6a7ffbed8ab4",1397407923,"Improve error recovery around colon.","Improve error recovery around colon.\n\nParse of nested name spacifier is modified so that it properly recovers\nif colon is mistyped as double colon in case statement.\nThis patch fixes PR15133.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2870\n\nllvm-svn: 206135"},
[b]={"6a7ffbed8ab4",1397407923,"Improve error recovery around colon.","Improve error recovery around colon.\n\nParse of nested name spacifier is modified so that it properly recovers\nif colon is mistyped as double colon in case statement.\nThis patch fixes PR15133.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2870\n\nllvm-svn: 206135"},
[j]={{Tb,589,"/// 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  // ...\n  if (Found.empty() && !ErrorRecoveryLookup) {\n    // ...\n    if (!R.empty()) {\n      // ...\n      // The identifier is found in ordinary lookup. If correction to colon is\n      // allowed, suggest replacement to \':\'.\n      if (IsCorrectedToColon) {\n        // ...\n        Diag(IdInfo.CCLoc, diag::err_nested_name_spec_is_not_class) << IdInfo.Identifier << getLangOpts().CPlusPlus << FixItHint::CreateReplacement(IdInfo.CCLoc, \":\");"}},
[j]={{cc,589,"/// 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  // ...\n  if (Found.empty() && !ErrorRecoveryLookup) {\n    // ...\n    if (!R.empty()) {\n      // ...\n      // The identifier is found in ordinary lookup. If correction to colon is\n      // allowed, suggest replacement to \':\'.\n      if (IsCorrectedToColon) {\n        // ...\n        Diag(IdInfo.CCLoc, diag::err_nested_name_spec_is_not_class) << IdInfo.Identifier << getLangOpts().CPlusPlus << FixItHint::CreateReplacement(IdInfo.CCLoc, \":\");"}},
[l]={
[l]={
["clang/test/Parser/recovery.cpp"]={"clang/test/Parser/recovery.cpp:160:16: error: \'V1\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:161:16: error: \'V2\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:162:16: error: \'V3\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:163:12: error: \'V4\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:164:12: error: \'V6\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:170:17: error: \'V5\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:192:21: error: \'n\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:195:21: error: \'nn\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:198:21: error: \'nn\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?"}
["clang/test/Parser/recovery.cpp"]={"clang/test/Parser/recovery.cpp:160:16: error: \'V1\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:161:16: error: \'V2\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:162:16: error: \'V3\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:163:12: error: \'V4\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:164:12: error: \'V6\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:170:17: error: \'V5\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:192:21: error: \'n\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:195:21: error: \'nn\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:198:21: error: \'nn\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?"}
Line 3,221: Line 3,222:
},
},
["err_nested_name_spec_non_tag"]={
["err_nested_name_spec_non_tag"]={
[i]="err_nested_name_spec_non_tag",
[c]="err_nested_name_spec_non_tag",
[h]="type %0 cannot be used prior to \'::\' because it has no members",
[d]="type %0 cannot be used prior to \'::\' because it has no members",
[g]="type A cannot be used prior to \'::\' because it has no members",
[e]="type A cannot be used prior to \'::\' because it has no members",
[b]=k,
[f]=k,
[e]="type (.*?) cannot be used prior to \'\\:\\:\' because it has no members",
[g]="type (.*?) cannot be used prior to \'\\:\\:\' because it has no members",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template","Initial implementation of parsing, semantic analysis, and template\ninstantiation for C++ typename-specifiers such as\n\n  typename T::type\n\nThe parsing of typename-specifiers is relatively easy thanks to\nannotation tokens. When we see the \"typename\", we parse the\ntypename-specifier and produce a typename annotation token. There are\nonly a few places where we need to handle this. We currently parse the\ntypename-specifier form that terminates in an identifier, but not the\nsimple-template-id form, e.g.,\n\n  typename T::template apply<U, V>\n\nParsing of nested-name-specifiers has a similar problem, since at this\npoint we don\'t have any representation of a class template\nspecialization whose template-name is unknown.\n\nSemantic analysis is only partially complete, with some support for\ntemplate instantiation that works for simple examples. \n\nllvm-svn: 67875"},
[b]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template","Initial implementation of parsing, semantic analysis, and template\ninstantiation for C++ typename-specifiers such as\n\n  typename T::type\n\nThe parsing of typename-specifiers is relatively easy thanks to\nannotation tokens. When we see the \"typename\", we parse the\ntypename-specifier and produce a typename annotation token. There are\nonly a few places where we need to handle this. We currently parse the\ntypename-specifier form that terminates in an identifier, but not the\nsimple-template-id form, e.g.,\n\n  typename T::template apply<U, V>\n\nParsing of nested-name-specifiers has a similar problem, since at this\npoint we don\'t have any representation of a class template\nspecialization whose template-name is unknown.\n\nSemantic analysis is only partially complete, with some support for\ntemplate instantiation that works for simple examples. \n\nllvm-svn: 67875"},
[j]={{Tb,961,"bool Sema::ActOnCXXNestedNameSpecifier(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy OpaqueTemplate, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, SourceLocation CCLoc, bool EnteringContext) {\n  // ...\n  // Alias template specializations can produce types which are not valid\n  // nested name specifiers.\n  if (!T->isDependentType() && !T->getAs<TagType>()) {\n    Diag(TemplateNameLoc, diag::err_nested_name_spec_non_tag) << T;"},{"clang/lib/Sema/SemaTemplateInstantiate.cpp",1635,"NamedDecl *TemplateInstantiator::TransformFirstQualifierInScope(NamedDecl *D, SourceLocation Loc) {\n  // If the first part of the nested-name-specifier was a template type\n  // parameter, instantiate that type parameter down to a tag type.\n  if (TemplateTypeParmDecl *TTPD = dyn_cast_or_null<TemplateTypeParmDecl>(D)) {\n    // ...\n    if (TTP->getDepth() < TemplateArgs.getNumLevels()) {\n      // ...\n      getSema().Diag(Loc, diag::err_nested_name_spec_non_tag) << T;"}},
[j]={{cc,961,"bool Sema::ActOnCXXNestedNameSpecifier(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy OpaqueTemplate, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, SourceLocation CCLoc, bool EnteringContext) {\n  // ...\n  // Alias template specializations can produce types which are not valid\n  // nested name specifiers.\n  if (!T->isDependentType() && !T->getAs<TagType>()) {\n    Diag(TemplateNameLoc, diag::err_nested_name_spec_non_tag) << T;"},{"clang/lib/Sema/SemaTemplateInstantiate.cpp",1635,"NamedDecl *TemplateInstantiator::TransformFirstQualifierInScope(NamedDecl *D, SourceLocation Loc) {\n  // If the first part of the nested-name-specifier was a template type\n  // parameter, instantiate that type parameter down to a tag type.\n  if (TemplateTypeParmDecl *TTPD = dyn_cast_or_null<TemplateTypeParmDecl>(D)) {\n    // ...\n    if (TTP->getDepth() < TemplateArgs.getNumLevels()) {\n      // ...\n      getSema().Diag(Loc, diag::err_nested_name_spec_non_tag) << T;"}},
[l]={
[l]={
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.noreturn/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.noreturn/p1.cpp:37:42: error: type \'int (*)() __attribute__((noreturn))\' cannot be used prior to \'::\' because it has no members"}
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.noreturn/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.noreturn/p1.cpp:37:42: error: type \'int (*)() __attribute__((noreturn))\' cannot be used prior to \'::\' because it has no members"}
Line 3,235: Line 3,236:
},
},
["err_nested_non_static_member_use"]={
["err_nested_non_static_member_use"]={
[i]="err_nested_non_static_member_use",
[c]="err_nested_non_static_member_use",
[h]="%select{call to non-static member function|use of non-static data member}0 %2 of %1 from nested type %3",
[d]="%select{call to non-static member function|use of non-static data member}0 %2 of %1 from nested type %3",
[g]={{nil,nil,{{"call to non-static member function","use of non-static data member"}," C of B from nested type D"}}},
[e]={{nil,nil,{{"call to non-static member function","use of non-static data member"}," C of B from nested type D"}}},
[b]=k,
[f]=k,
[e]="(?:call to non\\-static member function|use of non\\-static data member) (.*?) of (.*?) from nested type (.*?)",
[g]="(?:call to non\\-static member function|use of non\\-static data member) (.*?) of (.*?) from nested type (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"fa0a1f531f7d",1333588384,"Improve diagnostics for invalid use of non-static members / this:","Improve diagnostics for invalid use of non-static members / this:\n\n* s/nonstatic/non-static/ in the diagnostics, since the latter form outvoted\n  the former by 28-2 in our diagnostics.\n* Fix the \"use of member in static member function\" diagnostic to correctly\n  detect this situation inside a block or lambda.\n* Produce a more specific \"invalid use of non-static member\" diagnostic for\n  the case where a nested class member refers to a member of a\n  lexically-surrounding class.\n\nllvm-svn: 154073"},
[b]={"fa0a1f531f7d",1333588384,"Improve diagnostics for invalid use of non-static members / this:","Improve diagnostics for invalid use of non-static members / this:\n\n* s/nonstatic/non-static/ in the diagnostics, since the latter form outvoted\n  the former by 28-2 in our diagnostics.\n* Fix the \"use of member in static member function\" diagnostic to correctly\n  detect this situation inside a block or lambda.\n* Produce a more specific \"invalid use of non-static member\" diagnostic for\n  the case where a nested class member refers to a member of a\n  lexically-surrounding class.\n\nllvm-svn: 154073"},
[j]={{Rb,228,"/// Diagnose a reference to a field with no object available.\nstatic void diagnoseInstanceReference(Sema &SemaRef, const CXXScopeSpec &SS, NamedDecl *Rep, const DeclarationNameInfo &nameInfo) {\n  // ...\n  if (IsField && InStaticMethod)\n  // ...\n  else if (ContextClass && RepClass && SS.isEmpty() && !InStaticMethod && !RepClass->Equals(ContextClass) && RepClass->Encloses(ContextClass))\n    // ...\n    SemaRef.Diag(Loc, diag::err_nested_non_static_member_use) << IsField << RepClass << nameInfo.getName() << ContextClass << Range;"}},
[j]={{Tb,228,"/// Diagnose a reference to a field with no object available.\nstatic void diagnoseInstanceReference(Sema &SemaRef, const CXXScopeSpec &SS, NamedDecl *Rep, const DeclarationNameInfo &nameInfo) {\n  // ...\n  if (IsField && InStaticMethod)\n  // ...\n  else if (ContextClass && RepClass && SS.isEmpty() && !InStaticMethod && !RepClass->Equals(ContextClass) && RepClass->Encloses(ContextClass))\n    // ...\n    SemaRef.Diag(Loc, diag::err_nested_non_static_member_use) << IsField << RepClass << nameInfo.getName() << ContextClass << Range;"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.res/temp.dep/p3.cpp"]={"clang/test/CXX/temp/temp.res/temp.dep/p3.cpp:60:24: error: call to non-static member function \'f\' of \'A\' from nested type \'D\'"}
["clang/test/CXX/temp/temp.res/temp.dep/p3.cpp"]={"clang/test/CXX/temp/temp.res/temp.dep/p3.cpp:60:24: error: call to non-static member function \'f\' of \'A\' from nested type \'D\'"}
Line 3,249: Line 3,250:
},
},
["err_nested_pointer_qualifier_mismatch"]={
["err_nested_pointer_qualifier_mismatch"]={
[i]={{nil,w,"err_nested_pointer_qualifier_mismatch"}},
[c]={{nil,x,"err_nested_pointer_qualifier_mismatch"}},
[h]={{nil,w,"%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 discards qualifiers in nested pointer types"}},
[d]={{nil,x,"%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 discards qualifiers in nested pointer types"}},
[g]={{nil,w,{{{{"assigning to A from B","assigning to different types"}},{{"passing A to parameter of type B","passing to parameter of different type"}},{{"returning A from a function with result type B","returning from function with different return type"}},{{"converting A to type B","converting between types"}},{{"initializing A with an expression of type B","initializing with expression of different type"}},{{"sending A to parameter of type B","sending to parameter of different type"}},{{"casting A to type B","casting between types"}}}," discards qualifiers in nested pointer types"}}},
[e]={{nil,x,{{{{"assigning to A from B","assigning to different types"}},{{"passing A to parameter of type B","passing to parameter of different type"}},{{"returning A from a function with result type B","returning from function with different return type"}},{{"converting A to type B","converting between types"}},{{"initializing A with an expression of type B","initializing with expression of different type"}},{{"sending A to parameter of type B","sending to parameter of different type"}},{{"casting A to type B","casting between types"}}}," discards qualifiers in nested pointer types"}}},
[b]=k,
[f]=k,
[e]="(?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types)) discards qualifiers in nested pointer types",
[g]="(?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types)) discards qualifiers in nested pointer types",
[d]=a,
[h]=a,
[f]={{nil,w,m}},
[i]={{nil,x,m}},
[c]={"6f3de50ca73e",1257666394,"Test commit - minor terminology change to my recent patch suggested by John McCall","Test commit - minor terminology change to my recent patch suggested by John McCall\n\nllvm-svn: 86442"},
[b]={"6f3de50ca73e",1257666394,"Test commit - minor terminology change to my recent patch suggested by John McCall","Test commit - minor terminology change to my recent patch suggested by John McCall\n\nllvm-svn: 86442"},
[j]={{V,17640,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatibleNestedPointerQualifiers:\n    if (getLangOpts().CPlusPlus) {\n      // ...\n      DiagKind = diag::err_nested_pointer_qualifier_mismatch;"}}
[j]={{W,17640,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatibleNestedPointerQualifiers:\n    if (getLangOpts().CPlusPlus) {\n      // ...\n      DiagKind = diag::err_nested_pointer_qualifier_mismatch;"}}
},
},
["err_nested_redefinition"]={
["err_nested_redefinition"]={
[i]="err_nested_redefinition",
[c]="err_nested_redefinition",
[h]="nested redefinition of %0",
[d]="nested redefinition of %0",
[g]="nested redefinition of A",
[e]="nested redefinition of A",
[b]=k,
[f]=k,
[e]="nested redefinition of (.*?)",
[g]="nested redefinition of (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={hb,1237025389,gb,fb},
[b]={ib,1237025389,fb,gb},
[j]={{o,17384,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  // ...\n  if (!Previous.empty()) {\n    // ...\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n      // If this is a use of a previous tag, or if the tag is already declared\n      // in the same scope (so that the definition/declaration completes or\n      // rementions the tag), reuse the decl.\n      if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n        // ...\n        if (!Invalid) {\n          // ...\n          // Diagnose attempts to redefine a tag.\n          if (TUK == TUK_Definition) {\n            if (NamedDecl *Def = PrevTagDecl->getDefinition()) {\n            // ...\n            } else {\n              // ...\n              if (TD->isBeingDefined()) {\n                Diag(NameLoc, diag::err_nested_redefinition) << Name;"}},
[j]={{o,17384,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  // ...\n  if (!Previous.empty()) {\n    // ...\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n      // If this is a use of a previous tag, or if the tag is already declared\n      // in the same scope (so that the definition/declaration completes or\n      // rementions the tag), reuse the decl.\n      if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n        // ...\n        if (!Invalid) {\n          // ...\n          // Diagnose attempts to redefine a tag.\n          if (TUK == TUK_Definition) {\n            if (NamedDecl *Def = PrevTagDecl->getDefinition()) {\n            // ...\n            } else {\n              // ...\n              if (TD->isBeingDefined()) {\n                Diag(NameLoc, diag::err_nested_redefinition) << Name;"}},
[l]={
[l]={
Line 3,274: Line 3,275:
},
},
["err_new_abi_tag_on_redeclaration"]={
["err_new_abi_tag_on_redeclaration"]={
[i]="err_new_abi_tag_on_redeclaration",
[c]="err_new_abi_tag_on_redeclaration",
[h]="\'abi_tag\' %0 missing in original declaration",
[d]="\'abi_tag\' %0 missing in original declaration",
[g]="\'abi_tag\' A missing in original declaration",
[e]="\'abi_tag\' A missing in original declaration",
[b]=k,
[f]=k,
[e]="\'abi_tag\' (.*?) missing in original declaration",
[g]="\'abi_tag\' (.*?) missing in original declaration",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"bf17ecf59a9b",1457537453,"[GCC] PR23529 Sema part of attrbute abi_tag support","[GCC] PR23529 Sema part of attrbute abi_tag support\n\nOriginal patch by Stefan Bühler http://reviews.llvm.org/D12834\n\nDifference between original and this one:\n- fixed all comments in original code review\n- added more tests, all new diagnostics now covered by tests\n- moved abi_tag on re-declaration checks to Sema::mergeDeclAttributes\n  where they actually may work as designed\n- clang-format + other stylistic changes\n\nMangle part will be sent for review as a separate patch.\n\nDifferential Revision: http://reviews.llvm.org/D17567\n\nllvm-svn: 263015"},
[b]={"bf17ecf59a9b",1457537453,"[GCC] PR23529 Sema part of attrbute abi_tag support","[GCC] PR23529 Sema part of attrbute abi_tag support\n\nOriginal patch by Stefan Bühler http://reviews.llvm.org/D12834\n\nDifference between original and this one:\n- fixed all comments in original code review\n- added more tests, all new diagnostics now covered by tests\n- moved abi_tag on re-declaration checks to Sema::mergeDeclAttributes\n  where they actually may work as designed\n- clang-format + other stylistic changes\n\nMangle part will be sent for review as a separate patch.\n\nDifferential Revision: http://reviews.llvm.org/D17567\n\nllvm-svn: 263015"},
[j]={{o,3257,"/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.\nvoid Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, AvailabilityMergeKind AMK) {\n  // ...\n  // Re-declaration cannot add abi_tag\'s.\n  if (const auto *NewAbiTagAttr = New->getAttr<AbiTagAttr>()) {\n    if (const auto *OldAbiTagAttr = Old->getAttr<AbiTagAttr>()) {\n      for (const auto &NewTag : NewAbiTagAttr->tags()) {\n        if (!llvm::is_contained(OldAbiTagAttr->tags(), NewTag)) {\n          Diag(NewAbiTagAttr->getLocation(), diag::err_new_abi_tag_on_redeclaration) << NewTag;"}},
[j]={{o,3257,"/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.\nvoid Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, AvailabilityMergeKind AMK) {\n  // ...\n  // Re-declaration cannot add abi_tag\'s.\n  if (const auto *NewAbiTagAttr = New->getAttr<AbiTagAttr>()) {\n    if (const auto *OldAbiTagAttr = Old->getAttr<AbiTagAttr>()) {\n      for (const auto &NewTag : NewAbiTagAttr->tags()) {\n        if (!llvm::is_contained(OldAbiTagAttr->tags(), NewTag)) {\n          Diag(NewAbiTagAttr->getLocation(), diag::err_new_abi_tag_on_redeclaration) << NewTag;"}},
[l]={
[l]={
Line 3,288: Line 3,289:
},
},
["err_new_array_init_args"]={
["err_new_array_init_args"]={
[i]="err_new_array_init_args",
[c]="err_new_array_init_args",
[h]="array \'new\' cannot have initialization arguments",
[d]="array \'new\' cannot have initialization arguments",
[e]="array \'new\' cannot have initialization arguments",
[f]=k,
[g]="array \'new\' cannot have initialization arguments",
[g]="array \'new\' cannot have initialization arguments",
[b]=k,
[h]=a,
[e]="array \'new\' cannot have initialization arguments",
[i]=m,
[d]=a,
[b]={"c6bb0e117f98",1272901523,"The array form of \'new\' can never have initializers.","The array form of \'new\' can never have initializers.\n\nllvm-svn: 102917"},
[f]=m,
[c]={"c6bb0e117f98",1272901523,"The array form of \'new\' can never have initializers.","The array form of \'new\' can never have initializers.\n\nllvm-svn: 102917"},
[j]={{tb,2377,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  // ...\n  // Array \'new\' can\'t have any initializers except empty parentheses.\n  // Initializer lists are also allowed, in C++11. Rely on the parser for the\n  // dialect distinction.\n  if (ArraySize && !isLegalArrayNewInitializer(initStyle, Initializer)) {\n    // ...\n    Diag(StartLoc, diag::err_new_array_init_args) << InitRange;"}},
[j]={{tb,2377,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  // ...\n  // Array \'new\' can\'t have any initializers except empty parentheses.\n  // Initializer lists are also allowed, in C++11. Rely on the parser for the\n  // dialect distinction.\n  if (ArraySize && !isLegalArrayNewInitializer(initStyle, Initializer)) {\n    // ...\n    Diag(StartLoc, diag::err_new_array_init_args) << InitRange;"}},
[l]={
[l]={
Line 3,302: Line 3,303:
},
},
["err_new_array_nonconst"]={
["err_new_array_nonconst"]={
[i]="err_new_array_nonconst",
[c]="err_new_array_nonconst",
[h]="only the first dimension of an allocated array may have dynamic size",
[d]="only the first dimension of an allocated array may have dynamic size",
[e]="only the first dimension of an allocated array may have dynamic size",
[f]=k,
[g]="only the first dimension of an allocated array may have dynamic size",
[g]="only the first dimension of an allocated array may have dynamic size",
[b]=k,
[h]=a,
[e]="only the first dimension of an allocated array may have dynamic size",
[i]=m,
[d]=a,
[b]={ib,1237025389,fb,gb},
[f]=m,
[c]={hb,1237025389,gb,fb},
[j]={{tb,1899,"/// Parsed a C++ \'new\' expression (C++ 5.3.4).\n///\n/// E.g.:\n/// @code new (memory) int[size][4] @endcode\n/// or\n/// @code ::new Foo(23, \"hello\") @endcode\n///\n/// \\param StartLoc The first location of the expression.\n/// \\param UseGlobal True if \'new\' was prefixed with \'::\'.\n/// \\param PlacementLParen Opening paren of the placement arguments.\n/// \\param PlacementArgs Placement new arguments.\n/// \\param PlacementRParen Closing paren of the placement arguments.\n/// \\param TypeIdParens If the type is in parens, the source range.\n/// \\param D The type to be allocated, as well as array dimensions.\n/// \\param Initializer The initializing expression or initializer-list, or null\n///  if there is none.\nExprResult Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, Declarator &D, Expr *Initializer) {\n  // ...\n  // Every dimension shall be of constant size.\n  if (ArraySize) {\n    for (unsigned I = 0, N = D.getNumTypeObjects(); I < N; ++I) {\n      // ...\n      if (Expr *NumElts = (Expr *)Array.NumElts) {\n        if (!NumElts->isTypeDependent() && !NumElts->isValueDependent()) {\n          // FIXME: GCC permits constant folding here. We should either do so consistently\n          // or not do so at all, rather than changing behavior in C++14 onwards.\n          if (getLangOpts().CPlusPlus14) {\n          // ...\n          } else {\n            Array.NumElts = VerifyIntegerConstantExpression(NumElts, nullptr, diag::err_new_array_nonconst, AllowFold).get();"}},
[j]={{tb,1899,"/// Parsed a C++ \'new\' expression (C++ 5.3.4).\n///\n/// E.g.:\n/// @code new (memory) int[size][4] @endcode\n/// or\n/// @code ::new Foo(23, \"hello\") @endcode\n///\n/// \\param StartLoc The first location of the expression.\n/// \\param UseGlobal True if \'new\' was prefixed with \'::\'.\n/// \\param PlacementLParen Opening paren of the placement arguments.\n/// \\param PlacementArgs Placement new arguments.\n/// \\param PlacementRParen Closing paren of the placement arguments.\n/// \\param TypeIdParens If the type is in parens, the source range.\n/// \\param D The type to be allocated, as well as array dimensions.\n/// \\param Initializer The initializing expression or initializer-list, or null\n///  if there is none.\nExprResult Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, Declarator &D, Expr *Initializer) {\n  // ...\n  // Every dimension shall be of constant size.\n  if (ArraySize) {\n    for (unsigned I = 0, N = D.getNumTypeObjects(); I < N; ++I) {\n      // ...\n      if (Expr *NumElts = (Expr *)Array.NumElts) {\n        if (!NumElts->isTypeDependent() && !NumElts->isValueDependent()) {\n          // FIXME: GCC permits constant folding here. We should either do so consistently\n          // or not do so at all, rather than changing behavior in C++14 onwards.\n          if (getLangOpts().CPlusPlus14) {\n          // ...\n          } else {\n            Array.NumElts = VerifyIntegerConstantExpression(NumElts, nullptr, diag::err_new_array_nonconst, AllowFold).get();"}},
[l]={
[l]={
Line 3,316: Line 3,317:
},
},
["err_new_array_of_auto"]={
["err_new_array_of_auto"]={
[i]="err_new_array_of_auto",
[c]="err_new_array_of_auto",
[h]="cannot allocate array of \'auto\'",
[d]="cannot allocate array of \'auto\'",
[e]="cannot allocate array of \'auto\'",
[f]=k,
[g]="cannot allocate array of \'auto\'",
[g]="cannot allocate array of \'auto\'",
[b]=k,
[h]=a,
[e]="cannot allocate array of \'auto\'",
[i]=m,
[d]=a,
[b]={"30482bc78659",1298171975,"Implement the C++0x deduced \'auto\' feature.","Implement the C++0x deduced \'auto\' feature.\n\nThis fixes PR 8738, 9060 and 9132.\n\nllvm-svn: 126069"},
[f]=m,
[c]={"30482bc78659",1298171975,"Implement the C++0x deduced \'auto\' feature.","Implement the C++0x deduced \'auto\' feature.\n\nThis fixes PR 8738, 9060 and 9132.\n\nllvm-svn: 126069"},
[j]={{tb,1863,"/// Parsed a C++ \'new\' expression (C++ 5.3.4).\n///\n/// E.g.:\n/// @code new (memory) int[size][4] @endcode\n/// or\n/// @code ::new Foo(23, \"hello\") @endcode\n///\n/// \\param StartLoc The first location of the expression.\n/// \\param UseGlobal True if \'new\' was prefixed with \'::\'.\n/// \\param PlacementLParen Opening paren of the placement arguments.\n/// \\param PlacementArgs Placement new arguments.\n/// \\param PlacementRParen Closing paren of the placement arguments.\n/// \\param TypeIdParens If the type is in parens, the source range.\n/// \\param D The type to be allocated, as well as array dimensions.\n/// \\param Initializer The initializing expression or initializer-list, or null\n///  if there is none.\nExprResult Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, Declarator &D, Expr *Initializer) {\n  // ...\n  // If the specified type is an array, unwrap it and save the expression.\n  if (D.getNumTypeObjects() > 0 && D.getTypeObject(0).Kind == DeclaratorChunk::Array) {\n    // ...\n    if (D.getDeclSpec().hasAutoTypeSpec())\n      return ExprError(Diag(Chunk.Loc, diag::err_new_array_of_auto) << D.getSourceRange());"}}
[j]={{tb,1863,"/// Parsed a C++ \'new\' expression (C++ 5.3.4).\n///\n/// E.g.:\n/// @code new (memory) int[size][4] @endcode\n/// or\n/// @code ::new Foo(23, \"hello\") @endcode\n///\n/// \\param StartLoc The first location of the expression.\n/// \\param UseGlobal True if \'new\' was prefixed with \'::\'.\n/// \\param PlacementLParen Opening paren of the placement arguments.\n/// \\param PlacementArgs Placement new arguments.\n/// \\param PlacementRParen Closing paren of the placement arguments.\n/// \\param TypeIdParens If the type is in parens, the source range.\n/// \\param D The type to be allocated, as well as array dimensions.\n/// \\param Initializer The initializing expression or initializer-list, or null\n///  if there is none.\nExprResult Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, Declarator &D, Expr *Initializer) {\n  // ...\n  // If the specified type is an array, unwrap it and save the expression.\n  if (D.getNumTypeObjects() > 0 && D.getTypeObject(0).Kind == DeclaratorChunk::Array) {\n    // ...\n    if (D.getDeclSpec().hasAutoTypeSpec())\n      return ExprError(Diag(Chunk.Loc, diag::err_new_array_of_auto) << D.getSourceRange());"}}
},
},
["err_new_array_size_unknown_from_init"]={
["err_new_array_size_unknown_from_init"]={
[i]={{nil,x,"err_new_array_size_unknown_from_init"}},
[c]={{nil,z,"err_new_array_size_unknown_from_init"}},
[h]={{nil,x,"cannot determine allocated array size from initializer"}},
[d]={{nil,z,"cannot determine allocated array size from initializer"}},
[g]={{nil,x,"cannot determine allocated array size from initializer"}},
[e]={{nil,z,"cannot determine allocated array size from initializer"}},
[b]=k,
[f]=k,
[e]="cannot determine allocated array size from initializer",
[g]="cannot determine allocated array size from initializer",
[d]=a,
[h]=a,
[f]={{nil,x,m}},
[i]={{nil,z,m}},
[c]={"b9fb121a62de",1557114435,"[c++20] Implement P1009R2: allow omitting the array bound in an array","[c++20] Implement P1009R2: allow omitting the array bound in an array\nnew expression.\n\nThis was voted into C++20 as a defect report resolution, so we\nretroactively apply it to all prior language modes (though it can never\nactually be used before C++11 mode).\n\nllvm-svn: 360006"},
[b]={"b9fb121a62de",1557114435,"[c++20] Implement P1009R2: allow omitting the array bound in an array","[c++20] Implement P1009R2: allow omitting the array bound in an array\nnew expression.\n\nThis was voted into C++20 as a defect report resolution, so we\nretroactively apply it to all prior language modes (though it can never\nactually be used before C++11 mode).\n\nllvm-svn: 360006"},
[j]={{tb,2426,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  // ...\n  // If we can perform the initialization, and we\'ve not already done so,\n  // do it now.\n  if (!AllocType->isDependentType() && !Expr::hasAnyTypeDependentArguments(Exprs)) {\n    // ...\n    if (ArraySize && !*ArraySize) {\n      // ...\n      if (CAT) {\n      // ...\n      } else {\n        Diag(TypeRange.getEnd(), diag::err_new_array_size_unknown_from_init) << Initializer->getSourceRange();"}},
[j]={{tb,2426,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  // ...\n  // If we can perform the initialization, and we\'ve not already done so,\n  // do it now.\n  if (!AllocType->isDependentType() && !Expr::hasAnyTypeDependentArguments(Exprs)) {\n    // ...\n    if (ArraySize && !*ArraySize) {\n      // ...\n      if (CAT) {\n      // ...\n      } else {\n        Diag(TypeRange.getEnd(), diag::err_new_array_size_unknown_from_init) << Initializer->getSourceRange();"}},
[l]={
[l]={
Line 3,341: Line 3,342:
},
},
["err_new_incomplete_or_sizeless_type"]={
["err_new_incomplete_or_sizeless_type"]={
[i]={{nil,w,"err_new_incomplete_or_sizeless_type"}},
[c]={{nil,x,"err_new_incomplete_or_sizeless_type"}},
[h]={{nil,w,"allocation of %select{incomplete|sizeless}0 type %1"}},
[d]={{nil,x,"allocation of %select{incomplete|sizeless}0 type %1"}},
[g]={{nil,w,{"allocation of ",{"incomplete","sizeless"}," type B"}}},
[e]={{nil,x,{"allocation of ",{"incomplete","sizeless"}," type B"}}},
[b]=k,
[f]=k,
[e]="allocation of (?:incomplete|sizeless) type (.*?)",
[g]="allocation of (?:incomplete|sizeless) type (.*?)",
[d]=a,
[h]=a,
[f]={{nil,w,m}},
[i]={{nil,x,m}},
[c]={Hb,1576908663,Eb,Kb},
[b]={Hb,1576908663,Gb,Fb},
[j]={{tb,2465,"/// Checks that a type is suitable as the allocated type\n/// in a new-expression.\nbool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc, SourceRange R) {\n  // ...\n  else if (!AllocType->isDependentType() && RequireCompleteSizedType(Loc, AllocType, diag::err_new_incomplete_or_sizeless_type, R))"}},
[j]={{tb,2465,"/// Checks that a type is suitable as the allocated type\n/// in a new-expression.\nbool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc, SourceRange R) {\n  // ...\n  else if (!AllocType->isDependentType() && RequireCompleteSizedType(Loc, AllocType, diag::err_new_incomplete_or_sizeless_type, R))"}},
[l]={
[l]={
Line 3,355: Line 3,356:
},
},
["err_no_accessor_for_property"]={
["err_no_accessor_for_property"]={
[i]="err_no_accessor_for_property",
[c]="err_no_accessor_for_property",
[h]="no %select{getter|setter}0 defined for property %1",
[d]="no %select{getter|setter}0 defined for property %1",
[g]={{nil,nil,{xb,{"getter","setter"}," defined for property B"}}},
[e]={{nil,nil,{vb,{"getter","setter"}," defined for property B"}}},
[b]=k,
[f]=k,
[e]="no (?:getter|setter) defined for property (.*?)",
[g]="no (?:getter|setter) defined for property (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"213cf41a5874",1388075704,"s/getter_setter/accessor No functional changes intended.","s/getter_setter/accessor No functional changes intended.\n\nThanks to Alp Toker for the naming suggestion!\n\nllvm-svn: 198052"},
[b]={"213cf41a5874",1388075704,"s/getter_setter/accessor No functional changes intended.","s/getter_setter/accessor No functional changes intended.\n\nThanks to Alp Toker for the naming suggestion!\n\nllvm-svn: 198052"},
[j]={{P,1471,"ExprResult MSPropertyOpBuilder::buildGet() {\n  if (!RefExpr->getPropertyDecl()->hasGetter()) {\n    S.Diag(RefExpr->getMemberLoc(), diag::err_no_accessor_for_property) << 0 /* getter */ << RefExpr->getPropertyDecl();"},{P,1500,"ExprResult MSPropertyOpBuilder::buildSet(Expr *op, SourceLocation sl, bool captureSetValueAsResult) {\n  if (!RefExpr->getPropertyDecl()->hasSetter()) {\n    S.Diag(RefExpr->getMemberLoc(), diag::err_no_accessor_for_property) << 1 /* setter */ << RefExpr->getPropertyDecl();"}},
[j]={{P,1471,"ExprResult MSPropertyOpBuilder::buildGet() {\n  if (!RefExpr->getPropertyDecl()->hasGetter()) {\n    S.Diag(RefExpr->getMemberLoc(), diag::err_no_accessor_for_property) << 0 /* getter */ << RefExpr->getPropertyDecl();"},{P,1500,"ExprResult MSPropertyOpBuilder::buildSet(Expr *op, SourceLocation sl, bool captureSetValueAsResult) {\n  if (!RefExpr->getPropertyDecl()->hasSetter()) {\n    S.Diag(RefExpr->getMemberLoc(), diag::err_no_accessor_for_property) << 1 /* setter */ << RefExpr->getPropertyDecl();"}},
[l]={
[l]={
Line 3,369: Line 3,370:
},
},
["err_no_base_classes"]={
["err_no_base_classes"]={
[i]="err_no_base_classes",
[c]="err_no_base_classes",
[h]="invalid use of \'__super\', %0 has no base classes",
[d]="invalid use of \'__super\', %0 has no base classes",
[g]="invalid use of \'__super\', A has no base classes",
[e]="invalid use of \'__super\', A has no base classes",
[b]=k,
[f]=k,
[e]="invalid use of \'__super\', (.*?) has no base classes",
[g]="invalid use of \'__super\', (.*?) has no base classes",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236).","-ms-extensions: Implement __super scope specifier (PR13236).\n\nWe build a NestedNameSpecifier that records the CXXRecordDecl in which\n__super appeared. Name lookup is performed in all base classes of the\nrecorded CXXRecordDecl. Use of __super is allowed only inside class and\nmember function scope.\n\nllvm-svn: 218484"},
[b]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236).","-ms-extensions: Implement __super scope specifier (PR13236).\n\nWe build a NestedNameSpecifier that records the CXXRecordDecl in which\n__super appeared. Name lookup is performed in all base classes of the\nrecorded CXXRecordDecl. Use of __super is allowed only inside class and\nmember function scope.\n\nllvm-svn: 218484"},
[j]={{Tb,337,"bool Sema::ActOnSuperScopeSpecifier(SourceLocation SuperLoc, SourceLocation ColonColonLoc, CXXScopeSpec &SS) {\n  // ...\n  if (!RD) {\n  // ...\n  } else if (RD->getNumBases() == 0) {\n    Diag(SuperLoc, diag::err_no_base_classes) << RD->getName();"}},
[j]={{cc,337,"bool Sema::ActOnSuperScopeSpecifier(SourceLocation SuperLoc, SourceLocation ColonColonLoc, CXXScopeSpec &SS) {\n  // ...\n  if (!RD) {\n  // ...\n  } else if (RD->getNumBases() == 0) {\n    Diag(SuperLoc, diag::err_no_base_classes) << RD->getName();"}},
[l]={
[l]={
["clang/test/SemaCXX/MicrosoftSuper.cpp"]={"clang/test/SemaCXX/MicrosoftSuper.cpp:5:3: error: invalid use of \'__super\', Errors has no base classes"}
["clang/test/SemaCXX/MicrosoftSuper.cpp"]={"clang/test/SemaCXX/MicrosoftSuper.cpp:5:3: error: invalid use of \'__super\', Errors has no base classes"}
Line 3,383: Line 3,384:
},
},
["err_no_declarators"]={
["err_no_declarators"]={
[i]={{nil,C,"err_no_declarators"}},
[c]={{nil,D,"err_no_declarators"}},
[h]={{nil,C,"declaration does not declare anything"}},
[d]={{nil,D,"declaration does not declare anything"}},
[g]={{nil,C,"declaration does not declare anything"}},
[e]={{nil,D,"declaration does not declare anything"}},
[b]=k,
[f]=k,
[e]="declaration does not declare anything",
[g]="declaration does not declare anything",
[d]=a,
[h]=a,
[f]={{nil,C,m}},
[i]={{nil,D,m}},
[c]={H,1236199783,I,G},
[b]={J,1236199783,H,I},
[j]={{o,5265,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  // ...\n  // C 6.7/2:\n  //  A declaration [...] shall declare at least a declarator [...], a tag,\n  //  or the members of an enumeration.\n  // C++ [dcl.dcl]p3:\n  //  [If there are no declarators], and except for the declaration of an\n  //  unnamed bit-field, the decl-specifier-seq shall introduce one or more\n  //  names into the program, or shall redeclare a name introduced by a\n  //  previous declaration.\n  if (!DeclaresAnything) {\n    // ...\n    Diag(DS.getBeginLoc(), (IsExplicitInstantiation || !TemplateParams.empty()) ? diag::err_no_declarators : diag::ext_no_declarators) << DS.getSourceRange();"}},
[j]={{o,5265,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  // ...\n  // C 6.7/2:\n  //  A declaration [...] shall declare at least a declarator [...], a tag,\n  //  or the members of an enumeration.\n  // C++ [dcl.dcl]p3:\n  //  [If there are no declarators], and except for the declaration of an\n  //  unnamed bit-field, the decl-specifier-seq shall introduce one or more\n  //  names into the program, or shall redeclare a name introduced by a\n  //  previous declaration.\n  if (!DeclaresAnything) {\n    // ...\n    Diag(DS.getBeginLoc(), (IsExplicitInstantiation || !TemplateParams.empty()) ? diag::err_no_declarators : diag::ext_no_declarators) << DS.getSourceRange();"}},
[l]={
[l]={
Line 3,397: Line 3,398:
},
},
["err_no_dynamic_cast_with_fno_rtti"]={
["err_no_dynamic_cast_with_fno_rtti"]={
[i]="err_no_dynamic_cast_with_fno_rtti",
[c]="err_no_dynamic_cast_with_fno_rtti",
[h]={{nil,q,"use of dynamic_cast requires -frtti"},{t,nil,"cannot use dynamic_cast with -fno-rtti"}},
[d]={{nil,q,"use of dynamic_cast requires -frtti"},{t,nil,"cannot use dynamic_cast with -fno-rtti"}},
[g]={{nil,q,"use of dynamic_cast requires -frtti"},{t,nil,"cannot use dynamic_cast with -fno-rtti"}},
[e]={{nil,q,"use of dynamic_cast requires -frtti"},{t,nil,"cannot use dynamic_cast with -fno-rtti"}},
[b]=k,
[f]=k,
[e]="use of dynamic_cast requires \\-frtti",
[g]="use of dynamic_cast requires \\-frtti",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"cb6f943ada4c",1375345712,"Check dynamic_cast is not used with -fno-rtti, unless it is a noop or can be resolved statically.","Check dynamic_cast is not used with -fno-rtti, unless it is a noop or can be resolved statically.\n\nllvm-svn: 187564"},
[b]={"cb6f943ada4c",1375345712,"Check dynamic_cast is not used with -fno-rtti, unless it is a noop or can be resolved statically.","Check dynamic_cast is not used with -fno-rtti, unless it is a noop or can be resolved statically.\n\nllvm-svn: 187564"},
[j]={{"clang/lib/Sema/SemaCast.cpp",922,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  // ...\n  // dynamic_cast is not available with -fno-rtti.\n  // As an exception, dynamic_cast to void* is available because it doesn\'t\n  // use RTTI.\n  if (!Self.getLangOpts().RTTI && !DestPointee->isVoidType()) {\n    Self.Diag(OpRange.getBegin(), diag::err_no_dynamic_cast_with_fno_rtti);"}},
[j]={{"clang/lib/Sema/SemaCast.cpp",922,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  // ...\n  // dynamic_cast is not available with -fno-rtti.\n  // As an exception, dynamic_cast to void* is available because it doesn\'t\n  // use RTTI.\n  if (!Self.getLangOpts().RTTI && !DestPointee->isVoidType()) {\n    Self.Diag(OpRange.getBegin(), diag::err_no_dynamic_cast_with_fno_rtti);"}},
[l]={
[l]={
Line 3,411: Line 3,412:
},
},
["err_no_external_assembler"]={
["err_no_external_assembler"]={
[i]="err_no_external_assembler",
[c]="err_no_external_assembler",
[h]="there is no external assembler that can be used on this platform",
[d]="there is no external assembler that can be used on this platform",
[e]="there is no external assembler that can be used on this platform",
[f]=k,
[g]="there is no external assembler that can be used on this platform",
[g]="there is no external assembler that can be used on this platform",
[b]=k,
[h]=a,
[e]="there is no external assembler that can be used on this platform",
[i]=w,
[d]=a,
[b]={"c8d4f0fa1d27",1385108866,"Tidy up the no-external-assembler diag","Tidy up the no-external-assembler diag\n\nDiags aren\'t usually in the first person, and \'windows\' isn\'t the correct\nproduct spelling to use in prose. Sidestep issues completely by making this\nerror message platform-neutral.\n\nllvm-svn: 195422"},
[f]=a,
[c]={"c8d4f0fa1d27",1385108866,"Tidy up the no-external-assembler diag","Tidy up the no-external-assembler diag\n\nDiags aren\'t usually in the first person, and \'windows\' isn\'t the correct\nproduct spelling to use in prose. Sidestep issues completely by making this\nerror message platform-neutral.\n\nllvm-svn: 195422"},
[j]={{"clang/lib/Driver/ToolChains/MSVC.cpp",463,"Tool *MSVCToolChain::buildAssembler() const {\n  // ...\n  getDriver().Diag(clang::diag::err_no_external_assembler);"},{"clang/lib/Driver/ToolChains/PS4CPU.cpp",333,"Tool *toolchains::PS5CPU::buildAssembler() const {\n  // ...\n  getDriver().Diag(clang::diag::err_no_external_assembler);"}}
[j]={{"clang/lib/Driver/ToolChains/MSVC.cpp",463,"Tool *MSVCToolChain::buildAssembler() const {\n  // ...\n  getDriver().Diag(clang::diag::err_no_external_assembler);"},{"clang/lib/Driver/ToolChains/PS4CPU.cpp",333,"Tool *toolchains::PS5CPU::buildAssembler() const {\n  // ...\n  getDriver().Diag(clang::diag::err_no_external_assembler);"}}
},
},
["err_no_matching_local_friend"]={
["err_no_matching_local_friend"]={
[i]="err_no_matching_local_friend",
[c]="err_no_matching_local_friend",
[h]="no matching function found in local scope",
[d]="no matching function found in local scope",
[e]="no matching function found in local scope",
[f]=k,
[g]="no matching function found in local scope",
[g]="no matching function found in local scope",
[b]=k,
[h]=a,
[e]="no matching function found in local scope",
[i]=m,
[d]=a,
[b]={"f7cfb2212c65",1286948715,"Support friend function declarations in local classes correctly.","Support friend function declarations in local classes correctly.\nFixes a crash and diagnoses the error condition of an unqualified\nfriend which doesn\'t resolve to something.  I\'m still not certain how\nthis is useful.\n\nllvm-svn: 116393"},
[f]=m,
[c]={"f7cfb2212c65",1286948715,"Support friend function declarations in local classes correctly.","Support friend function declarations in local classes correctly.\nFixes a crash and diagnoses the error condition of an unqualified\nfriend which doesn\'t resolve to something.  I\'m still not certain how\nthis is useful.\n\nllvm-svn: 116393"},
[j]={{o,8956,"/// 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  // ...\n  unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"}},
[j]={{o,8956,"/// 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  // ...\n  unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"}},
[l]={
[l]={
Line 3,436: Line 3,437:
},
},
["err_no_matching_local_friend_suggest"]={
["err_no_matching_local_friend_suggest"]={
[i]="err_no_matching_local_friend_suggest",
[c]="err_no_matching_local_friend_suggest",
[h]="no matching function %0 found in local scope; did you mean %3?",
[d]="no matching function %0 found in local scope; did you mean %3?",
[g]="no matching function A found in local scope; did you mean D?",
[e]="no matching function A found in local scope; did you mean D?",
[b]=k,
[f]=k,
[e]="no matching function (.*?) found in local scope; did you mean (.*?)\\?",
[g]="no matching function (.*?) found in local scope; did you mean (.*?)\\?",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"fd81a350e262",1313691552,"Rework DiagnoseInvalidRedeclaration to add the ability to correct typos when","Rework DiagnoseInvalidRedeclaration to add the ability to correct typos when\ndiagnosing invalid function redeclarations.\n\nllvm-svn: 137966"},
[b]={"fd81a350e262",1313691552,"Rework DiagnoseInvalidRedeclaration to add the ability to correct typos when","Rework DiagnoseInvalidRedeclaration to add the ability to correct typos when\ndiagnosing invalid function redeclarations.\n\nllvm-svn: 137966"},
[j]={{o,9041,"/// 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  // ...\n  if (!Prev.empty()) {\n  // ...\n  } else if ((Correction = SemaRef.CorrectTypo(Prev.getLookupNameInfo(), Prev.getLookupKind(), S, &ExtraArgs.D.getCXXScopeSpec(), CCC, Sema::CTK_ErrorRecovery, IsLocalFriend ? nullptr : NewDC))) {\n    // ...\n    if (Result) {\n      // ...\n      SemaRef.diagnoseTypo(Correction, SemaRef.PDiag(IsLocalFriend ? diag::err_no_matching_local_friend_suggest : diag::err_member_decl_does_not_match_suggest) << Name << NewDC << IsDefinition);"}},
[j]={{o,9041,"/// 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  // ...\n  if (!Prev.empty()) {\n  // ...\n  } else if ((Correction = SemaRef.CorrectTypo(Prev.getLookupNameInfo(), Prev.getLookupKind(), S, &ExtraArgs.D.getCXXScopeSpec(), CCC, Sema::CTK_ErrorRecovery, IsLocalFriend ? nullptr : NewDC))) {\n    // ...\n    if (Result) {\n      // ...\n      SemaRef.diagnoseTypo(Correction, SemaRef.PDiag(IsLocalFriend ? diag::err_no_matching_local_friend_suggest : diag::err_member_decl_does_not_match_suggest) << Name << NewDC << IsDefinition);"}},
[l]={
[l]={
Line 3,450: Line 3,451:
},
},
["err_no_matching_param"]={
["err_no_matching_param"]={
[i]="err_no_matching_param",
[c]="err_no_matching_param",
[h]="parameter named %0 is missing",
[d]="parameter named %0 is missing",
[g]="parameter named A is missing",
[e]="parameter named A is missing",
[b]=k,
[f]=k,
[e]="parameter named (.*?) is missing",
[g]="parameter named (.*?) is missing",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={H,1236199783,I,G},
[b]={J,1236199783,H,I},
[j]={{Cb,1564,"/// ParseKNRParamDeclarations - Parse \'declaration-list[opt]\' which provides\n/// types for a function with a K&R-style identifier list for arguments.\nvoid Parser::ParseKNRParamDeclarations(Declarator &D) {\n  // ...\n  // Read all the argument declarations.\n  while (isDeclarationSpecifier(ImplicitTypenameContext::No)) {\n    // ...\n    // Handle the full declarator list.\n    while (true) {\n      // ...\n      if (Param &&\n        // ...\n        // Scan the argument list looking for the correct param to apply this\n        // type.\n        for (unsigned i = 0;; ++i) {\n          // C99 6.9.1p6: those declarators shall declare only identifiers from\n          // the identifier list.\n          if (i == FTI.NumParams) {\n            Diag(ParmDeclarator.getIdentifierLoc(), diag::err_no_matching_param) << ParmDeclarator.getIdentifier();"}}
[j]={{Nb,1564,"/// ParseKNRParamDeclarations - Parse \'declaration-list[opt]\' which provides\n/// types for a function with a K&R-style identifier list for arguments.\nvoid Parser::ParseKNRParamDeclarations(Declarator &D) {\n  // ...\n  // Read all the argument declarations.\n  while (isDeclarationSpecifier(ImplicitTypenameContext::No)) {\n    // ...\n    // Handle the full declarator list.\n    while (true) {\n      // ...\n      if (Param &&\n        // ...\n        // Scan the argument list looking for the correct param to apply this\n        // type.\n        for (unsigned i = 0;; ++i) {\n          // C99 6.9.1p6: those declarators shall declare only identifiers from\n          // the identifier list.\n          if (i == FTI.NumParams) {\n            Diag(ParmDeclarator.getIdentifierLoc(), diag::err_no_matching_param) << ParmDeclarator.getIdentifier();"}}
},
},
["err_no_member"]={
["err_no_member"]={
[i]="err_no_member",
[c]="err_no_member",
[h]="no member named %0 in %1",
[d]="no member named %0 in %1",
[g]="no member named A in B",
[e]="no member named A in B",
[b]=k,
[f]=k,
[e]="no member named (.*?) in (.*?)",
[g]="no member named (.*?) in (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"e40876a50cf3",1255468604,"Unify our diagnostic printing for errors of the form, \"we didn\'t like","Unify our diagnostic printing for errors of the form, \"we didn\'t like\nwhat we found when we looked into <blah>\", where <blah> is a\nDeclContext*. We can now format DeclContext*\'s in nice ways, e.g.,\n\"namespace N\", \"the global namespace\", \"\'class Foo\'\".\n\nThis is part of PR3990, but we\'re not quite there yet.\n\nllvm-svn: 84028"},
[b]={"e40876a50cf3",1255468604,"Unify our diagnostic printing for errors of the form, \"we didn\'t like","Unify our diagnostic printing for errors of the form, \"we didn\'t like\nwhat we found when we looked into <blah>\", where <blah> is a\nDeclContext*. We can now format DeclContext*\'s in nice ways, e.g.,\n\"namespace N\", \"the global namespace\", \"\'class Foo\'\".\n\nThis is part of PR3990, but we\'re not quite there yet.\n\nllvm-svn: 84028"},
[j]={{"clang/lib/Sema/SemaCoroutine.cpp",316,"static ExprResult buildMemberCall(Sema &S, Expr *Base, SourceLocation Loc, StringRef Name, MultiExprArg Args) {\n  // ...\n  // We meant exactly what we asked for. No need for typo correction.\n  if (auto *TE = dyn_cast<TypoExpr>(Result.get())) {\n    // ...\n    S.Diag(Loc, diag::err_no_member) << NameInfo.getName() << Base->getType()->getAsCXXRecordDecl() << Base->getSourceRange();"},{Tb,823,"/// 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  // ...\n  if (!Found.empty()) {\n  // ...\n  } else if (SS.isSet())\n    Diag(IdInfo.IdentifierLoc, diag::err_no_member) << IdInfo.Identifier << LookupCtx << SS.getRange();"},{o,8033,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    // Merge the decl with the existing one if appropriate.\n    if (!Previous.empty()) {\n    // ...\n    } else if (D.getCXXScopeSpec().isSet()) {\n      // ...\n      Diag(D.getIdentifierLoc(), diag::err_no_member) << Name << computeDeclContext(D.getCXXScopeSpec(), true) << D.getCXXScopeSpec().getRange();"},{O,12762,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n///  instantiation of an unresolved using declaration.  We treat\n///  the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n  // ...\n  // Try to correct typos if possible. If constructor name lookup finds no\n  // results, that means the named class has no explicit constructors, and we\n  // suppressed declaring implicit ones (probably because it\'s dependent or\n  // invalid).\n  if (R.empty() && NameInfo.getName().getNameKind() != DeclarationName::CXXConstructorName) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery)) {\n    // ...\n    } else {\n      Diag(IdentLoc, diag::err_no_member) << NameInfo.getName() << LookupContext << SS.getRange();"},{V,2277,"static void emitEmptyLookupTypoDiagnostic(const TypoCorrection &TC, Sema &SemaRef, const CXXScopeSpec &SS, DeclarationName Typo, SourceLocation TypoLoc, ArrayRef<Expr *> Args, unsigned DiagnosticID, unsigned DiagnosticSuggestID) {\n  // ...\n  if (!TC) {\n    // Emit a special diagnostic for failed member lookups.\n    // FIXME: computing the declaration context might fail here (?)\n    if (Ctx)\n      SemaRef.Diag(TypoLoc, diag::err_no_member) << Typo << Ctx << SS.getRange();"},{V,2525,"/// 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  // ...\n  // Emit a special diagnostic for failed member lookups.\n  // FIXME: computing the declaration context might fail here (?)\n  if (!SS.isEmpty()) {\n    Diag(R.getNameLoc(), diag::err_no_member) << Name << computeDeclContext(SS, false) << SS.getRange();"},{V,2869,"/// BuildQualifiedDeclarationNameExpr - Build a C++ qualified\n/// declaration name, generally during template instantiation.\n/// There\'s a large number of things which don\'t need to be done along\n/// this path.\nExprResult Sema::BuildQualifiedDeclarationNameExpr(CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, bool IsAddressOfOperand, const Scope *S, TypeSourceInfo **RecoveryTSI) {\n  // ...\n  if (R.empty()) {\n    // ...\n    Diag(NameInfo.getLoc(), diag::err_no_member) << NameInfo.getName() << DC << SS.getRange();"},{V,16687,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n  // ...\n  for (const OffsetOfComponent &OC : Components) {\n    // ...\n    if (!MemberDecl)\n      return ExprError(Diag(BuiltinLoc, diag::err_no_member) << OC.U.IdentInfo << RD << SourceRange(OC.LocStart, OC.LocEnd));"},{Rb,720,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  // ...\n  TE = SemaRef.CorrectTypoDelayed(\n      // ...\n      [=, &SemaRef](const TypoCorrection &TC) {\n        if (TC) {\n        // ...\n        } else {\n          SemaRef.Diag(TypoLoc, diag::err_no_member) << Typo << DC << BaseRange;"},{Rb,1029,"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  // ...\n  if (R.empty()) {\n    // ...\n    Diag(R.getNameLoc(), diag::err_no_member) << MemberName << DC << (BaseExpr ? BaseExpr->getSourceRange() : SourceRange());"},{Y,5035,"// We actually only call this from template instantiation.\nExprResult Sema::BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n  // ...\n  if (R.empty()) {\n    Diag(NameInfo.getLoc(), diag::err_no_member) << NameInfo.getName() << DC << SS.getRange();"},{Y,5159,"/// Form a template name from a name that is syntactically required to name a\n/// template, either due to use of the \'template\' keyword or because a name in\n/// this syntactic context is assumed to name a template (C++ [temp.names]p2-4).\n///\n/// This action forms a template name given the name of the template and its\n/// optional scope specifier. This is used when the \'template\' keyword is used\n/// or when the parsing context unambiguously treats a following \'<\' as\n/// introducing a template argument list. Note that this may produce a\n/// non-dependent template name if we can perform the lookup now and identify\n/// the named template.\n///\n/// For example, given \"x.MetaFun::template apply\", the scope specifier\n/// \\p SS will be \"MetaFun::\", \\p TemplateKWLoc contains the location\n/// of the \"template\" keyword, and \"apply\" is the \\p Name.\nTemplateNameKind Sema::ActOnTemplateName(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const UnqualifiedId &Name, ParsedType ObjectType, bool EnteringContext, TemplateTy &Result, bool AllowInjectedClassName) {\n  // ...\n  if (!MemberOfUnknownSpecialization) {\n    // ...\n    if (!LookupTemplateName(R, S, SS, ObjectType.get(), EnteringContext, MOUS, RTK, nullptr, /*AllowTypoCorrection=*/false) && !R.isAmbiguous()) {\n      if (LookupCtx)\n        Diag(Name.getBeginLoc(), diag::err_no_member) << DNI.getName() << LookupCtx << SS.getRange();"}},
[j]={{"clang/lib/Sema/SemaCoroutine.cpp",316,"static ExprResult buildMemberCall(Sema &S, Expr *Base, SourceLocation Loc, StringRef Name, MultiExprArg Args) {\n  // ...\n  // We meant exactly what we asked for. No need for typo correction.\n  if (auto *TE = dyn_cast<TypoExpr>(Result.get())) {\n    // ...\n    S.Diag(Loc, diag::err_no_member) << NameInfo.getName() << Base->getType()->getAsCXXRecordDecl() << Base->getSourceRange();"},{cc,823,"/// 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  // ...\n  if (!Found.empty()) {\n  // ...\n  } else if (SS.isSet())\n    Diag(IdInfo.IdentifierLoc, diag::err_no_member) << IdInfo.Identifier << LookupCtx << SS.getRange();"},{o,8033,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    // Merge the decl with the existing one if appropriate.\n    if (!Previous.empty()) {\n    // ...\n    } else if (D.getCXXScopeSpec().isSet()) {\n      // ...\n      Diag(D.getIdentifierLoc(), diag::err_no_member) << Name << computeDeclContext(D.getCXXScopeSpec(), true) << D.getCXXScopeSpec().getRange();"},{Q,12762,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n///  instantiation of an unresolved using declaration.  We treat\n///  the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n  // ...\n  // Try to correct typos if possible. If constructor name lookup finds no\n  // results, that means the named class has no explicit constructors, and we\n  // suppressed declaring implicit ones (probably because it\'s dependent or\n  // invalid).\n  if (R.empty() && NameInfo.getName().getNameKind() != DeclarationName::CXXConstructorName) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery)) {\n    // ...\n    } else {\n      Diag(IdentLoc, diag::err_no_member) << NameInfo.getName() << LookupContext << SS.getRange();"},{W,2277,"static void emitEmptyLookupTypoDiagnostic(const TypoCorrection &TC, Sema &SemaRef, const CXXScopeSpec &SS, DeclarationName Typo, SourceLocation TypoLoc, ArrayRef<Expr *> Args, unsigned DiagnosticID, unsigned DiagnosticSuggestID) {\n  // ...\n  if (!TC) {\n    // Emit a special diagnostic for failed member lookups.\n    // FIXME: computing the declaration context might fail here (?)\n    if (Ctx)\n      SemaRef.Diag(TypoLoc, diag::err_no_member) << Typo << Ctx << SS.getRange();"},{W,2525,"/// 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  // ...\n  // Emit a special diagnostic for failed member lookups.\n  // FIXME: computing the declaration context might fail here (?)\n  if (!SS.isEmpty()) {\n    Diag(R.getNameLoc(), diag::err_no_member) << Name << computeDeclContext(SS, false) << SS.getRange();"},{W,2869,"/// BuildQualifiedDeclarationNameExpr - Build a C++ qualified\n/// declaration name, generally during template instantiation.\n/// There\'s a large number of things which don\'t need to be done along\n/// this path.\nExprResult Sema::BuildQualifiedDeclarationNameExpr(CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, bool IsAddressOfOperand, const Scope *S, TypeSourceInfo **RecoveryTSI) {\n  // ...\n  if (R.empty()) {\n    // ...\n    Diag(NameInfo.getLoc(), diag::err_no_member) << NameInfo.getName() << DC << SS.getRange();"},{W,16687,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n  // ...\n  for (const OffsetOfComponent &OC : Components) {\n    // ...\n    if (!MemberDecl)\n      return ExprError(Diag(BuiltinLoc, diag::err_no_member) << OC.U.IdentInfo << RD << SourceRange(OC.LocStart, OC.LocEnd));"},{Tb,720,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  // ...\n  TE = SemaRef.CorrectTypoDelayed(\n      // ...\n      [=, &SemaRef](const TypoCorrection &TC) {\n        if (TC) {\n        // ...\n        } else {\n          SemaRef.Diag(TypoLoc, diag::err_no_member) << Typo << DC << BaseRange;"},{Tb,1029,"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  // ...\n  if (R.empty()) {\n    // ...\n    Diag(R.getNameLoc(), diag::err_no_member) << MemberName << DC << (BaseExpr ? BaseExpr->getSourceRange() : SourceRange());"},{Y,5035,"// We actually only call this from template instantiation.\nExprResult Sema::BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n  // ...\n  if (R.empty()) {\n    Diag(NameInfo.getLoc(), diag::err_no_member) << NameInfo.getName() << DC << SS.getRange();"},{Y,5159,"/// Form a template name from a name that is syntactically required to name a\n/// template, either due to use of the \'template\' keyword or because a name in\n/// this syntactic context is assumed to name a template (C++ [temp.names]p2-4).\n///\n/// This action forms a template name given the name of the template and its\n/// optional scope specifier. This is used when the \'template\' keyword is used\n/// or when the parsing context unambiguously treats a following \'<\' as\n/// introducing a template argument list. Note that this may produce a\n/// non-dependent template name if we can perform the lookup now and identify\n/// the named template.\n///\n/// For example, given \"x.MetaFun::template apply\", the scope specifier\n/// \\p SS will be \"MetaFun::\", \\p TemplateKWLoc contains the location\n/// of the \"template\" keyword, and \"apply\" is the \\p Name.\nTemplateNameKind Sema::ActOnTemplateName(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const UnqualifiedId &Name, ParsedType ObjectType, bool EnteringContext, TemplateTy &Result, bool AllowInjectedClassName) {\n  // ...\n  if (!MemberOfUnknownSpecialization) {\n    // ...\n    if (!LookupTemplateName(R, S, SS, ObjectType.get(), EnteringContext, MOUS, RTK, nullptr, /*AllowTypoCorrection=*/false) && !R.isAmbiguous()) {\n      if (LookupCtx)\n        Diag(Name.getBeginLoc(), diag::err_no_member) << DNI.getName() << LookupCtx << SS.getRange();"}},
[l]={
[l]={
["clang/test/SemaTemplate/dependent-class-member-operator.cpp"]={"clang/test/SemaTemplate/dependent-class-member-operator.cpp:9:17: error: no member named \'operator+\' in \'C1<int>\'"}
["clang/test/SemaTemplate/dependent-class-member-operator.cpp"]={"clang/test/SemaTemplate/dependent-class-member-operator.cpp:9:17: error: no member named \'operator+\' in \'C1<int>\'"}
Line 3,475: Line 3,476:
},
},
["err_no_member_overloaded_arrow"]={
["err_no_member_overloaded_arrow"]={
[i]="err_no_member_overloaded_arrow",
[c]="err_no_member_overloaded_arrow",
[h]="no member named %0 in %1; did you mean to use \'->\' instead of \'.\'?",
[d]="no member named %0 in %1; did you mean to use \'->\' instead of \'.\'?",
[g]="no member named A in B; did you mean to use \'->\' instead of \'.\'?",
[e]="no member named A in B; did you mean to use \'->\' instead of \'.\'?",
[b]=k,
[f]=k,
[e]="no member named (.*?) in (.*?); did you mean to use \'\\-\\>\' instead of \'\\.\'\\?",
[g]="no member named (.*?) in (.*?); did you mean to use \'\\-\\>\' instead of \'\\.\'\\?",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"76e07347ba02",1335383394,"Add an error message with fixit hint for changing \'.\' to \'->\'.","Add an error message with fixit hint for changing \'.\' to \'->\'.\n\nThis is mainly for attempting to recover in cases where a class provides\na custom operator-> and a \'.\' was accidentally used instead of \'->\' when\naccessing a member of the object returned by the current object\'s\noperator->.\n\nllvm-svn: 155580"},
[b]={"76e07347ba02",1335383394,"Add an error message with fixit hint for changing \'.\' to \'->\'.","Add an error message with fixit hint for changing \'.\' to \'->\'.\n\nThis is mainly for attempting to recover in cases where a class provides\na custom operator-> and a \'.\' was accidentally used instead of \'->\' when\naccessing a member of the object returned by the current object\'s\noperator->.\n\nllvm-svn: 155580"},
[j]={{Rb,1023,"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  // ...\n  if (R.empty()) {\n    // ...\n    if (ExtraArgs) {\n      // ...\n      if (RetryExpr.isUsable()) {\n        Diag(OpLoc, diag::err_no_member_overloaded_arrow) << MemberName << DC << FixItHint::CreateReplacement(OpLoc, \"->\");"}},
[j]={{Tb,1023,"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  // ...\n  if (R.empty()) {\n    // ...\n    if (ExtraArgs) {\n      // ...\n      if (RetryExpr.isUsable()) {\n        Diag(OpLoc, diag::err_no_member_overloaded_arrow) << MemberName << DC << FixItHint::CreateReplacement(OpLoc, \"->\");"}},
[l]={
[l]={
["clang/test/SemaCXX/arrow-operator.cpp"]={"clang/test/SemaCXX/arrow-operator.cpp:61:9: error: no member named \'DoSomething\' in \'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>\'; did you mean to use \'->\' instead of \'.\'?","clang/test/SemaCXX/arrow-operator.cpp:62:9: error: no member named \'DoSamething\' in \'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>\'; did you mean to use \'->\' instead of \'.\'?"}
["clang/test/SemaCXX/arrow-operator.cpp"]={"clang/test/SemaCXX/arrow-operator.cpp:61:9: error: no member named \'DoSomething\' in \'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>\'; did you mean to use \'->\' instead of \'.\'?","clang/test/SemaCXX/arrow-operator.cpp:62:9: error: no member named \'DoSamething\' in \'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>\'; did you mean to use \'->\' instead of \'.\'?"}
Line 3,489: Line 3,490:
},
},
["err_no_member_suggest"]={
["err_no_member_suggest"]={
[i]="err_no_member_suggest",
[c]="err_no_member_suggest",
[h]="no member named %0 in %1; did you mean %select{|simply }2%3?",
[d]="no member named %0 in %1; did you mean %select{|simply }2%3?",
[g]={{nil,nil,{"no member named A in B; did you mean ",{a,"simply "},"D?"}}},
[e]={{nil,nil,{"no member named A in B; did you mean ",{a,"simply "},"D?"}}},
[b]=k,
[f]=k,
[e]="no member named (.*?) in (.*?); did you mean (?:|simply )(.*?)\\?",
[g]="no member named (.*?) in (.*?); did you mean (?:|simply )(.*?)\\?",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"598b08f8182e",1262236813,"Implement typo correction for id-expressions, e.g.,","Implement typo correction for id-expressions, e.g.,\n\ntypo.cpp:22:10: error: use of undeclared identifier \'radious\'; did\n      you mean \'radius\'?\n  return radious * pi;\n        ^~~~~~~\n        radius\n\nThis was super-easy, since we already had decent recovery by looking\nfor names in dependent base classes.\n\nllvm-svn: 92341"},
[b]={"598b08f8182e",1262236813,"Implement typo correction for id-expressions, e.g.,","Implement typo correction for id-expressions, e.g.,\n\ntypo.cpp:22:10: error: use of undeclared identifier \'radious\'; did\n      you mean \'radius\'?\n  return radious * pi;\n        ^~~~~~~\n        radius\n\nThis was super-easy, since we already had decent recovery by looking\nfor names in dependent base classes.\n\nllvm-svn: 92341"},
[j]={{Tb,623,"/// 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  // ...\n  if (Found.empty() && !ErrorRecoveryLookup && !getLangOpts().MSVCCompat) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(Found.getLookupNameInfo(), Found.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery, LookupCtx, EnteringContext)) {\n      if (LookupCtx) {\n        // ...\n        diagnoseTypo(Corrected, PDiag(diag::err_no_member_suggest) << Name << LookupCtx << DroppedSpecifier << SS.getRange());"},{o,1010,"Corrected:\n  // ...\n  case LookupResult::NotFound:\n    // ...\n    // Perform typo correction to determine if there is another name that is\n    // close to this name.\n    if (!SecondTry && CCC) {\n      // ...\n      if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, &SS, *CCC, CTK_ErrorRecovery)) {\n        // ...\n        unsigned QualifiedDiag = diag::err_no_member_suggest;"},{O,12722,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n///  instantiation of an unresolved using declaration.  We treat\n///  the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n  // ...\n  // Try to correct typos if possible. If constructor name lookup finds no\n  // results, that means the named class has no explicit constructors, and we\n  // suppressed declaring implicit ones (probably because it\'s dependent or\n  // invalid).\n  if (R.empty() && NameInfo.getName().getNameKind() != DeclarationName::CXXConstructorName) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery)) {\n      // ...\n      diagnoseTypo(Corrected, PDiag(diag::err_no_member_suggest) << NameInfo.getName() << LookupContext << 0 << SS.getRange());"},{V,2294,"static void emitEmptyLookupTypoDiagnostic(const TypoCorrection &TC, Sema &SemaRef, const CXXScopeSpec &SS, DeclarationName Typo, SourceLocation TypoLoc, ArrayRef<Expr *> Args, unsigned DiagnosticID, unsigned DiagnosticSuggestID) {\n  // ...\n  if (!Ctx)\n  // ...\n  else\n    SemaRef.diagnoseTypo(TC, SemaRef.PDiag(diag::err_no_member_suggest) << Typo << Ctx << DroppedSpecifier << SS.getRange(), SemaRef.PDiag(NoteID));"},{V,2511,"/// 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  // ...\n  if (S && Out) {\n  // ...\n  } else if (S && (Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery))) {\n    // ...\n    if (AcceptableWithRecovery || AcceptableWithoutRecovery) {\n      // ...\n      if (SS.isEmpty())\n      // ...\n      else\n        diagnoseTypo(Corrected, PDiag(diag::err_no_member_suggest) << Name << computeDeclContext(SS, false) << DroppedSpecifier << SS.getRange(), PDiag(NoteID), AcceptableWithRecovery);"},{Rb,716,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  // ...\n  TE = SemaRef.CorrectTypoDelayed(\n      // ...\n      [=, &SemaRef](const TypoCorrection &TC) {\n        if (TC) {\n          // ...\n          SemaRef.diagnoseTypo(TC, SemaRef.PDiag(diag::err_no_member_suggest) << Typo << DC << DroppedSpecifier << SS.getRange());"},{"clang/unittests/Sema/ExternalSemaSourceTest.cpp",65,"/// Counts the number of typo-correcting diagnostics correcting from one name to\n/// another while still passing all diagnostics along a chain of consumers.\nclass DiagnosticWatcher : public clang::DiagnosticConsumer {\n  // ...\n  void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) override {\n    // ...\n    } else if (Info.getID() == diag::err_no_member_suggest) {"}},
[j]={{cc,623,"/// 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  // ...\n  if (Found.empty() && !ErrorRecoveryLookup && !getLangOpts().MSVCCompat) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(Found.getLookupNameInfo(), Found.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery, LookupCtx, EnteringContext)) {\n      if (LookupCtx) {\n        // ...\n        diagnoseTypo(Corrected, PDiag(diag::err_no_member_suggest) << Name << LookupCtx << DroppedSpecifier << SS.getRange());"},{o,1010,"Corrected:\n  // ...\n  case LookupResult::NotFound:\n    // ...\n    // Perform typo correction to determine if there is another name that is\n    // close to this name.\n    if (!SecondTry && CCC) {\n      // ...\n      if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, &SS, *CCC, CTK_ErrorRecovery)) {\n        // ...\n        unsigned QualifiedDiag = diag::err_no_member_suggest;"},{Q,12722,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n///  instantiation of an unresolved using declaration.  We treat\n///  the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n  // ...\n  // Try to correct typos if possible. If constructor name lookup finds no\n  // results, that means the named class has no explicit constructors, and we\n  // suppressed declaring implicit ones (probably because it\'s dependent or\n  // invalid).\n  if (R.empty() && NameInfo.getName().getNameKind() != DeclarationName::CXXConstructorName) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery)) {\n      // ...\n      diagnoseTypo(Corrected, PDiag(diag::err_no_member_suggest) << NameInfo.getName() << LookupContext << 0 << SS.getRange());"},{W,2294,"static void emitEmptyLookupTypoDiagnostic(const TypoCorrection &TC, Sema &SemaRef, const CXXScopeSpec &SS, DeclarationName Typo, SourceLocation TypoLoc, ArrayRef<Expr *> Args, unsigned DiagnosticID, unsigned DiagnosticSuggestID) {\n  // ...\n  if (!Ctx)\n  // ...\n  else\n    SemaRef.diagnoseTypo(TC, SemaRef.PDiag(diag::err_no_member_suggest) << Typo << Ctx << DroppedSpecifier << SS.getRange(), SemaRef.PDiag(NoteID));"},{W,2511,"/// 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  // ...\n  if (S && Out) {\n  // ...\n  } else if (S && (Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery))) {\n    // ...\n    if (AcceptableWithRecovery || AcceptableWithoutRecovery) {\n      // ...\n      if (SS.isEmpty())\n      // ...\n      else\n        diagnoseTypo(Corrected, PDiag(diag::err_no_member_suggest) << Name << computeDeclContext(SS, false) << DroppedSpecifier << SS.getRange(), PDiag(NoteID), AcceptableWithRecovery);"},{Tb,716,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  // ...\n  TE = SemaRef.CorrectTypoDelayed(\n      // ...\n      [=, &SemaRef](const TypoCorrection &TC) {\n        if (TC) {\n          // ...\n          SemaRef.diagnoseTypo(TC, SemaRef.PDiag(diag::err_no_member_suggest) << Typo << DC << DroppedSpecifier << SS.getRange());"},{"clang/unittests/Sema/ExternalSemaSourceTest.cpp",65,"/// Counts the number of typo-correcting diagnostics correcting from one name to\n/// another while still passing all diagnostics along a chain of consumers.\nclass DiagnosticWatcher : public clang::DiagnosticConsumer {\n  // ...\n  void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) override {\n    // ...\n    } else if (Info.getID() == diag::err_no_member_suggest) {"}},
[l]={
[l]={
["clang/test/SemaCXX/pr13394-crash-on-invalid.cpp"]={"clang/test/SemaCXX/pr13394-crash-on-invalid.cpp:27:5: error: no member named \'Bar\' in namespace \'Foo\'; did you mean simply \'Bar\'?"}
["clang/test/SemaCXX/pr13394-crash-on-invalid.cpp"]={"clang/test/SemaCXX/pr13394-crash-on-invalid.cpp:27:5: error: no member named \'Bar\' in namespace \'Foo\'; did you mean simply \'Bar\'?"}
Line 3,503: Line 3,504:
},
},
["err_no_member_template"]={
["err_no_member_template"]={
[i]={{nil,r,"err_no_member_template"}},
[c]={{nil,r,"err_no_member_template"}},
[h]={{nil,r,"no template named %0 in %1"}},
[d]={{nil,r,"no template named %0 in %1"}},
[g]={{nil,r,"no template named A in B"}},
[e]={{nil,r,"no template named A in B"}},
[b]=k,
[f]=k,
[e]="no template named (.*?) in (.*?)",
[g]="no template named (.*?) in (.*?)",
[d]=a,
[h]=a,
[f]={{nil,r,m}},
[i]={{nil,r,m}},
[c]={"52f8d19ceda6",1494451936,"Improve diagnosis of unknown template name.","Improve diagnosis of unknown template name.\n\nWhen an undeclared identifier in a context that requires a type is followed by\n\'<\', only look for type templates when typo-correcting, tweak the diagnostic\ntext to say that a template name (not a type name) was undeclared, and parse\nthe template arguments when recovering from the error.\n\nllvm-svn: 302732"},
[b]={"52f8d19ceda6",1494451936,"Improve diagnosis of unknown template name.","Improve diagnosis of unknown template name.\n\nWhen an undeclared identifier in a context that requires a type is followed by\n\'<\', only look for type templates when typo-correcting, tweak the diagnostic\ntext to say that a template name (not a type name) was undeclared, and parse\nthe template arguments when recovering from the error.\n\nllvm-svn: 302732"},
[j]={{o,812,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  // ...\n  if (!SS || (!SS->isSet() && !SS->isInvalid()))\n  // ...\n  else if (DeclContext *DC = computeDeclContext(*SS, false))\n    Diag(IILoc, IsTemplateName ? diag::err_no_member_template : diag::err_typename_nested_not_found) << II << DC << SS->getRange();"}}
[j]={{o,812,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  // ...\n  if (!SS || (!SS->isSet() && !SS->isInvalid()))\n  // ...\n  else if (DeclContext *DC = computeDeclContext(*SS, false))\n    Diag(IILoc, IsTemplateName ? diag::err_no_member_template : diag::err_typename_nested_not_found) << II << DC << SS->getRange();"}}
},
},
["err_no_member_template_suggest"]={
["err_no_member_template_suggest"]={
[i]="err_no_member_template_suggest",
[c]="err_no_member_template_suggest",
[h]="no template named %0 in %1; did you mean %select{|simply }2%3?",
[d]="no template named %0 in %1; did you mean %select{|simply }2%3?",
[g]={{nil,nil,{"no template named A in B; did you mean ",{a,"simply "},"D?"}}},
[e]={{nil,nil,{"no template named A in B; did you mean ",{a,"simply "},"D?"}}},
[b]=k,
[f]=k,
[e]="no template named (.*?) in (.*?); did you mean (?:|simply )(.*?)\\?",
[g]="no template named (.*?) in (.*?); did you mean (?:|simply )(.*?)\\?",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"ff18cc114111",1262247077,"Typo correction for template names, e.g.,","Typo correction for template names, e.g.,\n\ntypo.cpp:27:8: error: no template named \'basic_sting\' in namespace \'std\'; \n    did you mean \'basic_string\'?\n  std::basic_sting<char> b2;\n  ~~~~~^~~~~~~~~~~\n      basic_string\n\nllvm-svn: 92348"},
[b]={"ff18cc114111",1262247077,"Typo correction for template names, e.g.,","Typo correction for template names, e.g.,\n\ntypo.cpp:27:8: error: no template named \'basic_sting\' in namespace \'std\'; \n    did you mean \'basic_string\'?\n  std::basic_sting<char> b2;\n  ~~~~~^~~~~~~~~~~\n      basic_string\n\nllvm-svn: 92348"},
[j]={{o,764,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc), LookupOrdinaryName, S, SS, CCC, CTK_ErrorRecovery)) {\n    // ...\n    if (Corrected.isKeyword()) {\n    // ...\n    } else {\n      // We found a similarly-named type or interface; suggest that.\n      if (!SS || !SS->isSet()) {\n      // ...\n      } else if (DeclContext *DC = computeDeclContext(*SS, false)) {\n        // ...\n        diagnoseTypo(Corrected, PDiag(IsTemplateName ? diag::err_no_member_template_suggest : diag::err_unknown_nested_typename_suggest) << II << DC << DroppedSpecifier << SS->getRange(), CanRecover);"},{o,1017,"Corrected:\n  // ...\n  case LookupResult::NotFound:\n    // ...\n    // Perform typo correction to determine if there is another name that is\n    // close to this name.\n    if (!SecondTry && CCC) {\n      // ...\n      if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, &SS, *CCC, CTK_ErrorRecovery)) {\n        // ...\n        if (getLangOpts().CPlusPlus && NextToken.is(tok::less) && UnderlyingFirstDecl && isa<TemplateDecl>(UnderlyingFirstDecl)) {\n          // ...\n          QualifiedDiag = diag::err_no_member_template_suggest;"},{Y,535,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  // ...\n  if (Found.empty() && !IsDependent && AllowTypoCorrection) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(Found.getLookupNameInfo(), Found.getLookupKind(), S, &SS, FilterCCC, CTK_ErrorRecovery, LookupCtx)) {\n      // ...\n      if (Found.isAmbiguous()) {\n      // ...\n      } else if (!Found.empty()) {\n        // ...\n        if (LookupCtx) {\n          // ...\n          diagnoseTypo(Corrected, PDiag(diag::err_no_member_template_suggest) << Name << LookupCtx << DroppedSpecifier << SS.getRange());"}},
[j]={{o,764,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc), LookupOrdinaryName, S, SS, CCC, CTK_ErrorRecovery)) {\n    // ...\n    if (Corrected.isKeyword()) {\n    // ...\n    } else {\n      // We found a similarly-named type or interface; suggest that.\n      if (!SS || !SS->isSet()) {\n      // ...\n      } else if (DeclContext *DC = computeDeclContext(*SS, false)) {\n        // ...\n        diagnoseTypo(Corrected, PDiag(IsTemplateName ? diag::err_no_member_template_suggest : diag::err_unknown_nested_typename_suggest) << II << DC << DroppedSpecifier << SS->getRange(), CanRecover);"},{o,1017,"Corrected:\n  // ...\n  case LookupResult::NotFound:\n    // ...\n    // Perform typo correction to determine if there is another name that is\n    // close to this name.\n    if (!SecondTry && CCC) {\n      // ...\n      if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, &SS, *CCC, CTK_ErrorRecovery)) {\n        // ...\n        if (getLangOpts().CPlusPlus && NextToken.is(tok::less) && UnderlyingFirstDecl && isa<TemplateDecl>(UnderlyingFirstDecl)) {\n          // ...\n          QualifiedDiag = diag::err_no_member_template_suggest;"},{Y,535,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  // ...\n  if (Found.empty() && !IsDependent && AllowTypoCorrection) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(Found.getLookupNameInfo(), Found.getLookupKind(), S, &SS, FilterCCC, CTK_ErrorRecovery, LookupCtx)) {\n      // ...\n      if (Found.isAmbiguous()) {\n      // ...\n      } else if (!Found.empty()) {\n        // ...\n        if (LookupCtx) {\n          // ...\n          diagnoseTypo(Corrected, PDiag(diag::err_no_member_template_suggest) << Name << LookupCtx << DroppedSpecifier << SS.getRange());"}},
[l]={
[l]={
Line 3,528: Line 3,529:
},
},
["err_no_nsconstant_string_class"]={
["err_no_nsconstant_string_class"]={
[i]="err_no_nsconstant_string_class",
[c]="err_no_nsconstant_string_class",
[h]="cannot find interface declaration for %0",
[d]="cannot find interface declaration for %0",
[g]="cannot find interface declaration for A",
[e]="cannot find interface declaration for A",
[b]=k,
[f]=k,
[e]="cannot find interface declaration for (.*?)",
[g]="cannot find interface declaration for (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"0731763efc6f",1272064744,"With -fno-constant-cfstrrings, class NSConstantString","With -fno-constant-cfstrrings, class NSConstantString\nmust be there or it is error (Next runtime).\n\nllvm-svn: 102223"},
[b]={"0731763efc6f",1272064744,"With -fno-constant-cfstrrings, class NSConstantString","With -fno-constant-cfstrrings, class NSConstantString\nmust be there or it is error (Next runtime).\n\nllvm-svn: 102223"},
[j]={{F,113,"ExprResult Sema::BuildObjCStringLiteral(SourceLocation AtLoc, StringLiteral *S) {\n  // ...\n  if (!Ty.isNull()) {\n  // ...\n  } else if (getLangOpts().NoConstantCFStrings) {\n    // ...\n    if (ObjCInterfaceDecl *StrIF = dyn_cast_or_null<ObjCInterfaceDecl>(IF)) {\n    // ...\n    } else {\n      // ...\n      Diag(S->getBeginLoc(), diag::err_no_nsconstant_string_class) << NSIdent << S->getSourceRange();"}},
[j]={{G,113,"ExprResult Sema::BuildObjCStringLiteral(SourceLocation AtLoc, StringLiteral *S) {\n  // ...\n  if (!Ty.isNull()) {\n  // ...\n  } else if (getLangOpts().NoConstantCFStrings) {\n    // ...\n    if (ObjCInterfaceDecl *StrIF = dyn_cast_or_null<ObjCInterfaceDecl>(IF)) {\n    // ...\n    } else {\n      // ...\n      Diag(S->getBeginLoc(), diag::err_no_nsconstant_string_class) << NSIdent << S->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:34:17: error: cannot find interface declaration for \'Q\'"}
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:34:17: error: cannot find interface declaration for \'Q\'"}
Line 3,542: Line 3,543:
},
},
["err_no_submodule"]={
["err_no_submodule"]={
[i]="err_no_submodule",
[c]="err_no_submodule",
[h]="no submodule named %0 in module \'%1\'",
[d]="no submodule named %0 in module \'%1\'",
[g]="no submodule named A in module \'B\'",
[e]="no submodule named A in module \'B\'",
[b]=k,
[f]=k,
[e]="no submodule named (.*?) in module \'(.*?)\'",
[g]="no submodule named (.*?) in module \'(.*?)\'",
[d]=a,
[h]=a,
[f]=a,
[i]=w,
[c]={"5196bc6b39b5",1322625824,"When loading a module that involves submodules (e.g., std.vector),","When loading a module that involves submodules (e.g., std.vector),\ncheck whether the named submodules themselves are actually\nvalid, and drill down to the named submodule (although we don\'t do\nanything with it yet). Perform typo correction on the submodule names\nwhen possible.\n\nllvm-svn: 145477"},
[b]={"5196bc6b39b5",1322625824,"When loading a module that involves submodules (e.g., std.vector),","When loading a module that involves submodules (e.g., std.vector),\ncheck whether the named submodules themselves are actually\nvalid, and drill down to the named submodule (although we don\'t do\nanything with it yet). Perform typo correction on the submodule names\nwhen possible.\n\nllvm-svn: 145477"},
[j]={{wb,2093,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  // ...\n  for (unsigned I = 1, N = Path.size(); I != N; ++I) {\n    // ...\n    if (!Sub) {\n      // ...\n      getDiagnostics().Report(Path[I].second, diag::err_no_submodule) << Path[I].first << Module->getFullModuleName() << SourceRange(Path[0].second, Path[I - 1].second);"}},
[j]={{wb,2093,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  // ...\n  for (unsigned I = 1, N = Path.size(); I != N; ++I) {\n    // ...\n    if (!Sub) {\n      // ...\n      getDiagnostics().Report(Path[I].second, diag::err_no_submodule) << Path[I].first << Module->getFullModuleName() << SourceRange(Path[0].second, Path[I - 1].second);"}},
[l]={
[l]={
Line 3,556: Line 3,557:
},
},
["err_no_submodule_suggest"]={
["err_no_submodule_suggest"]={
[i]="err_no_submodule_suggest",
[c]="err_no_submodule_suggest",
[h]="no submodule named %0 in module \'%1\'; did you mean \'%2\'?",
[d]="no submodule named %0 in module \'%1\'; did you mean \'%2\'?",
[g]="no submodule named A in module \'B\'; did you mean \'C\'?",
[e]="no submodule named A in module \'B\'; did you mean \'C\'?",
[b]=k,
[f]=k,
[e]="no submodule named (.*?) in module \'(.*?)\'; did you mean \'(.*?)\'\\?",
[g]="no submodule named (.*?) in module \'(.*?)\'; did you mean \'(.*?)\'\\?",
[d]=a,
[h]=a,
[f]=a,
[i]=w,
[c]={"5196bc6b39b5",1322625824,"When loading a module that involves submodules (e.g., std.vector),","When loading a module that involves submodules (e.g., std.vector),\ncheck whether the named submodules themselves are actually\nvalid, and drill down to the named submodule (although we don\'t do\nanything with it yet). Perform typo correction on the submodule names\nwhen possible.\n\nllvm-svn: 145477"},
[b]={"5196bc6b39b5",1322625824,"When loading a module that involves submodules (e.g., std.vector),","When loading a module that involves submodules (e.g., std.vector),\ncheck whether the named submodules themselves are actually\nvalid, and drill down to the named submodule (although we don\'t do\nanything with it yet). Perform typo correction on the submodule names\nwhen possible.\n\nllvm-svn: 145477"},
[j]={{wb,2080,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  // ...\n  for (unsigned I = 1, N = Path.size(); I != N; ++I) {\n    // ...\n    if (!Sub) {\n      // ...\n      // If there was a clear winner, user it.\n      if (Best.size() == 1) {\n        getDiagnostics().Report(Path[I].second, diag::err_no_submodule_suggest) << Path[I].first << Module->getFullModuleName() << Best[0] << SourceRange(Path[0].second, Path[I - 1].second) << FixItHint::CreateReplacement(SourceRange(Path[I].second), Best[0]);"}},
[j]={{wb,2080,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  // ...\n  for (unsigned I = 1, N = Path.size(); I != N; ++I) {\n    // ...\n    if (!Sub) {\n      // ...\n      // If there was a clear winner, user it.\n      if (Best.size() == 1) {\n        getDiagnostics().Report(Path[I].second, diag::err_no_submodule_suggest) << Path[I].first << Module->getFullModuleName() << Best[0] << SourceRange(Path[0].second, Path[I - 1].second) << FixItHint::CreateReplacement(SourceRange(Path[I].second), Best[0]);"}},
[l]={
[l]={
Line 3,570: Line 3,571:
},
},
["err_no_subobject_property_setting"]={
["err_no_subobject_property_setting"]={
[i]="err_no_subobject_property_setting",
[c]="err_no_subobject_property_setting",
[h]="expression is not assignable",
[d]="expression is not assignable",
[e]="expression is not assignable",
[f]=k,
[g]="expression is not assignable",
[g]="expression is not assignable",
[b]=k,
[h]=a,
[e]="expression is not assignable",
[i]=m,
[d]=a,
[b]={Bb,1480718311,Ab,zb},
[f]=m,
[j]={{W,14417,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  // ...\n  case Expr::MLV_SubObjCPropertySetting:\n    DiagID = diag::err_no_subobject_property_setting;"}},
[c]={yb,1480718311,zb,Ab},
[j]={{V,14417,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  // ...\n  case Expr::MLV_SubObjCPropertySetting:\n    DiagID = diag::err_no_subobject_property_setting;"}},
[l]={
[l]={
["clang/test/Sema/va_arg_x86_32.c"]={"clang/test/Sema/va_arg_x86_32.c:4:3: error: expression is not assignable"}
["clang/test/Sema/va_arg_x86_32.c"]={"clang/test/Sema/va_arg_x86_32.c:4:3: error: expression is not assignable"}
Line 3,584: Line 3,585:
},
},
["err_no_suitable_delete_member_function_found"]={
["err_no_suitable_delete_member_function_found"]={
[i]="err_no_suitable_delete_member_function_found",
[c]="err_no_suitable_delete_member_function_found",
[h]="no suitable member %0 in %1",
[d]="no suitable member %0 in %1",
[g]="no suitable member A in B",
[e]="no suitable member A in B",
[b]=k,
[f]=k,
[e]="no suitable member (.*?) in (.*?)",
[g]="no suitable member (.*?) in (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"2c9e274e57c6",1258303395,"If we find a deallocation function in the class scope, but it is a placement function we should not ...","If we find a deallocation function in the class scope, but it is a placement function we should not look for a deallocation function in the global scope.\n\nllvm-svn: 88851"},
[b]={"2c9e274e57c6",1258303395,"If we find a deallocation function in the class scope, but it is a placement function we should not ...","If we find a deallocation function in the class scope, but it is a placement function we should not look for a deallocation function in the global scope.\n\nllvm-svn: 88851"},
[j]={{tb,3312,"bool Sema::FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD, DeclarationName Name, FunctionDecl *&Operator, bool Diagnose, bool WantSize, bool WantAligned) {\n  // ...\n  // We did find operator delete/operator delete[] declarations, but\n  // none of them were suitable.\n  if (!Found.empty()) {\n    if (Diagnose) {\n      Diag(StartLoc, diag::err_no_suitable_delete_member_function_found) << Name << RD;"}},
[j]={{tb,3312,"bool Sema::FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD, DeclarationName Name, FunctionDecl *&Operator, bool Diagnose, bool WantSize, bool WantAligned) {\n  // ...\n  // We did find operator delete/operator delete[] declarations, but\n  // none of them were suitable.\n  if (!Found.empty()) {\n    if (Diagnose) {\n      Diag(StartLoc, diag::err_no_suitable_delete_member_function_found) << Name << RD;"}},
[l]={
[l]={
Line 3,598: Line 3,599:
},
},
["err_no_super_class_message"]={
["err_no_super_class_message"]={
[i]="err_no_super_class_message",
[c]="err_no_super_class_message",
[h]="no @interface declaration found in class messaging of %0",
[d]="no @interface declaration found in class messaging of %0",
[g]="no @interface declaration found in class messaging of A",
[e]="no @interface declaration found in class messaging of A",
[b]=k,
[f]=k,
[e]="no @interface declaration found in class messaging of (.*?)",
[g]="no @interface declaration found in class messaging of (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={yb,1480718311,zb,Ab},
[b]={Bb,1480718311,Ab,zb},
[j]={{F,2397,"ExprResult Sema::ActOnSuperMessage(Scope *S, SourceLocation SuperLoc, Selector Sel, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg Args) {\n  // ...\n  if (!Class) {\n    Diag(SuperLoc, diag::err_no_super_class_message) << Method->getDeclName();"}},
[j]={{G,2397,"ExprResult Sema::ActOnSuperMessage(Scope *S, SourceLocation SuperLoc, Selector Sel, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg Args) {\n  // ...\n  if (!Class) {\n    Diag(SuperLoc, diag::err_no_super_class_message) << Method->getDeclName();"}},
[l]={
[l]={
["clang/test/SemaObjC/undef-class-messagin-error.m"]={"clang/test/SemaObjC/undef-class-messagin-error.m:12:24: error: no @interface declaration found in class messaging of \'flushCache2\'"}
["clang/test/SemaObjC/undef-class-messagin-error.m"]={"clang/test/SemaObjC/undef-class-messagin-error.m:12:24: error: no @interface declaration found in class messaging of \'flushCache2\'"}
Line 3,612: Line 3,613:
},
},
["err_no_template"]={
["err_no_template"]={
[i]={{nil,r,"err_no_template"}},
[c]={{nil,r,"err_no_template"}},
[h]={{nil,r,"no template named %0"}},
[d]={{nil,r,"no template named %0"}},
[g]={{nil,r,"no template named A"}},
[e]={{nil,r,"no template named A"}},
[b]=k,
[f]=k,
[e]="no template named (.*?)",
[g]="no template named (.*?)",
[d]=a,
[h]=a,
[f]={{nil,r,m}},
[i]={{nil,r,m}},
[c]={"52f8d19ceda6",1494451936,"Improve diagnosis of unknown template name.","Improve diagnosis of unknown template name.\n\nWhen an undeclared identifier in a context that requires a type is followed by\n\'<\', only look for type templates when typo-correcting, tweak the diagnostic\ntext to say that a template name (not a type name) was undeclared, and parse\nthe template arguments when recovering from the error.\n\nllvm-svn: 302732"},
[b]={"52f8d19ceda6",1494451936,"Improve diagnosis of unknown template name.","Improve diagnosis of unknown template name.\n\nWhen an undeclared identifier in a context that requires a type is followed by\n\'<\', only look for type templates when typo-correcting, tweak the diagnostic\ntext to say that a template name (not a type name) was undeclared, and parse\nthe template arguments when recovering from the error.\n\nllvm-svn: 302732"},
[j]={{o,808,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  // ...\n  if (!SS || (!SS->isSet() && !SS->isInvalid()))\n    Diag(IILoc, IsTemplateName ? diag::err_no_template : diag::err_unknown_typename) << II;"},{Y,4120,"bool Sema::resolveAssumedTemplateNameAsType(Scope *S, TemplateName &Name, SourceLocation NameLoc, bool Diagnose) {\n  // ...\n  if (Diagnose)\n    Diag(R.getNameLoc(), diag::err_no_template) << R.getLookupName();"}},
[j]={{o,808,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  // ...\n  if (!SS || (!SS->isSet() && !SS->isInvalid()))\n    Diag(IILoc, IsTemplateName ? diag::err_no_template : diag::err_unknown_typename) << II;"},{Y,4120,"bool Sema::resolveAssumedTemplateNameAsType(Scope *S, TemplateName &Name, SourceLocation NameLoc, bool Diagnose) {\n  // ...\n  if (Diagnose)\n    Diag(R.getNameLoc(), diag::err_no_template) << R.getLookupName();"}},
[l]={
[l]={
Line 3,626: Line 3,627:
},
},
["err_no_template_suggest"]={
["err_no_template_suggest"]={
[i]="err_no_template_suggest",
[c]="err_no_template_suggest",
[h]="no template named %0; did you mean %1?",
[d]="no template named %0; did you mean %1?",
[g]="no template named A; did you mean B?",
[e]="no template named A; did you mean B?",
[b]=k,
[f]=k,
[e]="no template named (.*?); did you mean (.*?)\\?",
[g]="no template named (.*?); did you mean (.*?)\\?",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"ff18cc114111",1262247077,"Typo correction for template names, e.g.,","Typo correction for template names, e.g.,\n\ntypo.cpp:27:8: error: no template named \'basic_sting\' in namespace \'std\'; \n    did you mean \'basic_string\'?\n  std::basic_sting<char> b2;\n  ~~~~~^~~~~~~~~~~\n      basic_string\n\nllvm-svn: 92348"},
[b]={"ff18cc114111",1262247077,"Typo correction for template names, e.g.,","Typo correction for template names, e.g.,\n\ntypo.cpp:27:8: error: no template named \'basic_sting\' in namespace \'std\'; \n    did you mean \'basic_string\'?\n  std::basic_sting<char> b2;\n  ~~~~~^~~~~~~~~~~\n      basic_string\n\nllvm-svn: 92348"},
[j]={{o,747,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc), LookupOrdinaryName, S, SS, CCC, CTK_ErrorRecovery)) {\n    // ...\n    if (Corrected.isKeyword()) {\n      // ...\n      diagnoseTypo(Corrected, PDiag(IsTemplateName ? diag::err_no_template_suggest : diag::err_unknown_typename_suggest) << II);"},{o,755,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc), LookupOrdinaryName, S, SS, CCC, CTK_ErrorRecovery)) {\n    // ...\n    if (Corrected.isKeyword()) {\n    // ...\n    } else {\n      // We found a similarly-named type or interface; suggest that.\n      if (!SS || !SS->isSet()) {\n        diagnoseTypo(Corrected, PDiag(IsTemplateName ? diag::err_no_template_suggest : diag::err_unknown_typename_suggest) << II, CanRecover);"},{o,1016,"Corrected:\n  // ...\n  case LookupResult::NotFound:\n    // ...\n    // Perform typo correction to determine if there is another name that is\n    // close to this name.\n    if (!SecondTry && CCC) {\n      // ...\n      if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, &SS, *CCC, CTK_ErrorRecovery)) {\n        // ...\n        if (getLangOpts().CPlusPlus && NextToken.is(tok::less) && UnderlyingFirstDecl && isa<TemplateDecl>(UnderlyingFirstDecl)) {\n          UnqualifiedDiag = diag::err_no_template_suggest;"},{Y,539,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  // ...\n  if (Found.empty() && !IsDependent && AllowTypoCorrection) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(Found.getLookupNameInfo(), Found.getLookupKind(), S, &SS, FilterCCC, CTK_ErrorRecovery, LookupCtx)) {\n      // ...\n      if (Found.isAmbiguous()) {\n      // ...\n      } else if (!Found.empty()) {\n        // ...\n        if (LookupCtx) {\n        // ...\n        } else {\n          diagnoseTypo(Corrected, PDiag(diag::err_no_template_suggest) << Name);"},{Y,4113,"bool Sema::resolveAssumedTemplateNameAsType(Scope *S, TemplateName &Name, SourceLocation NameLoc, bool Diagnose) {\n  // ...\n  if (Corrected && Corrected.getFoundDecl()) {\n    diagnoseTypo(Corrected, PDiag(diag::err_no_template_suggest) << ATN->getDeclName());"}},
[j]={{o,747,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc), LookupOrdinaryName, S, SS, CCC, CTK_ErrorRecovery)) {\n    // ...\n    if (Corrected.isKeyword()) {\n      // ...\n      diagnoseTypo(Corrected, PDiag(IsTemplateName ? diag::err_no_template_suggest : diag::err_unknown_typename_suggest) << II);"},{o,755,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc), LookupOrdinaryName, S, SS, CCC, CTK_ErrorRecovery)) {\n    // ...\n    if (Corrected.isKeyword()) {\n    // ...\n    } else {\n      // We found a similarly-named type or interface; suggest that.\n      if (!SS || !SS->isSet()) {\n        diagnoseTypo(Corrected, PDiag(IsTemplateName ? diag::err_no_template_suggest : diag::err_unknown_typename_suggest) << II, CanRecover);"},{o,1016,"Corrected:\n  // ...\n  case LookupResult::NotFound:\n    // ...\n    // Perform typo correction to determine if there is another name that is\n    // close to this name.\n    if (!SecondTry && CCC) {\n      // ...\n      if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, &SS, *CCC, CTK_ErrorRecovery)) {\n        // ...\n        if (getLangOpts().CPlusPlus && NextToken.is(tok::less) && UnderlyingFirstDecl && isa<TemplateDecl>(UnderlyingFirstDecl)) {\n          UnqualifiedDiag = diag::err_no_template_suggest;"},{Y,539,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  // ...\n  if (Found.empty() && !IsDependent && AllowTypoCorrection) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(Found.getLookupNameInfo(), Found.getLookupKind(), S, &SS, FilterCCC, CTK_ErrorRecovery, LookupCtx)) {\n      // ...\n      if (Found.isAmbiguous()) {\n      // ...\n      } else if (!Found.empty()) {\n        // ...\n        if (LookupCtx) {\n        // ...\n        } else {\n          diagnoseTypo(Corrected, PDiag(diag::err_no_template_suggest) << Name);"},{Y,4113,"bool Sema::resolveAssumedTemplateNameAsType(Scope *S, TemplateName &Name, SourceLocation NameLoc, bool Diagnose) {\n  // ...\n  if (Corrected && Corrected.getFoundDecl()) {\n    diagnoseTypo(Corrected, PDiag(diag::err_no_template_suggest) << ATN->getDeclName());"}},
[l]={
[l]={
Line 3,640: Line 3,641:
},
},
["err_no_typeid_with_fno_rtti"]={
["err_no_typeid_with_fno_rtti"]={
[i]="err_no_typeid_with_fno_rtti",
[c]="err_no_typeid_with_fno_rtti",
[h]={{nil,q,"use of typeid requires -frtti"},{t,nil,"cannot use typeid with -fno-rtti"}},
[d]={{nil,q,"use of typeid requires -frtti"},{t,nil,"cannot use typeid with -fno-rtti"}},
[g]={{nil,q,"use of typeid requires -frtti"},{t,nil,"cannot use typeid with -fno-rtti"}},
[e]={{nil,q,"use of typeid requires -frtti"},{t,nil,"cannot use typeid with -fno-rtti"}},
[b]=k,
[f]=k,
[e]="use of typeid requires \\-frtti",
[g]="use of typeid requires \\-frtti",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"1b7f39de3d58",1337477241,"Error when using typeid() with -fno-rtti. PR 12888.","Error when using typeid() with -fno-rtti. PR 12888.\n\nllvm-svn: 157139"},
[b]={"1b7f39de3d58",1337477241,"Error when using typeid() with -fno-rtti. PR 12888.","Error when using typeid() with -fno-rtti. PR 12888.\n\nllvm-svn: 157139"},
[j]={{tb,679,"/// ActOnCXXTypeidOfType - Parse typeid( type-id ) or typeid (expression);\nExprResult Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, bool isType, void *TyOrExpr, SourceLocation RParenLoc) {\n  // ...\n  if (!getLangOpts().RTTI) {\n    return ExprError(Diag(OpLoc, diag::err_no_typeid_with_fno_rtti));"}},
[j]={{tb,679,"/// ActOnCXXTypeidOfType - Parse typeid( type-id ) or typeid (expression);\nExprResult Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, bool isType, void *TyOrExpr, SourceLocation RParenLoc) {\n  // ...\n  if (!getLangOpts().RTTI) {\n    return ExprError(Diag(OpLoc, diag::err_no_typeid_with_fno_rtti));"}},
[l]={
[l]={
Line 3,654: Line 3,655:
},
},
["err_no_viable_destructor"]={
["err_no_viable_destructor"]={
[i]={{nil,s,"err_no_viable_destructor"}},
[c]={{nil,s,"err_no_viable_destructor"}},
[h]={{nil,s,"no viable destructor found for class %0"}},
[d]={{nil,s,"no viable destructor found for class %0"}},
[g]={{nil,s,"no viable destructor found for class A"}},
[e]={{nil,s,"no viable destructor found for class A"}},
[b]=k,
[f]=k,
[e]="no viable destructor found for class (.*?)",
[g]="no viable destructor found for class (.*?)",
[d]=a,
[h]=a,
[f]={{nil,s,m}},
[i]={{nil,s,m}},
[c]={Ac,1625925174,zc,sc},
[b]={nc,1625925174,kc,Dc},
[j]={{o,18545,"/// [class.dtor]p4:\n///  At the end of the definition of a class, overload resolution is\n///  performed among the prospective destructors declared in that class with\n///  an empty argument list to select the destructor for the class, also\n///  known as the selected destructor.\n///\n/// We do the overload resolution here, then mark the selected constructor in the AST.\n/// Later CXXRecordDecl::getDestructor() will return the selected constructor.\nstatic void ComputeSelectedDestructor(Sema &S, CXXRecordDecl *Record) {\n  // ...\n  case OR_No_Viable_Function:\n    Msg = diag::err_no_viable_destructor;"}},
[j]={{o,18545,"/// [class.dtor]p4:\n///  At the end of the definition of a class, overload resolution is\n///  performed among the prospective destructors declared in that class with\n///  an empty argument list to select the destructor for the class, also\n///  known as the selected destructor.\n///\n/// We do the overload resolution here, then mark the selected constructor in the AST.\n/// Later CXXRecordDecl::getDestructor() will return the selected constructor.\nstatic void ComputeSelectedDestructor(Sema &S, CXXRecordDecl *Record) {\n  // ...\n  case OR_No_Viable_Function:\n    Msg = diag::err_no_viable_destructor;"}},
[l]={
[l]={
Line 3,668: Line 3,669:
},
},
["err_nogetter_property_compound_assignment"]={
["err_nogetter_property_compound_assignment"]={
[i]="err_nogetter_property_compound_assignment",
[c]="err_nogetter_property_compound_assignment",
[h]="a getter method is needed to perform a compound assignment on a property",
[d]="a getter method is needed to perform a compound assignment on a property",
[e]="a getter method is needed to perform a compound assignment on a property",
[f]=k,
[g]="a getter method is needed to perform a compound assignment on a property",
[g]="a getter method is needed to perform a compound assignment on a property",
[b]=k,
[h]=a,
[e]="a getter method is needed to perform a compound assignment on a property",
[i]=m,
[d]=a,
[b]={"c4a2d3259f9e",1319527676,"Introduce a placeholder type for \"pseudo object\"","Introduce a placeholder type for \"pseudo object\"\nexpressions: expressions which refer to a logical rather\nthan a physical l-value, where the logical object is\nactually accessed via custom getter/setter code.\nA subsequent patch will generalize the AST for these\nso that arbitrary \"implementing\" sub-expressions can\nbe provided.\n\nRight now the only client is ObjC properties, but\nthis should be generalizable to similar language\nfeatures, e.g. Managed C++\'s __property methods.\n\nllvm-svn: 142914"},
[f]=m,
[c]={"c4a2d3259f9e",1319527676,"Introduce a placeholder type for \"pseudo object\"","Introduce a placeholder type for \"pseudo object\"\nexpressions: expressions which refer to a logical rather\nthan a physical l-value, where the logical object is\nactually accessed via custom getter/setter code.\nA subsequent patch will generalize the AST for these\nso that arbitrary \"implementing\" sub-expressions can\nbe provided.\n\nRight now the only client is ObjC properties, but\nthis should be generalizable to similar language\nfeatures, e.g. Managed C++\'s __property methods.\n\nllvm-svn: 142914"},
[j]={{P,917,"/// @property-specific behavior for doing assignments.\nExprResult ObjCPropertyOpBuilder::buildAssignmentOperation(Scope *Sc, SourceLocation opcLoc, BinaryOperatorKind opcode, Expr *LHS, Expr *RHS) {\n  // ...\n  // Verify that we can do a compound assignment.\n  if (opcode != BO_Assign && !findGetter()) {\n    S.Diag(opcLoc, diag::err_nogetter_property_compound_assignment) << LHS->getSourceRange() << RHS->getSourceRange();"}}
[j]={{P,917,"/// @property-specific behavior for doing assignments.\nExprResult ObjCPropertyOpBuilder::buildAssignmentOperation(Scope *Sc, SourceLocation opcLoc, BinaryOperatorKind opcode, Expr *LHS, Expr *RHS) {\n  // ...\n  // Verify that we can do a compound assignment.\n  if (opcode != BO_Assign && !findGetter()) {\n    S.Diag(opcLoc, diag::err_nogetter_property_compound_assignment) << LHS->getSourceRange() << RHS->getSourceRange();"}}
},
},
["err_nogetter_property_incdec"]={
["err_nogetter_property_incdec"]={
[i]="err_nogetter_property_incdec",
[c]="err_nogetter_property_incdec",
[h]="no getter method %1 for %select{increment|decrement}0 of property",
[d]="no getter method %1 for %select{increment|decrement}0 of property",
[g]={{nil,nil,{"no getter method B for ",{"increment","decrement"}," of property"}}},
[e]={{nil,nil,{"no getter method B for ",{"increment","decrement"}," of property"}}},
[b]=k,
[f]=k,
[e]="no getter method (.*?) for (?:increment|decrement) of property",
[g]="no getter method (.*?) for (?:increment|decrement) of property",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"c4a2d3259f9e",1319527676,"Introduce a placeholder type for \"pseudo object\"","Introduce a placeholder type for \"pseudo object\"\nexpressions: expressions which refer to a logical rather\nthan a physical l-value, where the logical object is\nactually accessed via custom getter/setter code.\nA subsequent patch will generalize the AST for these\nso that arbitrary \"implementing\" sub-expressions can\nbe provided.\n\nRight now the only client is ObjC properties, but\nthis should be generalizable to similar language\nfeatures, e.g. Managed C++\'s __property methods.\n\nllvm-svn: 142914"},
[b]={"c4a2d3259f9e",1319527676,"Introduce a placeholder type for \"pseudo object\"","Introduce a placeholder type for \"pseudo object\"\nexpressions: expressions which refer to a logical rather\nthan a physical l-value, where the logical object is\nactually accessed via custom getter/setter code.\nA subsequent patch will generalize the AST for these\nso that arbitrary \"implementing\" sub-expressions can\nbe provided.\n\nRight now the only client is ObjC properties, but\nthis should be generalizable to similar language\nfeatures, e.g. Managed C++\'s __property methods.\n\nllvm-svn: 142914"},
[j]={{P,963,"/// @property-specific behavior for doing increments and decrements.\nExprResult ObjCPropertyOpBuilder::buildIncDecOperation(Scope *Sc, SourceLocation opcLoc, UnaryOperatorKind opcode, Expr *op) {\n  // ...\n  // We also need a getter.\n  if (!findGetter()) {\n    // ...\n    S.Diag(opcLoc, diag::err_nogetter_property_incdec) << unsigned(UnaryOperator::isDecrementOp(opcode)) << GetterSelector << op->getSourceRange();"}},
[j]={{P,963,"/// @property-specific behavior for doing increments and decrements.\nExprResult ObjCPropertyOpBuilder::buildIncDecOperation(Scope *Sc, SourceLocation opcLoc, UnaryOperatorKind opcode, Expr *op) {\n  // ...\n  // We also need a getter.\n  if (!findGetter()) {\n    // ...\n    S.Diag(opcLoc, diag::err_nogetter_property_incdec) << unsigned(UnaryOperator::isDecrementOp(opcode)) << GetterSelector << op->getSourceRange();"}},
[l]={
[l]={
Line 3,693: Line 3,694:
},
},
["err_non_asm_stmt_in_naked_function"]={
["err_non_asm_stmt_in_naked_function"]={
[i]="err_non_asm_stmt_in_naked_function",
[c]="err_non_asm_stmt_in_naked_function",
[h]="non-ASM statement in naked function is not supported",
[d]="non-ASM statement in naked function is not supported",
[g]="non-ASM statement in naked function is not supported",
[e]="non-ASM statement in naked function is not supported",
[b]=k,
[f]=k,
[e]="non\\-ASM statement in naked function is not supported",
[g]="non\\-ASM statement in naked function is not supported",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"d62cdd2c14c4",1409869000,"Don\'t allow non-ASM statements in naked functions","Don\'t allow non-ASM statements in naked functions\n\nNaked functions don\'t have prologues or epilogues, so doing\ncodegen for anything other than inline assembly would be completely\nhit or miss.\n\nDifferential Revision: http://reviews.llvm.org/D5183\n\nllvm-svn: 217199"},
[b]={"d62cdd2c14c4",1409869000,"Don\'t allow non-ASM statements in naked functions","Don\'t allow non-ASM statements in naked functions\n\nNaked functions don\'t have prologues or epilogues, so doing\ncodegen for anything other than inline assembly would be completely\nhit or miss.\n\nDifferential Revision: http://reviews.llvm.org/D5183\n\nllvm-svn: 217199"},
[j]={{o,15935,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  // ...\n  {\n    // ...\n    // Verify and clean out per-function state.\n    if (Body && (!FD || !FD->isDefaulted())) {\n      // ...\n      if (FD && FD->hasAttr<NakedAttr>()) {\n        for (const Stmt *S : Body->children()) {\n          // ...\n          if (!isa<AsmStmt>(S) && !isa<NullStmt>(S)) {\n            Diag(S->getBeginLoc(), diag::err_non_asm_stmt_in_naked_function);"}},
[j]={{o,15935,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  // ...\n  {\n    // ...\n    // Verify and clean out per-function state.\n    if (Body && (!FD || !FD->isDefaulted())) {\n      // ...\n      if (FD && FD->hasAttr<NakedAttr>()) {\n        for (const Stmt *S : Body->children()) {\n          // ...\n          if (!isa<AsmStmt>(S) && !isa<NullStmt>(S)) {\n            Diag(S->getBeginLoc(), diag::err_non_asm_stmt_in_naked_function);"}},
[l]={
[l]={
Line 3,707: Line 3,708:
},
},
["err_non_bool_atomic_constraint"]={
["err_non_bool_atomic_constraint"]={
[i]={{nil,n,"err_non_bool_atomic_constraint"}},
[c]={{nil,n,"err_non_bool_atomic_constraint"}},
[h]={{nil,n,"atomic constraint must be of type \'bool\' (found %0)"}},
[d]={{nil,n,"atomic constraint must be of type \'bool\' (found %0)"}},
[g]={{nil,n,"atomic constraint must be of type \'bool\' (found A)"}},
[e]={{nil,n,"atomic constraint must be of type \'bool\' (found A)"}},
[b]=k,
[f]=k,
[e]="atomic constraint must be of type \'bool\' \\(found (.*?)\\)",
[g]="atomic constraint must be of type \'bool\' \\(found (.*?)\\)",
[d]=a,
[h]=a,
[f]={{nil,n,m}},
[i]={{nil,n,m}},
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[b]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[j]={{"clang/lib/Sema/SemaConcept.cpp",149,"bool Sema::CheckConstraintExpression(const Expr *ConstraintExpression, Token NextToken, bool *PossibleNonPrimary, bool IsTrailingRequiresClause) {\n  // ...\n  if (!Context.hasSameUnqualifiedType(Type, Context.BoolTy)) {\n    Diag(ConstraintExpression->getExprLoc(), diag::err_non_bool_atomic_constraint) << Type << ConstraintExpression->getSourceRange();"}},
[j]={{"clang/lib/Sema/SemaConcept.cpp",149,"bool Sema::CheckConstraintExpression(const Expr *ConstraintExpression, Token NextToken, bool *PossibleNonPrimary, bool IsTrailingRequiresClause) {\n  // ...\n  if (!Context.hasSameUnqualifiedType(Type, Context.BoolTy)) {\n    Diag(ConstraintExpression->getExprLoc(), diag::err_non_bool_atomic_constraint) << Type << ConstraintExpression->getSourceRange();"}},
[l]={
[l]={
Line 3,721: Line 3,722:
},
},
["err_non_c_like_anon_struct_in_typedef"]={
["err_non_c_like_anon_struct_in_typedef"]={
[i]={{nil,w,"err_non_c_like_anon_struct_in_typedef"}},
[c]={{nil,x,"err_non_c_like_anon_struct_in_typedef"}},
[h]={{nil,w,"anonymous non-C-compatible type given name for linkage purposes by %select{typedef|alias}0 declaration after its linkage was computed; add a tag name here to establish linkage prior to definition"}},
[d]={{nil,x,"anonymous non-C-compatible type given name for linkage purposes by %select{typedef|alias}0 declaration after its linkage was computed; add a tag name here to establish linkage prior to definition"}},
[g]={{nil,w,{"anonymous non-C-compatible type given name for linkage purposes by ",{ob,"alias"}," declaration after its linkage was computed; add a tag name here to establish linkage prior to definition"}}},
[e]={{nil,x,{"anonymous non-C-compatible type given name for linkage purposes by ",{yb,"alias"}," declaration after its linkage was computed; add a tag name here to establish linkage prior to definition"}}},
[b]=k,
[f]=k,
[e]="anonymous non\\-C\\-compatible type given name for linkage purposes by (?:typedef|alias) declaration after its linkage was computed; add a tag name here to establish linkage prior to definition",
[g]="anonymous non\\-C\\-compatible type given name for linkage purposes by (?:typedef|alias) declaration after its linkage was computed; add a tag name here to establish linkage prior to definition",
[d]=a,
[h]=a,
[f]={{nil,w,m}},
[i]={{nil,x,m}},
[c]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling","[OpenMP][Part 2] Use reusable OpenMP context/traits handling\n\nThis patch implements an almost complete handling of OpenMP\ncontexts/traits such that we can reuse most of the logic in Flang\nthrough the OMPContext.{h,cpp} in llvm/Frontend/OpenMP.\n\nAll but construct SIMD specifiers, e.g., inbranch, and the device ISA\nselector are define in `llvm/lib/Frontend/OpenMP/OMPKinds.def`. From\nthese definitions we generate the enum classes `TraitSet`,\n`TraitSelector`, and `TraitProperty` as well as conversion and helper\nfunctions in `llvm/lib/Frontend/OpenMP/OMPContext.{h,cpp}`.\n\nThe above enum classes are used in the parser, sema, and the AST\nattribute. The latter is not a collection of multiple primitive variant\narguments that contain encodings via numbers and strings but instead a\ntree that mirrors the `match` clause (see `struct OpenMPTraitInfo`).\n\nThe changes to the parser make it more forgiving when wrong syntax is\nread and they also resulted in more specialized diagnostics. The tests\nare updated and the core issues are detected as before. Here and\nelsewhere this patch tries to be generic, thus we do not distinguish\nwhat selector set, selector, or property is parsed except if they do\nbehave exceptionally, as for example `user={condition(EXPR)}` does.\n\nThe sema logic changed in two ways: First, the OMPDeclareVariantAttr\nrepresentation changed, as mentioned above, and the sema was adjusted to\nwork with the new `OpenMPTraitInfo`. Second, the matching and scoring\nlogic moved into `OMPContext.{h,cpp}`. It is implemented on a flat\nrepresentation of the `match` clause that is not tied to clang.\n`OpenMPTraitInfo` provides a method to generate this flat structure (see\n`struct VariantMatchInfo`) by computing integer score values and boolean\nuser conditions from the `clang::Expr` we keep for them.\n\nThe OpenMP context is now an explicit object (see `struct OMPContext`).\nThis is in anticipation of construct traits that need to be tracked. The\nOpenMP context, as well as the `VariantMatchInfo`, are basically made up\nof a set of active or respectively required traits, e.g., \'host\', and an\nordered container of constructs which allows duplication. Matching and\nscoring is kept as generic as possible to allow easy extension in the\nfuture.\n\n---\n\nTest changes:\n\nThe messages checked in `OpenMP/declare_variant_messages.{c,cpp}` have\nbeen auto generated to match the new warnings and notes of the parser.\nThe \"subset\" checks were reversed causing the wrong version to be\npicked. The tests have been adjusted to correct this.\nWe do not print scores if the user did not provide one.\nWe print spaces to make lists in the `match` clause more legible.\n\nReviewers: kiranchandramohan, ABataev, RaviNarayanaswamy, gtbercea, grokos, sdmitriev, JonChesterfield, hfinkel, fghanim\n\nSubscribers: merge_guards_bot, rampitec, mgorny, hiraditya, aheejin, fedor.sergeev, simoncook, bollu, guansong, dexonsmith, jfb, s.egerton, llvm-commits, cfe-commits\n\nTags: #clang, #llvm\n\nDifferential Revision: https://reviews.llvm.org/D71830"},
[b]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling","[OpenMP][Part 2] Use reusable OpenMP context/traits handling\n\nThis patch implements an almost complete handling of OpenMP\ncontexts/traits such that we can reuse most of the logic in Flang\nthrough the OMPContext.{h,cpp} in llvm/Frontend/OpenMP.\n\nAll but construct SIMD specifiers, e.g., inbranch, and the device ISA\nselector are define in `llvm/lib/Frontend/OpenMP/OMPKinds.def`. From\nthese definitions we generate the enum classes `TraitSet`,\n`TraitSelector`, and `TraitProperty` as well as conversion and helper\nfunctions in `llvm/lib/Frontend/OpenMP/OMPContext.{h,cpp}`.\n\nThe above enum classes are used in the parser, sema, and the AST\nattribute. The latter is not a collection of multiple primitive variant\narguments that contain encodings via numbers and strings but instead a\ntree that mirrors the `match` clause (see `struct OpenMPTraitInfo`).\n\nThe changes to the parser make it more forgiving when wrong syntax is\nread and they also resulted in more specialized diagnostics. The tests\nare updated and the core issues are detected as before. Here and\nelsewhere this patch tries to be generic, thus we do not distinguish\nwhat selector set, selector, or property is parsed except if they do\nbehave exceptionally, as for example `user={condition(EXPR)}` does.\n\nThe sema logic changed in two ways: First, the OMPDeclareVariantAttr\nrepresentation changed, as mentioned above, and the sema was adjusted to\nwork with the new `OpenMPTraitInfo`. Second, the matching and scoring\nlogic moved into `OMPContext.{h,cpp}`. It is implemented on a flat\nrepresentation of the `match` clause that is not tied to clang.\n`OpenMPTraitInfo` provides a method to generate this flat structure (see\n`struct VariantMatchInfo`) by computing integer score values and boolean\nuser conditions from the `clang::Expr` we keep for them.\n\nThe OpenMP context is now an explicit object (see `struct OMPContext`).\nThis is in anticipation of construct traits that need to be tracked. The\nOpenMP context, as well as the `VariantMatchInfo`, are basically made up\nof a set of active or respectively required traits, e.g., \'host\', and an\nordered container of constructs which allows duplication. Matching and\nscoring is kept as generic as possible to allow easy extension in the\nfuture.\n\n---\n\nTest changes:\n\nThe messages checked in `OpenMP/declare_variant_messages.{c,cpp}` have\nbeen auto generated to match the new warnings and notes of the parser.\nThe \"subset\" checks were reversed causing the wrong version to be\npicked. The tests have been adjusted to correct this.\nWe do not print scores if the user did not provide one.\nWe print spaces to make lists in the `match` clause more legible.\n\nReviewers: kiranchandramohan, ABataev, RaviNarayanaswamy, gtbercea, grokos, sdmitriev, JonChesterfield, hfinkel, fghanim\n\nSubscribers: merge_guards_bot, rampitec, mgorny, hiraditya, aheejin, fedor.sergeev, simoncook, bollu, guansong, dexonsmith, jfb, s.egerton, llvm-commits, cfe-commits\n\nTags: #clang, #llvm\n\nDifferential Revision: https://reviews.llvm.org/D71830"},
[j]={{o,5017,"void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) {\n  // ...\n  if (NonCLike || ChangesLinkage) {\n    // ...\n    if (ChangesLinkage) {\n      // If the linkage changes, we can\'t accept this as an extension.\n      if (NonCLike.Kind == NonCLikeKind::None)\n      // ...\n      else\n        DiagID = diag::err_non_c_like_anon_struct_in_typedef;"}},
[j]={{o,5017,"void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) {\n  // ...\n  if (NonCLike || ChangesLinkage) {\n    // ...\n    if (ChangesLinkage) {\n      // If the linkage changes, we can\'t accept this as an extension.\n      if (NonCLike.Kind == NonCLikeKind::None)\n      // ...\n      else\n        DiagID = diag::err_non_c_like_anon_struct_in_typedef;"}},
[l]={
[l]={
Line 3,735: Line 3,736:
},
},
["err_non_constant_constraint_expression"]={
["err_non_constant_constraint_expression"]={
[i]={{nil,n,"err_non_constant_constraint_expression"}},
[c]={{nil,n,"err_non_constant_constraint_expression"}},
[h]={{nil,n,"substitution into constraint expression resulted in a non-constant expression"}},
[d]={{nil,n,"substitution into constraint expression resulted in a non-constant expression"}},
[g]={{nil,n,"substitution into constraint expression resulted in a non-constant expression"}},
[e]={{nil,n,"substitution into constraint expression resulted in a non-constant expression"}},
[b]=k,
[f]=k,
[e]="substitution into constraint expression resulted in a non\\-constant expression",
[g]="substitution into constraint expression resulted in a non\\-constant expression",
[d]=a,
[h]=a,
[f]={{nil,n,m}},
[i]={{nil,n,m}},
[c]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[b]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[j]={{"clang/lib/Sema/SemaConcept.cpp",276,"template <typename AtomicEvaluator> static ExprResult calculateConstraintSatisfaction(Sema &S, const Expr *ConstraintExpr, ConstraintSatisfaction &Satisfaction, AtomicEvaluator &&Evaluator) {\n  // ...\n  if (!SubstitutedAtomicExpr.get()->EvaluateAsConstantExpr(EvalResult, S.Context) || !EvaluationDiags.empty()) {\n    // ...\n    S.Diag(SubstitutedAtomicExpr.get()->getBeginLoc(), diag::err_non_constant_constraint_expression) << SubstitutedAtomicExpr.get()->getSourceRange();"}},
[j]={{"clang/lib/Sema/SemaConcept.cpp",276,"template <typename AtomicEvaluator> static ExprResult calculateConstraintSatisfaction(Sema &S, const Expr *ConstraintExpr, ConstraintSatisfaction &Satisfaction, AtomicEvaluator &&Evaluator) {\n  // ...\n  if (!SubstitutedAtomicExpr.get()->EvaluateAsConstantExpr(EvalResult, S.Context) || !EvaluationDiags.empty()) {\n    // ...\n    S.Diag(SubstitutedAtomicExpr.get()->getBeginLoc(), diag::err_non_constant_constraint_expression) << SubstitutedAtomicExpr.get()->getSourceRange();"}},
[l]={
[l]={
Line 3,749: Line 3,750:
},
},
["err_non_consteval_override"]={
["err_non_consteval_override"]={
[i]={{nil,w,"err_non_consteval_override"}},
[c]={{nil,x,"err_non_consteval_override"}},
[h]={{nil,w,"non-consteval function %0 cannot override a consteval function"}},
[d]={{nil,x,"non-consteval function %0 cannot override a consteval function"}},
[g]={{nil,w,"non-consteval function A cannot override a consteval function"}},
[e]={{nil,x,"non-consteval function A cannot override a consteval function"}},
[b]=k,
[f]=k,
[e]="non\\-consteval function (.*?) cannot override a consteval function",
[g]="non\\-consteval function (.*?) cannot override a consteval function",
[d]=a,
[h]=a,
[f]={{nil,w,m}},
[i]={{nil,x,m}},
[c]={Hb,1576908663,Eb,Kb},
[b]={Hb,1576908663,Gb,Fb},
[j]={{O,7041,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  // Perform checks that can\'t be done until we know all the properties of a\n  // member function (whether it\'s defaulted, deleted, virtual, overriding,\n  // ...).\n  auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) {\n    // ...\n    if (ReportOverrides(*this, MD->isConsteval() ? diag::err_consteval_override : diag::err_non_consteval_override, MD, [&](const CXXMethodDecl *V) { return MD->isConsteval() != V->isConsteval(); })) {"}},
[j]={{Q,7041,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  // Perform checks that can\'t be done until we know all the properties of a\n  // member function (whether it\'s defaulted, deleted, virtual, overriding,\n  // ...).\n  auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) {\n    // ...\n    if (ReportOverrides(*this, MD->isConsteval() ? diag::err_consteval_override : diag::err_non_consteval_override, MD, [&](const CXXMethodDecl *V) { return MD->isConsteval() != V->isConsteval(); })) {"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:460:10: error: non-consteval function \'f\' cannot override a consteval function","clang/test/SemaCXX/cxx2a-consteval.cpp:472:28: error: non-consteval function \'operator==\' cannot override a consteval function"}
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:460:10: error: non-consteval function \'f\' cannot override a consteval function","clang/test/SemaCXX/cxx2a-consteval.cpp:472:28: error: non-consteval function \'operator==\' cannot override a consteval function"}
Line 3,763: Line 3,764:
},
},
["err_non_default_visibility_dllimport"]={
["err_non_default_visibility_dllimport"]={
[i]={{nil,p,"err_non_default_visibility_dllimport"}},
[c]={{nil,p,"err_non_default_visibility_dllimport"}},
[h]={{nil,p,"non-default visibility cannot be applied to \'dllimport\' declaration"}},
[d]={{nil,p,"non-default visibility cannot be applied to \'dllimport\' declaration"}},
[g]={{nil,p,"non-default visibility cannot be applied to \'dllimport\' declaration"}},
[e]={{nil,p,"non-default visibility cannot be applied to \'dllimport\' declaration"}},
[b]=k,
[f]=k,
[e]="non\\-default visibility cannot be applied to \'dllimport\' declaration",
[g]="non\\-default visibility cannot be applied to \'dllimport\' declaration",
[d]=a,
[h]=a,
[f]={{nil,p,a}},
[i]={{nil,p,w}},
[c]={"6f9c4851ab7c",1663023396,"[MinGW] Reject explicit hidden visibility applied to dllexport and hidden/protected applied to dllim...","[MinGW] Reject explicit hidden visibility applied to dllexport and hidden/protected applied to dllimport\n\nHidden visibility is incompatible with dllexport.\nHidden and protected visibilities are incompatible with dllimport.\n(PlayStation uses dllexport protected.)\n\nWhen an explicit visibility attribute applies on a dllexport/dllimport\ndeclaration, report a Frontend error (Sema does not compute visibility).\n\nReviewed By: mstorsjo\n\nDifferential Revision: https://reviews.llvm.org/D133266"},
[b]={"6f9c4851ab7c",1663023396,"[MinGW] Reject explicit hidden visibility applied to dllexport and hidden/protected applied to dllim...","[MinGW] Reject explicit hidden visibility applied to dllexport and hidden/protected applied to dllimport\n\nHidden visibility is incompatible with dllexport.\nHidden and protected visibilities are incompatible with dllimport.\n(PlayStation uses dllexport protected.)\n\nWhen an explicit visibility attribute applies on a dllexport/dllimport\ndeclaration, report a Frontend error (Sema does not compute visibility).\n\nReviewed By: mstorsjo\n\nDifferential Revision: https://reviews.llvm.org/D133266"},
[j]={{"clang/lib/CodeGen/CodeGenModule.cpp",1388,"void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV, const NamedDecl *D) const {\n  // ...\n  if (GV->hasDLLExportStorageClass() || GV->hasDLLImportStorageClass()) {\n    // ...\n    if (GV->hasDLLExportStorageClass()) {\n    // ...\n    } else if (LV.getVisibility() != DefaultVisibility) {\n      getDiags().Report(D->getLocation(), diag::err_non_default_visibility_dllimport);"}}
[j]={{"clang/lib/CodeGen/CodeGenModule.cpp",1388,"void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV, const NamedDecl *D) const {\n  // ...\n  if (GV->hasDLLExportStorageClass() || GV->hasDLLImportStorageClass()) {\n    // ...\n    if (GV->hasDLLExportStorageClass()) {\n    // ...\n    } else if (LV.getVisibility() != DefaultVisibility) {\n      getDiags().Report(D->getLocation(), diag::err_non_default_visibility_dllimport);"}}
},
},
["err_non_deleted_override"]={
["err_non_deleted_override"]={
[i]="err_non_deleted_override",
[c]="err_non_deleted_override",
[h]="non-deleted function %0 cannot override a deleted function",
[d]="non-deleted function %0 cannot override a deleted function",
[g]="non-deleted function A cannot override a deleted function",
[e]="non-deleted function A cannot override a deleted function",
[b]=k,
[f]=k,
[e]="non\\-deleted function (.*?) cannot override a deleted function",
[g]="non\\-deleted function (.*?) cannot override a deleted function",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"7e414261f647",1350434878,"Implement C++ 10.3p16 - overrides involving deleted functions must match.","Implement C++ 10.3p16 - overrides involving deleted functions must match.\n\nOnly deleted functions may override deleted functions and non-deleted functions\nmay only override non-deleted functions.\n\nllvm-svn: 166082"},
[b]={"7e414261f647",1350434878,"Implement C++ 10.3p16 - overrides involving deleted functions must match.","Implement C++ 10.3p16 - overrides involving deleted functions must match.\n\nOnly deleted functions may override deleted functions and non-deleted functions\nmay only override non-deleted functions.\n\nllvm-svn: 166082"},
[j]={{O,7027,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  // Perform checks that can\'t be done until we know all the properties of a\n  // member function (whether it\'s defaulted, deleted, virtual, overriding,\n  // ...).\n  auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) {\n    // ...\n    if (ReportOverrides(*this, MD->isDeleted() ? diag::err_deleted_override : diag::err_non_deleted_override, MD, [&](const CXXMethodDecl *V) { return MD->isDeleted() != V->isDeleted(); })) {"}},
[j]={{Q,7027,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  // Perform checks that can\'t be done until we know all the properties of a\n  // member function (whether it\'s defaulted, deleted, virtual, overriding,\n  // ...).\n  auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) {\n    // ...\n    if (ReportOverrides(*this, MD->isDeleted() ? diag::err_deleted_override : diag::err_non_deleted_override, MD, [&](const CXXMethodDecl *V) { return MD->isDeleted() != V->isDeleted(); })) {"}},
[l]={
[l]={
["clang/test/CXX/class.derived/class.abstract/p16.cpp"]={"clang/test/CXX/class.derived/class.abstract/p16.cpp:10:16: error: non-deleted function \'b\' cannot override a deleted function"}
["clang/test/CXX/class.derived/class.abstract/p16.cpp"]={"clang/test/CXX/class.derived/class.abstract/p16.cpp:10:16: error: non-deleted function \'b\' cannot override a deleted function"}
Line 3,788: Line 3,789:
},
},
["err_non_designated_init_used"]={
["err_non_designated_init_used"]={
[i]={{nil,s,"err_non_designated_init_used"}},
[c]={{nil,s,"err_non_designated_init_used"}},
[h]={{nil,s,"a randomized struct can only be initialized with a designated initializer"}},
[d]={{nil,s,"a randomized struct can only be initialized with a designated initializer"}},
[g]={{nil,s,"a randomized struct can only be initialized with a designated initializer"}},
[e]={{nil,s,"a randomized struct can only be initialized with a designated initializer"}},
[b]=k,
[f]=k,
[e]="a randomized struct can only be initialized with a designated initializer",
[g]="a randomized struct can only be initialized with a designated initializer",
[d]=a,
[h]=a,
[f]={{nil,s,a}},
[i]={{nil,s,w}},
[c]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
[b]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
[j]={{"clang/lib/Sema/SemaInit.cpp",2320,"void InitListChecker::CheckStructUnionTypes(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, CXXRecordDecl::base_class_const_range Bases, RecordDecl::field_iterator Field, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool TopLevelObject) {\n  // ...\n  while (Index < IList->getNumInits()) {\n    // ...\n    // Don\'t allow non-designated initializers on randomized structures.\n    if (RD->isRandomized() && !IsZeroInitializer(Init)) {\n      if (!VerifyOnly)\n        SemaRef.Diag(InitLoc, diag::err_non_designated_init_used);"}},
[j]={{"clang/lib/Sema/SemaInit.cpp",2320,"void InitListChecker::CheckStructUnionTypes(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, CXXRecordDecl::base_class_const_range Bases, RecordDecl::field_iterator Field, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool TopLevelObject) {\n  // ...\n  while (Index < IList->getNumInits()) {\n    // ...\n    // Don\'t allow non-designated initializers on randomized structures.\n    if (RD->isRandomized() && !IsZeroInitializer(Init)) {\n      if (!VerifyOnly)\n        SemaRef.Diag(InitLoc, diag::err_non_designated_init_used);"}},
[l]={
[l]={
Line 3,802: Line 3,803:
},
},
["err_non_extern_extern"]={
["err_non_extern_extern"]={
[i]="err_non_extern_extern",
[c]="err_non_extern_extern",
[h]="non-extern declaration of %0 follows extern declaration",
[d]="non-extern declaration of %0 follows extern declaration",
[g]="non-extern declaration of A follows extern declaration",
[e]="non-extern declaration of A follows extern declaration",
[b]=k,
[f]=k,
[e]="non\\-extern declaration of (.*?) follows extern declaration",
[g]="non\\-extern declaration of (.*?) follows extern declaration",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"819f61094216",1296457486,"Diagnose if extern local variable is followed by non-extern and vice-versa.","Diagnose if extern local variable is followed by non-extern and vice-versa.\n\nllvm-svn: 124579"},
[b]={"819f61094216",1296457486,"Diagnose if extern local variable is followed by non-extern and vice-versa.","Diagnose if extern local variable is followed by non-extern and vice-versa.\n\nllvm-svn: 124579"},
[j]={{o,4667,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // ...\n  if (Old->hasLinkage() && New->isLocalVarDeclOrParm() && !New->hasExternalStorage()) {\n    Diag(New->getLocation(), diag::err_non_extern_extern) << New->getDeclName();"}},
[j]={{o,4667,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // ...\n  if (Old->hasLinkage() && New->isLocalVarDeclOrParm() && !New->hasExternalStorage()) {\n    Diag(New->getLocation(), diag::err_non_extern_extern) << New->getDeclName();"}},
[l]={
[l]={
Line 3,816: Line 3,817:
},
},
["err_non_first_default_compare_deletes"]={
["err_non_first_default_compare_deletes"]={
[i]={{nil,n,"err_non_first_default_compare_deletes"}},
[c]={{nil,n,"err_non_first_default_compare_deletes"}},
[h]={{nil,n,"defaulting %select{this %select{<ERROR>|equality|three-way|equality|relational}1 comparison operator|the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'}0 would delete it after its first declaration"}},
[d]={{nil,n,"defaulting %select{this %select{<ERROR>|equality|three-way|equality|relational}1 comparison operator|the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'}0 would delete it after its first declaration"}},
[g]={{nil,n,{"defaulting ",{{"this ",{"equality","three-way","equality","relational"}," comparison operator"},"the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'"}," would delete it after its first declaration"}}},
[e]={{nil,n,{"defaulting ",{{"this ",{"equality","three-way","equality","relational"}," comparison operator"},"the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'"}," would delete it after its first declaration"}}},
[b]=k,
[f]=k,
[e]="defaulting (?:this (?:equality|three\\-way|equality|relational) comparison operator|the corresponding implicit \'operator\\=\\=\' for this defaulted \'operator\\<\\=\\>\') would delete it after its first declaration",
[g]="defaulting (?:this (?:equality|three\\-way|equality|relational) comparison operator|the corresponding implicit \'operator\\=\\=\' for this defaulted \'operator\\<\\=\\>\') would delete it after its first declaration",
[d]=a,
[h]=a,
[f]={{nil,n,m}},
[i]={{nil,n,m}},
[c]={"5253d9138eb3",1573070592,"[c++20] Determine whether a defaulted comparison should be deleted or","[c++20] Determine whether a defaulted comparison should be deleted or\nconstexpr."},
[b]={"5253d9138eb3",1573070592,"[c++20] Determine whether a defaulted comparison should be deleted or","[c++20] Determine whether a defaulted comparison should be deleted or\nconstexpr."},
[j]={{O,8889,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  if (!First) {\n    if (Info.Deleted) {\n      // ...\n      Diag(FD->getLocation(), diag::err_non_first_default_compare_deletes) << FD->isImplicit() << (int)DCK;"}},
[j]={{Q,8889,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  if (!First) {\n    if (Info.Deleted) {\n      // ...\n      Diag(FD->getLocation(), diag::err_non_first_default_compare_deletes) << FD->isImplicit() << (int)DCK;"}},
[l]={
[l]={
["clang/test/CXX/class/class.compare/class.compare.default/p2.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:147:15: error: defaulting this equality comparison operator would delete it after its first declaration","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:149:15: error: defaulting this three-way comparison operator would delete it after its first declaration"}
["clang/test/CXX/class/class.compare/class.compare.default/p2.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:147:15: error: defaulting this equality comparison operator would delete it after its first declaration","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:149:15: error: defaulting this three-way comparison operator would delete it after its first declaration"}
Line 3,830: Line 3,831:
},
},
["err_non_first_default_compare_in_class"]={
["err_non_first_default_compare_in_class"]={
[i]={{nil,p,"err_non_first_default_compare_in_class"}},
[c]={{nil,p,"err_non_first_default_compare_in_class"}},
[h]={{nil,p,"defaulting this %select{<ERROR>|equality|three-way|equality|relational}0 comparison operator is not allowed because it was already declared outside the class"}},
[d]={{nil,p,"defaulting this %select{<ERROR>|equality|three-way|equality|relational}0 comparison operator is not allowed because it was already declared outside the class"}},
[g]={{nil,p,{"defaulting this ",{"equality","three-way","equality","relational"}," comparison operator is not allowed because it was already declared outside the class"}}},
[e]={{nil,p,{"defaulting this ",{"equality","three-way","equality","relational"}," comparison operator is not allowed because it was already declared outside the class"}}},
[b]=k,
[f]=k,
[e]="defaulting this (?:equality|three\\-way|equality|relational) comparison operator is not allowed because it was already declared outside the class",
[g]="defaulting this (?:equality|three\\-way|equality|relational) comparison operator is not allowed because it was already declared outside the class",
[d]=a,
[h]=a,
[f]={{nil,p,m}},
[i]={{nil,p,m}},
[c]={Ac,1625925174,zc,sc},
[b]={nc,1625925174,kc,Dc},
[j]={{O,8900,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  if (!First) {\n    // ...\n    if (isa<CXXRecordDecl>(FD->getLexicalDeclContext())) {\n      // ...\n      Diag(FD->getLocation(), diag::err_non_first_default_compare_in_class) << (int)DCK;"}},
[j]={{Q,8900,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  if (!First) {\n    // ...\n    if (isa<CXXRecordDecl>(FD->getLexicalDeclContext())) {\n      // ...\n      Diag(FD->getLocation(), diag::err_non_first_default_compare_in_class) << (int)DCK;"}},
[l]={
[l]={
["clang/test/CXX/class/class.compare/class.compare.default/p2.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:148:15: error: defaulting this equality comparison operator is not allowed because it was already declared outside the class","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:150:15: error: defaulting this relational comparison operator is not allowed because it was already declared outside the class"}
["clang/test/CXX/class/class.compare/class.compare.default/p2.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:148:15: error: defaulting this equality comparison operator is not allowed because it was already declared outside the class","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:150:15: error: defaulting this relational comparison operator is not allowed because it was already declared outside the class"}
Line 3,844: Line 3,845:
},
},
["err_non_local_variable_decl_in_for"]={
["err_non_local_variable_decl_in_for"]={
[i]="err_non_local_variable_decl_in_for",
[c]="err_non_local_variable_decl_in_for",
[h]="declaration of non-local variable in \'for\' loop",
[d]="declaration of non-local variable in \'for\' loop",
[g]="declaration of non-local variable in \'for\' loop",
[e]="declaration of non-local variable in \'for\' loop",
[b]=k,
[f]=k,
[e]="declaration of non\\-local variable in \'for\' loop",
[g]="declaration of non\\-local variable in \'for\' loop",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"2eb1c57b9daf",1365454344,"<rdar://problem/13540921> Fix a crasher when an Objective-C for-in loop gets a non-variable iteratio...","<rdar://problem/13540921> Fix a crasher when an Objective-C for-in loop gets a non-variable iteration declaration.\n\nllvm-svn: 179053"},
[b]={"2eb1c57b9daf",1365454344,"<rdar://problem/13540921> Fix a crasher when an Objective-C for-in loop gets a non-variable iteratio...","<rdar://problem/13540921> Fix a crasher when an Objective-C for-in loop gets a non-variable iteration declaration.\n\nllvm-svn: 179053"},
[j]={{E,2150,"StmtResult Sema::ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc, Stmt *First, ConditionResult Second, FullExprArg third, SourceLocation RParenLoc, Stmt *Body) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n    if (DeclStmt *DS = dyn_cast_or_null<DeclStmt>(First)) {\n      // ...\n      for (auto *DI : DS->decls()) {\n        if (VarDecl *VD = dyn_cast<VarDecl>(DI)) {\n          // ...\n          if (VD->isLocalVarDecl() && !VD->hasLocalStorage()) {\n            Diag(DI->getLocation(), diag::err_non_local_variable_decl_in_for);"},{E,2308,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  // ...\n  if (First) {\n    // ...\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n      // ...\n      // C99 6.8.5p3: The declaration part of a \'for\' statement shall only\n      // declare identifiers for objects having storage class \'auto\' or\n      // \'register\'.\n      if (!D->hasLocalStorage())\n        return StmtError(Diag(D->getLocation(), diag::err_non_local_variable_decl_in_for));"}},
[j]={{F,2150,"StmtResult Sema::ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc, Stmt *First, ConditionResult Second, FullExprArg third, SourceLocation RParenLoc, Stmt *Body) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n    if (DeclStmt *DS = dyn_cast_or_null<DeclStmt>(First)) {\n      // ...\n      for (auto *DI : DS->decls()) {\n        if (VarDecl *VD = dyn_cast<VarDecl>(DI)) {\n          // ...\n          if (VD->isLocalVarDecl() && !VD->hasLocalStorage()) {\n            Diag(DI->getLocation(), diag::err_non_local_variable_decl_in_for);"},{F,2308,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  // ...\n  if (First) {\n    // ...\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n      // ...\n      // C99 6.8.5p3: The declaration part of a \'for\' statement shall only\n      // declare identifiers for objects having storage class \'auto\' or\n      // \'register\'.\n      if (!D->hasLocalStorage())\n        return StmtError(Diag(D->getLocation(), diag::err_non_local_variable_decl_in_for));"}},
[l]={
[l]={
["clang/test/Sema/for.c"]={"clang/test/Sema/for.c:6:34: error: declaration of non-local variable in \'for\' loop","clang/test/Sema/for.c:11:48: error: declaration of non-local variable in \'for\' loop"}
["clang/test/Sema/for.c"]={"clang/test/Sema/for.c:6:34: error: declaration of non-local variable in \'for\' loop","clang/test/Sema/for.c:11:48: error: declaration of non-local variable in \'for\' loop"}
Line 3,858: Line 3,859:
},
},
["err_non_static_static"]={
["err_non_static_static"]={
[i]="err_non_static_static",
[c]="err_non_static_static",
[h]="non-static declaration of %0 follows static declaration",
[d]="non-static declaration of %0 follows static declaration",
[g]="non-static declaration of A follows static declaration",
[e]="non-static declaration of A follows static declaration",
[b]=k,
[f]=k,
[e]="non\\-static declaration of (.*?) follows static declaration",
[g]="non\\-static declaration of (.*?) follows static declaration",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={hb,1237025389,gb,fb},
[b]={ib,1237025389,fb,gb},
[j]={{o,4653,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // ...\n  // C99 6.2.2p4:\n  //  For an identifier declared with the storage-class specifier\n  //  extern in a scope in which a prior declaration of that\n  //  identifier is visible,23) if the prior declaration specifies\n  //  internal or external linkage, the linkage of the identifier at\n  //  the later declaration is the same as the linkage specified at\n  //  the prior declaration. If no prior declaration is visible, or\n  //  if the prior declaration specifies no linkage, then the\n  //  identifier has external linkage.\n  if (New->hasExternalStorage() && Old->hasLinkage())\n  // ...\n  else if (New->getCanonicalDecl()->getStorageClass() != SC_Static && !New->isStaticDataMember() && Old->getCanonicalDecl()->getStorageClass() == SC_Static) {\n    Diag(New->getLocation(), diag::err_non_static_static) << New->getDeclName();"}},
[j]={{o,4653,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // ...\n  // C99 6.2.2p4:\n  //  For an identifier declared with the storage-class specifier\n  //  extern in a scope in which a prior declaration of that\n  //  identifier is visible,23) if the prior declaration specifies\n  //  internal or external linkage, the linkage of the identifier at\n  //  the later declaration is the same as the linkage specified at\n  //  the prior declaration. If no prior declaration is visible, or\n  //  if the prior declaration specifies no linkage, then the\n  //  identifier has external linkage.\n  if (New->hasExternalStorage() && Old->hasLinkage())\n  // ...\n  else if (New->getCanonicalDecl()->getStorageClass() != SC_Static && !New->isStaticDataMember() && Old->getCanonicalDecl()->getStorageClass() == SC_Static) {\n    Diag(New->getLocation(), diag::err_non_static_static) << New->getDeclName();"}},
[l]={
[l]={
Line 3,872: Line 3,873:
},
},
["err_non_template_in_member_template_id_suggest"]={
["err_non_template_in_member_template_id_suggest"]={
[i]={{nil,r,"err_non_template_in_member_template_id_suggest"}},
[c]={{nil,r,"err_non_template_in_member_template_id_suggest"}},
[h]={{nil,r,"member %0 of %1 is not a template; did you mean %select{|simply }2%3?"}},
[d]={{nil,r,"member %0 of %1 is not a template; did you mean %select{|simply }2%3?"}},
[g]={{nil,r,{"member A of B is not a template; did you mean ",{a,"simply "},"D?"}}},
[e]={{nil,r,{"member A of B is not a template; did you mean ",{a,"simply "},"D?"}}},
[b]=k,
[f]=k,
[e]="member (.*?) of (.*?) is not a template; did you mean (?:|simply )(.*?)\\?",
[g]="member (.*?) of (.*?) is not a template; did you mean (?:|simply )(.*?)\\?",
[d]=a,
[h]=a,
[f]={{nil,r,m}},
[i]={{nil,r,m}},
[c]={"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\nThe heuristic that we use here is:\n * the left-hand side must be a simple identifier or a class member access\n * the right-hand side must be \'<\' followed by either a \'>\' or by a type-id that\n  cannot be an expression (in particular, not followed by \'(\' or \'{\')\n * there is a \'>\' token matching the \'<\' token\n\nThe second condition guarantees the expression would otherwise be ill-formed.\n\nIf we\'re confident that the user intended the name before the \'<\' to be\ninterpreted as a template, diagnose the fact that we didn\'t interpret it\nthat way, rather than diagnosing that the template arguments are not valid\nexpressions.\n\nllvm-svn: 302615"},
[b]={"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\nThe heuristic that we use here is:\n * the left-hand side must be a simple identifier or a class member access\n * the right-hand side must be \'<\' followed by either a \'>\' or by a type-id that\n  cannot be an expression (in particular, not followed by \'(\' or \'{\')\n * there is a \'>\' token matching the \'<\' token\n\nThe second condition guarantees the expression would otherwise be ill-formed.\n\nIf we\'re confident that the user intended the name before the \'<\' to be\ninterpreted as a template, diagnose the fact that we didn\'t interpret it\nthat way, rather than diagnosing that the template arguments are not valid\nexpressions.\n\nllvm-svn: 302615"},
[j]={{Y,704,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(NameInfo, LookupKind, S, &SS, CCC, CTK_ErrorRecovery, LookupCtx)) {\n    // ...\n    if (ND || Corrected.isKeyword()) {\n      if (LookupCtx) {\n        // ...\n        diagnoseTypo(Corrected, PDiag(diag::err_non_template_in_member_template_id_suggest) << Name << LookupCtx << DroppedSpecifier << SS.getRange(), false);"}},
[j]={{Y,704,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(NameInfo, LookupKind, S, &SS, CCC, CTK_ErrorRecovery, LookupCtx)) {\n    // ...\n    if (ND || Corrected.isKeyword()) {\n      if (LookupCtx) {\n        // ...\n        diagnoseTypo(Corrected, PDiag(diag::err_non_template_in_member_template_id_suggest) << Name << LookupCtx << DroppedSpecifier << SS.getRange(), false);"}},
[l]={
[l]={
Line 3,886: Line 3,887:
},
},
["err_non_template_in_template_id"]={
["err_non_template_in_template_id"]={
[i]={{nil,r,"err_non_template_in_template_id"}},
[c]={{nil,r,"err_non_template_in_template_id"}},
[h]={{nil,r,"%0 does not name a template but is followed by template arguments"}},
[d]={{nil,r,"%0 does not name a template but is followed by template arguments"}},
[g]={{nil,r,"A does not name a template but is followed by template arguments"}},
[e]={{nil,r,"A does not name a template but is followed by template arguments"}},
[b]=k,
[f]=k,
[e]="(.*?) does not name a template but is followed by template arguments",
[g]="(.*?) does not name a template but is followed by template arguments",
[d]=a,
[h]=a,
[f]={{nil,r,m}},
[i]={{nil,r,m}},
[c]={"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\nThe heuristic that we use here is:\n * the left-hand side must be a simple identifier or a class member access\n * the right-hand side must be \'<\' followed by either a \'>\' or by a type-id that\n  cannot be an expression (in particular, not followed by \'(\' or \'{\')\n * there is a \'>\' token matching the \'<\' token\n\nThe second condition guarantees the expression would otherwise be ill-formed.\n\nIf we\'re confident that the user intended the name before the \'<\' to be\ninterpreted as a template, diagnose the fact that we didn\'t interpret it\nthat way, rather than diagnosing that the template arguments are not valid\nexpressions.\n\nllvm-svn: 302615"},
[b]={"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\nThe heuristic that we use here is:\n * the left-hand side must be a simple identifier or a class member access\n * the right-hand side must be \'<\' followed by either a \'>\' or by a type-id that\n  cannot be an expression (in particular, not followed by \'(\' or \'{\')\n * there is a \'>\' token matching the \'<\' token\n\nThe second condition guarantees the expression would otherwise be ill-formed.\n\nIf we\'re confident that the user intended the name before the \'<\' to be\ninterpreted as a template, diagnose the fact that we didn\'t interpret it\nthat way, rather than diagnosing that the template arguments are not valid\nexpressions.\n\nllvm-svn: 302615"},
[j]={{Y,719,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  // ...\n  Diag(NameInfo.getLoc(), diag::err_non_template_in_template_id) << Name << SourceRange(Less, Greater);"}},
[j]={{Y,719,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  // ...\n  Diag(NameInfo.getLoc(), diag::err_non_template_in_template_id) << Name << SourceRange(Less, Greater);"}},
[l]={
[l]={
Line 3,900: Line 3,901:
},
},
["err_non_template_in_template_id_suggest"]={
["err_non_template_in_template_id_suggest"]={
[i]={{nil,r,"err_non_template_in_template_id_suggest"}},
[c]={{nil,r,"err_non_template_in_template_id_suggest"}},
[h]={{nil,r,"%0 does not name a template but is followed by template arguments; did you mean %1?"}},
[d]={{nil,r,"%0 does not name a template but is followed by template arguments; did you mean %1?"}},
[g]={{nil,r,"A does not name a template but is followed by template arguments; did you mean B?"}},
[e]={{nil,r,"A does not name a template but is followed by template arguments; did you mean B?"}},
[b]=k,
[f]=k,
[e]="(.*?) does not name a template but is followed by template arguments; did you mean (.*?)\\?",
[g]="(.*?) does not name a template but is followed by template arguments; did you mean (.*?)\\?",
[d]=a,
[h]=a,
[f]={{nil,r,m}},
[i]={{nil,r,m}},
[c]={"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\nThe heuristic that we use here is:\n * the left-hand side must be a simple identifier or a class member access\n * the right-hand side must be \'<\' followed by either a \'>\' or by a type-id that\n  cannot be an expression (in particular, not followed by \'(\' or \'{\')\n * there is a \'>\' token matching the \'<\' token\n\nThe second condition guarantees the expression would otherwise be ill-formed.\n\nIf we\'re confident that the user intended the name before the \'<\' to be\ninterpreted as a template, diagnose the fact that we didn\'t interpret it\nthat way, rather than diagnosing that the template arguments are not valid\nexpressions.\n\nllvm-svn: 302615"},
[b]={"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\nThe heuristic that we use here is:\n * the left-hand side must be a simple identifier or a class member access\n * the right-hand side must be \'<\' followed by either a \'>\' or by a type-id that\n  cannot be an expression (in particular, not followed by \'(\' or \'{\')\n * there is a \'>\' token matching the \'<\' token\n\nThe second condition guarantees the expression would otherwise be ill-formed.\n\nIf we\'re confident that the user intended the name before the \'<\' to be\ninterpreted as a template, diagnose the fact that we didn\'t interpret it\nthat way, rather than diagnosing that the template arguments are not valid\nexpressions.\n\nllvm-svn: 302615"},
[j]={{Y,709,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(NameInfo, LookupKind, S, &SS, CCC, CTK_ErrorRecovery, LookupCtx)) {\n    // ...\n    if (ND || Corrected.isKeyword()) {\n      if (LookupCtx) {\n      // ...\n      } else {\n        diagnoseTypo(Corrected, PDiag(diag::err_non_template_in_template_id_suggest) << Name, false);"}},
[j]={{Y,709,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(NameInfo, LookupKind, S, &SS, CCC, CTK_ErrorRecovery, LookupCtx)) {\n    // ...\n    if (ND || Corrected.isKeyword()) {\n      if (LookupCtx) {\n      // ...\n      } else {\n        diagnoseTypo(Corrected, PDiag(diag::err_non_template_in_template_id_suggest) << Name, false);"}},
[l]={
[l]={
Line 3,914: Line 3,915:
},
},
["err_non_thread_thread"]={
["err_non_thread_thread"]={
[i]="err_non_thread_thread",
[c]="err_non_thread_thread",
[h]="non-thread-local declaration of %0 follows thread-local declaration",
[d]="non-thread-local declaration of %0 follows thread-local declaration",
[g]="non-thread-local declaration of A follows thread-local declaration",
[e]="non-thread-local declaration of A follows thread-local declaration",
[b]=k,
[f]=k,
[e]="non\\-thread\\-local declaration of (.*?) follows thread\\-local declaration",
[g]="non\\-thread\\-local declaration of (.*?) follows thread\\-local declaration",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers.","Add more thorough/correct checking for invalid __thread specifiers.\n\nllvm-svn: 69542"},
[b]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers.","Add more thorough/correct checking for invalid __thread specifiers.\n\nllvm-svn: 69542"},
[j]={{o,4710,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // ...\n  if (New->getTLSKind() != Old->getTLSKind()) {\n    if (!Old->getTLSKind()) {\n    // ...\n    } else if (!New->getTLSKind()) {\n      Diag(New->getLocation(), diag::err_non_thread_thread) << New->getDeclName();"}},
[j]={{o,4710,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // ...\n  if (New->getTLSKind() != Old->getTLSKind()) {\n    if (!Old->getTLSKind()) {\n    // ...\n    } else if (!New->getTLSKind()) {\n      Diag(New->getLocation(), diag::err_non_thread_thread) << New->getDeclName();"}},
[l]={
[l]={
Line 3,928: Line 3,929:
},
},
["err_non_trivial_c_union_in_invalid_context"]={
["err_non_trivial_c_union_in_invalid_context"]={
[i]={{nil,x,"err_non_trivial_c_union_in_invalid_context"}},
[c]={{nil,z,"err_non_trivial_c_union_in_invalid_context"}},
[h]={{nil,x,"cannot %select{use type %1 for a function/method parameter|use type %1 for function/method return|default-initialize an object of type %1|declare an automatic variable of type %1|copy-initialize an object of type %1|assign to a variable of type %1|construct an automatic compound literal of type %1|capture a variable of type %1|cannot use volatile type %1 where it causes an lvalue-to-rvalue conversion}3 since it %select{contains|is}2 a union that is non-trivial to %select{default-initialize|destruct|copy}0"}},
[d]={{nil,z,"cannot %select{use type %1 for a function/method parameter|use type %1 for function/method return|default-initialize an object of type %1|declare an automatic variable of type %1|copy-initialize an object of type %1|assign to a variable of type %1|construct an automatic compound literal of type %1|capture a variable of type %1|cannot use volatile type %1 where it causes an lvalue-to-rvalue conversion}3 since it %select{contains|is}2 a union that is non-trivial to %select{default-initialize|destruct|copy}0"}},
[g]={{nil,x,{"cannot ",{"use type B for a function/method parameter","use type B for function/method return","default-initialize an object of type B","declare an automatic variable of type B","copy-initialize an object of type B","assign to a variable of type B","construct an automatic compound literal of type B","capture a variable of type B","cannot use volatile type B where it causes an lvalue-to-rvalue conversion"}," since it ",{"contains","is"}," a union that is non-trivial to ",{"default-initialize","destruct","copy"}}}},
[e]={{nil,z,{"cannot ",{"use type B for a function/method parameter","use type B for function/method return","default-initialize an object of type B","declare an automatic variable of type B","copy-initialize an object of type B","assign to a variable of type B","construct an automatic compound literal of type B","capture a variable of type B","cannot use volatile type B where it causes an lvalue-to-rvalue conversion"}," since it ",{"contains","is"}," a union that is non-trivial to ",{"default-initialize","destruct","copy"}}}},
[b]=k,
[f]=k,
[e]="cannot (?:use type (.*?) for a function\\/method parameter|use type (.*?) for function\\/method return|default\\-initialize an object of type (.*?)|declare an automatic variable of type (.*?)|copy\\-initialize an object of type (.*?)|assign to a variable of type (.*?)|construct an automatic compound literal of type (.*?)|capture a variable of type (.*?)|cannot use volatile type (.*?) where it causes an lvalue\\-to\\-rvalue conversion) since it (?:contains|is) a union that is non\\-trivial to (?:default\\-initialize|destruct|copy)",
[g]="cannot (?:use type (.*?) for a function\\/method parameter|use type (.*?) for function\\/method return|default\\-initialize an object of type (.*?)|declare an automatic variable of type (.*?)|copy\\-initialize an object of type (.*?)|assign to a variable of type (.*?)|construct an automatic compound literal of type (.*?)|capture a variable of type (.*?)|cannot use volatile type (.*?) where it causes an lvalue\\-to\\-rvalue conversion) since it (?:contains|is) a union that is non\\-trivial to (?:default\\-initialize|destruct|copy)",
[d]=a,
[h]=a,
[f]={{nil,x,m}},
[i]={{nil,z,m}},
[c]={"81b03d4a08b1",1562982435,"[Sema] Diagnose default-initialization, destruction, and copying of","[Sema] Diagnose default-initialization, destruction, and copying of\nnon-trivial C union types\n\nThis patch diagnoses uses of non-trivial C unions and structs/unions\ncontaining non-trivial C unions in the following contexts, which require\ndefault-initialization, destruction, or copying of the union objects,\ninstead of disallowing fields of non-trivial types in C unions, which is\nwhat we currently do:\n\n- function parameters.\n- function returns.\n- assignments.\n- compound literals.\n- block captures except capturing of `__block` variables by non-escaping\n  blocks.\n- local and global variable definitions.\n- lvalue-to-rvalue conversions of volatile types.\n\nSee the discussion in https://reviews.llvm.org/D62988 for more background.\n\nrdar://problem/50679094\n\nDifferential Revision: https://reviews.llvm.org/D63753\n\nllvm-svn: 365985"},
[b]={"81b03d4a08b1",1562982435,"[Sema] Diagnose default-initialization, destruction, and copying of","[Sema] Diagnose default-initialization, destruction, and copying of\nnon-trivial C union types\n\nThis patch diagnoses uses of non-trivial C unions and structs/unions\ncontaining non-trivial C unions in the following contexts, which require\ndefault-initialization, destruction, or copying of the union objects,\ninstead of disallowing fields of non-trivial types in C unions, which is\nwhat we currently do:\n\n- function parameters.\n- function returns.\n- assignments.\n- compound literals.\n- block captures except capturing of `__block` variables by non-escaping\n  blocks.\n- local and global variable definitions.\n- lvalue-to-rvalue conversions of volatile types.\n\nSee the discussion in https://reviews.llvm.org/D62988 for more background.\n\nrdar://problem/50679094\n\nDifferential Revision: https://reviews.llvm.org/D63753\n\nllvm-svn: 365985"},
[j]={{o,12933,"struct DiagNonTrivalCUnionDefaultInitializeVisitor : DefaultInitializedTypeVisitor<DiagNonTrivalCUnionDefaultInitializeVisitor, void> {\n  // ...\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    // ...\n    if (RD->isUnion()) {\n      if (OrigLoc.isValid()) {\n        // ...\n        S.Diag(OrigLoc, diag::err_non_trivial_c_union_in_invalid_context) << 0 << OrigTy << IsUnion << UseContext;"},{o,12998,"struct DiagNonTrivalCUnionDestructedTypeVisitor : DestructedTypeVisitor<DiagNonTrivalCUnionDestructedTypeVisitor, void> {\n  // ...\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    // ...\n    if (RD->isUnion()) {\n      if (OrigLoc.isValid()) {\n        // ...\n        S.Diag(OrigLoc, diag::err_non_trivial_c_union_in_invalid_context) << 1 << OrigTy << IsUnion << UseContext;"},{o,13064,"struct DiagNonTrivalCUnionCopyVisitor : CopiedTypeVisitor<DiagNonTrivalCUnionCopyVisitor, false, void> {\n  // ...\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    // ...\n    if (RD->isUnion()) {\n      if (OrigLoc.isValid()) {\n        // ...\n        S.Diag(OrigLoc, diag::err_non_trivial_c_union_in_invalid_context) << 2 << OrigTy << IsUnion << UseContext;"}},
[j]={{o,12933,"struct DiagNonTrivalCUnionDefaultInitializeVisitor : DefaultInitializedTypeVisitor<DiagNonTrivalCUnionDefaultInitializeVisitor, void> {\n  // ...\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    // ...\n    if (RD->isUnion()) {\n      if (OrigLoc.isValid()) {\n        // ...\n        S.Diag(OrigLoc, diag::err_non_trivial_c_union_in_invalid_context) << 0 << OrigTy << IsUnion << UseContext;"},{o,12998,"struct DiagNonTrivalCUnionDestructedTypeVisitor : DestructedTypeVisitor<DiagNonTrivalCUnionDestructedTypeVisitor, void> {\n  // ...\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    // ...\n    if (RD->isUnion()) {\n      if (OrigLoc.isValid()) {\n        // ...\n        S.Diag(OrigLoc, diag::err_non_trivial_c_union_in_invalid_context) << 1 << OrigTy << IsUnion << UseContext;"},{o,13064,"struct DiagNonTrivalCUnionCopyVisitor : CopiedTypeVisitor<DiagNonTrivalCUnionCopyVisitor, false, void> {\n  // ...\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    // ...\n    if (RD->isUnion()) {\n      if (OrigLoc.isValid()) {\n        // ...\n        S.Diag(OrigLoc, diag::err_non_trivial_c_union_in_invalid_context) << 2 << OrigTy << IsUnion << UseContext;"}},
[l]={
[l]={
Line 4,021: Line 4,022:
},
},
["err_non_type_template_arg_addr_label_diff"]={
["err_non_type_template_arg_addr_label_diff"]={
[i]="err_non_type_template_arg_addr_label_diff",
[c]="err_non_type_template_arg_addr_label_diff",
[h]="template argument / label address difference / what did you expect?",
[d]="template argument / label address difference / what did you expect?",
[g]="template argument / label address difference / what did you expect?",
[e]="template argument / label address difference / what did you expect?",
[b]=k,
[f]=k,
[e]="template argument \\/ label address difference \\/ what did you expect\\?",
[g]="template argument \\/ label address difference \\/ what did you expect\\?",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).","[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).\n\nWe don\'t yet support pointer-to-member template arguments that have undergone\npointer-to-member conversions, mostly because we don\'t have a mangling for them yet.\n\nllvm-svn: 222807"},
[b]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).","[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).\n\nWe don\'t yet support pointer-to-member template arguments that have undergone\npointer-to-member conversions, mostly because we don\'t have a mangling for them yet.\n\nllvm-svn: 222807"},
[j]={{Y,7397,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  if (getLangOpts().CPlusPlus17) {\n    // ...\n    case APValue::AddrLabelDiff:\n      return Diag(StartLoc, diag::err_non_type_template_arg_addr_label_diff);"}},
[j]={{Y,7397,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  if (getLangOpts().CPlusPlus17) {\n    // ...\n    case APValue::AddrLabelDiff:\n      return Diag(StartLoc, diag::err_non_type_template_arg_addr_label_diff);"}},
[l]={
[l]={
Line 4,035: Line 4,036:
},
},
["err_non_type_template_arg_subobject"]={
["err_non_type_template_arg_subobject"]={
[i]="err_non_type_template_arg_subobject",
[c]="err_non_type_template_arg_subobject",
[h]="non-type template argument refers to subobject \'%0\'",
[d]="non-type template argument refers to subobject \'%0\'",
[g]="non-type template argument refers to subobject \'A\'",
[e]="non-type template argument refers to subobject \'A\'",
[b]=k,
[f]=k,
[e]="non\\-type template argument refers to subobject \'(.*?)\'",
[g]="non\\-type template argument refers to subobject \'(.*?)\'",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).","[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).\n\nWe don\'t yet support pointer-to-member template arguments that have undergone\npointer-to-member conversions, mostly because we don\'t have a mangling for them yet.\n\nllvm-svn: 222807"},
[b]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).","[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).\n\nWe don\'t yet support pointer-to-member template arguments that have undergone\npointer-to-member conversions, mostly because we don\'t have a mangling for them yet.\n\nllvm-svn: 222807"},
[j]={{Y,7369,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  if (getLangOpts().CPlusPlus17) {\n    // ...\n    case APValue::LValue: {\n      // ...\n      // -- a subobject\n      // FIXME: Until C++20\n      if (Value.hasLValuePath() && Value.getLValuePath().size() == 1 && VD && VD->getType()->isArrayType() && Value.getLValuePath()[0].getAsArrayIndex() == 0 && !Value.isLValueOnePastTheEnd() && ParamType->isPointerType()) {\n      // ...\n      } else if (!Value.hasLValuePath() || Value.getLValuePath().size() || Value.isLValueOnePastTheEnd()) {\n        Diag(StartLoc, diag::err_non_type_template_arg_subobject) << Value.getAsString(Context, ParamType);"}},
[j]={{Y,7369,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  if (getLangOpts().CPlusPlus17) {\n    // ...\n    case APValue::LValue: {\n      // ...\n      // -- a subobject\n      // FIXME: Until C++20\n      if (Value.hasLValuePath() && Value.getLValuePath().size() == 1 && VD && VD->getType()->isArrayType() && Value.getLValuePath()[0].getAsArrayIndex() == 0 && !Value.isLValueOnePastTheEnd() && ParamType->isPointerType()) {\n      // ...\n      } else if (!Value.hasLValuePath() || Value.getLValuePath().size() || Value.isLValueOnePastTheEnd()) {\n        Diag(StartLoc, diag::err_non_type_template_arg_subobject) << Value.getAsString(Context, ParamType);"}},
[l]={
[l]={
Line 4,049: Line 4,050:
},
},
["err_non_type_template_arg_unsupported"]={
["err_non_type_template_arg_unsupported"]={
[i]={{nil,C,"err_non_type_template_arg_unsupported"}},
[c]={{nil,D,"err_non_type_template_arg_unsupported"}},
[h]={{nil,C,"sorry, non-type template argument of type %0 is not yet supported"}},
[d]={{nil,D,"sorry, non-type template argument of type %0 is not yet supported"}},
[g]={{nil,C,"sorry, non-type template argument of type A is not yet supported"}},
[e]={{nil,D,"sorry, non-type template argument of type A is not yet supported"}},
[b]=k,
[f]=k,
[e]="sorry, non\\-type template argument of type (.*?) is not yet supported",
[g]="sorry, non\\-type template argument of type (.*?) is not yet supported",
[d]=a,
[h]=a,
[f]={{nil,C,m}},
[i]={{nil,D,m}},
[c]={vc,1582847864,yc,xc},
[b]={tc,1582847864,uc,vc},
[j]={{Y,7404,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  if (getLangOpts().CPlusPlus17) {\n    // ...\n    case APValue::FixedPoint:\n    case APValue::Float:\n    case APValue::ComplexInt:\n    case APValue::ComplexFloat:\n    case APValue::Vector:\n    case APValue::Array:\n      return Diag(StartLoc, diag::err_non_type_template_arg_unsupported) << ParamType;"}},
[j]={{Y,7404,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  if (getLangOpts().CPlusPlus17) {\n    // ...\n    case APValue::FixedPoint:\n    case APValue::Float:\n    case APValue::ComplexInt:\n    case APValue::ComplexFloat:\n    case APValue::Vector:\n    case APValue::Array:\n      return Diag(StartLoc, diag::err_non_type_template_arg_unsupported) << ParamType;"}},
[l]={
[l]={
Line 4,063: Line 4,064:
},
},
["err_non_type_template_in_nested_name_specifier"]={
["err_non_type_template_in_nested_name_specifier"]={
[i]="err_non_type_template_in_nested_name_specifier",
[c]="err_non_type_template_in_nested_name_specifier",
[h]="qualified name refers into a specialization of %select{function|variable}0 template %1",
[d]="qualified name refers into a specialization of %select{function|variable}0 template %1",
[g]={{nil,nil,{"qualified name refers into a specialization of ",{"function","variable"}," template B"}}},
[e]={{nil,nil,{"qualified name refers into a specialization of ",{"function","variable"}," template B"}}},
[b]=k,
[f]=k,
[e]="qualified name refers into a specialization of (?:function|variable) template (.*?)",
[g]="qualified name refers into a specialization of (?:function|variable) template (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType","Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType\nto cope with non-type templates by providing appropriate\nerrors. Previously, we would either assert, crash, or silently build a\ndependent type when we shouldn\'t. Fixes PR9226.\n\nllvm-svn: 127037"},
[b]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType","Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType\nto cope with non-type templates by providing appropriate\nerrors. Previously, we would either assert, crash, or silently build a\ndependent type when we shouldn\'t. Fixes PR9226.\n\nllvm-svn: 127037"},
[j]={{Tb,946,"bool Sema::ActOnCXXNestedNameSpecifier(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy OpaqueTemplate, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, SourceLocation CCLoc, bool EnteringContext) {\n  // ...\n  if (Template.getAsOverloadedTemplate() || DTN || isa<FunctionTemplateDecl>(TD) || isa<VarTemplateDecl>(TD)) {\n    // ...\n    Diag(CCLoc, diag::err_non_type_template_in_nested_name_specifier) << (TD && isa<VarTemplateDecl>(TD)) << Template << R;"}},
[j]={{cc,946,"bool Sema::ActOnCXXNestedNameSpecifier(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy OpaqueTemplate, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, SourceLocation CCLoc, bool EnteringContext) {\n  // ...\n  if (Template.getAsOverloadedTemplate() || DTN || isa<FunctionTemplateDecl>(TD) || isa<VarTemplateDecl>(TD)) {\n    // ...\n    Diag(CCLoc, diag::err_non_type_template_in_nested_name_specifier) << (TD && isa<VarTemplateDecl>(TD)) << Template << R;"}},
[l]={
[l]={
["clang/test/SemaTemplate/nested-name-spec-template.cpp"]={"clang/test/SemaTemplate/nested-name-spec-template.cpp:114:9: error: qualified name refers into a specialization of function template \'nt\'","clang/test/SemaTemplate/nested-name-spec-template.cpp:124:11: error: qualified name refers into a specialization of function template \'f\'"}
["clang/test/SemaTemplate/nested-name-spec-template.cpp"]={"clang/test/SemaTemplate/nested-name-spec-template.cpp:114:9: error: qualified name refers into a specialization of function template \'nt\'","clang/test/SemaTemplate/nested-name-spec-template.cpp:124:11: error: qualified name refers into a specialization of function template \'f\'"}
Line 4,077: Line 4,078:
},
},
["err_non_type_template_parm_type_deduction_failure"]={
["err_non_type_template_parm_type_deduction_failure"]={
[i]="err_non_type_template_parm_type_deduction_failure",
[c]="err_non_type_template_parm_type_deduction_failure",
[h]="non-type template parameter %0 with type %1 has incompatible initializer of type %2",
[d]="non-type template parameter %0 with type %1 has incompatible initializer of type %2",
[g]="non-type template parameter A with type B has incompatible initializer of type C",
[e]="non-type template parameter A with type B has incompatible initializer of type C",
[b]=k,
[f]=k,
[e]="non\\-type template parameter (.*?) with type (.*?) has incompatible initializer of type (.*?)",
[g]="non\\-type template parameter (.*?) with type (.*?) has incompatible initializer of type (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"5f274389d1d9",1475106927,"P0127R2: Support type deduction for types of non-type template parameters in","P0127R2: Support type deduction for types of non-type template parameters in\nC++1z.\n\nPatch by James Touton! Some bugfixes and rebasing by me.\n\nllvm-svn: 282651"},
[b]={"5f274389d1d9",1475106927,"P0127R2: Support type deduction for types of non-type template parameters in","P0127R2: Support type deduction for types of non-type template parameters in\nC++1z.\n\nPatch by James Touton! Some bugfixes and rebasing by me.\n\nllvm-svn: 282651"},
[j]={{Y,7171,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  if (getLangOpts().CPlusPlus17 && DeducedT && !DeducedT->isDeduced()) {\n    // ...\n    if (isa<DeducedTemplateSpecializationType>(DeducedT)) {\n    // ...\n    } else {\n      // ...\n      if (Result == TDK_AlreadyDiagnosed) {\n      // ...\n      } else if (Result != TDK_Success) {\n        Diag(Arg->getExprLoc(), diag::err_non_type_template_parm_type_deduction_failure) << Param->getDeclName() << Param->getType() << Arg->getType() << Arg->getSourceRange();"}},
[j]={{Y,7171,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  if (getLangOpts().CPlusPlus17 && DeducedT && !DeducedT->isDeduced()) {\n    // ...\n    if (isa<DeducedTemplateSpecializationType>(DeducedT)) {\n    // ...\n    } else {\n      // ...\n      if (Result == TDK_AlreadyDiagnosed) {\n      // ...\n      } else if (Result != TDK_Success) {\n        Diag(Arg->getExprLoc(), diag::err_non_type_template_parm_type_deduction_failure) << Param->getDeclName() << Param->getType() << Arg->getType() << Arg->getSourceRange();"}},
[l]={
[l]={
Line 4,091: Line 4,092:
},
},
["err_non_variable_decl_in_for"]={
["err_non_variable_decl_in_for"]={
[i]="err_non_variable_decl_in_for",
[c]="err_non_variable_decl_in_for",
[h]="non-variable declaration in \'for\' loop",
[d]="non-variable declaration in \'for\' loop",
[g]="non-variable declaration in \'for\' loop",
[e]="non-variable declaration in \'for\' loop",
[b]=k,
[f]=k,
[e]="non\\-variable declaration in \'for\' loop",
[g]="non\\-variable declaration in \'for\' loop",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={hb,1237025389,gb,fb},
[b]={ib,1237025389,fb,gb},
[j]={{E,100,"void Sema::ActOnForEachDeclStmt(DeclGroupPtrTy dg) {\n  // ...\n  if (!var) {\n    Diag(decl->getLocation(), diag::err_non_variable_decl_in_for);"},{E,2164,"StmtResult Sema::ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc, Stmt *First, ConditionResult Second, FullExprArg third, SourceLocation RParenLoc, Stmt *Body) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n    if (DeclStmt *DS = dyn_cast_or_null<DeclStmt>(First)) {\n      // ...\n      // Diagnose if we saw a non-variable declaration but no variable\n      // declarations.\n      if (NonVarSeen && !VarDeclSeen)\n        Diag(NonVarSeen->getLocation(), diag::err_non_variable_decl_in_for);"}},
[j]={{F,100,"void Sema::ActOnForEachDeclStmt(DeclGroupPtrTy dg) {\n  // ...\n  if (!var) {\n    Diag(decl->getLocation(), diag::err_non_variable_decl_in_for);"},{F,2164,"StmtResult Sema::ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc, Stmt *First, ConditionResult Second, FullExprArg third, SourceLocation RParenLoc, Stmt *Body) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n    if (DeclStmt *DS = dyn_cast_or_null<DeclStmt>(First)) {\n      // ...\n      // Diagnose if we saw a non-variable declaration but no variable\n      // declarations.\n      if (NonVarSeen && !VarDeclSeen)\n        Diag(NonVarSeen->getLocation(), diag::err_non_variable_decl_in_for);"}},
[l]={
[l]={
["clang/test/Sema/for.c"]={"clang/test/Sema/for.c:5:28: error: non-variable declaration in \'for\' loop","clang/test/Sema/for.c:7:35: error: non-variable declaration in \'for\' loop","clang/test/Sema/for.c:10:30: error: non-variable declaration in \'for\' loop","clang/test/Sema/for.c:13:31: error: non-variable declaration in \'for\' loop"}
["clang/test/Sema/for.c"]={"clang/test/Sema/for.c:5:28: error: non-variable declaration in \'for\' loop","clang/test/Sema/for.c:7:35: error: non-variable declaration in \'for\' loop","clang/test/Sema/for.c:10:30: error: non-variable declaration in \'for\' loop","clang/test/Sema/for.c:13:31: error: non-variable declaration in \'for\' loop"}
Line 4,105: Line 4,106:
},
},
["err_non_virtual_pure"]={
["err_non_virtual_pure"]={
[i]="err_non_virtual_pure",
[c]="err_non_virtual_pure",
[h]="%0 is not virtual and cannot be declared pure",
[d]="%0 is not virtual and cannot be declared pure",
[g]="A is not virtual and cannot be declared pure",
[e]="A is not virtual and cannot be declared pure",
[b]=k,
[f]=k,
[e]="(.*?) is not virtual and cannot be declared pure",
[g]="(.*?) is not virtual and cannot be declared pure",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={H,1236199783,I,G},
[b]={J,1236199783,H,I},
[j]={{O,18141,"/// Mark the given method pure.\n///\n/// \\param Method the method to be marked pure.\n///\n/// \\param InitRange the source range that covers the \"0\" initializer.\nbool Sema::CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange) {\n  // ...\n  if (!Method->isInvalidDecl())\n    Diag(Method->getLocation(), diag::err_non_virtual_pure) << Method->getDeclName() << InitRange;"}},
[j]={{Q,18141,"/// Mark the given method pure.\n///\n/// \\param Method the method to be marked pure.\n///\n/// \\param InitRange the source range that covers the \"0\" initializer.\nbool Sema::CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange) {\n  // ...\n  if (!Method->isInvalidDecl())\n    Diag(Method->getLocation(), diag::err_non_virtual_pure) << Method->getDeclName() << InitRange;"}},
[l]={
[l]={
["clang/test/SemaCXX/virtuals.cpp"]={"clang/test/SemaCXX/virtuals.cpp:7:8: error: \'h\' is not virtual and cannot be declared pure","clang/test/SemaCXX/virtuals.cpp:25:8: error: \'g\' is not virtual and cannot be declared pure"}
["clang/test/SemaCXX/virtuals.cpp"]={"clang/test/SemaCXX/virtuals.cpp:7:8: error: \'h\' is not virtual and cannot be declared pure","clang/test/SemaCXX/virtuals.cpp:25:8: error: \'g\' is not virtual and cannot be declared pure"}
Line 4,119: Line 4,120:
},
},
["err_nonfunction_block_type"]={
["err_nonfunction_block_type"]={
[i]="err_nonfunction_block_type",
[c]="err_nonfunction_block_type",
[h]="block pointer to non-function type is invalid",
[d]="block pointer to non-function type is invalid",
[g]="block pointer to non-function type is invalid",
[e]="block pointer to non-function type is invalid",
[b]=k,
[f]=k,
[e]="block pointer to non\\-function type is invalid",
[g]="block pointer to non\\-function type is invalid",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={hb,1237025389,gb,fb},
[b]={ib,1237025389,fb,gb},
[j]={{cb,3138,"/// Build a block pointer type.\n///\n/// \\param T The type to which we\'ll be building a block pointer.\n///\n/// \\param Loc The source location, used for diagnostics.\n///\n/// \\param Entity The name of the entity that involves the block pointer\n/// type, if known.\n///\n/// \\returns A suitable block pointer type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildBlockPointerType(QualType T, SourceLocation Loc, DeclarationName Entity) {\n  if (!T->isFunctionType()) {\n    Diag(Loc, diag::err_nonfunction_block_type);"}},
[j]={{cb,3138,"/// Build a block pointer type.\n///\n/// \\param T The type to which we\'ll be building a block pointer.\n///\n/// \\param Loc The source location, used for diagnostics.\n///\n/// \\param Entity The name of the entity that involves the block pointer\n/// type, if known.\n///\n/// \\returns A suitable block pointer type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildBlockPointerType(QualType T, SourceLocation Loc, DeclarationName Entity) {\n  if (!T->isFunctionType()) {\n    Diag(Loc, diag::err_nonfunction_block_type);"}},
[l]={
[l]={
Line 4,133: Line 4,134:
},
},
["err_nonstatic_member_out_of_line"]={
["err_nonstatic_member_out_of_line"]={
[i]="err_nonstatic_member_out_of_line",
[c]="err_nonstatic_member_out_of_line",
[h]="non-static data member defined out-of-line",
[d]="non-static data member defined out-of-line",
[g]="non-static data member defined out-of-line",
[e]="non-static data member defined out-of-line",
[b]=k,
[f]=k,
[e]="non\\-static data member defined out\\-of\\-line",
[g]="non\\-static data member defined out\\-of\\-line",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={hb,1237025389,gb,fb},
[b]={ib,1237025389,fb,gb},
[j]={{o,8026,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    // Merge the decl with the existing one if appropriate.\n    if (!Previous.empty()) {\n      if (Previous.isSingleResult() && isa<FieldDecl>(Previous.getFoundDecl()) && D.getCXXScopeSpec().isSet()) {\n        // ...\n        Diag(NewVD->getLocation(), diag::err_nonstatic_member_out_of_line) << D.getCXXScopeSpec().getRange();"}},
[j]={{o,8026,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    // Merge the decl with the existing one if appropriate.\n    if (!Previous.empty()) {\n      if (Previous.isSingleResult() && isa<FieldDecl>(Previous.getFoundDecl()) && D.getCXXScopeSpec().isSet()) {\n        // ...\n        Diag(NewVD->getLocation(), diag::err_nonstatic_member_out_of_line) << D.getCXXScopeSpec().getRange();"}},
[l]={
[l]={
Line 4,147: Line 4,148:
},
},
["err_nontemporal_builtin_must_be_pointer"]={
["err_nontemporal_builtin_must_be_pointer"]={
[i]="err_nontemporal_builtin_must_be_pointer",
[c]="err_nontemporal_builtin_must_be_pointer",
[h]="address argument to nontemporal builtin must be a pointer (%0 invalid)",
[d]="address argument to nontemporal builtin must be a pointer (%0 invalid)",
[g]="address argument to nontemporal builtin must be a pointer (A invalid)",
[e]="address argument to nontemporal builtin must be a pointer (A invalid)",
[b]=k,
[f]=k,
[e]="address argument to nontemporal builtin must be a pointer \\((.*?) invalid\\)",
[g]="address argument to nontemporal builtin must be a pointer \\((.*?) invalid\\)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"84df12375cde",1441756353,"Introduce __builtin_nontemporal_store and __builtin_nontemporal_load.","Introduce __builtin_nontemporal_store and __builtin_nontemporal_load.\n\nSummary:\nCurrently clang provides no general way to generate nontemporal loads/stores.\nThere are some architecture specific builtins for doing so (e.g. in x86), but\nthere is no way to generate non-temporal store on, e.g. AArch64. This patch adds\ngeneric builtins which are expanded to a simple store with \'!nontemporal\'\nattribute in IR.\n\nDifferential Revision: http://reviews.llvm.org/D12313\n\nllvm-svn: 247104"},
[b]={"84df12375cde",1441756353,"Introduce __builtin_nontemporal_store and __builtin_nontemporal_load.","Introduce __builtin_nontemporal_store and __builtin_nontemporal_load.\n\nSummary:\nCurrently clang provides no general way to generate nontemporal loads/stores.\nThere are some architecture specific builtins for doing so (e.g. in x86), but\nthere is no way to generate non-temporal store on, e.g. AArch64. This patch adds\ngeneric builtins which are expanded to a simple store with \'!nontemporal\'\nattribute in IR.\n\nDifferential Revision: http://reviews.llvm.org/D12313\n\nllvm-svn: 247104"},
[j]={{W,5289,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case RISCV::BI__builtin_riscv_ntl_load:\n  case RISCV::BI__builtin_riscv_ntl_store:\n    // ...\n    if (!PtrType) {\n      Diag(DRE->getBeginLoc(), diag::err_nontemporal_builtin_must_be_pointer) << PointerArg->getType() << PointerArg->getSourceRange();"},{W,7934,"/// SemaBuiltinNontemporalOverloaded - We have a call to\n/// __builtin_nontemporal_store or __builtin_nontemporal_load, which is an\n/// overloaded function based on the pointer type of its last argument.\n///\n/// This function goes through and does final semantic checking for these\n/// builtins.\nExprResult Sema::SemaBuiltinNontemporalOverloaded(ExprResult TheCallResult) {\n  // ...\n  if (!pointerType) {\n    Diag(DRE->getBeginLoc(), diag::err_nontemporal_builtin_must_be_pointer) << PointerArg->getType() << PointerArg->getSourceRange();"}}
[j]={{X,5289,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case RISCV::BI__builtin_riscv_ntl_load:\n  case RISCV::BI__builtin_riscv_ntl_store:\n    // ...\n    if (!PtrType) {\n      Diag(DRE->getBeginLoc(), diag::err_nontemporal_builtin_must_be_pointer) << PointerArg->getType() << PointerArg->getSourceRange();"},{X,7934,"/// SemaBuiltinNontemporalOverloaded - We have a call to\n/// __builtin_nontemporal_store or __builtin_nontemporal_load, which is an\n/// overloaded function based on the pointer type of its last argument.\n///\n/// This function goes through and does final semantic checking for these\n/// builtins.\nExprResult Sema::SemaBuiltinNontemporalOverloaded(ExprResult TheCallResult) {\n  // ...\n  if (!pointerType) {\n    Diag(DRE->getBeginLoc(), diag::err_nontemporal_builtin_must_be_pointer) << PointerArg->getType() << PointerArg->getSourceRange();"}}
},
},
["err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector"]={
["err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector"]={
[i]="err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector",
[c]="err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector",
[h]="address argument to nontemporal builtin must be a pointer to integer, float, pointer, or a vector of such types (%0 invalid)",
[d]="address argument to nontemporal builtin must be a pointer to integer, float, pointer, or a vector of such types (%0 invalid)",
[g]="address argument to nontemporal builtin must be a pointer to integer, float, pointer, or a vector of such types (A invalid)",
[e]="address argument to nontemporal builtin must be a pointer to integer, float, pointer, or a vector of such types (A invalid)",
[b]=k,
[f]=k,
[e]="address argument to nontemporal builtin must be a pointer to integer, float, pointer, or a vector of such types \\((.*?) invalid\\)",
[g]="address argument to nontemporal builtin must be a pointer to integer, float, pointer, or a vector of such types \\((.*?) invalid\\)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"84df12375cde",1441756353,"Introduce __builtin_nontemporal_store and __builtin_nontemporal_load.","Introduce __builtin_nontemporal_store and __builtin_nontemporal_load.\n\nSummary:\nCurrently clang provides no general way to generate nontemporal loads/stores.\nThere are some architecture specific builtins for doing so (e.g. in x86), but\nthere is no way to generate non-temporal store on, e.g. AArch64. This patch adds\ngeneric builtins which are expanded to a simple store with \'!nontemporal\'\nattribute in IR.\n\nDifferential Revision: http://reviews.llvm.org/D12313\n\nllvm-svn: 247104"},
[b]={"84df12375cde",1441756353,"Introduce __builtin_nontemporal_store and __builtin_nontemporal_load.","Introduce __builtin_nontemporal_store and __builtin_nontemporal_load.\n\nSummary:\nCurrently clang provides no general way to generate nontemporal loads/stores.\nThere are some architecture specific builtins for doing so (e.g. in x86), but\nthere is no way to generate non-temporal store on, e.g. AArch64. This patch adds\ngeneric builtins which are expanded to a simple store with \'!nontemporal\'\nattribute in IR.\n\nDifferential Revision: http://reviews.llvm.org/D12313\n\nllvm-svn: 247104"},
[j]={{W,5300,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case RISCV::BI__builtin_riscv_ntl_load:\n  case RISCV::BI__builtin_riscv_ntl_store:\n    // ...\n    if (!ValType->isIntegerType() && !ValType->isAnyPointerType() && !ValType->isBlockPointerType() && !ValType->isFloatingType() && !ValType->isVectorType() && !ValType->isRVVType()) {\n      Diag(DRE->getBeginLoc(), diag::err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector) << PointerArg->getType() << PointerArg->getSourceRange();"},{W,7947,"/// SemaBuiltinNontemporalOverloaded - We have a call to\n/// __builtin_nontemporal_store or __builtin_nontemporal_load, which is an\n/// overloaded function based on the pointer type of its last argument.\n///\n/// This function goes through and does final semantic checking for these\n/// builtins.\nExprResult Sema::SemaBuiltinNontemporalOverloaded(ExprResult TheCallResult) {\n  // ...\n  if (!ValType->isIntegerType() && !ValType->isAnyPointerType() && !ValType->isBlockPointerType() && !ValType->isFloatingType() && !ValType->isVectorType()) {\n    Diag(DRE->getBeginLoc(), diag::err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector) << PointerArg->getType() << PointerArg->getSourceRange();"}}
[j]={{X,5300,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case RISCV::BI__builtin_riscv_ntl_load:\n  case RISCV::BI__builtin_riscv_ntl_store:\n    // ...\n    if (!ValType->isIntegerType() && !ValType->isAnyPointerType() && !ValType->isBlockPointerType() && !ValType->isFloatingType() && !ValType->isVectorType() && !ValType->isRVVType()) {\n      Diag(DRE->getBeginLoc(), diag::err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector) << PointerArg->getType() << PointerArg->getSourceRange();"},{X,7947,"/// SemaBuiltinNontemporalOverloaded - We have a call to\n/// __builtin_nontemporal_store or __builtin_nontemporal_load, which is an\n/// overloaded function based on the pointer type of its last argument.\n///\n/// This function goes through and does final semantic checking for these\n/// builtins.\nExprResult Sema::SemaBuiltinNontemporalOverloaded(ExprResult TheCallResult) {\n  // ...\n  if (!ValType->isIntegerType() && !ValType->isAnyPointerType() && !ValType->isBlockPointerType() && !ValType->isFloatingType() && !ValType->isVectorType()) {\n    Diag(DRE->getBeginLoc(), diag::err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector) << PointerArg->getType() << PointerArg->getSourceRange();"}}
},
},
["err_noreturn_block_has_return_expr"]={
["err_noreturn_block_has_return_expr"]={
[i]="err_noreturn_block_has_return_expr",
[c]="err_noreturn_block_has_return_expr",
[h]="block declared \'noreturn\' should not return",
[d]="block declared \'noreturn\' should not return",
[e]="block declared \'noreturn\' should not return",
[f]=k,
[g]="block declared \'noreturn\' should not return",
[g]="block declared \'noreturn\' should not return",
[b]=k,
[h]=a,
[e]="block declared \'noreturn\' should not return",
[i]=m,
[d]=a,
[b]={"88788feddd21",1241031793,"Sema and CodeGen support for attributes on blocks.  Radar 6441502","Sema and CodeGen support for attributes on blocks.  Radar 6441502\n\nllvm-svn: 70403"},
[f]=m,
[j]={{Ac,597,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForBlock() {\n    // ...\n    D.diag_MaybeFallThrough_HasNoReturn = diag::err_noreturn_block_has_return_expr;"},{Ac,601,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForBlock() {\n    // ...\n    D.diag_AlwaysFallThrough_HasNoReturn = diag::err_noreturn_block_has_return_expr;"},{F,3657,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // ...\n  if (auto *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {\n    if (CurBlock->FunctionType->castAs<FunctionType>()->getNoReturnAttr()) {\n      Diag(ReturnLoc, diag::err_noreturn_block_has_return_expr);"}},
[c]={"88788feddd21",1241031793,"Sema and CodeGen support for attributes on blocks.  Radar 6441502","Sema and CodeGen support for attributes on blocks.  Radar 6441502\n\nllvm-svn: 70403"},
[j]={{rc,597,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForBlock() {\n    // ...\n    D.diag_MaybeFallThrough_HasNoReturn = diag::err_noreturn_block_has_return_expr;"},{rc,601,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForBlock() {\n    // ...\n    D.diag_AlwaysFallThrough_HasNoReturn = diag::err_noreturn_block_has_return_expr;"},{E,3657,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // ...\n  if (auto *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {\n    if (CurBlock->FunctionType->castAs<FunctionType>()->getNoReturnAttr()) {\n      Diag(ReturnLoc, diag::err_noreturn_block_has_return_expr);"}},
[l]={
[l]={
["clang/test/Sema/block-return-2.c"]={"clang/test/Sema/block-return-2.c:4:40: error: block declared \'noreturn\' should not return"}
["clang/test/Sema/block-return-2.c"]={"clang/test/Sema/block-return-2.c:4:40: error: block declared \'noreturn\' should not return"}
Line 4,183: Line 4,184:
},
},
["err_noreturn_lambda_has_return_expr"]={
["err_noreturn_lambda_has_return_expr"]={
[i]="err_noreturn_lambda_has_return_expr",
[c]="err_noreturn_lambda_has_return_expr",
[h]="lambda declared \'noreturn\' should not return",
[d]="lambda declared \'noreturn\' should not return",
[e]="lambda declared \'noreturn\' should not return",
[f]=k,
[g]="lambda declared \'noreturn\' should not return",
[g]="lambda declared \'noreturn\' should not return",
[b]=k,
[h]=a,
[e]="lambda declared \'noreturn\' should not return",
[i]="Lambda Issue",
[d]=a,
[b]={"cf11eb76ed8d",1329322815,"Specialize noreturn diagnostics for lambda expressions.","Specialize noreturn diagnostics for lambda expressions.\n\nllvm-svn: 150586"},
[f]="Lambda Issue",
[j]={{Ac,612,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForLambda() {\n    // ...\n    D.diag_MaybeFallThrough_HasNoReturn = diag::err_noreturn_lambda_has_return_expr;"},{Ac,616,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForLambda() {\n    // ...\n    D.diag_AlwaysFallThrough_HasNoReturn = diag::err_noreturn_lambda_has_return_expr;"},{F,3668,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // ...\n  if (auto *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {\n  // ...\n  } else if (auto *CurRegion = dyn_cast<CapturedRegionScopeInfo>(CurCap)) {\n  // ...\n  } else {\n    // ...\n    if (CurLambda->CallOperator->getType()->castAs<FunctionType>()->getNoReturnAttr()) {\n      Diag(ReturnLoc, diag::err_noreturn_lambda_has_return_expr);"}}
[c]={"cf11eb76ed8d",1329322815,"Specialize noreturn diagnostics for lambda expressions.","Specialize noreturn diagnostics for lambda expressions.\n\nllvm-svn: 150586"},
[j]={{rc,612,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForLambda() {\n    // ...\n    D.diag_MaybeFallThrough_HasNoReturn = diag::err_noreturn_lambda_has_return_expr;"},{rc,616,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForLambda() {\n    // ...\n    D.diag_AlwaysFallThrough_HasNoReturn = diag::err_noreturn_lambda_has_return_expr;"},{E,3668,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // ...\n  if (auto *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {\n  // ...\n  } else if (auto *CurRegion = dyn_cast<CapturedRegionScopeInfo>(CurCap)) {\n  // ...\n  } else {\n    // ...\n    if (CurLambda->CallOperator->getType()->castAs<FunctionType>()->getNoReturnAttr()) {\n      Diag(ReturnLoc, diag::err_noreturn_lambda_has_return_expr);"}}
},
},
["err_noreturn_non_function"]={
["err_noreturn_non_function"]={
[i]="err_noreturn_non_function",
[c]="err_noreturn_non_function",
[h]="\'_Noreturn\' can only appear on functions",
[d]="\'_Noreturn\' can only appear on functions",
[e]="\'_Noreturn\' can only appear on functions",
[f]=k,
[g]="\'_Noreturn\' can only appear on functions",
[g]="\'_Noreturn\' can only appear on functions",
[b]=k,
[h]=a,
[e]="\'_Noreturn\' can only appear on functions",
[i]=m,
[d]=a,
[b]={"0015f0987792",1358460971,"Parsing support for C11\'s _Noreturn keyword. No semantics yet.","Parsing support for C11\'s _Noreturn keyword. No semantics yet.\n\nllvm-svn: 172761"},
[f]=m,
[c]={"0015f0987792",1358460971,"Parsing support for C11\'s _Noreturn keyword. No semantics yet.","Parsing support for C11\'s _Noreturn keyword. No semantics yet.\n\nllvm-svn: 172761"},
[j]={{o,6653,"/// Diagnose function specifiers on a declaration of an identifier that\n/// does not identify a function.\nvoid Sema::DiagnoseFunctionSpecifiers(const DeclSpec &DS) {\n  // ...\n  if (DS.isNoreturnSpecified())\n    Diag(DS.getNoreturnSpecLoc(), diag::err_noreturn_non_function);"}},
[j]={{o,6653,"/// Diagnose function specifiers on a declaration of an identifier that\n/// does not identify a function.\nvoid Sema::DiagnoseFunctionSpecifiers(const DeclSpec &DS) {\n  // ...\n  if (DS.isNoreturnSpecified())\n    Diag(DS.getNoreturnSpecLoc(), diag::err_noreturn_non_function);"}},
[l]={
[l]={
Line 4,208: Line 4,209:
},
},
["err_nosetter_property_assignment"]={
["err_nosetter_property_assignment"]={
[i]="err_nosetter_property_assignment",
[c]="err_nosetter_property_assignment",
[h]="%select{assignment to readonly property|no setter method %1 for assignment to property}0",
[d]="%select{assignment to readonly property|no setter method %1 for assignment to property}0",
[g]={{nil,nil,{{"assignment to readonly property","no setter method B for assignment to property"}}}},
[e]={{nil,nil,{{"assignment to readonly property","no setter method B for assignment to property"}}}},
[b]=k,
[f]=k,
[e]="(?:assignment to readonly property|no setter method (.*?) for assignment to property)",
[g]="(?:assignment to readonly property|no setter method (.*?) for assignment to property)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"c4a2d3259f9e",1319527676,"Introduce a placeholder type for \"pseudo object\"","Introduce a placeholder type for \"pseudo object\"\nexpressions: expressions which refer to a logical rather\nthan a physical l-value, where the logical object is\nactually accessed via custom getter/setter code.\nA subsequent patch will generalize the AST for these\nso that arbitrary \"implementing\" sub-expressions can\nbe provided.\n\nRight now the only client is ObjC properties, but\nthis should be generalizable to similar language\nfeatures, e.g. Managed C++\'s __property methods.\n\nllvm-svn: 142914"},
[b]={"c4a2d3259f9e",1319527676,"Introduce a placeholder type for \"pseudo object\"","Introduce a placeholder type for \"pseudo object\"\nexpressions: expressions which refer to a logical rather\nthan a physical l-value, where the logical object is\nactually accessed via custom getter/setter code.\nA subsequent patch will generalize the AST for these\nso that arbitrary \"implementing\" sub-expressions can\nbe provided.\n\nRight now the only client is ObjC properties, but\nthis should be generalizable to similar language\nfeatures, e.g. Managed C++\'s __property methods.\n\nllvm-svn: 142914"},
[j]={{P,906,"/// @property-specific behavior for doing assignments.\nExprResult ObjCPropertyOpBuilder::buildAssignmentOperation(Scope *Sc, SourceLocation opcLoc, BinaryOperatorKind opcode, Expr *LHS, Expr *RHS) {\n  // ...\n  // If there\'s no setter, we have no choice but to try to assign to\n  // the result of the getter.\n  if (!findSetter()) {\n    // ...\n    S.Diag(opcLoc, diag::err_nosetter_property_assignment) << unsigned(RefExpr->isImplicitProperty()) << SetterSelector << LHS->getSourceRange() << RHS->getSourceRange();"}},
[j]={{P,906,"/// @property-specific behavior for doing assignments.\nExprResult ObjCPropertyOpBuilder::buildAssignmentOperation(Scope *Sc, SourceLocation opcLoc, BinaryOperatorKind opcode, Expr *LHS, Expr *RHS) {\n  // ...\n  // If there\'s no setter, we have no choice but to try to assign to\n  // the result of the getter.\n  if (!findSetter()) {\n    // ...\n    S.Diag(opcLoc, diag::err_nosetter_property_assignment) << unsigned(RefExpr->isImplicitProperty()) << SetterSelector << LHS->getSourceRange() << RHS->getSourceRange();"}},
[l]={
[l]={
Line 4,222: Line 4,223:
},
},
["err_nosetter_property_incdec"]={
["err_nosetter_property_incdec"]={
[i]="err_nosetter_property_incdec",
[c]="err_nosetter_property_incdec",
[h]="%select{%select{increment|decrement}1 of readonly property|no setter method %2 for %select{increment|decrement}1 of property}0",
[d]="%select{%select{increment|decrement}1 of readonly property|no setter method %2 for %select{increment|decrement}1 of property}0",
[g]={{nil,nil,{{{{"increment","decrement"}," of readonly property"},{"no setter method C for ",{"increment","decrement"}," of property"}}}}},
[e]={{nil,nil,{{{{"increment","decrement"}," of readonly property"},{"no setter method C for ",{"increment","decrement"}," of property"}}}}},
[b]=k,
[f]=k,
[e]="(?:(?:increment|decrement) of readonly property|no setter method (.*?) for (?:increment|decrement) of property)",
[g]="(?:(?:increment|decrement) of readonly property|no setter method (.*?) for (?:increment|decrement) of property)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"c4a2d3259f9e",1319527676,"Introduce a placeholder type for \"pseudo object\"","Introduce a placeholder type for \"pseudo object\"\nexpressions: expressions which refer to a logical rather\nthan a physical l-value, where the logical object is\nactually accessed via custom getter/setter code.\nA subsequent patch will generalize the AST for these\nso that arbitrary \"implementing\" sub-expressions can\nbe provided.\n\nRight now the only client is ObjC properties, but\nthis should be generalizable to similar language\nfeatures, e.g. Managed C++\'s __property methods.\n\nllvm-svn: 142914"},
[b]={"c4a2d3259f9e",1319527676,"Introduce a placeholder type for \"pseudo object\"","Introduce a placeholder type for \"pseudo object\"\nexpressions: expressions which refer to a logical rather\nthan a physical l-value, where the logical object is\nactually accessed via custom getter/setter code.\nA subsequent patch will generalize the AST for these\nso that arbitrary \"implementing\" sub-expressions can\nbe provided.\n\nRight now the only client is ObjC properties, but\nthis should be generalizable to similar language\nfeatures, e.g. Managed C++\'s __property methods.\n\nllvm-svn: 142914"},
[j]={{P,950,"/// @property-specific behavior for doing increments and decrements.\nExprResult ObjCPropertyOpBuilder::buildIncDecOperation(Scope *Sc, SourceLocation opcLoc, UnaryOperatorKind opcode, Expr *op) {\n  // If there\'s no setter, we have no choice but to try to assign to\n  // the result of the getter.\n  if (!findSetter()) {\n    // ...\n    S.Diag(opcLoc, diag::err_nosetter_property_incdec) << unsigned(RefExpr->isImplicitProperty()) << unsigned(UnaryOperator::isDecrementOp(opcode)) << SetterSelector << op->getSourceRange();"}},
[j]={{P,950,"/// @property-specific behavior for doing increments and decrements.\nExprResult ObjCPropertyOpBuilder::buildIncDecOperation(Scope *Sc, SourceLocation opcLoc, UnaryOperatorKind opcode, Expr *op) {\n  // If there\'s no setter, we have no choice but to try to assign to\n  // the result of the getter.\n  if (!findSetter()) {\n    // ...\n    S.Diag(opcLoc, diag::err_nosetter_property_incdec) << unsigned(RefExpr->isImplicitProperty()) << unsigned(UnaryOperator::isDecrementOp(opcode)) << SetterSelector << op->getSourceRange();"}},
[l]={
[l]={
Line 4,236: Line 4,237:
},
},
["err_not_class_template_specialization"]={
["err_not_class_template_specialization"]={
[i]="err_not_class_template_specialization",
[c]="err_not_class_template_specialization",
[h]="cannot specialize a %select{dependent template|template template parameter}0",
[d]="cannot specialize a %select{dependent template|template template parameter}0",
[g]={{nil,nil,{"cannot specialize a ",{"dependent template","template template parameter"}}}},
[e]={{nil,nil,{"cannot specialize a ",{"dependent template","template template parameter"}}}},
[b]=k,
[f]=k,
[e]="cannot specialize a (?:dependent template|template template parameter)",
[g]="cannot specialize a (?:dependent template|template template parameter)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"dd6c0356bae5",1257986780,"Improve recovery in a wonky case where one tries to specialize a","Improve recovery in a wonky case where one tries to specialize a\ntemplate template parameter.\n\nWhen building a template-id type, check whether the template-name\nitself is dependent (even if the template arguments are not!) and\nhandle it as a template-id type.\n\nllvm-svn: 86913"},
[b]={"dd6c0356bae5",1257986780,"Improve recovery in a wonky case where one tries to specialize a","Improve recovery in a wonky case where one tries to specialize a\ntemplate template parameter.\n\nWhen building a template-id type, check whether the template-name\nitself is dependent (even if the template arguments are not!) and\nhandle it as a template-id type.\n\nllvm-svn: 86913"},
[j]={{Y,8632,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (!ClassTemplate) {\n    Diag(TemplateNameLoc, diag::err_not_class_template_specialization) << (Name.getAsTemplateDecl() && isa<TemplateTemplateParmDecl>(Name.getAsTemplateDecl()));"}},
[j]={{Y,8632,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (!ClassTemplate) {\n    Diag(TemplateNameLoc, diag::err_not_class_template_specialization) << (Name.getAsTemplateDecl() && isa<TemplateTemplateParmDecl>(Name.getAsTemplateDecl()));"}},
[l]={
[l]={
Line 4,250: Line 4,251:
},
},
["err_not_direct_base_or_virtual"]={
["err_not_direct_base_or_virtual"]={
[i]="err_not_direct_base_or_virtual",
[c]="err_not_direct_base_or_virtual",
[h]="type %0 is not a direct or virtual base of %1",
[d]="type %0 is not a direct or virtual base of %1",
[g]="type A is not a direct or virtual base of B",
[e]="type A is not a direct or virtual base of B",
[b]=k,
[f]=k,
[e]="type (.*?) is not a direct or virtual base of (.*?)",
[g]="type (.*?) is not a direct or virtual base of (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"7baa71e2dd9c",1246383292,"More diagnostics related to initialization of direct bases","More diagnostics related to initialization of direct bases\nin ctor-initializer list.\n\nllvm-svn: 74541"},
[b]={"7baa71e2dd9c",1246383292,"More diagnostics related to initialization of direct bases","More diagnostics related to initialization of direct bases\nin ctor-initializer list.\n\nllvm-svn: 74541"},
[j]={{O,4743,"MemInitResult Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, Expr *Init, CXXRecordDecl *ClassDecl, SourceLocation EllipsisLoc) {\n  // ...\n  if (!Dependent) {\n    // ...\n    // C++ [base.class.init]p2:\n    // Unless the mem-initializer-id names a nonstatic data member of the\n    // constructor\'s class or a direct or virtual base of that class, the\n    // mem-initializer is ill-formed.\n    if (!DirectBaseSpec && !VirtualBaseSpec) {\n      // If the class has any dependent bases, then it\'s possible that\n      // one of those types will resolve to the same type as\n      // BaseType. Therefore, just treat this as a dependent base\n      // class initialization.  FIXME: Should we try to check the\n      // initialization anyway? It seems odd.\n      if (ClassDecl->hasAnyDependentBases())\n      // ...\n      else\n        return Diag(BaseLoc, diag::err_not_direct_base_or_virtual) << BaseType << Context.getTypeDeclType(ClassDecl) << BaseTInfo->getTypeLoc().getSourceRange();"}},
[j]={{Q,4743,"MemInitResult Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, Expr *Init, CXXRecordDecl *ClassDecl, SourceLocation EllipsisLoc) {\n  // ...\n  if (!Dependent) {\n    // ...\n    // C++ [base.class.init]p2:\n    // Unless the mem-initializer-id names a nonstatic data member of the\n    // constructor\'s class or a direct or virtual base of that class, the\n    // mem-initializer is ill-formed.\n    if (!DirectBaseSpec && !VirtualBaseSpec) {\n      // If the class has any dependent bases, then it\'s possible that\n      // one of those types will resolve to the same type as\n      // BaseType. Therefore, just treat this as a dependent base\n      // class initialization.  FIXME: Should we try to check the\n      // initialization anyway? It seems odd.\n      if (ClassDecl->hasAnyDependentBases())\n      // ...\n      else\n        return Diag(BaseLoc, diag::err_not_direct_base_or_virtual) << BaseType << Context.getTypeDeclType(ClassDecl) << BaseTInfo->getTypeLoc().getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaTemplate/class-template-ctor-initializer.cpp"]={"clang/test/SemaTemplate/class-template-ctor-initializer.cpp:26:14: error: type \'TmplB<int>\' is not a direct or virtual base of \'TmplC\'","clang/test/SemaTemplate/class-template-ctor-initializer.cpp:32:13: error: type \'Tmpl<int>\' is not a direct or virtual base of \'TmplD\'"}
["clang/test/SemaTemplate/class-template-ctor-initializer.cpp"]={"clang/test/SemaTemplate/class-template-ctor-initializer.cpp:26:14: error: type \'TmplB<int>\' is not a direct or virtual base of \'TmplC\'","clang/test/SemaTemplate/class-template-ctor-initializer.cpp:32:13: error: type \'Tmpl<int>\' is not a direct or virtual base of \'TmplD\'"}
Line 4,264: Line 4,265:
},
},
["err_not_found_by_two_phase_lookup"]={
["err_not_found_by_two_phase_lookup"]={
[i]="err_not_found_by_two_phase_lookup",
[c]="err_not_found_by_two_phase_lookup",
[h]="call to function %0 that is neither visible in the template definition nor found by argument-dependent lookup",
[d]="call to function %0 that is neither visible in the template definition nor found by argument-dependent lookup",
[g]="call to function A that is neither visible in the template definition nor found by argument-dependent lookup",
[e]="call to function A that is neither visible in the template definition nor found by argument-dependent lookup",
[b]=k,
[f]=k,
[e]="call to function (.*?) that is neither visible in the template definition nor found by argument\\-dependent lookup",
[g]="call to function (.*?) that is neither visible in the template definition nor found by argument\\-dependent lookup",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"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\nllvm-svn: 132672"},
[b]={"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\nllvm-svn: 132672"},
[j]={{Bc,13203,"/// 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  // ...\n  for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {\n    // ...\n    if (!R.empty()) {\n      // ...\n      SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup) << R.getLookupName();"}},
[j]={{pc,13203,"/// 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  // ...\n  for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {\n    // ...\n    if (!R.empty()) {\n      // ...\n      SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup) << R.getLookupName();"}},
[l]={
[l]={
["clang/test/SemaTemplate/dependent-names-no-std.cpp"]={"clang/test/SemaTemplate/dependent-names-no-std.cpp:14:7: error: call to function \'f\' that is neither visible in the template definition nor found by argument-dependent lookup"}
["clang/test/SemaTemplate/dependent-names-no-std.cpp"]={"clang/test/SemaTemplate/dependent-names-no-std.cpp:14:7: error: call to function \'f\' that is neither visible in the template definition nor found by argument-dependent lookup"}
Line 4,278: Line 4,279:
},
},
["err_not_integral_type_anon_bitfield"]={
["err_not_integral_type_anon_bitfield"]={
[i]="err_not_integral_type_anon_bitfield",
[c]="err_not_integral_type_anon_bitfield",
[h]="anonymous bit-field has non-integral type %0",
[d]="anonymous bit-field has non-integral type %0",
[g]="anonymous bit-field has non-integral type A",
[e]="anonymous bit-field has non-integral type A",
[b]=k,
[f]=k,
[e]="anonymous bit\\-field has non\\-integral type (.*?)",
[g]="anonymous bit\\-field has non\\-integral type (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"f9b00eb7dc88",1240248578,"clean up anonymous bitfield diagnostics, PR4017","clean up anonymous bitfield diagnostics, PR4017\n\nllvm-svn: 69608"},
[b]={"f9b00eb7dc88",1240248578,"clean up anonymous bitfield diagnostics, PR4017","clean up anonymous bitfield diagnostics, PR4017\n\nllvm-svn: 69608"},
[j]={{o,17901,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  // C99 6.7.2.1p4 - verify the field type.\n  // C++ 9.6p3: A bit-field shall have integral or enumeration type.\n  if (!FieldTy->isDependentType() && !FieldTy->isIntegralOrEnumerationType()) {\n    // ...\n    return Diag(FieldLoc, diag::err_not_integral_type_anon_bitfield) << FieldTy << BitWidth->getSourceRange();"}},
[j]={{o,17901,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  // C99 6.7.2.1p4 - verify the field type.\n  // C++ 9.6p3: A bit-field shall have integral or enumeration type.\n  if (!FieldTy->isDependentType() && !FieldTy->isIntegralOrEnumerationType()) {\n    // ...\n    return Diag(FieldLoc, diag::err_not_integral_type_anon_bitfield) << FieldTy << BitWidth->getSourceRange();"}},
[l]={
[l]={
Line 4,292: Line 4,293:
},
},
["err_not_integral_type_bitfield"]={
["err_not_integral_type_bitfield"]={
[i]="err_not_integral_type_bitfield",
[c]="err_not_integral_type_bitfield",
[h]="bit-field %0 has non-integral type %1",
[d]="bit-field %0 has non-integral type %1",
[g]="bit-field A has non-integral type B",
[e]="bit-field A has non-integral type B",
[b]=k,
[f]=k,
[e]="bit\\-field (.*?) has non\\-integral type (.*?)",
[g]="bit\\-field (.*?) has non\\-integral type (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={H,1236199783,I,G},
[b]={J,1236199783,H,I},
[j]={{o,17899,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  // C99 6.7.2.1p4 - verify the field type.\n  // C++ 9.6p3: A bit-field shall have integral or enumeration type.\n  if (!FieldTy->isDependentType() && !FieldTy->isIntegralOrEnumerationType()) {\n    // ...\n    if (FieldName)\n      return Diag(FieldLoc, diag::err_not_integral_type_bitfield) << FieldName << FieldTy << BitWidth->getSourceRange();"},{O,3635,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  if (isInstField) {\n  // ...\n  } else {\n    // ...\n    // Non-instance-fields can\'t have a bitfield.\n    if (BitWidth) {\n      if (Member->isInvalidDecl()) {\n      // ...\n      } else if (isa<VarDecl>(Member) || isa<VarTemplateDecl>(Member)) {\n      // ...\n      } else if (isa<TypedefDecl>(Member)) {\n      // ...\n      } else {\n        // ...\n        Diag(Loc, diag::err_not_integral_type_bitfield) << Name << cast<ValueDecl>(Member)->getType() << BitWidth->getSourceRange();"}},
[j]={{o,17899,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  // C99 6.7.2.1p4 - verify the field type.\n  // C++ 9.6p3: A bit-field shall have integral or enumeration type.\n  if (!FieldTy->isDependentType() && !FieldTy->isIntegralOrEnumerationType()) {\n    // ...\n    if (FieldName)\n      return Diag(FieldLoc, diag::err_not_integral_type_bitfield) << FieldName << FieldTy << BitWidth->getSourceRange();"},{Q,3635,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  if (isInstField) {\n  // ...\n  } else {\n    // ...\n    // Non-instance-fields can\'t have a bitfield.\n    if (BitWidth) {\n      if (Member->isInvalidDecl()) {\n      // ...\n      } else if (isa<VarDecl>(Member) || isa<VarTemplateDecl>(Member)) {\n      // ...\n      } else if (isa<TypedefDecl>(Member)) {\n      // ...\n      } else {\n        // ...\n        Diag(Loc, diag::err_not_integral_type_bitfield) << Name << cast<ValueDecl>(Member)->getType() << BitWidth->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaTemplate/instantiate-field.cpp"]={"clang/test/SemaTemplate/instantiate-field.cpp:8:5: error: bit-field \'bitfield\' has non-integral type \'float\'"}
["clang/test/SemaTemplate/instantiate-field.cpp"]={"clang/test/SemaTemplate/instantiate-field.cpp:8:5: error: bit-field \'bitfield\' has non-integral type \'float\'"}
Line 4,306: Line 4,307:
},
},
["err_not_tag_in_scope"]={
["err_not_tag_in_scope"]={
[i]="err_not_tag_in_scope",
[c]="err_not_tag_in_scope",
[h]="no %select{struct|interface|union|class|enum}0 named %1 in %2",
[d]="no %select{struct|interface|union|class|enum}0 named %1 in %2",
[g]={{nil,nil,{xb,{"struct","interface","union",ib,"enum"}," named B in C"}}},
[e]={{nil,nil,{vb,{"struct","interface","union",mb,"enum"}," named B in C"}}},
[b]=k,
[f]=k,
[e]="no (?:struct|interface|union|class|enum) named (.*?) in (.*?)",
[g]="no (?:struct|interface|union|class|enum) named (.*?) in (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={hb,1237025389,gb,fb},
[b]={ib,1237025389,fb,gb},
[j]={{o,16976,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  // ...\n  if (Name && SS.isNotEmpty()) {\n    // ...\n    if (Previous.empty()) {\n      // ...\n      Diag(NameLoc, diag::err_not_tag_in_scope) << Kind << Name << DC << SS.getRange();"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",1659,"Decl *TemplateDeclInstantiator::VisitClassTemplateDecl(ClassTemplateDecl *D) {\n  // ...\n  if (isFriend) {\n    // ...\n    if (!PrevClassTemplate && QualifierLoc) {\n      SemaRef.Diag(Pattern->getLocation(), diag::err_not_tag_in_scope) << D->getTemplatedDecl()->getTagKind() << Pattern->getDeclName() << DC << QualifierLoc.getSourceRange();"}},
[j]={{o,16976,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  // ...\n  if (Name && SS.isNotEmpty()) {\n    // ...\n    if (Previous.empty()) {\n      // ...\n      Diag(NameLoc, diag::err_not_tag_in_scope) << Kind << Name << DC << SS.getRange();"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",1659,"Decl *TemplateDeclInstantiator::VisitClassTemplateDecl(ClassTemplateDecl *D) {\n  // ...\n  if (isFriend) {\n    // ...\n    if (!PrevClassTemplate && QualifierLoc) {\n      SemaRef.Diag(Pattern->getLocation(), diag::err_not_tag_in_scope) << D->getTemplatedDecl()->getTagKind() << Pattern->getDeclName() << DC << QualifierLoc.getSourceRange();"}},
[l]={
[l]={
Line 4,320: Line 4,321:
},
},
["err_ns_attribute_wrong_parameter_type"]={
["err_ns_attribute_wrong_parameter_type"]={
[i]="err_ns_attribute_wrong_parameter_type",
[c]="err_ns_attribute_wrong_parameter_type",
[h]="%0 attribute only applies to %select{Objective-C object|pointer|pointer-to-CF-pointer}1 parameters",
[d]="%0 attribute only applies to %select{Objective-C object|pointer|pointer-to-CF-pointer}1 parameters",
[g]={{nil,nil,{"A attribute only applies to ",{"Objective-C object","pointer","pointer-to-CF-pointer"}," parameters"}}},
[e]={{nil,nil,{"A attribute only applies to ",{"Objective-C object","pointer","pointer-to-CF-pointer"}," parameters"}}},
[b]=k,
[f]=k,
[e]="(.*?) attribute only applies to (?:Objective\\-C object|pointer|pointer\\-to\\-CF\\-pointer) parameters",
[g]="(.*?) attribute only applies to (?:Objective\\-C object|pointer|pointer\\-to\\-CF\\-pointer) parameters",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"3b5a8f5ffc83",1456963803,"Improve some infrastructure for extended parameter infos and","Improve some infrastructure for extended parameter infos and\nfix a bug with the instantiation of ns_consumed parameter\nattributes in ARC.\n\nllvm-svn: 262551"},
[b]={"3b5a8f5ffc83",1456963803,"Improve some infrastructure for extended parameter infos and","Improve some infrastructure for extended parameter infos and\nfix a bug with the instantiation of ns_consumed parameter\nattributes in ARC.\n\nllvm-svn: 262551"},
[j]={{K,5910,"void Sema::AddXConsumedAttr(Decl *D, const AttributeCommonInfo &CI, RetainOwnershipKind K, bool IsTemplateInstantiation) {\n  // ...\n  case RetainOwnershipKind::NS:\n    handleSimpleAttributeOrDiagnose<NSConsumedAttr>(*this, VD, CI, isValidSubjectOfNSAttribute(VD->getType()),\n                                                    // ...\n                                                    ((IsTemplateInstantiation && getLangOpts().ObjCAutoRefCount) ? diag::err_ns_attribute_wrong_parameter_type : diag::warn_ns_attribute_wrong_parameter_type),"}}
[j]={{K,5910,"void Sema::AddXConsumedAttr(Decl *D, const AttributeCommonInfo &CI, RetainOwnershipKind K, bool IsTemplateInstantiation) {\n  // ...\n  case RetainOwnershipKind::NS:\n    handleSimpleAttributeOrDiagnose<NSConsumedAttr>(*this, VD, CI, isValidSubjectOfNSAttribute(VD->getType()),\n                                                    // ...\n                                                    ((IsTemplateInstantiation && getLangOpts().ObjCAutoRefCount) ? diag::err_ns_attribute_wrong_parameter_type : diag::warn_ns_attribute_wrong_parameter_type),"}}
},
},
["err_nsconsumed_attribute_mismatch"]={
["err_nsconsumed_attribute_mismatch"]={
[i]="err_nsconsumed_attribute_mismatch",
[c]="err_nsconsumed_attribute_mismatch",
[h]="overriding method has mismatched ns_consumed attribute on its parameter",
[d]="overriding method has mismatched ns_consumed attribute on its parameter",
[e]="overriding method has mismatched ns_consumed attribute on its parameter",
[f]=k,
[g]="overriding method has mismatched ns_consumed attribute on its parameter",
[g]="overriding method has mismatched ns_consumed attribute on its parameter",
[b]=k,
[h]=a,
[e]="overriding method has mismatched ns_consumed attribute on its parameter",
[i]=m,
[d]=a,
[b]={"ac8dbf0fc70c",1317162936,"objcetive-c-arc: When overriding a method, its ns_consumed patameter","objcetive-c-arc: When overriding a method, its ns_consumed patameter\nattribute must match its overriden method. Same also for\nns_returns_retained/not_retained on the result type.\nThis is one half of // rdar://10187884\n\nllvm-svn: 140649"},
[f]=m,
[j]={{T,215,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  // ...\n  for (ObjCMethodDecl::param_iterator ni = NewMethod->param_begin(), ne = NewMethod->param_end(); ni != ne && oi != oe; ++ni, ++oi) {\n    // ...\n    if (newDecl->hasAttr<NSConsumedAttr>() != oldDecl->hasAttr<NSConsumedAttr>()) {\n      Diag(newDecl->getLocation(), getLangOpts().ObjCAutoRefCount ? diag::err_nsconsumed_attribute_mismatch : diag::warn_nsconsumed_attribute_mismatch);"}},
[c]={"ac8dbf0fc70c",1317162936,"objcetive-c-arc: When overriding a method, its ns_consumed patameter","objcetive-c-arc: When overriding a method, its ns_consumed patameter\nattribute must match its overriden method. Same also for\nns_returns_retained/not_retained on the result type.\nThis is one half of // rdar://10187884\n\nllvm-svn: 140649"},
[j]={{Q,215,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  // ...\n  for (ObjCMethodDecl::param_iterator ni = NewMethod->param_begin(), ne = NewMethod->param_end(); ni != ne && oi != oe; ++ni, ++oi) {\n    // ...\n    if (newDecl->hasAttr<NSConsumedAttr>() != oldDecl->hasAttr<NSConsumedAttr>()) {\n      Diag(newDecl->getLocation(), getLangOpts().ObjCAutoRefCount ? diag::err_nsconsumed_attribute_mismatch : diag::warn_nsconsumed_attribute_mismatch);"}},
[l]={
[l]={
["clang/test/SemaObjC/arc-decls.m"]={"clang/test/SemaObjC/arc-decls.m:126:45: error: overriding method has mismatched ns_consumed attribute on its parameter"}
["clang/test/SemaObjC/arc-decls.m"]={"clang/test/SemaObjC/arc-decls.m:126:45: error: overriding method has mismatched ns_consumed attribute on its parameter"}
Line 4,345: Line 4,346:
},
},
["err_nserrordomain_invalid_decl"]={
["err_nserrordomain_invalid_decl"]={
[i]={{nil,C,"err_nserrordomain_invalid_decl"}},
[c]={{nil,D,"err_nserrordomain_invalid_decl"}},
[h]={{nil,C,"domain argument %select{|%1 }0does not refer to global constant"}},
[d]={{nil,D,"domain argument %select{|%1 }0does not refer to global constant"}},
[g]={{nil,C,{"domain argument ",{a,"B "},"does not refer to global constant"}}},
[e]={{nil,D,{"domain argument ",{a,"B "},"does not refer to global constant"}}},
[b]=k,
[f]=k,
[e]="domain argument (?:|(.*?) )does not refer to global constant",
[g]="domain argument (?:|(.*?) )does not refer to global constant",
[d]=a,
[h]=a,
[f]={{nil,C,m}},
[i]={{nil,D,m}},
[c]={vc,1582847864,yc,xc},
[b]={tc,1582847864,uc,vc},
[j]={{K,6151,"static void handleNSErrorDomain(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!DRE) {\n    S.Diag(Loc, diag::err_nserrordomain_invalid_decl) << 0;"},{K,6157,"static void handleNSErrorDomain(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!VD) {\n    S.Diag(Loc, diag::err_nserrordomain_invalid_decl) << 1 << DRE->getDecl();"}},
[j]={{K,6151,"static void handleNSErrorDomain(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!DRE) {\n    S.Diag(Loc, diag::err_nserrordomain_invalid_decl) << 0;"},{K,6157,"static void handleNSErrorDomain(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!VD) {\n    S.Diag(Loc, diag::err_nserrordomain_invalid_decl) << 1 << DRE->getDecl();"}},
[l]={
[l]={
Line 4,359: Line 4,360:
},
},
["err_nserrordomain_wrong_type"]={
["err_nserrordomain_wrong_type"]={
[i]={{nil,C,"err_nserrordomain_wrong_type"}},
[c]={{nil,D,"err_nserrordomain_wrong_type"}},
[h]={{nil,C,"domain argument %0 does not point to an NSString or CFString constant"}},
[d]={{nil,D,"domain argument %0 does not point to an NSString or CFString constant"}},
[g]={{nil,C,"domain argument A does not point to an NSString or CFString constant"}},
[e]={{nil,D,"domain argument A does not point to an NSString or CFString constant"}},
[b]=k,
[f]=k,
[e]="domain argument (.*?) does not point to an NSString or CFString constant",
[g]="domain argument (.*?) does not point to an NSString or CFString constant",
[d]=a,
[h]=a,
[f]={{nil,C,m}},
[i]={{nil,D,m}},
[c]={vc,1582847864,yc,xc},
[b]={tc,1582847864,uc,vc},
[j]={{K,6163,"static void handleNSErrorDomain(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!isNSStringType(VD->getType(), S.Context) && !isCFStringType(VD->getType(), S.Context)) {\n    S.Diag(Loc, diag::err_nserrordomain_wrong_type) << VD;"}},
[j]={{K,6163,"static void handleNSErrorDomain(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!isNSStringType(VD->getType(), S.Context) && !isCFStringType(VD->getType(), S.Context)) {\n    S.Diag(Loc, diag::err_nserrordomain_wrong_type) << VD;"}},
[l]={
[l]={
Line 4,373: Line 4,374:
},
},
["err_nsnumber_nonliteral_unary"]={
["err_nsnumber_nonliteral_unary"]={
[i]="err_nsnumber_nonliteral_unary",
[c]="err_nsnumber_nonliteral_unary",
[h]="@%0 must be followed by a number to form an NSNumber object",
[d]="@%0 must be followed by a number to form an NSNumber object",
[g]="@A must be followed by a number to form an NSNumber object",
[e]="@A must be followed by a number to form an NSNumber object",
[b]=k,
[f]=k,
[e]="@(.*?) must be followed by a number to form an NSNumber object",
[g]="@(.*?) must be followed by a number to form an NSNumber object",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={jb,1331064356,lb,kb},
[b]={jb,1331064356,kb,lb},
[j]={{N,2852,"ExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) {\n  // ...\n  case tok::minus:\n  case tok::plus: {\n    // ...\n    if (!Tok.is(tok::numeric_constant)) {\n      // ...\n      Diag(Tok, diag::err_nsnumber_nonliteral_unary) << Symbol;"}},
[j]={{N,2852,"ExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) {\n  // ...\n  case tok::minus:\n  case tok::plus: {\n    // ...\n    if (!Tok.is(tok::numeric_constant)) {\n      // ...\n      Diag(Tok, diag::err_nsnumber_nonliteral_unary) << Symbol;"}},
[l]={
[l]={
Line 4,387: Line 4,388:
},
},
["err_nsobject_attribute"]={
["err_nsobject_attribute"]={
[i]="err_nsobject_attribute",
[c]="err_nsobject_attribute",
[h]="\'NSObject\' attribute is for pointer types only",
[d]="\'NSObject\' attribute is for pointer types only",
[e]="\'NSObject\' attribute is for pointer types only",
[f]=k,
[g]="\'NSObject\' attribute is for pointer types only",
[g]="\'NSObject\' attribute is for pointer types only",
[b]=k,
[h]=a,
[e]="\'NSObject\' attribute is for pointer types only",
[i]=m,
[d]=a,
[b]={J,1236199783,H,I},
[f]=m,
[c]={H,1236199783,I,G},
[j]={{K,2994,"static void handleObjCNSObject(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n    // ...\n    if (!T->isCARCBridgableType()) {\n      S.Diag(TD->getLocation(), diag::err_nsobject_attribute);"},{K,3001,"static void handleObjCNSObject(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n  // ...\n  } else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(D)) {\n    // ...\n    if (!T->isCARCBridgableType()) {\n      S.Diag(PD->getLocation(), diag::err_nsobject_attribute);"}},
[j]={{K,2994,"static void handleObjCNSObject(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n    // ...\n    if (!T->isCARCBridgableType()) {\n      S.Diag(TD->getLocation(), diag::err_nsobject_attribute);"},{K,3001,"static void handleObjCNSObject(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n  // ...\n  } else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(D)) {\n    // ...\n    if (!T->isCARCBridgableType()) {\n      S.Diag(PD->getLocation(), diag::err_nsobject_attribute);"}},
[l]={
[l]={
Line 4,401: Line 4,402:
},
},
["err_nsreturns_retained_attribute_mismatch"]={
["err_nsreturns_retained_attribute_mismatch"]={
[i]="err_nsreturns_retained_attribute_mismatch",
[c]="err_nsreturns_retained_attribute_mismatch",
[h]="overriding method has mismatched ns_returns_%select{not_retained|retained}0 attributes",
[d]="overriding method has mismatched ns_returns_%select{not_retained|retained}0 attributes",
[g]={{nil,nil,{"overriding method has mismatched ns_returns_",{"not_retained","retained"}," attributes"}}},
[e]={{nil,nil,{"overriding method has mismatched ns_returns_",{"not_retained","retained"}," attributes"}}},
[b]=k,
[f]=k,
[e]="overriding method has mismatched ns_returns_(?:not_retained|retained) attributes",
[g]="overriding method has mismatched ns_returns_(?:not_retained|retained) attributes",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"ac8dbf0fc70c",1317162936,"objcetive-c-arc: When overriding a method, its ns_consumed patameter","objcetive-c-arc: When overriding a method, its ns_consumed patameter\nattribute must match its overriden method. Same also for\nns_returns_retained/not_retained on the result type.\nThis is one half of // rdar://10187884\n\nllvm-svn: 140649"},
[b]={"ac8dbf0fc70c",1317162936,"objcetive-c-arc: When overriding a method, its ns_consumed patameter","objcetive-c-arc: When overriding a method, its ns_consumed patameter\nattribute must match its overriden method. Same also for\nns_returns_retained/not_retained on the result type.\nThis is one half of // rdar://10187884\n\nllvm-svn: 140649"},
[j]={{Q,189,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  // ...\n  if ((NewMethod->hasAttr<NSReturnsRetainedAttr>() != Overridden->hasAttr<NSReturnsRetainedAttr>())) {\n    Diag(NewMethod->getLocation(), getLangOpts().ObjCAutoRefCount ? diag::err_nsreturns_retained_attribute_mismatch : diag::warn_nsreturns_retained_attribute_mismatch) << 1;"},{Q,198,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  // ...\n  if ((NewMethod->hasAttr<NSReturnsNotRetainedAttr>() != Overridden->hasAttr<NSReturnsNotRetainedAttr>())) {\n    Diag(NewMethod->getLocation(), getLangOpts().ObjCAutoRefCount ? diag::err_nsreturns_retained_attribute_mismatch : diag::warn_nsreturns_retained_attribute_mismatch) << 0;"}},
[j]={{T,189,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  // ...\n  if ((NewMethod->hasAttr<NSReturnsRetainedAttr>() != Overridden->hasAttr<NSReturnsRetainedAttr>())) {\n    Diag(NewMethod->getLocation(), getLangOpts().ObjCAutoRefCount ? diag::err_nsreturns_retained_attribute_mismatch : diag::warn_nsreturns_retained_attribute_mismatch) << 1;"},{T,198,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  // ...\n  if ((NewMethod->hasAttr<NSReturnsNotRetainedAttr>() != Overridden->hasAttr<NSReturnsNotRetainedAttr>())) {\n    Diag(NewMethod->getLocation(), getLangOpts().ObjCAutoRefCount ? diag::err_nsreturns_retained_attribute_mismatch : diag::warn_nsreturns_retained_attribute_mismatch) << 0;"}},
[l]={
[l]={
["clang/test/SemaObjC/arc-decls.m"]={"clang/test/SemaObjC/arc-decls.m:129:1: error: overriding method has mismatched ns_returns_not_retained attributes","clang/test/SemaObjC/arc-decls.m:130:1: error: overriding method has mismatched ns_returns_retained attributes"}
["clang/test/SemaObjC/arc-decls.m"]={"clang/test/SemaObjC/arc-decls.m:129:1: error: overriding method has mismatched ns_returns_not_retained attributes","clang/test/SemaObjC/arc-decls.m:130:1: error: overriding method has mismatched ns_returns_retained attributes"}
Line 4,415: Line 4,416:
},
},
["err_nullability_conflicting"]={
["err_nullability_conflicting"]={
[i]="err_nullability_conflicting",
[c]="err_nullability_conflicting",
[h]="nullability specifier %0 conflicts with existing specifier %1",
[d]="nullability specifier %0 conflicts with existing specifier %1",
[g]="nullability specifier A conflicts with existing specifier B",
[e]="nullability specifier A conflicts with existing specifier B",
[b]=k,
[f]=k,
[e]="nullability specifier (.*?) conflicts with existing specifier (.*?)",
[g]="nullability specifier (.*?) conflicts with existing specifier (.*?)",
[d]=a,
[h]=a,
[f]="Nullability Issue",
[i]="Nullability Issue",
[c]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++.","Introduce type nullability specifiers for C/C++.\n\nIntroduces the type specifiers __nonnull, __nullable, and\n__null_unspecified that describe the nullability of the pointer type\nto which the specifier appertains. Nullability type specifiers improve\non the existing nonnull attributes in a few ways:\n  - They apply to types, so one can represent a pointer to a non-null\n    pointer, use them in function pointer types, etc.\n  - As type specifiers, they are syntactically more lightweight than\n    __attribute__s or [[attribute]]s.\n  - They can express both the notion of \'should never be null\' and\n  also \'it makes sense for this to be null\', and therefore can more\n  easily catch errors of omission where one forgot to annotate the\n  nullability of a particular pointer (this will come in a subsequent\n  patch).\n\nNullability type specifiers are maintained as type sugar, and\ntherefore have no effect on mangling, encoding, overloading,\netc. Nonetheless, they will be used for warnings about, e.g., passing\n\'null\' to a method that does not accept it.\n\nThis is the C/C++ part of rdar://problem/18868820.\n\nllvm-svn: 240146"},
[b]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++.","Introduce type nullability specifiers for C/C++.\n\nIntroduces the type specifiers __nonnull, __nullable, and\n__null_unspecified that describe the nullability of the pointer type\nto which the specifier appertains. Nullability type specifiers improve\non the existing nonnull attributes in a few ways:\n  - They apply to types, so one can represent a pointer to a non-null\n    pointer, use them in function pointer types, etc.\n  - As type specifiers, they are syntactically more lightweight than\n    __attribute__s or [[attribute]]s.\n  - They can express both the notion of \'should never be null\' and\n  also \'it makes sense for this to be null\', and therefore can more\n  easily catch errors of omission where one forgot to annotate the\n  nullability of a particular pointer (this will come in a subsequent\n  patch).\n\nNullability type specifiers are maintained as type sugar, and\ntherefore have no effect on mangling, encoding, overloading,\netc. Nonetheless, they will be used for warnings about, e.g., passing\n\'null\' to a method that does not accept it.\n\nThis is the C/C++ part of rdar://problem/18868820.\n\nllvm-svn: 240146"},
[j]={{N,854,"/// Diagnose redundant or conflicting nullability information.\nstatic void diagnoseRedundantPropertyNullability(Parser &P, ObjCDeclSpec &DS, NullabilityKind nullability, SourceLocation nullabilityLoc) {\n  // ...\n  P.Diag(nullabilityLoc, diag::err_nullability_conflicting) << DiagNullabilityKind(nullability, true) << DiagNullabilityKind(DS.getNullability(), true) << SourceRange(DS.getNullabilityLoc());"},{Q,4563,"/// Merge type nullability from for a redeclaration of the same entity,\n/// producing the updated type of the redeclared entity.\nstatic QualType mergeTypeNullabilityForRedecl(Sema &S, SourceLocation loc, QualType type, bool usesCSKeyword, SourceLocation prevLoc, QualType prevType, bool prevUsesCSKeyword) {\n  // ...\n  // Easy case: both have nullability.\n  if (nullability.has_value() == prevNullability.has_value()) {\n    // ...\n    S.Diag(loc, diag::err_nullability_conflicting) << DiagNullabilityKind(*nullability, usesCSKeyword) << DiagNullabilityKind(*prevNullability, prevUsesCSKeyword);"},{cb,7501,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // ...\n  while (auto attributed = dyn_cast<AttributedType>(desugared.getTypePtr())) {\n    // Check whether there is already a null\n    if (auto existingNullability = attributed->getImmediateNullability()) {\n      // ...\n      S.Diag(nullabilityLoc, diag::err_nullability_conflicting) << DiagNullabilityKind(nullability, isContextSensitive) << DiagNullabilityKind(*existingNullability, false);"},{cb,7516,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // ...\n  // If there is already a different nullability specifier, complain.\n  // This (unlike the code above) looks through typedefs that might\n  // have nullability specifiers on them, which means we cannot\n  // provide a useful Fix-It.\n  if (auto existingNullability = desugared->getNullability()) {\n    if (nullability != *existingNullability) {\n      S.Diag(nullabilityLoc, diag::err_nullability_conflicting) << DiagNullabilityKind(nullability, isContextSensitive) << DiagNullabilityKind(*existingNullability, false);"}},
[j]={{N,854,"/// Diagnose redundant or conflicting nullability information.\nstatic void diagnoseRedundantPropertyNullability(Parser &P, ObjCDeclSpec &DS, NullabilityKind nullability, SourceLocation nullabilityLoc) {\n  // ...\n  P.Diag(nullabilityLoc, diag::err_nullability_conflicting) << DiagNullabilityKind(nullability, true) << DiagNullabilityKind(DS.getNullability(), true) << SourceRange(DS.getNullabilityLoc());"},{T,4563,"/// Merge type nullability from for a redeclaration of the same entity,\n/// producing the updated type of the redeclared entity.\nstatic QualType mergeTypeNullabilityForRedecl(Sema &S, SourceLocation loc, QualType type, bool usesCSKeyword, SourceLocation prevLoc, QualType prevType, bool prevUsesCSKeyword) {\n  // ...\n  // Easy case: both have nullability.\n  if (nullability.has_value() == prevNullability.has_value()) {\n    // ...\n    S.Diag(loc, diag::err_nullability_conflicting) << DiagNullabilityKind(*nullability, usesCSKeyword) << DiagNullabilityKind(*prevNullability, prevUsesCSKeyword);"},{cb,7501,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // ...\n  while (auto attributed = dyn_cast<AttributedType>(desugared.getTypePtr())) {\n    // Check whether there is already a null\n    if (auto existingNullability = attributed->getImmediateNullability()) {\n      // ...\n      S.Diag(nullabilityLoc, diag::err_nullability_conflicting) << DiagNullabilityKind(nullability, isContextSensitive) << DiagNullabilityKind(*existingNullability, false);"},{cb,7516,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // ...\n  // If there is already a different nullability specifier, complain.\n  // This (unlike the code above) looks through typedefs that might\n  // have nullability specifiers on them, which means we cannot\n  // provide a useful Fix-It.\n  if (auto existingNullability = desugared->getNullability()) {\n    if (nullability != *existingNullability) {\n      S.Diag(nullabilityLoc, diag::err_nullability_conflicting) << DiagNullabilityKind(nullability, isContextSensitive) << DiagNullabilityKind(*existingNullability, false);"}},
[l]={
[l]={
["clang/test/SemaObjC/nullability.m"]={"clang/test/SemaObjC/nullability.m:39:4: error: nullability specifier \'nonnull\' conflicts with existing specifier \'_Nullable\'","clang/test/SemaObjC/nullability.m:45:27: error: nullability specifier \'null_unspecified\' conflicts with existing specifier \'_Nullable\'","clang/test/SemaObjC/nullability.m:48:43: error: nullability specifier \'nullable\' conflicts with existing specifier \'null_unspecified\'","clang/test/SemaObjC/nullability.m:56:27: error: nullability specifier \'null_unspecified\' conflicts with existing specifier \'_Nullable\'","clang/test/SemaObjC/nullability.m:102:13: error: nullability specifier \'nullable\' conflicts with existing specifier \'nonnull\'","clang/test/SemaObjC/nullability.m:102:54: error: nullability specifier \'null_unspecified\' conflicts with existing specifier \'nonnull\'","clang/test/SemaObjC/nullability.m:168:4: error: nullability specifier \'nonnull\' conflicts with existing specifier \'_Nullable\'"}
["clang/test/SemaObjC/nullability.m"]={"clang/test/SemaObjC/nullability.m:39:4: error: nullability specifier \'nonnull\' conflicts with existing specifier \'_Nullable\'","clang/test/SemaObjC/nullability.m:45:27: error: nullability specifier \'null_unspecified\' conflicts with existing specifier \'_Nullable\'","clang/test/SemaObjC/nullability.m:48:43: error: nullability specifier \'nullable\' conflicts with existing specifier \'null_unspecified\'","clang/test/SemaObjC/nullability.m:56:27: error: nullability specifier \'null_unspecified\' conflicts with existing specifier \'_Nullable\'","clang/test/SemaObjC/nullability.m:102:13: error: nullability specifier \'nullable\' conflicts with existing specifier \'nonnull\'","clang/test/SemaObjC/nullability.m:102:54: error: nullability specifier \'null_unspecified\' conflicts with existing specifier \'nonnull\'","clang/test/SemaObjC/nullability.m:168:4: error: nullability specifier \'nonnull\' conflicts with existing specifier \'_Nullable\'"}
Line 4,429: Line 4,430:
},
},
["err_nullability_cs_multilevel"]={
["err_nullability_cs_multilevel"]={
[i]="err_nullability_cs_multilevel",
[c]="err_nullability_cs_multilevel",
[h]="nullability keyword %0 cannot be applied to multi-level pointer type %1",
[d]="nullability keyword %0 cannot be applied to multi-level pointer type %1",
[g]="nullability keyword A cannot be applied to multi-level pointer type B",
[e]="nullability keyword A cannot be applied to multi-level pointer type B",
[b]=k,
[f]=k,
[e]="nullability keyword (.*?) cannot be applied to multi\\-level pointer type (.*?)",
[g]="nullability keyword (.*?) cannot be applied to multi\\-level pointer type (.*?)",
[d]=a,
[h]=a,
[f]="Nullability Issue",
[i]="Nullability Issue",
[c]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C.","Extend type nullability qualifiers for Objective-C.\n\nIntroduce context-sensitive, non-underscored nullability specifiers\n(nonnull, nullable, null_unspecified) for Objective-C method return\ntypes, method parameter types, and properties.\n\nIntroduce Objective-C-specific semantics, including computation of the\nnullability of the result of a message send, merging of nullability\ninformation from the @interface of a class into its @implementation,\netc .\n\nThis is the Objective-C part of rdar://problem/18868820.\n\nllvm-svn: 240154"},
[b]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C.","Extend type nullability qualifiers for Objective-C.\n\nIntroduce context-sensitive, non-underscored nullability specifiers\n(nonnull, nullable, null_unspecified) for Objective-C method return\ntypes, method parameter types, and properties.\n\nIntroduce Objective-C-specific semantics, including computation of the\nnullability of the result of a message send, merging of nullability\ninformation from the @interface of a class into its @implementation,\netc .\n\nThis is the Objective-C part of rdar://problem/18868820.\n\nllvm-svn: 240154"},
[j]={{cb,7558,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // ...\n  // For the context-sensitive keywords/Objective-C property\n  // attributes, require that the type be a single-level pointer.\n  if (isContextSensitive) {\n    // ...\n    if (pointeeType && (pointeeType->isAnyPointerType() || pointeeType->isObjCObjectPointerType() || pointeeType->isMemberPointerType())) {\n      S.Diag(nullabilityLoc, diag::err_nullability_cs_multilevel) << DiagNullabilityKind(nullability, true) << type;"}},
[j]={{cb,7558,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // ...\n  // For the context-sensitive keywords/Objective-C property\n  // attributes, require that the type be a single-level pointer.\n  if (isContextSensitive) {\n    // ...\n    if (pointeeType && (pointeeType->isAnyPointerType() || pointeeType->isObjCObjectPointerType() || pointeeType->isMemberPointerType())) {\n      S.Diag(nullabilityLoc, diag::err_nullability_cs_multilevel) << DiagNullabilityKind(nullability, true) << type;"}},
[l]={
[l]={
Line 4,443: Line 4,444:
},
},
["err_nullability_nonpointer"]={
["err_nullability_nonpointer"]={
[i]="err_nullability_nonpointer",
[c]="err_nullability_nonpointer",
[h]="nullability specifier %0 cannot be applied to non-pointer type %1",
[d]="nullability specifier %0 cannot be applied to non-pointer type %1",
[g]="nullability specifier A cannot be applied to non-pointer type B",
[e]="nullability specifier A cannot be applied to non-pointer type B",
[b]=k,
[f]=k,
[e]="nullability specifier (.*?) cannot be applied to non\\-pointer type (.*?)",
[g]="nullability specifier (.*?) cannot be applied to non\\-pointer type (.*?)",
[d]=a,
[h]=a,
[f]="Nullability Issue",
[i]="Nullability Issue",
[c]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++.","Introduce type nullability specifiers for C/C++.\n\nIntroduces the type specifiers __nonnull, __nullable, and\n__null_unspecified that describe the nullability of the pointer type\nto which the specifier appertains. Nullability type specifiers improve\non the existing nonnull attributes in a few ways:\n  - They apply to types, so one can represent a pointer to a non-null\n    pointer, use them in function pointer types, etc.\n  - As type specifiers, they are syntactically more lightweight than\n    __attribute__s or [[attribute]]s.\n  - They can express both the notion of \'should never be null\' and\n  also \'it makes sense for this to be null\', and therefore can more\n  easily catch errors of omission where one forgot to annotate the\n  nullability of a particular pointer (this will come in a subsequent\n  patch).\n\nNullability type specifiers are maintained as type sugar, and\ntherefore have no effect on mangling, encoding, overloading,\netc. Nonetheless, they will be used for warnings about, e.g., passing\n\'null\' to a method that does not accept it.\n\nThis is the C/C++ part of rdar://problem/18868820.\n\nllvm-svn: 240146"},
[b]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++.","Introduce type nullability specifiers for C/C++.\n\nIntroduces the type specifiers __nonnull, __nullable, and\n__null_unspecified that describe the nullability of the pointer type\nto which the specifier appertains. Nullability type specifiers improve\non the existing nonnull attributes in a few ways:\n  - They apply to types, so one can represent a pointer to a non-null\n    pointer, use them in function pointer types, etc.\n  - As type specifiers, they are syntactically more lightweight than\n    __attribute__s or [[attribute]]s.\n  - They can express both the notion of \'should never be null\' and\n  also \'it makes sense for this to be null\', and therefore can more\n  easily catch errors of omission where one forgot to annotate the\n  nullability of a particular pointer (this will come in a subsequent\n  patch).\n\nNullability type specifiers are maintained as type sugar, and\ntherefore have no effect on mangling, encoding, overloading,\netc. Nonetheless, they will be used for warnings about, e.g., passing\n\'null\' to a method that does not accept it.\n\nThis is the C/C++ part of rdar://problem/18868820.\n\nllvm-svn: 240146"},
[j]={{cb,7540,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // ...\n  // If this definitely isn\'t a pointer type, reject the specifier.\n  if (!desugared->canHaveNullability() && !(allowOnArrayType && desugared->isArrayType())) {\n    S.Diag(nullabilityLoc, diag::err_nullability_nonpointer) << DiagNullabilityKind(nullability, isContextSensitive) << type;"}},
[j]={{cb,7540,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // ...\n  // If this definitely isn\'t a pointer type, reject the specifier.\n  if (!desugared->canHaveNullability() && !(allowOnArrayType && desugared->isArrayType())) {\n    S.Diag(nullabilityLoc, diag::err_nullability_nonpointer) << DiagNullabilityKind(nullability, isContextSensitive) << type;"}},
[l]={
[l]={
Line 4,457: Line 4,458:
},
},
["err_nullptr_cast"]={
["err_nullptr_cast"]={
[i]={{nil,p,"err_nullptr_cast"}},
[c]={{nil,p,"err_nullptr_cast"}},
[h]={{nil,p,"cannot cast an object of type %select{\'nullptr_t\' to %1|%1 to \'nullptr_t\'}0"}},
[d]={{nil,p,"cannot cast an object of type %select{\'nullptr_t\' to %1|%1 to \'nullptr_t\'}0"}},
[g]={{nil,p,{"cannot cast an object of type ",{"\'nullptr_t\' to B","B to \'nullptr_t\'"}}}},
[e]={{nil,p,{"cannot cast an object of type ",{"\'nullptr_t\' to B","B to \'nullptr_t\'"}}}},
[b]=k,
[f]=k,
[e]="cannot cast an object of type (?:\'nullptr_t\' to (.*?)|(.*?) to \'nullptr_t\')",
[g]="cannot cast an object of type (?:\'nullptr_t\' to (.*?)|(.*?) to \'nullptr_t\')",
[d]=a,
[h]=a,
[f]={{nil,p,m}},
[i]={{nil,p,m}},
[c]={Ac,1625925174,zc,sc},
[b]={nc,1625925174,kc,Dc},
[j]={{"clang/lib/Sema/SemaCast.cpp",3075,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  // C2x 6.5.4p4:\n  //  The type nullptr_t shall not be converted to any type other than void,\n  //  bool, or a pointer type. No type other than nullptr_t shall be converted\n  //  to nullptr_t.\n  if (SrcType->isNullPtrType()) {\n    // FIXME: 6.3.2.4p2 says that nullptr_t can be converted to itself, but\n    // 6.5.4p4 is a constraint check and nullptr_t is not void, bool, or a\n    // pointer type. We\'re not going to diagnose that as a constraint violation.\n    if (!DestType->isVoidType() && !DestType->isBooleanType() && !DestType->isPointerType() && !DestType->isNullPtrType()) {\n      Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_nullptr_cast) << /*nullptr to type*/ 0 << DestType;"},{"clang/lib/Sema/SemaCast.cpp",3090,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  if (DestType->isNullPtrType() && !SrcType->isNullPtrType()) {\n    Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_nullptr_cast) << /*type to nullptr*/ 1 << SrcType;"}},
[j]={{"clang/lib/Sema/SemaCast.cpp",3075,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  // C2x 6.5.4p4:\n  //  The type nullptr_t shall not be converted to any type other than void,\n  //  bool, or a pointer type. No type other than nullptr_t shall be converted\n  //  to nullptr_t.\n  if (SrcType->isNullPtrType()) {\n    // FIXME: 6.3.2.4p2 says that nullptr_t can be converted to itself, but\n    // 6.5.4p4 is a constraint check and nullptr_t is not void, bool, or a\n    // pointer type. We\'re not going to diagnose that as a constraint violation.\n    if (!DestType->isVoidType() && !DestType->isBooleanType() && !DestType->isPointerType() && !DestType->isNullPtrType()) {\n      Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_nullptr_cast) << /*nullptr to type*/ 0 << DestType;"},{"clang/lib/Sema/SemaCast.cpp",3090,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  if (DestType->isNullPtrType() && !SrcType->isNullPtrType()) {\n    Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_nullptr_cast) << /*type to nullptr*/ 1 << SrcType;"}},
[l]={
[l]={
Line 4,471: Line 4,472:
},
},
["err_objc_array_of_interfaces"]={
["err_objc_array_of_interfaces"]={
[i]="err_objc_array_of_interfaces",
[c]="err_objc_array_of_interfaces",
[h]="array of interface %0 is invalid (probably should be an array of pointers)",
[d]="array of interface %0 is invalid (probably should be an array of pointers)",
[g]="array of interface A is invalid (probably should be an array of pointers)",
[e]="array of interface A is invalid (probably should be an array of pointers)",
[b]=k,
[f]=k,
[e]="array of interface (.*?) is invalid \\(probably should be an array of pointers\\)",
[g]="array of interface (.*?) is invalid \\(probably should be an array of pointers\\)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"669e32f8c0d1",1240797356,"rdar://6827200 - [sema] reject statically allocated arrays of interface types","rdar://6827200 - [sema] reject statically allocated arrays of interface types\n\nUpgrade \"array of interface\" warning to an error.  In addition to being a\nterrible idea, this crashes codegen.\n\nllvm-svn: 70178"},
[b]={"669e32f8c0d1",1240797356,"rdar://6827200 - [sema] reject statically allocated arrays of interface types","rdar://6827200 - [sema] reject statically allocated arrays of interface types\n\nUpgrade \"array of interface\" warning to an error.  In addition to being a\nterrible idea, this crashes codegen.\n\nllvm-svn: 70178"},
[j]={{cb,2542,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  // ...\n  if (const RecordType *EltTy = T->getAs<RecordType>()) {\n  // ...\n  } else if (T->isObjCObjectType()) {\n    Diag(Loc, diag::err_objc_array_of_interfaces) << T;"}},
[j]={{cb,2542,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  // ...\n  if (const RecordType *EltTy = T->getAs<RecordType>()) {\n  // ...\n  } else if (T->isObjCObjectType()) {\n    Diag(Loc, diag::err_objc_array_of_interfaces) << T;"}},
[l]={
[l]={
Line 4,485: Line 4,486:
},
},
["err_objc_attr_not_id"]={
["err_objc_attr_not_id"]={
[i]="err_objc_attr_not_id",
[c]="err_objc_attr_not_id",
[h]="parameter of %0 attribute must be a single name of an Objective-C %select{class|protocol}1",
[d]="parameter of %0 attribute must be a single name of an Objective-C %select{class|protocol}1",
[g]={{nil,nil,{"parameter of A attribute must be a single name of an Objective-C ",{ib,"protocol"}}}},
[e]={{nil,nil,{"parameter of A attribute must be a single name of an Objective-C ",{mb,"protocol"}}}},
[b]=k,
[f]=k,
[e]="parameter of (.*?) attribute must be a single name of an Objective\\-C (?:class|protocol)",
[g]="parameter of (.*?) attribute must be a single name of an Objective\\-C (?:class|protocol)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"2d3379e394ee",1385018434,"Refactor some of handleObjCBridgeAttr to make it more concise and the diagnostic reusable.","Refactor some of handleObjCBridgeAttr to make it more concise and the diagnostic reusable.\n\nllvm-svn: 195322"},
[b]={"2d3379e394ee",1385018434,"Refactor some of handleObjCBridgeAttr to make it more concise and the diagnostic reusable.","Refactor some of handleObjCBridgeAttr to make it more concise and the diagnostic reusable.\n\nllvm-svn: 195322"},
[j]={{K,6174,"static void handleObjCBridgeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!Parm) {\n    S.Diag(D->getBeginLoc(), diag::err_objc_attr_not_id) << AL << 0;"},{K,6201,"static void handleObjCBridgeMutableAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!Parm) {\n    S.Diag(D->getBeginLoc(), diag::err_objc_attr_not_id) << AL << 0;"},{K,6214,"static void handleObjCBridgeRelatedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!RelatedClass) {\n    S.Diag(D->getBeginLoc(), diag::err_objc_attr_not_id) << AL << 0;"}},
[j]={{K,6174,"static void handleObjCBridgeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!Parm) {\n    S.Diag(D->getBeginLoc(), diag::err_objc_attr_not_id) << AL << 0;"},{K,6201,"static void handleObjCBridgeMutableAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!Parm) {\n    S.Diag(D->getBeginLoc(), diag::err_objc_attr_not_id) << AL << 0;"},{K,6214,"static void handleObjCBridgeRelatedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!RelatedClass) {\n    S.Diag(D->getBeginLoc(), diag::err_objc_attr_not_id) << AL << 0;"}},
[l]={
[l]={
Line 4,499: Line 4,500:
},
},
["err_objc_attr_protocol_requires_definition"]={
["err_objc_attr_protocol_requires_definition"]={
[i]="err_objc_attr_protocol_requires_definition",
[c]="err_objc_attr_protocol_requires_definition",
[h]="attribute %0 can only be applied to @protocol definitions, not forward declarations",
[d]="attribute %0 can only be applied to @protocol definitions, not forward declarations",
[g]="attribute A can only be applied to @protocol definitions, not forward declarations",
[e]="attribute A can only be applied to @protocol definitions, not forward declarations",
[b]=k,
[f]=k,
[e]="attribute (.*?) can only be applied to @protocol definitions, not forward declarations",
[g]="attribute (.*?) can only be applied to @protocol definitions, not forward declarations",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"27cfe10df899",1393022944,"Add requirement that attribute \'objc_protocol_requires_explicit_implementation\' can only be applied ...","Add requirement that attribute \'objc_protocol_requires_explicit_implementation\' can only be applied to protocol definitions.\n\nllvm-svn: 201899"},
[b]={"27cfe10df899",1393022944,"Add requirement that attribute \'objc_protocol_requires_explicit_implementation\' can only be applied ...","Add requirement that attribute \'objc_protocol_requires_explicit_implementation\' can only be applied to protocol definitions.\n\nllvm-svn: 201899"},
[j]={{K,2376,"static void handleObjCSuppresProtocolAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!cast<ObjCProtocolDecl>(D)->isThisDeclarationADefinition()) {\n    S.Diag(AL.getLoc(), diag::err_objc_attr_protocol_requires_definition) << AL << AL.getRange();"}},
[j]={{K,2376,"static void handleObjCSuppresProtocolAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!cast<ObjCProtocolDecl>(D)->isThisDeclarationADefinition()) {\n    S.Diag(AL.getLoc(), diag::err_objc_attr_protocol_requires_definition) << AL << AL.getRange();"}},
[l]={
[l]={
Line 4,513: Line 4,514:
},
},
["err_objc_attr_typedef_not_id"]={
["err_objc_attr_typedef_not_id"]={
[i]="err_objc_attr_typedef_not_id",
[c]="err_objc_attr_typedef_not_id",
[h]="parameter of %0 attribute must be \'id\' when used on a typedef",
[d]="parameter of %0 attribute must be \'id\' when used on a typedef",
[g]="parameter of A attribute must be \'id\' when used on a typedef",
[e]="parameter of A attribute must be \'id\' when used on a typedef",
[b]=k,
[f]=k,
[e]="parameter of (.*?) attribute must be \'id\' when used on a typedef",
[g]="parameter of (.*?) attribute must be \'id\' when used on a typedef",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"2859258e2faf",1422830046,"Allow objc_bridge(id) to be used on typedefs of [cv] void*.","Allow objc_bridge(id) to be used on typedefs of [cv] void*.\n\nrdar://19678874\n\nllvm-svn: 227774"},
[b]={"2859258e2faf",1422830046,"Allow objc_bridge(id) to be used on typedefs of [cv] void*.","Allow objc_bridge(id) to be used on typedefs of [cv] void*.\n\nrdar://19678874\n\nllvm-svn: 227774"},
[j]={{K,6181,"static void handleObjCBridgeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Typedefs only allow objc_bridge(id) and have some additional checking.\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n    if (!Parm->Ident->isStr(\"id\")) {\n      S.Diag(AL.getLoc(), diag::err_objc_attr_typedef_not_id) << AL;"}},
[j]={{K,6181,"static void handleObjCBridgeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Typedefs only allow objc_bridge(id) and have some additional checking.\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n    if (!Parm->Ident->isStr(\"id\")) {\n      S.Diag(AL.getLoc(), diag::err_objc_attr_typedef_not_id) << AL;"}},
[l]={
[l]={
Line 4,527: Line 4,528:
},
},
["err_objc_attr_typedef_not_void_pointer"]={
["err_objc_attr_typedef_not_void_pointer"]={
[i]="err_objc_attr_typedef_not_void_pointer",
[c]="err_objc_attr_typedef_not_void_pointer",
[h]="\'objc_bridge(id)\' is only allowed on structs and typedefs of void pointers",
[d]="\'objc_bridge(id)\' is only allowed on structs and typedefs of void pointers",
[g]="\'objc_bridge(id)\' is only allowed on structs and typedefs of void pointers",
[e]="\'objc_bridge(id)\' is only allowed on structs and typedefs of void pointers",
[b]=k,
[f]=k,
[e]="\'objc_bridge\\(id\\)\' is only allowed on structs and typedefs of void pointers",
[g]="\'objc_bridge\\(id\\)\' is only allowed on structs and typedefs of void pointers",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"2859258e2faf",1422830046,"Allow objc_bridge(id) to be used on typedefs of [cv] void*.","Allow objc_bridge(id) to be used on typedefs of [cv] void*.\n\nrdar://19678874\n\nllvm-svn: 227774"},
[b]={"2859258e2faf",1422830046,"Allow objc_bridge(id) to be used on typedefs of [cv] void*.","Allow objc_bridge(id) to be used on typedefs of [cv] void*.\n\nrdar://19678874\n\nllvm-svn: 227774"},
[j]={{K,6188,"static void handleObjCBridgeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Typedefs only allow objc_bridge(id) and have some additional checking.\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n    // ...\n    if (!T->isVoidPointerType()) {\n      S.Diag(AL.getLoc(), diag::err_objc_attr_typedef_not_void_pointer);"}},
[j]={{K,6188,"static void handleObjCBridgeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Typedefs only allow objc_bridge(id) and have some additional checking.\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n    // ...\n    if (!T->isVoidPointerType()) {\n      S.Diag(AL.getLoc(), diag::err_objc_attr_typedef_not_void_pointer);"}},
[l]={
[l]={
Line 4,541: Line 4,542:
},
},
["err_objc_bridged_related_invalid_class"]={
["err_objc_bridged_related_invalid_class"]={
[i]="err_objc_bridged_related_invalid_class",
[c]="err_objc_bridged_related_invalid_class",
[h]="could not find Objective-C class %0 to convert %1 to %2",
[d]="could not find Objective-C class %0 to convert %1 to %2",
[g]="could not find Objective-C class A to convert B to C",
[e]="could not find Objective-C class A to convert B to C",
[b]=k,
[f]=k,
[e]="could not find Objective\\-C class (.*?) to convert (.*?) to (.*?)",
[g]="could not find Objective\\-C class (.*?) to convert (.*?) to (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"1f0b3bfd7502",1386376463,"ObjectiveC. Continuing implementation of objc_bridge_related","ObjectiveC. Continuing implementation of objc_bridge_related\nattribute in sema and issuing a variety of diagnostics lazily \nfor misuse of this attribute (and what to do) when converting \nfrom CF types to ObjectiveC types (and vice versa).\n// rdar://15499111\n\nllvm-svn: 196629"},
[b]={"1f0b3bfd7502",1386376463,"ObjectiveC. Continuing implementation of objc_bridge_related","ObjectiveC. Continuing implementation of objc_bridge_related\nattribute in sema and issuing a variety of diagnostics lazily \nfor misuse of this attribute (and what to do) when converting \nfrom CF types to ObjectiveC types (and vice versa).\n// rdar://15499111\n\nllvm-svn: 196629"},
[j]={{F,4246,"bool Sema::checkObjCBridgeRelatedComponents(SourceLocation Loc, QualType DestType, QualType SrcType, ObjCInterfaceDecl *&RelatedClass, ObjCMethodDecl *&ClassMethod, ObjCMethodDecl *&InstanceMethod, TypedefNameDecl *&TDNDecl, bool CfToNs, bool Diagnose) {\n  // ...\n  if (!LookupName(R, TUScope)) {\n    if (Diagnose) {\n      Diag(Loc, diag::err_objc_bridged_related_invalid_class) << RCId << SrcType << DestType;"}},
[j]={{G,4246,"bool Sema::checkObjCBridgeRelatedComponents(SourceLocation Loc, QualType DestType, QualType SrcType, ObjCInterfaceDecl *&RelatedClass, ObjCMethodDecl *&ClassMethod, ObjCMethodDecl *&InstanceMethod, TypedefNameDecl *&TDNDecl, bool CfToNs, bool Diagnose) {\n  // ...\n  if (!LookupName(R, TUScope)) {\n    if (Diagnose) {\n      Diag(Loc, diag::err_objc_bridged_related_invalid_class) << RCId << SrcType << DestType;"}},
[l]={
[l]={
["clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m"]={"clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m:29:30: error: could not find Objective-C class \'XNSColor\' to convert \'CGColorRef1\' (aka \'struct CGColor1 *\') to \'NSColor *\'","clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m:31:13: error: could not find Objective-C class \'XNSColor\' to convert \'NSColor *\' to \'CGColorRef1\' (aka \'struct CGColor1 *\')"}
["clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m"]={"clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m:29:30: error: could not find Objective-C class \'XNSColor\' to convert \'CGColorRef1\' (aka \'struct CGColor1 *\') to \'NSColor *\'","clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m:31:13: error: could not find Objective-C class \'XNSColor\' to convert \'NSColor *\' to \'CGColorRef1\' (aka \'struct CGColor1 *\')"}
Line 4,555: Line 4,556:
},
},
["err_objc_bridged_related_invalid_class_name"]={
["err_objc_bridged_related_invalid_class_name"]={
[i]="err_objc_bridged_related_invalid_class_name",
[c]="err_objc_bridged_related_invalid_class_name",
[h]="%0 must be name of an Objective-C class to be able to convert %1 to %2",
[d]="%0 must be name of an Objective-C class to be able to convert %1 to %2",
[g]="A must be name of an Objective-C class to be able to convert B to C",
[e]="A must be name of an Objective-C class to be able to convert B to C",
[b]=k,
[f]=k,
[e]="(.*?) must be name of an Objective\\-C class to be able to convert (.*?) to (.*?)",
[g]="(.*?) must be name of an Objective\\-C class to be able to convert (.*?) to (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"1f0b3bfd7502",1386376463,"ObjectiveC. Continuing implementation of objc_bridge_related","ObjectiveC. Continuing implementation of objc_bridge_related\nattribute in sema and issuing a variety of diagnostics lazily \nfor misuse of this attribute (and what to do) when converting \nfrom CF types to ObjectiveC types (and vice versa).\n// rdar://15499111\n\nllvm-svn: 196629"},
[b]={"1f0b3bfd7502",1386376463,"ObjectiveC. Continuing implementation of objc_bridge_related","ObjectiveC. Continuing implementation of objc_bridge_related\nattribute in sema and issuing a variety of diagnostics lazily \nfor misuse of this attribute (and what to do) when converting \nfrom CF types to ObjectiveC types (and vice versa).\n// rdar://15499111\n\nllvm-svn: 196629"},
[j]={{F,4257,"bool Sema::checkObjCBridgeRelatedComponents(SourceLocation Loc, QualType DestType, QualType SrcType, ObjCInterfaceDecl *&RelatedClass, ObjCMethodDecl *&ClassMethod, ObjCMethodDecl *&InstanceMethod, TypedefNameDecl *&TDNDecl, bool CfToNs, bool Diagnose) {\n  // ...\n  if (Target && isa<ObjCInterfaceDecl>(Target))\n  // ...\n  else {\n    if (Diagnose) {\n      Diag(Loc, diag::err_objc_bridged_related_invalid_class_name) << RCId << SrcType << DestType;"}},
[j]={{G,4257,"bool Sema::checkObjCBridgeRelatedComponents(SourceLocation Loc, QualType DestType, QualType SrcType, ObjCInterfaceDecl *&RelatedClass, ObjCMethodDecl *&ClassMethod, ObjCMethodDecl *&InstanceMethod, TypedefNameDecl *&TDNDecl, bool CfToNs, bool Diagnose) {\n  // ...\n  if (Target && isa<ObjCInterfaceDecl>(Target))\n  // ...\n  else {\n    if (Diagnose) {\n      Diag(Loc, diag::err_objc_bridged_related_invalid_class_name) << RCId << SrcType << DestType;"}},
[l]={
[l]={
["clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m"]={"clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m:36:30: error: \'PNsColor\' must be name of an Objective-C class to be able to convert \'CGColorRef2\' (aka \'struct CGColor2 *\') to \'NSColor *\'","clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m:38:13: error: \'PNsColor\' must be name of an Objective-C class to be able to convert \'NSColor *\' to \'CGColorRef2\' (aka \'struct CGColor2 *\')"}
["clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m"]={"clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m:36:30: error: \'PNsColor\' must be name of an Objective-C class to be able to convert \'CGColorRef2\' (aka \'struct CGColor2 *\') to \'NSColor *\'","clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m:38:13: error: \'PNsColor\' must be name of an Objective-C class to be able to convert \'NSColor *\' to \'CGColorRef2\' (aka \'struct CGColor2 *\')"}
Line 4,569: Line 4,570:
},
},
["err_objc_bridged_related_known_method"]={
["err_objc_bridged_related_known_method"]={
[i]="err_objc_bridged_related_known_method",
[c]="err_objc_bridged_related_known_method",
[h]="%0 must be explicitly converted to %1; use %select{%objcclass2|%objcinstance2}3 method for this conversion",
[d]="%0 must be explicitly converted to %1; use %select{%objcclass2|%objcinstance2}3 method for this conversion",
[g]={{nil,nil,{"A must be explicitly converted to B; use ",{"C","C"}," method for this conversion"}}},
[e]={{nil,nil,{"A must be explicitly converted to B; use ",{"C","C"}," method for this conversion"}}},
[b]=k,
[f]=k,
[e]="(.*?) must be explicitly converted to (.*?); use (?:(.*?)|(.*?)) method for this conversion",
[g]="(.*?) must be explicitly converted to (.*?); use (?:(.*?)|(.*?)) method for this conversion",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"1f0b3bfd7502",1386376463,"ObjectiveC. Continuing implementation of objc_bridge_related","ObjectiveC. Continuing implementation of objc_bridge_related\nattribute in sema and issuing a variety of diagnostics lazily \nfor misuse of this attribute (and what to do) when converting \nfrom CF types to ObjectiveC types (and vice versa).\n// rdar://15499111\n\nllvm-svn: 196629"},
[b]={"1f0b3bfd7502",1386376463,"ObjectiveC. Continuing implementation of objc_bridge_related","ObjectiveC. Continuing implementation of objc_bridge_related\nattribute in sema and issuing a variety of diagnostics lazily \nfor misuse of this attribute (and what to do) when converting \nfrom CF types to ObjectiveC types (and vice versa).\n// rdar://15499111\n\nllvm-svn: 196629"},
[j]={{F,4272,"bool Sema::checkObjCBridgeRelatedComponents(SourceLocation Loc, QualType DestType, QualType SrcType, ObjCInterfaceDecl *&RelatedClass, ObjCMethodDecl *&ClassMethod, ObjCMethodDecl *&InstanceMethod, TypedefNameDecl *&TDNDecl, bool CfToNs, bool Diagnose) {\n  // ...\n  // Check for an existing class method with the given selector name.\n  if (CfToNs && CMId) {\n    // ...\n    if (!ClassMethod) {\n      if (Diagnose) {\n        Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << Sel << false;"},{F,4286,"bool Sema::checkObjCBridgeRelatedComponents(SourceLocation Loc, QualType DestType, QualType SrcType, ObjCInterfaceDecl *&RelatedClass, ObjCMethodDecl *&ClassMethod, ObjCMethodDecl *&InstanceMethod, TypedefNameDecl *&TDNDecl, bool CfToNs, bool Diagnose) {\n  // ...\n  // Check for an existing instance method with the given selector name.\n  if (!CfToNs && IMId) {\n    // ...\n    if (!InstanceMethod) {\n      if (Diagnose) {\n        Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << Sel << true;"},{F,4327,"bool Sema::CheckObjCBridgeRelatedConversions(SourceLocation Loc, QualType DestType, QualType SrcType, Expr *&SrcExpr, bool Diagnose) {\n  // ...\n  if (CfToNs) {\n    // Implicit conversion from CF to ObjC object is needed.\n    if (ClassMethod) {\n      if (Diagnose) {\n        // ...\n        Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << ClassMethod->getSelector() << false << FixItHint::CreateInsertion(SrcExpr->getBeginLoc(), ExpressionString) << FixItHint::CreateInsertion(SrcExprEndLoc, \"]\");"},{F,4360,"bool Sema::CheckObjCBridgeRelatedConversions(SourceLocation Loc, QualType DestType, QualType SrcType, Expr *&SrcExpr, bool Diagnose) {\n  // ...\n  if (CfToNs) {\n  // ...\n  } else {\n    // Implicit conversion from ObjC type to CF object is needed.\n    if (InstanceMethod) {\n      if (Diagnose) {\n        // ...\n        if (InstanceMethod->isPropertyAccessor())\n          if (const ObjCPropertyDecl *PDecl = InstanceMethod->findPropertyDecl()) {\n            // ...\n            Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << InstanceMethod->getSelector() << true << FixItHint::CreateInsertion(SrcExprEndLoc, ExpressionString);"},{F,4370,"bool Sema::CheckObjCBridgeRelatedConversions(SourceLocation Loc, QualType DestType, QualType SrcType, Expr *&SrcExpr, bool Diagnose) {\n  // ...\n  if (CfToNs) {\n  // ...\n  } else {\n    // Implicit conversion from ObjC type to CF object is needed.\n    if (InstanceMethod) {\n      if (Diagnose) {\n        // ...\n        if (ExpressionString.empty()) {\n          // ...\n          Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << InstanceMethod->getSelector() << true << FixItHint::CreateInsertion(SrcExpr->getBeginLoc(), \"[\") << FixItHint::CreateInsertion(SrcExprEndLoc, ExpressionString);"}},
[j]={{G,4272,"bool Sema::checkObjCBridgeRelatedComponents(SourceLocation Loc, QualType DestType, QualType SrcType, ObjCInterfaceDecl *&RelatedClass, ObjCMethodDecl *&ClassMethod, ObjCMethodDecl *&InstanceMethod, TypedefNameDecl *&TDNDecl, bool CfToNs, bool Diagnose) {\n  // ...\n  // Check for an existing class method with the given selector name.\n  if (CfToNs && CMId) {\n    // ...\n    if (!ClassMethod) {\n      if (Diagnose) {\n        Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << Sel << false;"},{G,4286,"bool Sema::checkObjCBridgeRelatedComponents(SourceLocation Loc, QualType DestType, QualType SrcType, ObjCInterfaceDecl *&RelatedClass, ObjCMethodDecl *&ClassMethod, ObjCMethodDecl *&InstanceMethod, TypedefNameDecl *&TDNDecl, bool CfToNs, bool Diagnose) {\n  // ...\n  // Check for an existing instance method with the given selector name.\n  if (!CfToNs && IMId) {\n    // ...\n    if (!InstanceMethod) {\n      if (Diagnose) {\n        Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << Sel << true;"},{G,4327,"bool Sema::CheckObjCBridgeRelatedConversions(SourceLocation Loc, QualType DestType, QualType SrcType, Expr *&SrcExpr, bool Diagnose) {\n  // ...\n  if (CfToNs) {\n    // Implicit conversion from CF to ObjC object is needed.\n    if (ClassMethod) {\n      if (Diagnose) {\n        // ...\n        Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << ClassMethod->getSelector() << false << FixItHint::CreateInsertion(SrcExpr->getBeginLoc(), ExpressionString) << FixItHint::CreateInsertion(SrcExprEndLoc, \"]\");"},{G,4360,"bool Sema::CheckObjCBridgeRelatedConversions(SourceLocation Loc, QualType DestType, QualType SrcType, Expr *&SrcExpr, bool Diagnose) {\n  // ...\n  if (CfToNs) {\n  // ...\n  } else {\n    // Implicit conversion from ObjC type to CF object is needed.\n    if (InstanceMethod) {\n      if (Diagnose) {\n        // ...\n        if (InstanceMethod->isPropertyAccessor())\n          if (const ObjCPropertyDecl *PDecl = InstanceMethod->findPropertyDecl()) {\n            // ...\n            Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << InstanceMethod->getSelector() << true << FixItHint::CreateInsertion(SrcExprEndLoc, ExpressionString);"},{G,4370,"bool Sema::CheckObjCBridgeRelatedConversions(SourceLocation Loc, QualType DestType, QualType SrcType, Expr *&SrcExpr, bool Diagnose) {\n  // ...\n  if (CfToNs) {\n  // ...\n  } else {\n    // Implicit conversion from ObjC type to CF object is needed.\n    if (InstanceMethod) {\n      if (Diagnose) {\n        // ...\n        if (ExpressionString.empty()) {\n          // ...\n          Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << InstanceMethod->getSelector() << true << FixItHint::CreateInsertion(SrcExpr->getBeginLoc(), \"[\") << FixItHint::CreateInsertion(SrcExprEndLoc, ExpressionString);"}},
[l]={
[l]={
["clang/test/SemaObjC/objcbridge-related-attribute.m"]={"clang/test/SemaObjC/objcbridge-related-attribute.m:22:7: error: \'CGColorRef\' (aka \'struct CGColor *\') must be explicitly converted to \'NSColor *\'; use \'+colorWithCGColor:\' method for this conversion","clang/test/SemaObjC/objcbridge-related-attribute.m:23:31: error: \'CGColorRef\' (aka \'struct CGColor *\') must be explicitly converted to \'NSColor *\'; use \'+colorWithCGColor:\' method for this conversion","clang/test/SemaObjC/objcbridge-related-attribute.m:24:10: error: \'CGColorRef\' (aka \'struct CGColor *\') must be explicitly converted to \'NSColor *\'; use \'+colorWithCGColor:\' method for this conversion","clang/test/SemaObjC/objcbridge-related-attribute.m:34:14: error: \'NSColor *\' must be explicitly converted to \'CGColorRef\' (aka \'struct CGColor *\'); use \'-CGColor\' method for this conversion","clang/test/SemaObjC/objcbridge-related-attribute.m:35:10: error: \'NSColor *\' must be explicitly converted to \'CGColorRef\' (aka \'struct CGColor *\'); use \'-CGColor\' method for this conversion"}
["clang/test/SemaObjC/objcbridge-related-attribute.m"]={"clang/test/SemaObjC/objcbridge-related-attribute.m:22:7: error: \'CGColorRef\' (aka \'struct CGColor *\') must be explicitly converted to \'NSColor *\'; use \'+colorWithCGColor:\' method for this conversion","clang/test/SemaObjC/objcbridge-related-attribute.m:23:31: error: \'CGColorRef\' (aka \'struct CGColor *\') must be explicitly converted to \'NSColor *\'; use \'+colorWithCGColor:\' method for this conversion","clang/test/SemaObjC/objcbridge-related-attribute.m:24:10: error: \'CGColorRef\' (aka \'struct CGColor *\') must be explicitly converted to \'NSColor *\'; use \'+colorWithCGColor:\' method for this conversion","clang/test/SemaObjC/objcbridge-related-attribute.m:34:14: error: \'NSColor *\' must be explicitly converted to \'CGColorRef\' (aka \'struct CGColor *\'); use \'-CGColor\' method for this conversion","clang/test/SemaObjC/objcbridge-related-attribute.m:35:10: error: \'NSColor *\' must be explicitly converted to \'CGColorRef\' (aka \'struct CGColor *\'); use \'-CGColor\' method for this conversion"}
Line 4,583: Line 4,584:
},
},
["err_objc_cf_bridged_not_interface"]={
["err_objc_cf_bridged_not_interface"]={
[i]="err_objc_cf_bridged_not_interface",
[c]="err_objc_cf_bridged_not_interface",
[h]="CF object of type %0 is bridged to %1, which is not an Objective-C class",
[d]="CF object of type %0 is bridged to %1, which is not an Objective-C class",
[g]="CF object of type A is bridged to B, which is not an Objective-C class",
[e]="CF object of type A is bridged to B, which is not an Objective-C class",
[b]=k,
[f]=k,
[e]="CF object of type (.*?) is bridged to (.*?), which is not an Objective\\-C class",
[g]="CF object of type (.*?) is bridged to (.*?), which is not an Objective\\-C class",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"8a0210e535c5",1384629392,"ObjectiveC ARC. Validate toll free bridge casting","ObjectiveC ARC. Validate toll free bridge casting\nof ObjectiveC objects to CF types when CF type\nhas the objc_bridge attribute.\n\nllvm-svn: 194930"},
[b]={"8a0210e535c5",1384629392,"ObjectiveC ARC. Validate toll free bridge casting","ObjectiveC ARC. Validate toll free bridge casting\nof ObjectiveC objects to CF types when CF type\nhas the objc_bridge attribute.\n\nllvm-svn: 194930"},
[j]={{F,4053,"template <typename TB> static bool CheckObjCBridgeNSCast(Sema &S, QualType castType, Expr *castExpr, bool &HadTheAttribute, bool warn) {\n  // ...\n  while (const auto *TD = T->getAs<TypedefType>()) {\n    // ...\n    if (TB *ObjCBAttr = getObjCBridgeAttr<TB>(TD)) {\n      if (IdentifierInfo *Parm = ObjCBAttr->getBridgedType()) {\n        // ...\n        if (S.LookupName(R, S.TUScope)) {\n        // ...\n        } else if (!castType->isObjCIdType()) {\n          S.Diag(castExpr->getBeginLoc(), diag::err_objc_cf_bridged_not_interface) << castExpr->getType() << Parm;"}},
[j]={{G,4053,"template <typename TB> static bool CheckObjCBridgeNSCast(Sema &S, QualType castType, Expr *castExpr, bool &HadTheAttribute, bool warn) {\n  // ...\n  while (const auto *TD = T->getAs<TypedefType>()) {\n    // ...\n    if (TB *ObjCBAttr = getObjCBridgeAttr<TB>(TD)) {\n      if (IdentifierInfo *Parm = ObjCBAttr->getBridgedType()) {\n        // ...\n        if (S.LookupName(R, S.TUScope)) {\n        // ...\n        } else if (!castType->isObjCIdType()) {\n          S.Diag(castExpr->getBeginLoc(), diag::err_objc_cf_bridged_not_interface) << castExpr->getType() << Parm;"}},
[l]={
[l]={
["clang/test/SemaObjCXX/objcbridge-static-cast.mm"]={"clang/test/SemaObjCXX/objcbridge-static-cast.mm:30:34: error: CF object of type \'CFTestingRef\' (aka \'__CFError *\') is bridged to \'NSTesting\', which is not an Objective-C class"}
["clang/test/SemaObjCXX/objcbridge-static-cast.mm"]={"clang/test/SemaObjCXX/objcbridge-static-cast.mm:30:34: error: CF object of type \'CFTestingRef\' (aka \'__CFError *\') is bridged to \'NSTesting\', which is not an Objective-C class"}
Line 4,597: Line 4,598:
},
},
["err_objc_concat_string"]={
["err_objc_concat_string"]={
[i]="err_objc_concat_string",
[c]="err_objc_concat_string",
[h]="unexpected token after Objective-C string",
[d]="unexpected token after Objective-C string",
[g]="unexpected token after Objective-C string",
[e]="unexpected token after Objective-C string",
[b]=k,
[f]=k,
[e]="unexpected token after Objective\\-C string",
[g]="unexpected token after Objective\\-C string",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={H,1236199783,I,G},
[b]={J,1236199783,H,I},
[j]={{N,3397,"ExprResult Parser::ParseObjCStringLiteral(SourceLocation AtLoc) {\n  // ...\n  while (Tok.is(tok::at)) {\n    // ...\n    // Invalid unless there is a string literal.\n    if (!isTokenStringLiteral())\n      return ExprError(Diag(Tok, diag::err_objc_concat_string));"}},
[j]={{N,3397,"ExprResult Parser::ParseObjCStringLiteral(SourceLocation AtLoc) {\n  // ...\n  while (Tok.is(tok::at)) {\n    // ...\n    // Invalid unless there is a string literal.\n    if (!isTokenStringLiteral())\n      return ExprError(Diag(Tok, diag::err_objc_concat_string));"}},
[l]={
[l]={
Line 4,611: Line 4,612:
},
},
["err_objc_decls_may_only_appear_in_global_scope"]={
["err_objc_decls_may_only_appear_in_global_scope"]={
[i]="err_objc_decls_may_only_appear_in_global_scope",
[c]="err_objc_decls_may_only_appear_in_global_scope",
[h]="Objective-C declarations may only appear in global scope",
[d]="Objective-C declarations may only appear in global scope",
[g]="Objective-C declarations may only appear in global scope",
[e]="Objective-C declarations may only appear in global scope",
[b]=k,
[f]=k,
[e]="Objective\\-C declarations may only appear in global scope",
[g]="Objective\\-C declarations may only appear in global scope",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={H,1236199783,I,G},
[b]={J,1236199783,H,I},
[j]={{Q,5092,"bool Sema::CheckObjCDeclScope(Decl *D) {\n  // ...\n  Diag(D->getLocation(), diag::err_objc_decls_may_only_appear_in_global_scope);"}},
[j]={{T,5092,"bool Sema::CheckObjCDeclScope(Decl *D) {\n  // ...\n  Diag(D->getLocation(), diag::err_objc_decls_may_only_appear_in_global_scope);"}},
[l]={
[l]={
["clang/test/SemaObjC/invalid-code.m"]={"clang/test/SemaObjC/invalid-code.m:53:41: error: Objective-C declarations may only appear in global scope"}
["clang/test/SemaObjC/invalid-code.m"]={"clang/test/SemaObjC/invalid-code.m:53:41: error: Objective-C declarations may only appear in global scope"}
Line 4,625: Line 4,626:
},
},
["err_objc_direct_duplicate_decl"]={
["err_objc_direct_duplicate_decl"]={
[i]={{nil,n,"err_objc_direct_duplicate_decl"}},
[c]={{nil,n,"err_objc_direct_duplicate_decl"}},
[h]={{nil,w,"%select{|direct }0%select{method|property}1 declaration conflicts with previous %select{|direct }2declaration of %select{method|property}1 %3"},{n,n,"%select{|direct }0method declaration conflicts with previous %select{|direct }1declaration of method %2"}},
[d]={{nil,x,"%select{|direct }0%select{method|property}1 declaration conflicts with previous %select{|direct }2declaration of %select{method|property}1 %3"},{n,n,"%select{|direct }0method declaration conflicts with previous %select{|direct }1declaration of method %2"}},
[g]={{nil,w,{{a,"direct "},{pb,"property"}," declaration conflicts with previous ",{a,"direct "},"declaration of ",{pb,"property"}," D"}},{n,n,{{a,"direct "},"method declaration conflicts with previous ",{a,"direct "},"declaration of method C"}}},
[e]={{nil,x,{{a,"direct "},{ob,"property"}," declaration conflicts with previous ",{a,"direct "},"declaration of ",{ob,"property"}," D"}},{n,n,{{a,"direct "},"method declaration conflicts with previous ",{a,"direct "},"declaration of method C"}}},
[b]=k,
[f]=k,
[e]="(?:|direct )(?:method|property) declaration conflicts with previous (?:|direct )declaration of (?:method|property) (.*?)",
[g]="(?:|direct )(?:method|property) declaration conflicts with previous (?:|direct )declaration of (?:method|property) (.*?)",
[d]=a,
[h]=a,
[f]={{nil,n,m}},
[i]={{nil,n,m}},
[c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming static analyzer check\nthat finds handle leaks, use after releases, and double releases.\n\nDifferential Revision: https://reviews.llvm.org/D70469"},
[b]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming static analyzer check\nthat finds handle leaks, use after releases, and double releases.\n\nDifferential Revision: https://reviews.llvm.org/D70469"},
[j]={{Q,4685,"static void checkObjCDirectMethodClashes(Sema &S, ObjCInterfaceDecl *IDecl, ObjCMethodDecl *Method, ObjCImplDecl *ImpDecl = nullptr) {\n  // ...\n  auto diagClash = [&](const ObjCMethodDecl *IMD) {\n    // ...\n    if (Method->isDirectMethod() || IMD->isDirectMethod()) {\n      S.Diag(Method->getLocation(), diag::err_objc_direct_duplicate_decl) << Method->isDirectMethod() << /* method */ 0 << IMD->isDirectMethod() << Method->getDeclName();"},{L,2417,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n  // ...\n  // synthesizing accessors must not result in a direct method that is not\n  // monomorphic\n  if (!GetterMethod) {\n    if (const ObjCCategoryDecl *CatDecl = dyn_cast<ObjCCategoryDecl>(CD)) {\n      // ...\n      if (ExistingGetter) {\n        if (ExistingGetter->isDirectMethod() || property->isDirectProperty()) {\n          Diag(property->getLocation(), diag::err_objc_direct_duplicate_decl) << property->isDirectProperty() << 1 /* property */"},{L,2433,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n  // ...\n  if (!property->isReadOnly() && !SetterMethod) {\n    if (const ObjCCategoryDecl *CatDecl = dyn_cast<ObjCCategoryDecl>(CD)) {\n      // ...\n      if (ExistingSetter) {\n        if (ExistingSetter->isDirectMethod() || property->isDirectProperty()) {\n          Diag(property->getLocation(), diag::err_objc_direct_duplicate_decl) << property->isDirectProperty() << 1 /* property */"}},
[j]={{T,4685,"static void checkObjCDirectMethodClashes(Sema &S, ObjCInterfaceDecl *IDecl, ObjCMethodDecl *Method, ObjCImplDecl *ImpDecl = nullptr) {\n  // ...\n  auto diagClash = [&](const ObjCMethodDecl *IMD) {\n    // ...\n    if (Method->isDirectMethod() || IMD->isDirectMethod()) {\n      S.Diag(Method->getLocation(), diag::err_objc_direct_duplicate_decl) << Method->isDirectMethod() << /* method */ 0 << IMD->isDirectMethod() << Method->getDeclName();"},{M,2417,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n  // ...\n  // synthesizing accessors must not result in a direct method that is not\n  // monomorphic\n  if (!GetterMethod) {\n    if (const ObjCCategoryDecl *CatDecl = dyn_cast<ObjCCategoryDecl>(CD)) {\n      // ...\n      if (ExistingGetter) {\n        if (ExistingGetter->isDirectMethod() || property->isDirectProperty()) {\n          Diag(property->getLocation(), diag::err_objc_direct_duplicate_decl) << property->isDirectProperty() << 1 /* property */"},{M,2433,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n  // ...\n  if (!property->isReadOnly() && !SetterMethod) {\n    if (const ObjCCategoryDecl *CatDecl = dyn_cast<ObjCCategoryDecl>(CD)) {\n      // ...\n      if (ExistingSetter) {\n        if (ExistingSetter->isDirectMethod() || property->isDirectProperty()) {\n          Diag(property->getLocation(), diag::err_objc_direct_duplicate_decl) << property->isDirectProperty() << 1 /* property */"}},
[l]={
[l]={
["clang/test/SemaObjC/method-direct-one-definition.m"]={"clang/test/SemaObjC/method-direct-one-definition.m:51:1: error: direct method declaration conflicts with previous direct declaration of method \'B_implOnly\'","clang/test/SemaObjC/method-direct-one-definition.m:62:1: error: method declaration conflicts with previous direct declaration of method \'C1\'","clang/test/SemaObjC/method-direct-one-definition.m:63:1: error: direct method declaration conflicts with previous declaration of method \'C2\'"}
["clang/test/SemaObjC/method-direct-one-definition.m"]={"clang/test/SemaObjC/method-direct-one-definition.m:51:1: error: direct method declaration conflicts with previous direct declaration of method \'B_implOnly\'","clang/test/SemaObjC/method-direct-one-definition.m:62:1: error: method declaration conflicts with previous direct declaration of method \'C1\'","clang/test/SemaObjC/method-direct-one-definition.m:63:1: error: direct method declaration conflicts with previous declaration of method \'C2\'"}
Line 4,639: Line 4,640:
},
},
["err_objc_direct_dynamic_property"]={
["err_objc_direct_dynamic_property"]={
[i]={{nil,w,"err_objc_direct_dynamic_property"}},
[c]={{nil,x,"err_objc_direct_dynamic_property"}},
[h]={{nil,w,"direct property cannot be @dynamic"}},
[d]={{nil,x,"direct property cannot be @dynamic"}},
[g]={{nil,w,"direct property cannot be @dynamic"}},
[e]={{nil,x,"direct property cannot be @dynamic"}},
[b]=k,
[f]=k,
[e]="direct property cannot be @dynamic",
[g]="direct property cannot be @dynamic",
[d]=a,
[h]=a,
[f]={{nil,w,m}},
[i]={{nil,x,m}},
[c]={Hb,1576908663,Eb,Kb},
[b]={Hb,1576908663,Gb,Fb},
[j]={{L,1618,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  if (PIDecl->getPropertyImplementation() == ObjCPropertyImplDecl::Dynamic && PIDecl->getPropertyDecl() && PIDecl->getPropertyDecl()->isDirectProperty()) {\n    Diag(PropertyLoc, diag::err_objc_direct_dynamic_property);"}},
[j]={{M,1618,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  if (PIDecl->getPropertyImplementation() == ObjCPropertyImplDecl::Dynamic && PIDecl->getPropertyDecl() && PIDecl->getPropertyDecl()->isDirectProperty()) {\n    Diag(PropertyLoc, diag::err_objc_direct_dynamic_property);"}},
[l]={
[l]={
["clang/test/SemaObjC/dynamic-direct-properties.m"]={"clang/test/SemaObjC/dynamic-direct-properties.m:11:10: error: direct property cannot be @dynamic","clang/test/SemaObjC/dynamic-direct-properties.m:21:10: error: direct property cannot be @dynamic"}
["clang/test/SemaObjC/dynamic-direct-properties.m"]={"clang/test/SemaObjC/dynamic-direct-properties.m:11:10: error: direct property cannot be @dynamic","clang/test/SemaObjC/dynamic-direct-properties.m:21:10: error: direct property cannot be @dynamic"}
Line 4,653: Line 4,654:
},
},
["err_objc_direct_impl_decl_mismatch"]={
["err_objc_direct_impl_decl_mismatch"]={
[i]={{nil,n,"err_objc_direct_impl_decl_mismatch"}},
[c]={{nil,n,"err_objc_direct_impl_decl_mismatch"}},
[h]={{nil,n,"direct method was declared in %select{the primary interface|an extension|a category}0 but is implemented in %select{the primary interface|a category|a different category}1"}},
[d]={{nil,n,"direct method was declared in %select{the primary interface|an extension|a category}0 but is implemented in %select{the primary interface|a category|a different category}1"}},
[g]={{nil,n,{"direct method was declared in ",{"the primary interface","an extension","a category"}," but is implemented in ",{"the primary interface","a category","a different category"}}}},
[e]={{nil,n,{"direct method was declared in ",{"the primary interface","an extension","a category"}," but is implemented in ",{"the primary interface","a category","a different category"}}}},
[b]=k,
[f]=k,
[e]="direct method was declared in (?:the primary interface|an extension|a category) but is implemented in (?:the primary interface|a category|a different category)",
[g]="direct method was declared in (?:the primary interface|an extension|a category) but is implemented in (?:the primary interface|a category|a different category)",
[d]=a,
[h]=a,
[f]={{nil,n,m}},
[i]={{nil,n,m}},
[c]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming static analyzer check\nthat finds handle leaks, use after releases, and double releases.\n\nDifferential Revision: https://reviews.llvm.org/D70469"},
[b]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming static analyzer check\nthat finds handle leaks, use after releases, and double releases.\n\nDifferential Revision: https://reviews.llvm.org/D70469"},
[j]={{Q,4923,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  if (ObjCImplDecl *ImpDecl = dyn_cast<ObjCImplDecl>(ClassDecl)) {\n    // ...\n    // Merge information from the @interface declaration into the\n    // @implementation.\n    if (ObjCInterfaceDecl *IDecl = ImpDecl->getClassInterface()) {\n      if (auto *IMD = IDecl->lookupMethod(ObjCMethod->getSelector(), ObjCMethod->isInstanceMethod())) {\n        // ...\n        // The Idecl->lookupMethod() above will find declarations for ObjCMethod\n        // in one of these places:\n        //\n        // (1) the canonical declaration in an @interface container paired\n        //    with the ImplDecl,\n        // (2) non canonical declarations in @interface not paired with the\n        //    ImplDecl for the same Class,\n        // (3) any superclass container.\n        //\n        // Direct methods only allow for canonical declarations in the matching\n        // container (case 1).\n        //\n        // Direct methods overriding a superclass declaration (case 3) is\n        // handled during overrides checks in CheckObjCMethodOverrides().\n        //\n        // We deal with same-class container mismatches (Case 2) here.\n        if (IDecl == IMD->getClassInterface()) {\n          auto diagContainerMismatch = [&] {\n            // ...\n            Diag(ObjCMethod->getLocation(), diag::err_objc_direct_impl_decl_mismatch) << decl << impl;"}},
[j]={{T,4923,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  if (ObjCImplDecl *ImpDecl = dyn_cast<ObjCImplDecl>(ClassDecl)) {\n    // ...\n    // Merge information from the @interface declaration into the\n    // @implementation.\n    if (ObjCInterfaceDecl *IDecl = ImpDecl->getClassInterface()) {\n      if (auto *IMD = IDecl->lookupMethod(ObjCMethod->getSelector(), ObjCMethod->isInstanceMethod())) {\n        // ...\n        // The Idecl->lookupMethod() above will find declarations for ObjCMethod\n        // in one of these places:\n        //\n        // (1) the canonical declaration in an @interface container paired\n        //    with the ImplDecl,\n        // (2) non canonical declarations in @interface not paired with the\n        //    ImplDecl for the same Class,\n        // (3) any superclass container.\n        //\n        // Direct methods only allow for canonical declarations in the matching\n        // container (case 1).\n        //\n        // Direct methods overriding a superclass declaration (case 3) is\n        // handled during overrides checks in CheckObjCMethodOverrides().\n        //\n        // We deal with same-class container mismatches (Case 2) here.\n        if (IDecl == IMD->getClassInterface()) {\n          auto diagContainerMismatch = [&] {\n            // ...\n            Diag(ObjCMethod->getLocation(), diag::err_objc_direct_impl_decl_mismatch) << decl << impl;"}},
[l]={
[l]={
["clang/test/SemaObjC/method-direct-one-definition.m"]={"clang/test/SemaObjC/method-direct-one-definition.m:12:1: error: direct method was declared in a category but is implemented in the primary interface","clang/test/SemaObjC/method-direct-one-definition.m:43:1: error: direct method was declared in the primary interface but is implemented in a category","clang/test/SemaObjC/method-direct-one-definition.m:45:1: error: direct method was declared in an extension but is implemented in a different category","clang/test/SemaObjC/method-direct-one-definition.m:49:1: error: direct method was declared in a category but is implemented in a different category"}
["clang/test/SemaObjC/method-direct-one-definition.m"]={"clang/test/SemaObjC/method-direct-one-definition.m:12:1: error: direct method was declared in a category but is implemented in the primary interface","clang/test/SemaObjC/method-direct-one-definition.m:43:1: error: direct method was declared in the primary interface but is implemented in a category","clang/test/SemaObjC/method-direct-one-definition.m:45:1: error: direct method was declared in an extension but is implemented in a different category","clang/test/SemaObjC/method-direct-one-definition.m:49:1: error: direct method was declared in a category but is implemented in a different category"}
Line 4,667: Line 4,668:
},
},
["err_objc_direct_missing_on_decl"]={
["err_objc_direct_missing_on_decl"]={
[i]={{nil,n,"err_objc_direct_missing_on_decl"}},
[c]={{nil,n,"err_objc_direct_missing_on_decl"}},
[h]={{nil,n,"direct method implementation was previously declared not direct"}},
[d]={{nil,n,"direct method implementation was previously declared not direct"}},
[g]={{nil,n,"direct method implementation was previously declared not direct"}},
[e]={{nil,n,"direct method implementation was previously declared not direct"}},
[b]=k,
[f]=k,
[e]="direct method implementation was previously declared not direct",
[g]="direct method implementation was previously declared not direct",
[d]=a,
[h]=a,
[f]={{nil,n,m}},
[i]={{nil,n,m}},
[c]={ub,1573050950,sb,qb},
[b]={rb,1573050950,xb,ub},
[j]={{Q,4933,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  if (ObjCImplDecl *ImpDecl = dyn_cast<ObjCImplDecl>(ClassDecl)) {\n    // ...\n    // Merge information from the @interface declaration into the\n    // @implementation.\n    if (ObjCInterfaceDecl *IDecl = ImpDecl->getClassInterface()) {\n      if (auto *IMD = IDecl->lookupMethod(ObjCMethod->getSelector(), ObjCMethod->isInstanceMethod())) {\n        // ...\n        // The Idecl->lookupMethod() above will find declarations for ObjCMethod\n        // in one of these places:\n        //\n        // (1) the canonical declaration in an @interface container paired\n        //    with the ImplDecl,\n        // (2) non canonical declarations in @interface not paired with the\n        //    ImplDecl for the same Class,\n        // (3) any superclass container.\n        //\n        // Direct methods only allow for canonical declarations in the matching\n        // container (case 1).\n        //\n        // Direct methods overriding a superclass declaration (case 3) is\n        // handled during overrides checks in CheckObjCMethodOverrides().\n        //\n        // We deal with same-class container mismatches (Case 2) here.\n        if (IDecl == IMD->getClassInterface()) {\n          // ...\n          if (ObjCMethod->isDirectMethod()) {\n            // ...\n            if (ObjCMethod->getCanonicalDecl() != IMD) {\n            // ...\n            } else if (!IMD->isDirectMethod()) {\n              Diag(attr->getLocation(), diag::err_objc_direct_missing_on_decl);"}},
[j]={{T,4933,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  if (ObjCImplDecl *ImpDecl = dyn_cast<ObjCImplDecl>(ClassDecl)) {\n    // ...\n    // Merge information from the @interface declaration into the\n    // @implementation.\n    if (ObjCInterfaceDecl *IDecl = ImpDecl->getClassInterface()) {\n      if (auto *IMD = IDecl->lookupMethod(ObjCMethod->getSelector(), ObjCMethod->isInstanceMethod())) {\n        // ...\n        // The Idecl->lookupMethod() above will find declarations for ObjCMethod\n        // in one of these places:\n        //\n        // (1) the canonical declaration in an @interface container paired\n        //    with the ImplDecl,\n        // (2) non canonical declarations in @interface not paired with the\n        //    ImplDecl for the same Class,\n        // (3) any superclass container.\n        //\n        // Direct methods only allow for canonical declarations in the matching\n        // container (case 1).\n        //\n        // Direct methods overriding a superclass declaration (case 3) is\n        // handled during overrides checks in CheckObjCMethodOverrides().\n        //\n        // We deal with same-class container mismatches (Case 2) here.\n        if (IDecl == IMD->getClassInterface()) {\n          // ...\n          if (ObjCMethod->isDirectMethod()) {\n            // ...\n            if (ObjCMethod->getCanonicalDecl() != IMD) {\n            // ...\n            } else if (!IMD->isDirectMethod()) {\n              Diag(attr->getLocation(), diag::err_objc_direct_missing_on_decl);"}},
[l]={
[l]={
["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:117:41: error: direct method implementation was previously declared not direct","clang/test/SemaObjC/method-direct.m:120:46: error: direct method implementation was previously declared not direct"}
["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:117:41: error: direct method implementation was previously declared not direct","clang/test/SemaObjC/method-direct.m:120:46: error: direct method implementation was previously declared not direct"}
Line 4,681: Line 4,682:
},
},
["err_objc_direct_on_override"]={
["err_objc_direct_on_override"]={
[i]={{nil,n,"err_objc_direct_on_override"}},
[c]={{nil,n,"err_objc_direct_on_override"}},
[h]={{nil,n,"methods that %select{override superclass methods|implement protocol requirements}0 cannot be direct"}},
[d]={{nil,n,"methods that %select{override superclass methods|implement protocol requirements}0 cannot be direct"}},
[g]={{nil,n,{"methods that ",{"override superclass methods","implement protocol requirements"}," cannot be direct"}}},
[e]={{nil,n,{"methods that ",{"override superclass methods","implement protocol requirements"}," cannot be direct"}}},
[b]=k,
[f]=k,
[e]="methods that (?:override superclass methods|implement protocol requirements) cannot be direct",
[g]="methods that (?:override superclass methods|implement protocol requirements) cannot be direct",
[d]=a,
[h]=a,
[f]={{nil,n,m}},
[i]={{nil,n,m}},
[c]={ub,1573050950,sb,qb},
[b]={rb,1573050950,xb,ub},
[j]={{Q,4433,"void Sema::CheckObjCMethodDirectOverrides(ObjCMethodDecl *method, ObjCMethodDecl *overridden) {\n  if (overridden->isDirectMethod()) {\n  // ...\n  } else if (method->isDirectMethod()) {\n    // ...\n    Diag(attr->getLocation(), diag::err_objc_direct_on_override) << isa<ObjCProtocolDecl>(overridden->getDeclContext());"}},
[j]={{T,4433,"void Sema::CheckObjCMethodDirectOverrides(ObjCMethodDecl *method, ObjCMethodDecl *overridden) {\n  if (overridden->isDirectMethod()) {\n  // ...\n  } else if (method->isDirectMethod()) {\n    // ...\n    Diag(attr->getLocation(), diag::err_objc_direct_on_override) << isa<ObjCProtocolDecl>(overridden->getDeclContext());"}},
[l]={
[l]={
["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:62:36: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:63:41: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:64:36: error: methods that implement protocol requirements cannot be direct","clang/test/SemaObjC/method-direct.m:65:41: error: methods that implement protocol requirements cannot be direct","clang/test/SemaObjC/method-direct.m:66:45: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:67:50: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:68:44: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:69:49: error: methods that override superclass methods cannot be direct"}
["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:62:36: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:63:41: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:64:36: error: methods that implement protocol requirements cannot be direct","clang/test/SemaObjC/method-direct.m:65:41: error: methods that implement protocol requirements cannot be direct","clang/test/SemaObjC/method-direct.m:66:45: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:67:50: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:68:44: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:69:49: error: methods that override superclass methods cannot be direct"}
Line 4,695: Line 4,696:
},
},
["err_objc_direct_on_protocol"]={
["err_objc_direct_on_protocol"]={
[i]={{nil,n,"err_objc_direct_on_protocol"}},
[c]={{nil,n,"err_objc_direct_on_protocol"}},
[h]={{nil,n,"\'objc_direct\' attribute cannot be applied to %select{methods|properties}0 declared in an Objective-C protocol"}},
[d]={{nil,n,"\'objc_direct\' attribute cannot be applied to %select{methods|properties}0 declared in an Objective-C protocol"}},
[g]={{nil,n,{"\'objc_direct\' attribute cannot be applied to ",{"methods","properties"}," declared in an Objective-C protocol"}}},
[e]={{nil,n,{"\'objc_direct\' attribute cannot be applied to ",{"methods","properties"}," declared in an Objective-C protocol"}}},
[b]=k,
[f]=k,
[e]="\'objc_direct\' attribute cannot be applied to (?:methods|properties) declared in an Objective\\-C protocol",
[g]="\'objc_direct\' attribute cannot be applied to (?:methods|properties) declared in an Objective\\-C protocol",
[d]=a,
[h]=a,
[f]={{nil,n,m}},
[i]={{nil,n,m}},
[c]={ub,1573050950,sb,qb},
[b]={rb,1573050950,xb,ub},
[j]={{K,2944,"static void handleObjCDirectAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // objc_direct cannot be set on methods declared in the context of a protocol\n  if (isa<ObjCProtocolDecl>(D->getDeclContext())) {\n    S.Diag(AL.getLoc(), diag::err_objc_direct_on_protocol) << false;"},{Q,4699,"static void checkObjCDirectMethodClashes(Sema &S, ObjCInterfaceDecl *IDecl, ObjCMethodDecl *Method, ObjCImplDecl *ImpDecl = nullptr) {\n  // ...\n  //  diag::err_objc_direct_on_protocol has already been emitted"},{L,710,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n  // ...\n  if ((Attributes & ObjCPropertyAttribute::kind_direct) || CDecl->hasAttr<ObjCDirectMembersAttr>()) {\n    if (isa<ObjCProtocolDecl>(CDecl)) {\n      Diag(PDecl->getLocation(), diag::err_objc_direct_on_protocol) << true;"}},
[j]={{K,2944,"static void handleObjCDirectAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // objc_direct cannot be set on methods declared in the context of a protocol\n  if (isa<ObjCProtocolDecl>(D->getDeclContext())) {\n    S.Diag(AL.getLoc(), diag::err_objc_direct_on_protocol) << false;"},{T,4699,"static void checkObjCDirectMethodClashes(Sema &S, ObjCInterfaceDecl *IDecl, ObjCMethodDecl *Method, ObjCImplDecl *ImpDecl = nullptr) {\n  // ...\n  //  diag::err_objc_direct_on_protocol has already been emitted"},{M,710,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n  // ...\n  if ((Attributes & ObjCPropertyAttribute::kind_direct) || CDecl->hasAttr<ObjCDirectMembersAttr>()) {\n    if (isa<ObjCProtocolDecl>(CDecl)) {\n      Diag(PDecl->getLocation(), diag::err_objc_direct_on_protocol) << true;"}},
[l]={
[l]={
["clang/test/SemaObjC/method-direct-properties.m"]={"clang/test/SemaObjC/method-direct-properties.m:4:34: error: \'objc_direct\' attribute cannot be applied to properties declared in an Objective-C protocol"}
["clang/test/SemaObjC/method-direct-properties.m"]={"clang/test/SemaObjC/method-direct-properties.m:4:34: error: \'objc_direct\' attribute cannot be applied to properties declared in an Objective-C protocol"}
Line 4,709: Line 4,710:
},
},
["err_objc_direct_protocol_conformance"]={
["err_objc_direct_protocol_conformance"]={
[i]={{nil,C,"err_objc_direct_protocol_conformance"}},
[c]={{nil,D,"err_objc_direct_protocol_conformance"}},
[h]={{nil,C,"%select{category %1|class extension}0 cannot conform to protocol %2 because of direct members declared in interface %3"}},
[d]={{nil,D,"%select{category %1|class extension}0 cannot conform to protocol %2 because of direct members declared in interface %3"}},
[g]={{nil,C,{{"category B","class extension"}," cannot conform to protocol C because of direct members declared in interface D"}}},
[e]={{nil,D,{{"category B","class extension"}," cannot conform to protocol C because of direct members declared in interface D"}}},
[b]=k,
[f]=k,
[e]="(?:category (.*?)|class extension) cannot conform to protocol (.*?) because of direct members declared in interface (.*?)",
[g]="(?:category (.*?)|class extension) cannot conform to protocol (.*?) because of direct members declared in interface (.*?)",
[d]=a,
[h]=a,
[f]={{nil,C,m}},
[i]={{nil,D,m}},
[c]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726"},
[b]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726"},
[j]={{Q,3969,"static void DiagnoseCategoryDirectMembersProtocolConformance(Sema &S, ObjCProtocolDecl *PDecl, ObjCCategoryDecl *CDecl) {\n  // ...\n  if (!DirectMembers.empty()) {\n    S.Diag(CDecl->getLocation(), diag::err_objc_direct_protocol_conformance) << CDecl->IsClassExtension() << CDecl << PDecl << IDecl;"}},
[j]={{T,3969,"static void DiagnoseCategoryDirectMembersProtocolConformance(Sema &S, ObjCProtocolDecl *PDecl, ObjCCategoryDecl *CDecl) {\n  // ...\n  if (!DirectMembers.empty()) {\n    S.Diag(CDecl->getLocation(), diag::err_objc_direct_protocol_conformance) << CDecl->IsClassExtension() << CDecl << PDecl << IDecl;"}},
[l]={
[l]={
["clang/test/SemaObjC/category-direct-members-protocol-conformance.m"]={"clang/test/SemaObjC/category-direct-members-protocol-conformance.m:21:12: error: category \'Cat1\' cannot conform to protocol \'P\' because of direct members declared in interface \'I\'","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:54:12: error: category \'CatExpDirect\' cannot conform to protocol \'P\' because of direct members declared in interface \'ExpDirect\'","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:64:12: error: class extension cannot conform to protocol \'PRecursive1\' because of direct members declared in interface \'ExpDirect\'","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:81:12: error: class extension cannot conform to protocol \'PProp\' because of direct members declared in interface \'IProp1\'","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:97:12: error: class extension cannot conform to protocol \'PProp2\' because of direct members declared in interface \'IProp2\'"}
["clang/test/SemaObjC/category-direct-members-protocol-conformance.m"]={"clang/test/SemaObjC/category-direct-members-protocol-conformance.m:21:12: error: category \'Cat1\' cannot conform to protocol \'P\' because of direct members declared in interface \'I\'","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:54:12: error: category \'CatExpDirect\' cannot conform to protocol \'P\' because of direct members declared in interface \'ExpDirect\'","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:64:12: error: class extension cannot conform to protocol \'PRecursive1\' because of direct members declared in interface \'ExpDirect\'","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:81:12: error: class extension cannot conform to protocol \'PProp\' because of direct members declared in interface \'IProp1\'","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:97:12: error: class extension cannot conform to protocol \'PProp2\' because of direct members declared in interface \'IProp2\'"}
Line 4,723: Line 4,724:
},
},
["err_objc_directive_only_in_protocol"]={
["err_objc_directive_only_in_protocol"]={
[i]="err_objc_directive_only_in_protocol",
[c]="err_objc_directive_only_in_protocol",
[h]="directive may only be specified in protocols only",
[d]="directive may only be specified in protocols only",
[e]="directive may only be specified in protocols only",
[f]=k,
[g]="directive may only be specified in protocols only",
[g]="directive may only be specified in protocols only",
[b]=k,
[h]=a,
[e]="directive may only be specified in protocols only",
[i]=y,
[d]=a,
[b]={J,1236199783,H,I},
[f]=y,
[c]={H,1236199783,I,G},
[j]={{N,756,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n    // ...\n    case tok::objc_required:\n    case tok::objc_optional:\n      // This is only valid on protocols.\n      if (contextKey != tok::objc_protocol)\n        Diag(AtLoc, diag::err_objc_directive_only_in_protocol);"}},
[j]={{N,756,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n    // ...\n    case tok::objc_required:\n    case tok::objc_optional:\n      // This is only valid on protocols.\n      if (contextKey != tok::objc_protocol)\n        Diag(AtLoc, diag::err_objc_directive_only_in_protocol);"}},
[l]={
[l]={
Line 4,737: Line 4,738:
},
},
["err_objc_exceptions_disabled"]={
["err_objc_exceptions_disabled"]={
[i]="err_objc_exceptions_disabled",
[c]="err_objc_exceptions_disabled",
[h]="cannot use \'%0\' with Objective-C exceptions disabled",
[d]="cannot use \'%0\' with Objective-C exceptions disabled",
[g]="cannot use \'A\' with Objective-C exceptions disabled",
[e]="cannot use \'A\' with Objective-C exceptions disabled",
[b]=k,
[f]=k,
[e]="cannot use \'(.*?)\' with Objective\\-C exceptions disabled",
[g]="cannot use \'(.*?)\' with Objective\\-C exceptions disabled",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"ce8dd3a5d474",1298159634,"Add a new ObjCExceptions member variable to LangOptions. This controls whether Objective-C exception...","Add a new ObjCExceptions member variable to LangOptions. This controls whether Objective-C exceptions are enabled or not (they are by default).\n\nllvm-svn: 126061"},
[b]={"ce8dd3a5d474",1298159634,"Add a new ObjCExceptions member variable to LangOptions. This controls whether Objective-C exception...","Add a new ObjCExceptions member variable to LangOptions. This controls whether Objective-C exceptions are enabled or not (they are by default).\n\nllvm-svn: 126061"},
[j]={{E,4239,"StmtResult Sema::ActOnObjCAtTryStmt(SourceLocation AtLoc, Stmt *Try, MultiStmtArg CatchStmts, Stmt *Finally) {\n  if (!getLangOpts().ObjCExceptions)\n    Diag(AtLoc, diag::err_objc_exceptions_disabled) << \"@try\";"},{E,4283,"StmtResult Sema::ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw, Scope *CurScope) {\n  if (!getLangOpts().ObjCExceptions)\n    Diag(AtLoc, diag::err_objc_exceptions_disabled) << \"@throw\";"}},
[j]={{F,4239,"StmtResult Sema::ActOnObjCAtTryStmt(SourceLocation AtLoc, Stmt *Try, MultiStmtArg CatchStmts, Stmt *Finally) {\n  if (!getLangOpts().ObjCExceptions)\n    Diag(AtLoc, diag::err_objc_exceptions_disabled) << \"@try\";"},{F,4283,"StmtResult Sema::ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw, Scope *CurScope) {\n  if (!getLangOpts().ObjCExceptions)\n    Diag(AtLoc, diag::err_objc_exceptions_disabled) << \"@throw\";"}},
[l]={
[l]={
["clang/test/SemaObjC/no-objc-exceptions.m"]={"clang/test/SemaObjC/no-objc-exceptions.m:4:3: error: cannot use \'@throw\' with Objective-C exceptions disabled","clang/test/SemaObjC/no-objc-exceptions.m:8:3: error: cannot use \'@try\' with Objective-C exceptions disabled"}
["clang/test/SemaObjC/no-objc-exceptions.m"]={"clang/test/SemaObjC/no-objc-exceptions.m:4:3: error: cannot use \'@throw\' with Objective-C exceptions disabled","clang/test/SemaObjC/no-objc-exceptions.m:8:3: error: cannot use \'@try\' with Objective-C exceptions disabled"}
Line 4,751: Line 4,752:
},
},
["err_objc_expected_equal_for_getter"]={
["err_objc_expected_equal_for_getter"]={
[i]="err_objc_expected_equal_for_getter",
[c]="err_objc_expected_equal_for_getter",
[h]="expected \'=\' for Objective-C getter",
[d]="expected \'=\' for Objective-C getter",
[g]="expected \'=\' for Objective-C getter",
[e]="expected \'=\' for Objective-C getter",
[b]=k,
[f]=k,
[e]="expected \'\\=\' for Objective\\-C getter",
[g]="expected \'\\=\' for Objective\\-C getter",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"fe15a78ff24f",1286041521,"Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR81...","Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR8169.\n\nllvm-svn: 115411"},
[b]={"fe15a78ff24f",1286041521,"Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR81...","Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR8169.\n\nllvm-svn: 115411"},
[j]={{N,932,"///  Parse property attribute declarations.\n///\n///  property-attr-decl: \'(\' property-attrlist \')\'\n///  property-attrlist:\n///    property-attribute\n///    property-attrlist \',\' property-attribute\n///  property-attribute:\n///    getter \'=\' identifier\n///    setter \'=\' identifier \':\'\n///    direct\n///    readonly\n///    readwrite\n///    assign\n///    retain\n///    copy\n///    nonatomic\n///    atomic\n///    strong\n///    weak\n///    unsafe_unretained\n///    nonnull\n///    nullable\n///    null_unspecified\n///    null_resettable\n///    class\n///\nvoid Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {\n  // ...\n  while (true) {\n    // ...\n    if (II->isStr(\"readonly\"))\n    // ...\n    else if (II->isStr(\"assign\"))\n    // ...\n    else if (II->isStr(\"unsafe_unretained\"))\n    // ...\n    else if (II->isStr(\"readwrite\"))\n    // ...\n    else if (II->isStr(\"retain\"))\n    // ...\n    else if (II->isStr(\"strong\"))\n    // ...\n    else if (II->isStr(\"copy\"))\n    // ...\n    else if (II->isStr(\"nonatomic\"))\n    // ...\n    else if (II->isStr(\"atomic\"))\n    // ...\n    else if (II->isStr(\"weak\"))\n    // ...\n    else if (II->isStr(\"getter\") || II->isStr(\"setter\")) {\n      // ...\n      unsigned DiagID = IsSetter ? diag::err_objc_expected_equal_for_setter : diag::err_objc_expected_equal_for_getter;"}}
[j]={{N,932,"///  Parse property attribute declarations.\n///\n///  property-attr-decl: \'(\' property-attrlist \')\'\n///  property-attrlist:\n///    property-attribute\n///    property-attrlist \',\' property-attribute\n///  property-attribute:\n///    getter \'=\' identifier\n///    setter \'=\' identifier \':\'\n///    direct\n///    readonly\n///    readwrite\n///    assign\n///    retain\n///    copy\n///    nonatomic\n///    atomic\n///    strong\n///    weak\n///    unsafe_unretained\n///    nonnull\n///    nullable\n///    null_unspecified\n///    null_resettable\n///    class\n///\nvoid Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {\n  // ...\n  while (true) {\n    // ...\n    if (II->isStr(\"readonly\"))\n    // ...\n    else if (II->isStr(\"assign\"))\n    // ...\n    else if (II->isStr(\"unsafe_unretained\"))\n    // ...\n    else if (II->isStr(\"readwrite\"))\n    // ...\n    else if (II->isStr(\"retain\"))\n    // ...\n    else if (II->isStr(\"strong\"))\n    // ...\n    else if (II->isStr(\"copy\"))\n    // ...\n    else if (II->isStr(\"nonatomic\"))\n    // ...\n    else if (II->isStr(\"atomic\"))\n    // ...\n    else if (II->isStr(\"weak\"))\n    // ...\n    else if (II->isStr(\"getter\") || II->isStr(\"setter\")) {\n      // ...\n      unsigned DiagID = IsSetter ? diag::err_objc_expected_equal_for_setter : diag::err_objc_expected_equal_for_getter;"}}
},
},
["err_objc_expected_equal_for_setter"]={
["err_objc_expected_equal_for_setter"]={
[i]="err_objc_expected_equal_for_setter",
[c]="err_objc_expected_equal_for_setter",
[h]="expected \'=\' for Objective-C setter",
[d]="expected \'=\' for Objective-C setter",
[g]="expected \'=\' for Objective-C setter",
[e]="expected \'=\' for Objective-C setter",
[b]=k,
[f]=k,
[e]="expected \'\\=\' for Objective\\-C setter",
[g]="expected \'\\=\' for Objective\\-C setter",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"fe15a78ff24f",1286041521,"Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR81...","Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR8169.\n\nllvm-svn: 115411"},
[b]={"fe15a78ff24f",1286041521,"Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR81...","Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR8169.\n\nllvm-svn: 115411"},
[j]={{N,931,"///  Parse property attribute declarations.\n///\n///  property-attr-decl: \'(\' property-attrlist \')\'\n///  property-attrlist:\n///    property-attribute\n///    property-attrlist \',\' property-attribute\n///  property-attribute:\n///    getter \'=\' identifier\n///    setter \'=\' identifier \':\'\n///    direct\n///    readonly\n///    readwrite\n///    assign\n///    retain\n///    copy\n///    nonatomic\n///    atomic\n///    strong\n///    weak\n///    unsafe_unretained\n///    nonnull\n///    nullable\n///    null_unspecified\n///    null_resettable\n///    class\n///\nvoid Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {\n  // ...\n  while (true) {\n    // ...\n    if (II->isStr(\"readonly\"))\n    // ...\n    else if (II->isStr(\"assign\"))\n    // ...\n    else if (II->isStr(\"unsafe_unretained\"))\n    // ...\n    else if (II->isStr(\"readwrite\"))\n    // ...\n    else if (II->isStr(\"retain\"))\n    // ...\n    else if (II->isStr(\"strong\"))\n    // ...\n    else if (II->isStr(\"copy\"))\n    // ...\n    else if (II->isStr(\"nonatomic\"))\n    // ...\n    else if (II->isStr(\"atomic\"))\n    // ...\n    else if (II->isStr(\"weak\"))\n    // ...\n    else if (II->isStr(\"getter\") || II->isStr(\"setter\")) {\n      // ...\n      unsigned DiagID = IsSetter ? diag::err_objc_expected_equal_for_setter : diag::err_objc_expected_equal_for_getter;"}}
[j]={{N,931,"///  Parse property attribute declarations.\n///\n///  property-attr-decl: \'(\' property-attrlist \')\'\n///  property-attrlist:\n///    property-attribute\n///    property-attrlist \',\' property-attribute\n///  property-attribute:\n///    getter \'=\' identifier\n///    setter \'=\' identifier \':\'\n///    direct\n///    readonly\n///    readwrite\n///    assign\n///    retain\n///    copy\n///    nonatomic\n///    atomic\n///    strong\n///    weak\n///    unsafe_unretained\n///    nonnull\n///    nullable\n///    null_unspecified\n///    null_resettable\n///    class\n///\nvoid Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {\n  // ...\n  while (true) {\n    // ...\n    if (II->isStr(\"readonly\"))\n    // ...\n    else if (II->isStr(\"assign\"))\n    // ...\n    else if (II->isStr(\"unsafe_unretained\"))\n    // ...\n    else if (II->isStr(\"readwrite\"))\n    // ...\n    else if (II->isStr(\"retain\"))\n    // ...\n    else if (II->isStr(\"strong\"))\n    // ...\n    else if (II->isStr(\"copy\"))\n    // ...\n    else if (II->isStr(\"nonatomic\"))\n    // ...\n    else if (II->isStr(\"atomic\"))\n    // ...\n    else if (II->isStr(\"weak\"))\n    // ...\n    else if (II->isStr(\"getter\") || II->isStr(\"setter\")) {\n      // ...\n      unsigned DiagID = IsSetter ? diag::err_objc_expected_equal_for_setter : diag::err_objc_expected_equal_for_getter;"}}
},
},
["err_objc_expected_property_attr"]={
["err_objc_expected_property_attr"]={
[i]="err_objc_expected_property_attr",
[c]="err_objc_expected_property_attr",
[h]="unknown property attribute %0",
[d]="unknown property attribute %0",
[g]="unknown property attribute A",
[e]="unknown property attribute A",
[b]=k,
[f]=k,
[e]="unknown property attribute (.*?)",
[g]="unknown property attribute (.*?)",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={H,1236199783,I,G},
[b]={J,1236199783,H,I},
[j]={{N,1007,"///  Parse property attribute declarations.\n///\n///  property-attr-decl: \'(\' property-attrlist \')\'\n///  property-attrlist:\n///    property-attribute\n///    property-attrlist \',\' property-attribute\n///  property-attribute:\n///    getter \'=\' identifier\n///    setter \'=\' identifier \':\'\n///    direct\n///    readonly\n///    readwrite\n///    assign\n///    retain\n///    copy\n///    nonatomic\n///    atomic\n///    strong\n///    weak\n///    unsafe_unretained\n///    nonnull\n///    nullable\n///    null_unspecified\n///    null_resettable\n///    class\n///\nvoid Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {\n  // ...\n  while (true) {\n    // ...\n    if (II->isStr(\"readonly\"))\n    // ...\n    else if (II->isStr(\"assign\"))\n    // ...\n    else if (II->isStr(\"unsafe_unretained\"))\n    // ...\n    else if (II->isStr(\"readwrite\"))\n    // ...\n    else if (II->isStr(\"retain\"))\n    // ...\n    else if (II->isStr(\"strong\"))\n    // ...\n    else if (II->isStr(\"copy\"))\n    // ...\n    else if (II->isStr(\"nonatomic\"))\n    // ...\n    else if (II->isStr(\"atomic\"))\n    // ...\n    else if (II->isStr(\"weak\"))\n    // ...\n    else if (II->isStr(\"getter\") || II->isStr(\"setter\")) {\n    // ...\n    } else if (II->isStr(\"nonnull\")) {\n    // ...\n    } else if (II->isStr(\"nullable\")) {\n    // ...\n    } else if (II->isStr(\"null_unspecified\")) {\n    // ...\n    } else if (II->isStr(\"null_resettable\")) {\n    // ...\n    } else if (II->isStr(\"class\")) {\n    // ...\n    } else if (II->isStr(\"direct\")) {\n    // ...\n    } else {\n      Diag(AttrName, diag::err_objc_expected_property_attr) << II;"},{N,2437,"///  property-dynamic:\n///    @dynamic  property-list\n///\n///  property-list:\n///    identifier\n///    property-list \',\' identifier\n///\nDecl *Parser::ParseObjCPropertyDynamic(SourceLocation atLoc) {\n  // ...\n  if (Tok.is(tok::l_paren)) {\n    // ...\n    if (!II) {\n      Diag(Tok, diag::err_objc_expected_property_attr) << II;"},{N,2449,"///  property-dynamic:\n///    @dynamic  property-list\n///\n///  property-list:\n///    identifier\n///    property-list \',\' identifier\n///\nDecl *Parser::ParseObjCPropertyDynamic(SourceLocation atLoc) {\n  // ...\n  if (Tok.is(tok::l_paren)) {\n    // ...\n    if (!II) {\n    // ...\n    } else {\n      // ...\n      if (II->isStr(\"class\")) {\n      // ...\n      } else {\n        Diag(AttrName, diag::err_objc_expected_property_attr) << II;"}},
[j]={{N,1007,"///  Parse property attribute declarations.\n///\n///  property-attr-decl: \'(\' property-attrlist \')\'\n///  property-attrlist:\n///    property-attribute\n///    property-attrlist \',\' property-attribute\n///  property-attribute:\n///    getter \'=\' identifier\n///    setter \'=\' identifier \':\'\n///    direct\n///    readonly\n///    readwrite\n///    assign\n///    retain\n///    copy\n///    nonatomic\n///    atomic\n///    strong\n///    weak\n///    unsafe_unretained\n///    nonnull\n///    nullable\n///    null_unspecified\n///    null_resettable\n///    class\n///\nvoid Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {\n  // ...\n  while (true) {\n    // ...\n    if (II->isStr(\"readonly\"))\n    // ...\n    else if (II->isStr(\"assign\"))\n    // ...\n    else if (II->isStr(\"unsafe_unretained\"))\n    // ...\n    else if (II->isStr(\"readwrite\"))\n    // ...\n    else if (II->isStr(\"retain\"))\n    // ...\n    else if (II->isStr(\"strong\"))\n    // ...\n    else if (II->isStr(\"copy\"))\n    // ...\n    else if (II->isStr(\"nonatomic\"))\n    // ...\n    else if (II->isStr(\"atomic\"))\n    // ...\n    else if (II->isStr(\"weak\"))\n    // ...\n    else if (II->isStr(\"getter\") || II->isStr(\"setter\")) {\n    // ...\n    } else if (II->isStr(\"nonnull\")) {\n    // ...\n    } else if (II->isStr(\"nullable\")) {\n    // ...\n    } else if (II->isStr(\"null_unspecified\")) {\n    // ...\n    } else if (II->isStr(\"null_resettable\")) {\n    // ...\n    } else if (II->isStr(\"class\")) {\n    // ...\n    } else if (II->isStr(\"direct\")) {\n    // ...\n    } else {\n      Diag(AttrName, diag::err_objc_expected_property_attr) << II;"},{N,2437,"///  property-dynamic:\n///    @dynamic  property-list\n///\n///  property-list:\n///    identifier\n///    property-list \',\' identifier\n///\nDecl *Parser::ParseObjCPropertyDynamic(SourceLocation atLoc) {\n  // ...\n  if (Tok.is(tok::l_paren)) {\n    // ...\n    if (!II) {\n      Diag(Tok, diag::err_objc_expected_property_attr) << II;"},{N,2449,"///  property-dynamic:\n///    @dynamic  property-list\n///\n///  property-list:\n///    identifier\n///    property-list \',\' identifier\n///\nDecl *Parser::ParseObjCPropertyDynamic(SourceLocation atLoc) {\n  // ...\n  if (Tok.is(tok::l_paren)) {\n    // ...\n    if (!II) {\n    // ...\n    } else {\n      // ...\n      if (II->isStr(\"class\")) {\n      // ...\n      } else {\n        Diag(AttrName, diag::err_objc_expected_property_attr) << II;"}},
[l]={
[l]={
Line 4,787: Line 4,788:
},
},
["err_objc_expected_selector_for_getter_setter"]={
["err_objc_expected_selector_for_getter_setter"]={
[i]="err_objc_expected_selector_for_getter_setter",
[c]="err_objc_expected_selector_for_getter_setter",
[h]="expected selector for Objective-C %select{setter|getter}0",
[d]="expected selector for Objective-C %select{setter|getter}0",
[g]={{nil,nil,{"expected selector for Objective-C ",{"setter","getter"}}}},
[e]={{nil,nil,{"expected selector for Objective-C ",{"setter","getter"}}}},
[b]=k,
[f]=k,
[e]="expected selector for Objective\\-C (?:setter|getter)",
[g]="expected selector for Objective\\-C (?:setter|getter)",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"fe15a78ff24f",1286041521,"Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR81...","Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR8169.\n\nllvm-svn: 115411"},
[b]={"fe15a78ff24f",1286041521,"Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR81...","Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR8169.\n\nllvm-svn: 115411"},
[j]={{N,952,"///  Parse property attribute declarations.\n///\n///  property-attr-decl: \'(\' property-attrlist \')\'\n///  property-attrlist:\n///    property-attribute\n///    property-attrlist \',\' property-attribute\n///  property-attribute:\n///    getter \'=\' identifier\n///    setter \'=\' identifier \':\'\n///    direct\n///    readonly\n///    readwrite\n///    assign\n///    retain\n///    copy\n///    nonatomic\n///    atomic\n///    strong\n///    weak\n///    unsafe_unretained\n///    nonnull\n///    nullable\n///    null_unspecified\n///    null_resettable\n///    class\n///\nvoid Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {\n  // ...\n  while (true) {\n    // ...\n    if (II->isStr(\"readonly\"))\n    // ...\n    else if (II->isStr(\"assign\"))\n    // ...\n    else if (II->isStr(\"unsafe_unretained\"))\n    // ...\n    else if (II->isStr(\"readwrite\"))\n    // ...\n    else if (II->isStr(\"retain\"))\n    // ...\n    else if (II->isStr(\"strong\"))\n    // ...\n    else if (II->isStr(\"copy\"))\n    // ...\n    else if (II->isStr(\"nonatomic\"))\n    // ...\n    else if (II->isStr(\"atomic\"))\n    // ...\n    else if (II->isStr(\"weak\"))\n    // ...\n    else if (II->isStr(\"getter\") || II->isStr(\"setter\")) {\n      // ...\n      if (!SelIdent) {\n        Diag(Tok, diag::err_objc_expected_selector_for_getter_setter) << IsSetter;"}}
[j]={{N,952,"///  Parse property attribute declarations.\n///\n///  property-attr-decl: \'(\' property-attrlist \')\'\n///  property-attrlist:\n///    property-attribute\n///    property-attrlist \',\' property-attribute\n///  property-attribute:\n///    getter \'=\' identifier\n///    setter \'=\' identifier \':\'\n///    direct\n///    readonly\n///    readwrite\n///    assign\n///    retain\n///    copy\n///    nonatomic\n///    atomic\n///    strong\n///    weak\n///    unsafe_unretained\n///    nonnull\n///    nullable\n///    null_unspecified\n///    null_resettable\n///    class\n///\nvoid Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {\n  // ...\n  while (true) {\n    // ...\n    if (II->isStr(\"readonly\"))\n    // ...\n    else if (II->isStr(\"assign\"))\n    // ...\n    else if (II->isStr(\"unsafe_unretained\"))\n    // ...\n    else if (II->isStr(\"readwrite\"))\n    // ...\n    else if (II->isStr(\"retain\"))\n    // ...\n    else if (II->isStr(\"strong\"))\n    // ...\n    else if (II->isStr(\"copy\"))\n    // ...\n    else if (II->isStr(\"nonatomic\"))\n    // ...\n    else if (II->isStr(\"atomic\"))\n    // ...\n    else if (II->isStr(\"weak\"))\n    // ...\n    else if (II->isStr(\"getter\") || II->isStr(\"setter\")) {\n      // ...\n      if (!SelIdent) {\n        Diag(Tok, diag::err_objc_expected_selector_for_getter_setter) << IsSetter;"}}
},
},
["err_objc_expected_type_parameter"]={
["err_objc_expected_type_parameter"]={
[i]="err_objc_expected_type_parameter",
[c]="err_objc_expected_type_parameter",
[h]="expected type parameter name",
[d]="expected type parameter name",
[e]="expected type parameter name",
[f]=k,
[g]="expected type parameter name",
[g]="expected type parameter name",
[b]=k,
[h]=a,
[e]="expected type parameter name",
[i]=sc,
[d]=a,
[b]={rc,1436241435,qc,xc},
[f]=mc,
[c]={oc,1436241435,lc,tc},
[j]={{N,518,"/// Parse an Objective-C type parameter list, if present, or capture\n/// the locations of the protocol identifiers for a list of protocol\n/// references.\n///\n///  objc-type-parameter-list:\n///    \'<\' objc-type-parameter (\',\' objc-type-parameter)* \'>\'\n///\n///  objc-type-parameter:\n///    objc-type-parameter-variance? identifier objc-type-parameter-bound[opt]\n///\n///  objc-type-parameter-bound:\n///    \':\' type-name\n///\n///  objc-type-parameter-variance:\n///    \'__covariant\'\n///    \'__contravariant\'\n///\n/// \\param lAngleLoc The location of the starting \'<\'.\n///\n/// \\param protocolIdents Will capture the list of identifiers, if the\n/// angle brackets contain a list of protocol references rather than a\n/// type parameter list.\n///\n/// \\param rAngleLoc The location of the ending \'>\'.\nObjCTypeParamList *Parser::parseObjCTypeParamListOrProtocolRefs(ObjCTypeParamListScope &Scope, SourceLocation &lAngleLoc, SmallVectorImpl<IdentifierLocPair> &protocolIdents, SourceLocation &rAngleLoc, bool mayBeProtocolList) {\n  // ...\n  do {\n    // ...\n    // Parse the identifier.\n    if (!Tok.is(tok::identifier)) {\n      // ...\n      Diag(Tok, diag::err_objc_expected_type_parameter);"}},
[j]={{N,518,"/// Parse an Objective-C type parameter list, if present, or capture\n/// the locations of the protocol identifiers for a list of protocol\n/// references.\n///\n///  objc-type-parameter-list:\n///    \'<\' objc-type-parameter (\',\' objc-type-parameter)* \'>\'\n///\n///  objc-type-parameter:\n///    objc-type-parameter-variance? identifier objc-type-parameter-bound[opt]\n///\n///  objc-type-parameter-bound:\n///    \':\' type-name\n///\n///  objc-type-parameter-variance:\n///    \'__covariant\'\n///    \'__contravariant\'\n///\n/// \\param lAngleLoc The location of the starting \'<\'.\n///\n/// \\param protocolIdents Will capture the list of identifiers, if the\n/// angle brackets contain a list of protocol references rather than a\n/// type parameter list.\n///\n/// \\param rAngleLoc The location of the ending \'>\'.\nObjCTypeParamList *Parser::parseObjCTypeParamListOrProtocolRefs(ObjCTypeParamListScope &Scope, SourceLocation &lAngleLoc, SmallVectorImpl<IdentifierLocPair> &protocolIdents, SourceLocation &rAngleLoc, bool mayBeProtocolList) {\n  // ...\n  do {\n    // ...\n    // Parse the identifier.\n    if (!Tok.is(tok::identifier)) {\n      // ...\n      Diag(Tok, diag::err_objc_expected_type_parameter);"}},
[l]={
[l]={
Line 4,812: Line 4,813:
},
},
["err_objc_for_range_init_stmt"]={
["err_objc_for_range_init_stmt"]={
[i]={{nil,db,"err_objc_for_range_init_stmt"}},
[c]={{nil,db,"err_objc_for_range_init_stmt"}},
[h]={{nil,db,"initialization statement is not supported when iterating over Objective-C collection"}},
[d]={{nil,db,"initialization statement is not supported when iterating over Objective-C collection"}},
[g]={{nil,db,"initialization statement is not supported when iterating over Objective-C collection"}},
[e]={{nil,db,"initialization statement is not supported when iterating over Objective-C collection"}},
[b]=k,
[f]=k,
[e]="initialization statement is not supported when iterating over Objective\\-C collection",
[g]="initialization statement is not supported when iterating over Objective\\-C collection",
[d]=a,
[h]=a,
[f]={{nil,db,m}},
[i]={{nil,db,m}},
[c]={"8baa50013c86",1538160249,"[cxx2a] P0614R1: Support init-statements in range-based for loops.","[cxx2a] P0614R1: Support init-statements in range-based for loops.\n\nWe don\'t yet support this for the case where a range-based for loop is\nimplicitly rewritten to an ObjC for..in statement.\n\nllvm-svn: 343350"},
[b]={"8baa50013c86",1538160249,"[cxx2a] P0614R1: Support init-statements in range-based for loops.","[cxx2a] P0614R1: Support init-statements in range-based for loops.\n\nWe don\'t yet support this for the case where a range-based for loop is\nimplicitly rewritten to an ObjC for..in statement.\n\nllvm-svn: 343350"},
[j]={{E,2495,"/// ActOnCXXForRangeStmt - Check and build a C++11 for-range statement.\n///\n/// C++11 [stmt.ranged]:\n///  A range-based for statement is equivalent to\n///\n///  {\n///    auto && __range = range-init;\n///    for ( auto __begin = begin-expr,\n///          __end = end-expr;\n///          __begin != __end;\n///          ++__begin ) {\n///      for-range-declaration = *__begin;\n///      statement\n///    }\n///  }\n///\n/// The body of the loop is not available yet, since it cannot be analysed until\n/// we have determined the type of the for-range-declaration.\nStmtResult Sema::ActOnCXXForRangeStmt(Scope *S, SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, Stmt *First, SourceLocation ColonLoc, Expr *Range, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  // ...\n  if (Range && ObjCEnumerationCollection(Range)) {\n    // FIXME: Support init-statements in Objective-C++20 ranged for statement.\n    if (InitStmt)\n      return Diag(InitStmt->getBeginLoc(), diag::err_objc_for_range_init_stmt) << InitStmt->getSourceRange();"}},
[j]={{F,2495,"/// ActOnCXXForRangeStmt - Check and build a C++11 for-range statement.\n///\n/// C++11 [stmt.ranged]:\n///  A range-based for statement is equivalent to\n///\n///  {\n///    auto && __range = range-init;\n///    for ( auto __begin = begin-expr,\n///          __end = end-expr;\n///          __begin != __end;\n///          ++__begin ) {\n///      for-range-declaration = *__begin;\n///      statement\n///    }\n///  }\n///\n/// The body of the loop is not available yet, since it cannot be analysed until\n/// we have determined the type of the for-range-declaration.\nStmtResult Sema::ActOnCXXForRangeStmt(Scope *S, SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, Stmt *First, SourceLocation ColonLoc, Expr *Range, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  // ...\n  if (Range && ObjCEnumerationCollection(Range)) {\n    // FIXME: Support init-statements in Objective-C++20 ranged for statement.\n    if (InitStmt)\n      return Diag(InitStmt->getBeginLoc(), diag::err_objc_for_range_init_stmt) << InitStmt->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjCXX/foreach.mm"]={"clang/test/SemaObjCXX/foreach.mm:18:8: error: initialization statement is not supported when iterating over Objective-C collection","clang/test/SemaObjCXX/foreach.mm:21:8: error: initialization statement is not supported when iterating over Objective-C collection"}
["clang/test/SemaObjCXX/foreach.mm"]={"clang/test/SemaObjCXX/foreach.mm:18:8: error: initialization statement is not supported when iterating over Objective-C collection","clang/test/SemaObjCXX/foreach.mm:21:8: error: initialization statement is not supported when iterating over Objective-C collection"}
Line 4,826: Line 4,827:
},
},
["err_objc_illegal_boxed_expression_type"]={
["err_objc_illegal_boxed_expression_type"]={
[i]="err_objc_illegal_boxed_expression_type",
[c]="err_objc_illegal_boxed_expression_type",
[h]="illegal type %0 used in a boxed expression",
[d]="illegal type %0 used in a boxed expression",
[g]="illegal type A used in a boxed expression",
[e]="illegal type A used in a boxed expression",
[b]=k,
[f]=k,
[e]="illegal type (.*?) used in a boxed expression",
[g]="illegal type (.*?) used in a boxed expression",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"0caa39474bfc",1334795112,"Implements boxed expressions for Objective-C. <rdar://problem/10194391>","Implements boxed expressions for Objective-C. <rdar://problem/10194391>\n\nllvm-svn: 155082"},
[b]={"0caa39474bfc",1334795112,"Implements boxed expressions for Objective-C. <rdar://problem/10194391>","Implements boxed expressions for Objective-C. <rdar://problem/10194391>\n\nllvm-svn: 155082"},
[j]={{F,732,"ExprResult Sema::BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr) {\n  // ...\n  if (!BoxingMethod) {\n    Diag(Loc, diag::err_objc_illegal_boxed_expression_type) << ValueType << ValueExpr->getSourceRange();"}},
[j]={{G,732,"ExprResult Sema::BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr) {\n  // ...\n  if (!BoxingMethod) {\n    Diag(Loc, diag::err_objc_illegal_boxed_expression_type) << ValueType << ValueExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjC/objc-literal-nsnumber.m"]={"clang/test/SemaObjC/objc-literal-nsnumber.m:16:13: error: illegal type \'int\' used in a boxed expression","clang/test/SemaObjC/objc-literal-nsnumber.m:26:13: error: illegal type \'int\' used in a boxed expression"}
["clang/test/SemaObjC/objc-literal-nsnumber.m"]={"clang/test/SemaObjC/objc-literal-nsnumber.m:16:13: error: illegal type \'int\' used in a boxed expression","clang/test/SemaObjC/objc-literal-nsnumber.m:26:13: error: illegal type \'int\' used in a boxed expression"}
Line 4,840: Line 4,841:
},
},
["err_objc_illegal_interface_qual"]={
["err_objc_illegal_interface_qual"]={
[i]="err_objc_illegal_interface_qual",
[c]="err_objc_illegal_interface_qual",
[h]="illegal interface qualifier",
[d]="illegal interface qualifier",
[e]="illegal interface qualifier",
[f]=k,
[g]="illegal interface qualifier",
[g]="illegal interface qualifier",
[b]=k,
[h]=a,
[e]="illegal interface qualifier",
[i]=y,
[d]=a,
[b]={J,1236199783,H,I},
[f]=y,
[c]={H,1236199783,I,G},
[j]={{N,738,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n    // ...\n    default:\n      // ...\n      Diag(AtLoc, diag::err_objc_illegal_interface_qual);"}},
[j]={{N,738,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n    // ...\n    default:\n      // ...\n      Diag(AtLoc, diag::err_objc_illegal_interface_qual);"}},
[l]={
[l]={
Line 4,854: Line 4,855:
},
},
["err_objc_illegal_visibility_spec"]={
["err_objc_illegal_visibility_spec"]={
[i]="err_objc_illegal_visibility_spec",
[c]="err_objc_illegal_visibility_spec",
[h]="illegal visibility specification",
[d]="illegal visibility specification",
[e]="illegal visibility specification",
[f]=k,
[g]="illegal visibility specification",
[g]="illegal visibility specification",
[b]=k,
[h]=a,
[e]="illegal visibility specification",
[i]=y,
[d]=a,
[b]={J,1236199783,H,I},
[f]=y,
[c]={H,1236199783,I,G},
[j]={{N,1999,"///  objc-class-instance-variables:\n///    \'{\' objc-instance-variable-decl-list[opt] \'}\'\n///\n///  objc-instance-variable-decl-list:\n///    objc-visibility-spec\n///    objc-instance-variable-decl \';\'\n///    \';\'\n///    objc-instance-variable-decl-list objc-visibility-spec\n///    objc-instance-variable-decl-list objc-instance-variable-decl \';\'\n///    objc-instance-variable-decl-list static_assert-declaration\n///    objc-instance-variable-decl-list \';\'\n///\n///  objc-visibility-spec:\n///    @private\n///    @protected\n///    @public\n///    @package [OBJC2]\n///\n///  objc-instance-variable-decl:\n///    struct-declaration\n///\nvoid Parser::ParseObjCClassInstanceVariables(ObjCContainerDecl *interfaceDecl, tok::ObjCKeywordKind visibility, SourceLocation atLoc) {\n  // ...\n  // While we still have something to read, read the instance variables.\n  while (Tok.isNot(tok::r_brace) && !isEofOrEom()) {\n    // ...\n    // Set the default visibility to private.\n    if (TryConsumeToken(tok::at)) { // parse objc-visibility-spec\n      // ...\n      default:\n        Diag(Tok, diag::err_objc_illegal_visibility_spec);"}}
[j]={{N,1999,"///  objc-class-instance-variables:\n///    \'{\' objc-instance-variable-decl-list[opt] \'}\'\n///\n///  objc-instance-variable-decl-list:\n///    objc-visibility-spec\n///    objc-instance-variable-decl \';\'\n///    \';\'\n///    objc-instance-variable-decl-list objc-visibility-spec\n///    objc-instance-variable-decl-list objc-instance-variable-decl \';\'\n///    objc-instance-variable-decl-list static_assert-declaration\n///    objc-instance-variable-decl-list \';\'\n///\n///  objc-visibility-spec:\n///    @private\n///    @protected\n///    @public\n///    @package [OBJC2]\n///\n///  objc-instance-variable-decl:\n///    struct-declaration\n///\nvoid Parser::ParseObjCClassInstanceVariables(ObjCContainerDecl *interfaceDecl, tok::ObjCKeywordKind visibility, SourceLocation atLoc) {\n  // ...\n  // While we still have something to read, read the instance variables.\n  while (Tok.isNot(tok::r_brace) && !isEofOrEom()) {\n    // ...\n    // Set the default visibility to private.\n    if (TryConsumeToken(tok::at)) { // parse objc-visibility-spec\n      // ...\n      default:\n        Diag(Tok, diag::err_objc_illegal_visibility_spec);"}}
},
},
["err_objc_incomplete_boxed_expression_type"]={
["err_objc_incomplete_boxed_expression_type"]={
[i]="err_objc_incomplete_boxed_expression_type",
[c]="err_objc_incomplete_boxed_expression_type",
[h]="incomplete type %0 used in a boxed expression",
[d]="incomplete type %0 used in a boxed expression",
[g]="incomplete type A used in a boxed expression",
[e]="incomplete type A used in a boxed expression",
[b]=k,
[f]=k,
[e]="incomplete type (.*?) used in a boxed expression",
[g]="incomplete type (.*?) used in a boxed expression",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"8e6951d81b79",1337109464,"Allow objc @() syntax for enum types.","Allow objc @() syntax for enum types.\n\nPreviously we would reject it as illegal using a value of\nenum type and on ObjC++ it was illegal to use an enumerator\nas well.\n\nrdar://11454917\n\nllvm-svn: 156843"},
[b]={"8e6951d81b79",1337109464,"Allow objc @() syntax for enum types.","Allow objc @() syntax for enum types.\n\nPreviously we would reject it as illegal using a value of\nenum type and on ObjC++ it was illegal to use an enumerator\nas well.\n\nrdar://11454917\n\nllvm-svn: 156843"},
[j]={{F,640,"ExprResult Sema::BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr) {\n  // ...\n  if (const PointerType *PT = ValueType->getAs<PointerType>()) {\n  // ...\n  } else if (ValueType->isBuiltinType()) {\n  // ...\n  } else if (const EnumType *ET = ValueType->getAs<EnumType>()) {\n    if (!ET->getDecl()->isComplete()) {\n      Diag(Loc, diag::err_objc_incomplete_boxed_expression_type) << ValueType << ValueExpr->getSourceRange();"}},
[j]={{G,640,"ExprResult Sema::BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr) {\n  // ...\n  if (const PointerType *PT = ValueType->getAs<PointerType>()) {\n  // ...\n  } else if (ValueType->isBuiltinType()) {\n  // ...\n  } else if (const EnumType *ET = ValueType->getAs<EnumType>()) {\n    if (!ET->getDecl()->isComplete()) {\n      Diag(Loc, diag::err_objc_incomplete_boxed_expression_type) << ValueType << ValueExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjCXX/boxing-illegal-types.mm"]={"clang/test/SemaObjCXX/boxing-illegal-types.mm:57:9: error: incomplete type \'enum ForwE\' used in a boxed expression"}
["clang/test/SemaObjCXX/boxing-illegal-types.mm"]={"clang/test/SemaObjCXX/boxing-illegal-types.mm:57:9: error: incomplete type \'enum ForwE\' used in a boxed expression"}
Line 4,879: Line 4,880:
},
},
["err_objc_index_incomplete_class_type"]={
["err_objc_index_incomplete_class_type"]={
[i]="err_objc_index_incomplete_class_type",
[c]="err_objc_index_incomplete_class_type",
[h]="Objective-C index expression has incomplete class type %0",
[d]="Objective-C index expression has incomplete class type %0",
[g]="Objective-C index expression has incomplete class type A",
[e]="Objective-C index expression has incomplete class type A",
[b]=k,
[f]=k,
[e]="Objective\\-C index expression has incomplete class type (.*?)",
[g]="Objective\\-C index expression has incomplete class type (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={jb,1331064356,lb,kb},
[b]={jb,1331064356,kb,lb},
[j]={{P,1080,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  if (RequireCompleteType(FromE->getExprLoc(), T, diag::err_objc_index_incomplete_class_type, FromE))"}}
[j]={{P,1080,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  if (RequireCompleteType(FromE->getExprLoc(), T, diag::err_objc_index_incomplete_class_type, FromE))"}}
},
},
["err_objc_indexing_method_result_type"]={
["err_objc_indexing_method_result_type"]={
[i]="err_objc_indexing_method_result_type",
[c]="err_objc_indexing_method_result_type",
[h]="method for accessing %select{dictionary|array}1 element must have Objective-C object return type instead of %0",
[d]="method for accessing %select{dictionary|array}1 element must have Objective-C object return type instead of %0",
[g]={{nil,nil,{"method for accessing ",{"dictionary","array"}," element must have Objective-C object return type instead of A"}}},
[e]={{nil,nil,{"method for accessing ",{"dictionary","array"}," element must have Objective-C object return type instead of A"}}},
[b]=k,
[f]=k,
[e]="method for accessing (?:dictionary|array) element must have Objective\\-C object return type instead of (.*?)",
[g]="method for accessing (?:dictionary|array) element must have Objective\\-C object return type instead of (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={jb,1331064356,lb,kb},
[b]={jb,1331064356,kb,lb},
[j]={{P,1238,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  // ...\n  if (AtIndexGetter) {\n    // ...\n    if (!R->isObjCObjectPointerType()) {\n      S.Diag(RefExpr->getKeyExpr()->getExprLoc(), diag::err_objc_indexing_method_result_type) << R << arrayRef;"}},
[j]={{P,1238,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  // ...\n  if (AtIndexGetter) {\n    // ...\n    if (!R->isObjCObjectPointerType()) {\n      S.Diag(RefExpr->getKeyExpr()->getExprLoc(), diag::err_objc_indexing_method_result_type) << R << arrayRef;"}},
[l]={
[l]={
Line 4,904: Line 4,905:
},
},
["err_objc_kindof_nonobject"]={
["err_objc_kindof_nonobject"]={
[i]="err_objc_kindof_nonobject",
[c]="err_objc_kindof_nonobject",
[h]="\'__kindof\' specifier cannot be applied to non-object type %0",
[d]="\'__kindof\' specifier cannot be applied to non-object type %0",
[g]="\'__kindof\' specifier cannot be applied to non-object type A",
[e]="\'__kindof\' specifier cannot be applied to non-object type A",
[b]=k,
[f]=k,
[e]="\'__kindof\' specifier cannot be applied to non\\-object type (.*?)",
[g]="\'__kindof\' specifier cannot be applied to non\\-object type (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"ab209d83be5d",1436241522,"Implement the Objective-C __kindof type qualifier.","Implement the Objective-C __kindof type qualifier.\n\nThe __kindof type qualifier can be applied to Objective-C object\n(pointer) types to indicate id-like behavior, which includes implicit\n\"downcasting\" of __kindof types to subclasses and id-like message-send\nbehavior. __kindof types provide better type bounds for substitutions\ninto unspecified generic types, which preserves more type information.\n\nllvm-svn: 241548"},
[b]={"ab209d83be5d",1436241522,"Implement the Objective-C __kindof type qualifier.","Implement the Objective-C __kindof type qualifier.\n\nThe __kindof type qualifier can be applied to Objective-C object\n(pointer) types to indicate id-like behavior, which includes implicit\n\"downcasting\" of __kindof types to subclasses and id-like message-send\nbehavior. __kindof types provide better type bounds for substitutions\ninto unspecified generic types, which preserves more type information.\n\nllvm-svn: 241548"},
[j]={{cb,7597,"/// Check the application of the Objective-C \'__kindof\' qualifier to\n/// the given type.\nstatic bool checkObjCKindOfType(TypeProcessingState &state, QualType &type, ParsedAttr &attr) {\n  // ...\n  // If not, we can\'t apply __kindof.\n  if (!objType) {\n    // ...\n    S.Diag(attr.getLoc(), diag::err_objc_kindof_nonobject) << type;"}},
[j]={{cb,7597,"/// Check the application of the Objective-C \'__kindof\' qualifier to\n/// the given type.\nstatic bool checkObjCKindOfType(TypeProcessingState &state, QualType &type, ParsedAttr &attr) {\n  // ...\n  // If not, we can\'t apply __kindof.\n  if (!objType) {\n    // ...\n    S.Diag(attr.getLoc(), diag::err_objc_kindof_nonobject) << type;"}},
[l]={
[l]={
Line 4,918: Line 4,919:
},
},
["err_objc_kindof_wrong_position"]={
["err_objc_kindof_wrong_position"]={
[i]="err_objc_kindof_wrong_position",
[c]="err_objc_kindof_wrong_position",
[h]="\'__kindof\' type specifier must precede the declarator",
[d]="\'__kindof\' type specifier must precede the declarator",
[e]="\'__kindof\' type specifier must precede the declarator",
[f]=k,
[g]="\'__kindof\' type specifier must precede the declarator",
[g]="\'__kindof\' type specifier must precede the declarator",
[b]=k,
[h]=a,
[e]="\'__kindof\' type specifier must precede the declarator",
[i]=m,
[d]=a,
[b]={"ab209d83be5d",1436241522,"Implement the Objective-C __kindof type qualifier.","Implement the Objective-C __kindof type qualifier.\n\nThe __kindof type qualifier can be applied to Objective-C object\n(pointer) types to indicate id-like behavior, which includes implicit\n\"downcasting\" of __kindof types to subclasses and id-like message-send\nbehavior. __kindof types provide better type bounds for substitutions\ninto unspecified generic types, which preserves more type information.\n\nllvm-svn: 241548"},
[f]=m,
[c]={"ab209d83be5d",1436241522,"Implement the Objective-C __kindof type qualifier.","Implement the Objective-C __kindof type qualifier.\n\nThe __kindof type qualifier can be applied to Objective-C object\n(pointer) types to indicate id-like behavior, which includes implicit\n\"downcasting\" of __kindof types to subclasses and id-like message-send\nbehavior. __kindof types provide better type bounds for substitutions\ninto unspecified generic types, which preserves more type information.\n\nllvm-svn: 241548"},
[j]={{cb,8729,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  // ...\n  for (ParsedAttr &attr : AttrsCopy) {\n    // ...\n    case ParsedAttr::AT_ObjCKindOf:\n      // ...\n      case TAL_DeclChunk:\n      case TAL_DeclName:\n        state.getSema().Diag(attr.getLoc(), diag::err_objc_kindof_wrong_position) << FixItHint::CreateRemoval(attr.getLoc()) << FixItHint::CreateInsertion(state.getDeclarator().getDeclSpec().getBeginLoc(), \"__kindof \");"}},
[j]={{cb,8729,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  // ...\n  for (ParsedAttr &attr : AttrsCopy) {\n    // ...\n    case ParsedAttr::AT_ObjCKindOf:\n      // ...\n      case TAL_DeclChunk:\n      case TAL_DeclName:\n        state.getSema().Diag(attr.getLoc(), diag::err_objc_kindof_wrong_position) << FixItHint::CreateRemoval(attr.getLoc()) << FixItHint::CreateInsertion(state.getDeclarator().getDeclSpec().getBeginLoc(), \"__kindof \");"}},
[l]={
[l]={
Line 4,932: Line 4,933:
},
},
["err_objc_literal_method_sig"]={
["err_objc_literal_method_sig"]={
[i]="err_objc_literal_method_sig",
[c]="err_objc_literal_method_sig",
[h]="literal construction method %0 has incompatible signature",
[d]="literal construction method %0 has incompatible signature",
[g]="literal construction method A has incompatible signature",
[e]="literal construction method A has incompatible signature",
[b]=k,
[f]=k,
[e]="literal construction method (.*?) has incompatible signature",
[g]="literal construction method (.*?) has incompatible signature",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={jb,1331064356,lb,kb},
[b]={jb,1331064356,kb,lb},
[j]={{F,161,"/// Emits an error if the given method does not exist, or if the return\n/// type is not an Objective-C object.\nstatic bool validateBoxingMethod(Sema &S, SourceLocation Loc, const ObjCInterfaceDecl *Class, Selector Sel, const ObjCMethodDecl *Method) {\n  // ...\n  if (!ReturnType->isObjCObjectPointerType()) {\n    S.Diag(Loc, diag::err_objc_literal_method_sig) << Sel;"},{F,849,"ExprResult Sema::BuildObjCArrayLiteral(SourceRange SR, MultiExprArg Elements) {\n  // ...\n  if (!ArrayWithObjectsMethod) {\n    // ...\n    if (!PtrT || !Context.hasSameUnqualifiedType(PtrT->getPointeeType(), IdT)) {\n      Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"},{F,860,"ExprResult Sema::BuildObjCArrayLiteral(SourceRange SR, MultiExprArg Elements) {\n  // ...\n  if (!ArrayWithObjectsMethod) {\n    // ...\n    // Check that the \'count\' parameter is integral.\n    if (!Method->parameters()[1]->getType()->isIntegerType()) {\n      Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"},{F,1020,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  // ...\n  if (!DictionaryWithObjectsMethod) {\n    // ...\n    if (!PtrValue || !Context.hasSameUnqualifiedType(PtrValue->getPointeeType(), IdT)) {\n      Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"},{F,1054,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  // ...\n  if (!DictionaryWithObjectsMethod) {\n    // ...\n    if (!PtrKey || !Context.hasSameUnqualifiedType(PtrKey->getPointeeType(), IdT)) {\n      // ...\n      if (err) {\n        Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"},{F,1067,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  // ...\n  if (!DictionaryWithObjectsMethod) {\n    // ...\n    if (!CountType->isIntegerType()) {\n      Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"}},
[j]={{G,161,"/// Emits an error if the given method does not exist, or if the return\n/// type is not an Objective-C object.\nstatic bool validateBoxingMethod(Sema &S, SourceLocation Loc, const ObjCInterfaceDecl *Class, Selector Sel, const ObjCMethodDecl *Method) {\n  // ...\n  if (!ReturnType->isObjCObjectPointerType()) {\n    S.Diag(Loc, diag::err_objc_literal_method_sig) << Sel;"},{G,849,"ExprResult Sema::BuildObjCArrayLiteral(SourceRange SR, MultiExprArg Elements) {\n  // ...\n  if (!ArrayWithObjectsMethod) {\n    // ...\n    if (!PtrT || !Context.hasSameUnqualifiedType(PtrT->getPointeeType(), IdT)) {\n      Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"},{G,860,"ExprResult Sema::BuildObjCArrayLiteral(SourceRange SR, MultiExprArg Elements) {\n  // ...\n  if (!ArrayWithObjectsMethod) {\n    // ...\n    // Check that the \'count\' parameter is integral.\n    if (!Method->parameters()[1]->getType()->isIntegerType()) {\n      Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"},{G,1020,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  // ...\n  if (!DictionaryWithObjectsMethod) {\n    // ...\n    if (!PtrValue || !Context.hasSameUnqualifiedType(PtrValue->getPointeeType(), IdT)) {\n      Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"},{G,1054,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  // ...\n  if (!DictionaryWithObjectsMethod) {\n    // ...\n    if (!PtrKey || !Context.hasSameUnqualifiedType(PtrKey->getPointeeType(), IdT)) {\n      // ...\n      if (err) {\n        Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"},{G,1067,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  // ...\n  if (!DictionaryWithObjectsMethod) {\n    // ...\n    if (!CountType->isIntegerType()) {\n      Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"}},
[l]={
[l]={
["clang/test/SemaObjC/objc-literal-sig.m"]={"clang/test/SemaObjC/objc-literal-sig.m:45:9: error: literal construction method \'numberWithBool:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:46:9: error: literal construction method \'numberWithBool:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:47:14: error: literal construction method \'arrayWithObjects:count:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:48:15: error: literal construction method \'arrayWithObjects:count:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:49:13: error: literal construction method \'dictionaryWithObjects:forKeys:count:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:50:14: error: literal construction method \'dictionaryWithObjects:forKeys:count:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:51:12: error: literal construction method \'stringWithUTF8String:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:52:13: error: literal construction method \'stringWithUTF8String:\' has incompatible signature"}
["clang/test/SemaObjC/objc-literal-sig.m"]={"clang/test/SemaObjC/objc-literal-sig.m:45:9: error: literal construction method \'numberWithBool:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:46:9: error: literal construction method \'numberWithBool:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:47:14: error: literal construction method \'arrayWithObjects:count:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:48:15: error: literal construction method \'arrayWithObjects:count:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:49:13: error: literal construction method \'dictionaryWithObjects:forKeys:count:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:50:14: error: literal construction method \'dictionaryWithObjects:forKeys:count:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:51:12: error: literal construction method \'stringWithUTF8String:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:52:13: error: literal construction method \'stringWithUTF8String:\' has incompatible signature"}
Line 4,946: Line 4,947:
},
},
["err_objc_method_unsupported_param_ret_type"]={
["err_objc_method_unsupported_param_ret_type"]={
[i]={{nil,r,"err_objc_method_unsupported_param_ret_type"}},
[c]={{nil,r,"err_objc_method_unsupported_param_ret_type"}},
[h]={{nil,r,"%0 %select{parameter|return}1 type is unsupported; support for vector types for this target is introduced in %2"}},
[d]={{nil,r,"%0 %select{parameter|return}1 type is unsupported; support for vector types for this target is introduced in %2"}},
[g]={{nil,r,{"A ",{"parameter","return"}," type is unsupported; support for vector types for this target is introduced in C"}}},
[e]={{nil,r,{"A ",{"parameter","return"}," type is unsupported; support for vector types for this target is introduced in C"}}},
[b]=k,
[f]=k,
[e]="(.*?) (?:parameter|return) type is unsupported; support for vector types for this target is introduced in (.*?)",
[g]="(.*?) (?:parameter|return) type is unsupported; support for vector types for this target is introduced in (.*?)",
[d]=a,
[h]=a,
[f]={{nil,r,m}},
[i]={{nil,r,m}},
[c]={"a8a372d85e09",1493289828,"[ObjC] Disallow vector parameters and return values in Objective-C methods","[ObjC] Disallow vector parameters and return values in Objective-C methods\nfor iOS < 9 and OS X < 10.11 X86 targets\n\nThis commit adds a new error that disallows methods that have parameters/return\nvalues with a vector type for some older X86 targets. This diagnostic is\nneeded because objc_msgSend doesn\'t support SIMD vector registers/return values\non X86 in iOS < 9 and OS X < 10.11. Note that we don\'t necessarily know if the\nvector argument/return value will use a SIMD register, so instead we chose to\nbe conservative and prohibit all vector types.\n\nrdar://21662309\n\nDifferential Revision: https://reviews.llvm.org/D28670\n\nllvm-svn: 301532"},
[b]={"a8a372d85e09",1493289828,"[ObjC] Disallow vector parameters and return values in Objective-C methods","[ObjC] Disallow vector parameters and return values in Objective-C methods\nfor iOS < 9 and OS X < 10.11 X86 targets\n\nThis commit adds a new error that disallows methods that have parameters/return\nvalues with a vector type for some older X86 targets. This diagnostic is\nneeded because objc_msgSend doesn\'t support SIMD vector registers/return values\non X86 in iOS < 9 and OS X < 10.11. Note that we don\'t necessarily know if the\nvector argument/return value will use a SIMD register, so instead we chose to\nbe conservative and prohibit all vector types.\n\nrdar://21662309\n\nDifferential Revision: https://reviews.llvm.org/D28670\n\nllvm-svn: 301532"},
[j]={{Q,4660,"/// Verify that the method parameters/return value have types that are supported\n/// by the x86 target.\nstatic void checkObjCMethodX86VectorTypes(Sema &SemaRef, const ObjCMethodDecl *Method) {\n  // ...\n  SemaRef.Diag(Loc, diag::err_objc_method_unsupported_param_ret_type) << T << (Method->getReturnType()->isVectorType() ? /*return value*/ 1 : /*parameter*/ 0) << (Triple.isMacOSX() ? \"macOS 10.11\" : \"iOS 9\");"}},
[j]={{T,4660,"/// Verify that the method parameters/return value have types that are supported\n/// by the x86 target.\nstatic void checkObjCMethodX86VectorTypes(Sema &SemaRef, const ObjCMethodDecl *Method) {\n  // ...\n  SemaRef.Diag(Loc, diag::err_objc_method_unsupported_param_ret_type) << T << (Method->getReturnType()->isVectorType() ? /*return value*/ 1 : /*parameter*/ 0) << (Triple.isMacOSX() ? \"macOS 10.11\" : \"iOS 9\");"}},
[l]={
[l]={
["clang/test/SemaObjC/x86-method-vector-values.m"]={"clang/test/SemaObjC/x86-method-vector-values.m:40:20: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:48:3: error: \'float3\' (vector of 3 \'float\' values) return type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:51:21: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:54:21: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:57:21: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:60:21: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:63:4: error: \'__m128\' (vector of 4 \'float\' values) return type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:66:19: error: \'__m128\' (vector of 4 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9"}
["clang/test/SemaObjC/x86-method-vector-values.m"]={"clang/test/SemaObjC/x86-method-vector-values.m:40:20: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:48:3: error: \'float3\' (vector of 3 \'float\' values) return type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:51:21: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:54:21: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:57:21: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:60:21: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:63:4: error: \'__m128\' (vector of 4 \'float\' values) return type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:66:19: error: \'__m128\' (vector of 4 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9"}
Line 4,960: Line 4,961:
},
},
["err_objc_missing_end"]={
["err_objc_missing_end"]={
[i]="err_objc_missing_end",
[c]="err_objc_missing_end",
[h]="missing \'@end\'",
[d]="missing \'@end\'",
[e]="missing \'@end\'",
[f]=k,
[g]="missing \'@end\'",
[g]="missing \'@end\'",
[b]=k,
[h]=a,
[e]="missing \'@end\'",
[i]=y,
[d]=a,
[b]={J,1236199783,H,I},
[f]=y,
[c]={H,1236199783,I,G},
[j]={{N,201,"void Parser::CheckNestedObjCContexts(SourceLocation AtLoc) {\n  // ...\n  Diag(AtLoc, diag::err_objc_missing_end) << FixItHint::CreateInsertion(AtLoc, \"@end\\n\");"},{N,745,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n    // ...\n    case tok::objc_implementation:\n    case tok::objc_interface:\n      Diag(AtLoc, diag::err_objc_missing_end) << FixItHint::CreateInsertion(AtLoc, \"@end\\n\");"},{N,829,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  // We break out of the big loop in two cases: when we see @end or when we see\n  // EOF.  In the former case, eat the @end.  In the later case, emit an error.\n  if (Tok.is(tok::code_completion)) {\n  // ...\n  } else if (Tok.isObjCAtKeyword(tok::objc_end)) {\n  // ...\n  } else {\n    Diag(Tok, diag::err_objc_missing_end) << FixItHint::CreateInsertion(Tok.getLocation(), \"\\n@end\\n\");"},{N,2307,"Parser::ObjCImplParsingDataRAII::~ObjCImplParsingDataRAII() {\n  if (!Finished) {\n    // ...\n    if (P.isEofOrEom()) {\n      P.Diag(P.Tok, diag::err_objc_missing_end) << FixItHint::CreateInsertion(P.Tok.getLocation(), \"\\n@end\\n\");"}},
[j]={{N,201,"void Parser::CheckNestedObjCContexts(SourceLocation AtLoc) {\n  // ...\n  Diag(AtLoc, diag::err_objc_missing_end) << FixItHint::CreateInsertion(AtLoc, \"@end\\n\");"},{N,745,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n    // ...\n    case tok::objc_implementation:\n    case tok::objc_interface:\n      Diag(AtLoc, diag::err_objc_missing_end) << FixItHint::CreateInsertion(AtLoc, \"@end\\n\");"},{N,829,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  // We break out of the big loop in two cases: when we see @end or when we see\n  // EOF.  In the former case, eat the @end.  In the later case, emit an error.\n  if (Tok.is(tok::code_completion)) {\n  // ...\n  } else if (Tok.isObjCAtKeyword(tok::objc_end)) {\n  // ...\n  } else {\n    Diag(Tok, diag::err_objc_missing_end) << FixItHint::CreateInsertion(Tok.getLocation(), \"\\n@end\\n\");"},{N,2307,"Parser::ObjCImplParsingDataRAII::~ObjCImplParsingDataRAII() {\n  if (!Finished) {\n    // ...\n    if (P.isEofOrEom()) {\n      P.Diag(P.Tok, diag::err_objc_missing_end) << FixItHint::CreateInsertion(P.Tok.getLocation(), \"\\n@end\\n\");"}},
[l]={
[l]={
Line 4,974: Line 4,975:
},
},
["err_objc_multiple_subscript_type_conversion"]={
["err_objc_multiple_subscript_type_conversion"]={
[i]="err_objc_multiple_subscript_type_conversion",
[c]="err_objc_multiple_subscript_type_conversion",
[h]="indexing expression is invalid because subscript type %0 has multiple type conversion functions",
[d]="indexing expression is invalid because subscript type %0 has multiple type conversion functions",
[g]="indexing expression is invalid because subscript type A has multiple type conversion functions",
[e]="indexing expression is invalid because subscript type A has multiple type conversion functions",
[b]=k,
[f]=k,
[e]="indexing expression is invalid because subscript type (.*?) has multiple type conversion functions",
[g]="indexing expression is invalid because subscript type (.*?) has multiple type conversion functions",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={jb,1331064356,lb,kb},
[b]={jb,1331064356,kb,lb},
[j]={{P,1113,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  Diag(FromE->getExprLoc(), diag::err_objc_multiple_subscript_type_conversion) << FromE->getType();"}},
[j]={{P,1113,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  Diag(FromE->getExprLoc(), diag::err_objc_multiple_subscript_type_conversion) << FromE->getType();"}},
[l]={
[l]={
Line 4,988: Line 4,989:
},
},
["err_objc_non_runtime_protocol_in_protocol_expr"]={
["err_objc_non_runtime_protocol_in_protocol_expr"]={
[i]={{nil,C,"err_objc_non_runtime_protocol_in_protocol_expr"}},
[c]={{nil,D,"err_objc_non_runtime_protocol_in_protocol_expr"}},
[h]={{nil,C,"cannot use a protocol declared \'objc_non_runtime_protocol\' in a @protocol expression"}},
[d]={{nil,D,"cannot use a protocol declared \'objc_non_runtime_protocol\' in a @protocol expression"}},
[g]={{nil,C,"cannot use a protocol declared \'objc_non_runtime_protocol\' in a @protocol expression"}},
[e]={{nil,D,"cannot use a protocol declared \'objc_non_runtime_protocol\' in a @protocol expression"}},
[b]=k,
[f]=k,
[e]="cannot use a protocol declared \'objc_non_runtime_protocol\' in a @protocol expression",
[g]="cannot use a protocol declared \'objc_non_runtime_protocol\' in a @protocol expression",
[d]=a,
[h]=a,
[f]={{nil,C,m}},
[i]={{nil,D,m}},
[c]={vc,1582847864,yc,xc},
[b]={tc,1582847864,uc,vc},
[j]={{F,1397,"ExprResult Sema::ParseObjCProtocolExpression(IdentifierInfo *ProtocolId, SourceLocation AtLoc, SourceLocation ProtoLoc, SourceLocation LParenLoc, SourceLocation ProtoIdLoc, SourceLocation RParenLoc) {\n  // ...\n  if (PDecl->isNonRuntimeProtocol())\n    Diag(ProtoLoc, diag::err_objc_non_runtime_protocol_in_protocol_expr) << PDecl;"}}
[j]={{G,1397,"ExprResult Sema::ParseObjCProtocolExpression(IdentifierInfo *ProtocolId, SourceLocation AtLoc, SourceLocation ProtoLoc, SourceLocation LParenLoc, SourceLocation ProtoIdLoc, SourceLocation RParenLoc) {\n  // ...\n  if (PDecl->isNonRuntimeProtocol())\n    Diag(ProtoLoc, diag::err_objc_non_runtime_protocol_in_protocol_expr) << PDecl;"}}
},
},
["err_objc_non_trivially_copyable_boxed_expression_type"]={
["err_objc_non_trivially_copyable_boxed_expression_type"]={
[i]="err_objc_non_trivially_copyable_boxed_expression_type",
[c]="err_objc_non_trivially_copyable_boxed_expression_type",
[h]="non-trivially copyable type %0 cannot be used in a boxed expression",
[d]="non-trivially copyable type %0 cannot be used in a boxed expression",
[g]="non-trivially copyable type A cannot be used in a boxed expression",
[e]="non-trivially copyable type A cannot be used in a boxed expression",
[b]=k,
[f]=k,
[e]="non\\-trivially copyable type (.*?) cannot be used in a boxed expression",
[g]="non\\-trivially copyable type (.*?) cannot be used in a boxed expression",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"fde64956f95c",1435296516,"[ObjC] Add NSValue support for objc_boxed_expressions","[ObjC] Add NSValue support for objc_boxed_expressions\n\nPatch extends ObjCBoxedExpr to accept records (structs and unions):\n\ntypedef struct __attribute__((objc_boxable)) _Color {\n  int r, g, b;\n} Color;\n\nColor color;\nNSValue *boxedColor = @(color); // [NSValue valueWithBytes:&color objCType:@encode(Color)];\n\nllvm-svn: 240761"},
[b]={"fde64956f95c",1435296516,"[ObjC] Add NSValue support for objc_boxed_expressions","[ObjC] Add NSValue support for objc_boxed_expressions\n\nPatch extends ObjCBoxedExpr to accept records (structs and unions):\n\ntypedef struct __attribute__((objc_boxable)) _Color {\n  int r, g, b;\n} Color;\n\nColor color;\nNSValue *boxedColor = @(color); // [NSValue valueWithBytes:&color objCType:@encode(Color)];\n\nllvm-svn: 240761"},
[j]={{F,722,"ExprResult Sema::BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr) {\n  // ...\n  if (const PointerType *PT = ValueType->getAs<PointerType>()) {\n  // ...\n  } else if (ValueType->isBuiltinType()) {\n  // ...\n  } else if (const EnumType *ET = ValueType->getAs<EnumType>()) {\n  // ...\n  } else if (ValueType->isObjCBoxableRecordType()) {\n    // ...\n    if (!ValueType.isTriviallyCopyableType(Context)) {\n      Diag(Loc, diag::err_objc_non_trivially_copyable_boxed_expression_type) << ValueType << ValueExpr->getSourceRange();"}},
[j]={{G,722,"ExprResult Sema::BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr) {\n  // ...\n  if (const PointerType *PT = ValueType->getAs<PointerType>()) {\n  // ...\n  } else if (ValueType->isBuiltinType()) {\n  // ...\n  } else if (const EnumType *ET = ValueType->getAs<EnumType>()) {\n  // ...\n  } else if (ValueType->isObjCBoxableRecordType()) {\n    // ...\n    if (!ValueType.isTriviallyCopyableType(Context)) {\n      Diag(Loc, diag::err_objc_non_trivially_copyable_boxed_expression_type) << ValueType << ValueExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjCXX/objc-boxed-expressions-nsvalue.mm"]={"clang/test/SemaObjCXX/objc-boxed-expressions-nsvalue.mm:87:15: error: non-trivially copyable type \'NonTriviallyCopyable\' cannot be used in a boxed expression","clang/test/SemaObjCXX/objc-boxed-expressions-nsvalue.mm:112:68: error: non-trivially copyable type \'NonTriviallyCopyable\' cannot be used in a boxed expression","clang/test/SemaObjCXX/objc-boxed-expressions-nsvalue.mm:105:45: error: non-trivially copyable type \'NonTriviallyCopyable\' cannot be used in a boxed expression"}
["clang/test/SemaObjCXX/objc-boxed-expressions-nsvalue.mm"]={"clang/test/SemaObjCXX/objc-boxed-expressions-nsvalue.mm:87:15: error: non-trivially copyable type \'NonTriviallyCopyable\' cannot be used in a boxed expression","clang/test/SemaObjCXX/objc-boxed-expressions-nsvalue.mm:112:68: error: non-trivially copyable type \'NonTriviallyCopyable\' cannot be used in a boxed expression","clang/test/SemaObjCXX/objc-boxed-expressions-nsvalue.mm:105:45: error: non-trivially copyable type \'NonTriviallyCopyable\' cannot be used in a boxed expression"}
Line 5,013: Line 5,014:
},
},
["err_objc_ns_bridged_invalid_cfobject"]={
["err_objc_ns_bridged_invalid_cfobject"]={
[i]="err_objc_ns_bridged_invalid_cfobject",
[c]="err_objc_ns_bridged_invalid_cfobject",
[h]="ObjectiveC object of type %0 is bridged to %1, which is not valid CF object",
[d]="ObjectiveC object of type %0 is bridged to %1, which is not valid CF object",
[g]="ObjectiveC object of type A is bridged to B, which is not valid CF object",
[e]="ObjectiveC object of type A is bridged to B, which is not valid CF object",
[b]=k,
[f]=k,
[e]="ObjectiveC object of type (.*?) is bridged to (.*?), which is not valid CF object",
[g]="ObjectiveC object of type (.*?) is bridged to (.*?), which is not valid CF object",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"8a0210e535c5",1384629392,"ObjectiveC ARC. Validate toll free bridge casting","ObjectiveC ARC. Validate toll free bridge casting\nof ObjectiveC objects to CF types when CF type\nhas the objc_bridge attribute.\n\nllvm-svn: 194930"},
[b]={"8a0210e535c5",1384629392,"ObjectiveC ARC. Validate toll free bridge casting","ObjectiveC ARC. Validate toll free bridge casting\nof ObjectiveC objects to CF types when CF type\nhas the objc_bridge attribute.\n\nllvm-svn: 194930"},
[j]={{F,4121,"template <typename TB> static bool CheckObjCBridgeCFCast(Sema &S, QualType castType, Expr *castExpr, bool &HadTheAttribute, bool warn) {\n  // ...\n  while (const auto *TD = T->getAs<TypedefType>()) {\n    // ...\n    if (TB *ObjCBAttr = getObjCBridgeAttr<TB>(TD)) {\n      if (IdentifierInfo *Parm = ObjCBAttr->getBridgedType()) {\n        // ...\n        S.Diag(castExpr->getBeginLoc(), diag::err_objc_ns_bridged_invalid_cfobject) << castExpr->getType() << castType;"}}
[j]={{G,4121,"template <typename TB> static bool CheckObjCBridgeCFCast(Sema &S, QualType castType, Expr *castExpr, bool &HadTheAttribute, bool warn) {\n  // ...\n  while (const auto *TD = T->getAs<TypedefType>()) {\n    // ...\n    if (TB *ObjCBAttr = getObjCBridgeAttr<TB>(TD)) {\n      if (IdentifierInfo *Parm = ObjCBAttr->getBridgedType()) {\n        // ...\n        S.Diag(castExpr->getBeginLoc(), diag::err_objc_ns_bridged_invalid_cfobject) << castExpr->getType() << castType;"}}
},
},
["err_objc_object_assignment"]={
["err_objc_object_assignment"]={
[i]="err_objc_object_assignment",
[c]="err_objc_object_assignment",
[h]="cannot assign to class object (%0 invalid)",
[d]="cannot assign to class object (%0 invalid)",
[g]="cannot assign to class object (A invalid)",
[e]="cannot assign to class object (A invalid)",
[b]=k,
[f]=k,
[e]="cannot assign to class object \\((.*?) invalid\\)",
[g]="cannot assign to class object \\((.*?) invalid\\)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"3c4225a8581f",1327428345,"objc: issue error if assigning objects in fragile-abi too.","objc: issue error if assigning objects in fragile-abi too.\n// rdar://10731065\n\nllvm-svn: 148823"},
[b]={"3c4225a8581f",1327428345,"objc: issue error if assigning objects in fragile-abi too.","objc: issue error if assigning objects in fragile-abi too.\n// rdar://10731065\n\nllvm-svn: 148823"},
[j]={{V,14499,"// C99 6.5.16.1\nQualType Sema::CheckAssignmentOperands(Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType, BinaryOperatorKind Opc) {\n  // ...\n  if (CompoundType.isNull()) {\n    // ...\n    if (ConvTy == Compatible && LHSType->isObjCObjectType())\n      Diag(Loc, diag::err_objc_object_assignment) << LHSType;"}},
[j]={{W,14499,"// C99 6.5.16.1\nQualType Sema::CheckAssignmentOperands(Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType, BinaryOperatorKind Opc) {\n  // ...\n  if (CompoundType.isNull()) {\n    // ...\n    if (ConvTy == Compatible && LHSType->isObjCObjectType())\n      Diag(Loc, diag::err_objc_object_assignment) << LHSType;"}},
[l]={
[l]={
["clang/test/SemaObjCXX/fragile-abi-object-assign.m"]={"clang/test/SemaObjCXX/fragile-abi-object-assign.m:10:23: error: cannot assign to class object (\'MyView\' invalid)"}
["clang/test/SemaObjCXX/fragile-abi-object-assign.m"]={"clang/test/SemaObjCXX/fragile-abi-object-assign.m:10:23: error: cannot assign to class object (\'MyView\' invalid)"}
Line 5,038: Line 5,039:
},
},
["err_objc_object_catch"]={
["err_objc_object_catch"]={
[i]="err_objc_object_catch",
[c]="err_objc_object_catch",
[h]="cannot catch an Objective-C object by value",
[d]="cannot catch an Objective-C object by value",
[g]="cannot catch an Objective-C object by value",
[e]="cannot catch an Objective-C object by value",
[b]=k,
[f]=k,
[e]="cannot catch an Objective\\-C object by value",
[g]="cannot catch an Objective\\-C object by value",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"2ca705eb134f",1279931843,"Support catching Objective C pointers in C++ under the non-fragile NeXT runtime.","Support catching Objective C pointers in C++ under the non-fragile NeXT runtime.\nDiagnose attempts to do this under the GNU or fragile NeXT runtimes.\n\nllvm-svn: 109298"},
[b]={"2ca705eb134f",1279931843,"Support catching Objective C pointers in C++ under the non-fragile NeXT runtime.","Support catching Objective C pointers in C++ under the non-fragile NeXT runtime.\nDiagnose attempts to do this under the GNU or fragile NeXT runtimes.\n\nllvm-svn: 109298"},
[j]={{O,16673,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  // ...\n  // Only the non-fragile NeXT runtime currently supports C++ catches\n  // of ObjC types, and no runtime supports catching ObjC types by value.\n  if (!Invalid && getLangOpts().ObjC) {\n    // ...\n    if (T->isObjCObjectType()) {\n      Diag(Loc, diag::err_objc_object_catch);"}},
[j]={{Q,16673,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  // ...\n  // Only the non-fragile NeXT runtime currently supports C++ catches\n  // of ObjC types, and no runtime supports catching ObjC types by value.\n  if (!Invalid && getLangOpts().ObjC) {\n    // ...\n    if (T->isObjCObjectType()) {\n      Diag(Loc, diag::err_objc_object_catch);"}},
[l]={
[l]={
["clang/test/SemaObjCXX/exceptions.mm"]={"clang/test/SemaObjCXX/exceptions.mm:8:26: error: cannot catch an Objective-C object by value"}
["clang/test/SemaObjCXX/exceptions.mm"]={"clang/test/SemaObjCXX/exceptions.mm:8:26: error: cannot catch an Objective-C object by value"}
Line 5,052: Line 5,053:
},
},
["err_objc_override_direct_method"]={
["err_objc_override_direct_method"]={
[i]={{nil,n,"err_objc_override_direct_method"}},
[c]={{nil,n,"err_objc_override_direct_method"}},
[h]={{nil,n,"cannot override a method that is declared direct by a superclass"}},
[d]={{nil,n,"cannot override a method that is declared direct by a superclass"}},
[g]={{nil,n,"cannot override a method that is declared direct by a superclass"}},
[e]={{nil,n,"cannot override a method that is declared direct by a superclass"}},
[b]=k,
[f]=k,
[e]="cannot override a method that is declared direct by a superclass",
[g]="cannot override a method that is declared direct by a superclass",
[d]=a,
[h]=a,
[f]={{nil,n,m}},
[i]={{nil,n,m}},
[c]={ub,1573050950,sb,qb},
[b]={rb,1573050950,xb,ub},
[j]={{Q,4429,"void Sema::CheckObjCMethodDirectOverrides(ObjCMethodDecl *method, ObjCMethodDecl *overridden) {\n  if (overridden->isDirectMethod()) {\n    // ...\n    Diag(method->getLocation(), diag::err_objc_override_direct_method);"}},
[j]={{T,4429,"void Sema::CheckObjCMethodDirectOverrides(ObjCMethodDecl *method, ObjCMethodDecl *overridden) {\n  if (overridden->isDirectMethod()) {\n    // ...\n    Diag(method->getLocation(), diag::err_objc_override_direct_method);"}},
[l]={
[l]={
["clang/test/SemaObjC/method-direct-properties.m"]={"clang/test/SemaObjC/method-direct-properties.m:64:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:65:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:66:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:67:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:69:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:71:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:72:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:73:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:74:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:77:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:79:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:120:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:123:1: error: cannot override a method that is declared direct by a superclass"}
["clang/test/SemaObjC/method-direct-properties.m"]={"clang/test/SemaObjC/method-direct-properties.m:64:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:65:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:66:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:67:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:69:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:71:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:72:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:73:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:74:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:77:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:79:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:120:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:123:1: error: cannot override a method that is declared direct by a superclass"}
Line 5,066: Line 5,067:
},
},
["err_objc_parameterized_category_nonclass"]={
["err_objc_parameterized_category_nonclass"]={
[i]="err_objc_parameterized_category_nonclass",
[c]="err_objc_parameterized_category_nonclass",
[h]="%select{extension|category}0 of non-parameterized class %1 cannot have type parameters",
[d]="%select{extension|category}0 of non-parameterized class %1 cannot have type parameters",
[g]={{nil,nil,{{"extension","category"}," of non-parameterized class B cannot have type parameters"}}},
[e]={{nil,nil,{{"extension","category"}," of non-parameterized class B cannot have type parameters"}}},
[b]=k,
[f]=k,
[e]="(?:extension|category) of non\\-parameterized class (.*?) cannot have type parameters",
[g]="(?:extension|category) of non\\-parameterized class (.*?) cannot have type parameters",
[d]=a,
[h]=a,
[f]=mc,
[i]=sc,
[c]={oc,1436241435,lc,tc},
[b]={rc,1436241435,qc,xc},
[j]={{Q,1877,"ObjCCategoryDecl *Sema::ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *CategoryName, SourceLocation CategoryLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList) {\n  // ...\n  // If we have a type parameter list, check it.\n  if (typeParamList) {\n    if (auto prevTypeParamList = IDecl->getTypeParamList()) {\n    // ...\n    } else {\n      Diag(typeParamList->getLAngleLoc(), diag::err_objc_parameterized_category_nonclass) << (CategoryName != nullptr) << ClassName << typeParamList->getSourceRange();"}},
[j]={{T,1877,"ObjCCategoryDecl *Sema::ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *CategoryName, SourceLocation CategoryLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList) {\n  // ...\n  // If we have a type parameter list, check it.\n  if (typeParamList) {\n    if (auto prevTypeParamList = IDecl->getTypeParamList()) {\n    // ...\n    } else {\n      Diag(typeParamList->getLAngleLoc(), diag::err_objc_parameterized_category_nonclass) << (CategoryName != nullptr) << ClassName << typeParamList->getSourceRange();"}},
[l]={
[l]={
[pc]={"clang/test/SemaObjC/parameterized_classes.m:156:20: error: category of non-parameterized class \'NSObject\' cannot have type parameters","clang/test/SemaObjC/parameterized_classes.m:159:20: error: extension of non-parameterized class \'NSObject\' cannot have type parameters"}
[oc]={"clang/test/SemaObjC/parameterized_classes.m:156:20: error: category of non-parameterized class \'NSObject\' cannot have type parameters","clang/test/SemaObjC/parameterized_classes.m:159:20: error: extension of non-parameterized class \'NSObject\' cannot have type parameters"}
}
}
},
},
["err_objc_parameterized_forward_class"]={
["err_objc_parameterized_forward_class"]={
[i]="err_objc_parameterized_forward_class",
[c]="err_objc_parameterized_forward_class",
[h]="forward declaration of non-parameterized class %0 cannot have type parameters",
[d]="forward declaration of non-parameterized class %0 cannot have type parameters",
[g]="forward declaration of non-parameterized class A cannot have type parameters",
[e]="forward declaration of non-parameterized class A cannot have type parameters",
[b]=k,
[f]=k,
[e]="forward declaration of non\\-parameterized class (.*?) cannot have type parameters",
[g]="forward declaration of non\\-parameterized class (.*?) cannot have type parameters",
[d]=a,
[h]=a,
[f]=mc,
[i]=sc,
[c]={oc,1436241435,lc,tc},
[b]={rc,1436241435,qc,xc},
[j]={{Q,3132,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n  // ...\n  for (unsigned i = 0; i != NumElts; ++i) {\n    // ...\n    if (PrevIDecl && TypeParams) {\n      if (ObjCTypeParamList *PrevTypeParams = PrevIDecl->getTypeParamList()) {\n      // ...\n      } else if (ObjCInterfaceDecl *Def = PrevIDecl->getDefinition()) {\n        // ...\n        Diag(IdentLocs[i], diag::err_objc_parameterized_forward_class) << ClassName << TypeParams->getSourceRange();"}},
[j]={{T,3132,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n  // ...\n  for (unsigned i = 0; i != NumElts; ++i) {\n    // ...\n    if (PrevIDecl && TypeParams) {\n      if (ObjCTypeParamList *PrevTypeParams = PrevIDecl->getTypeParamList()) {\n      // ...\n      } else if (ObjCInterfaceDecl *Def = PrevIDecl->getDefinition()) {\n        // ...\n        Diag(IdentLocs[i], diag::err_objc_parameterized_forward_class) << ClassName << TypeParams->getSourceRange();"}},
[l]={
[l]={
[pc]={"clang/test/SemaObjC/parameterized_classes.m:106:8: error: forward declaration of non-parameterized class \'NSObject\' cannot have type parameters"}
[oc]={"clang/test/SemaObjC/parameterized_classes.m:106:8: error: forward declaration of non-parameterized class \'NSObject\' cannot have type parameters"}
}
}
},
},
["err_objc_parameterized_forward_class_first"]={
["err_objc_parameterized_forward_class_first"]={
[i]="err_objc_parameterized_forward_class_first",
[c]="err_objc_parameterized_forward_class_first",
[h]="class %0 previously declared with type parameters",
[d]="class %0 previously declared with type parameters",
[g]="class A previously declared with type parameters",
[e]="class A previously declared with type parameters",
[b]=k,
[f]=k,
[e]="class (.*?) previously declared with type parameters",
[g]="class (.*?) previously declared with type parameters",
[d]=a,
[h]=a,
[f]=mc,
[i]=sc,
[c]={oc,1436241435,lc,tc},
[b]={rc,1436241435,qc,xc},
[j]={{Q,1026,"ObjCInterfaceDecl *Sema::ActOnStartClassInterface(Scope *S, SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList, SkipBodyInfo *SkipBody) {\n  // ...\n  // If there was a forward declaration with type parameters, check\n  // for consistency.\n  if (PrevIDecl) {\n    if (ObjCTypeParamList *prevTypeParamList = PrevIDecl->getTypeParamList()) {\n      if (typeParamList) {\n      // ...\n      } else {\n        Diag(ClassLoc, diag::err_objc_parameterized_forward_class_first) << ClassName;"}},
[j]={{T,1026,"ObjCInterfaceDecl *Sema::ActOnStartClassInterface(Scope *S, SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList, SkipBodyInfo *SkipBody) {\n  // ...\n  // If there was a forward declaration with type parameters, check\n  // for consistency.\n  if (PrevIDecl) {\n    if (ObjCTypeParamList *prevTypeParamList = PrevIDecl->getTypeParamList()) {\n      if (typeParamList) {\n      // ...\n      } else {\n        Diag(ClassLoc, diag::err_objc_parameterized_forward_class_first) << ClassName;"}},
[l]={
[l]={
[pc]={"clang/test/SemaObjC/parameterized_classes.m:112:12: error: class \'NSNumber\' previously declared with type parameters"}
[oc]={"clang/test/SemaObjC/parameterized_classes.m:112:12: error: class \'NSNumber\' previously declared with type parameters"}
}
}
},
},
["err_objc_parameterized_implementation"]={
["err_objc_parameterized_implementation"]={
[i]="err_objc_parameterized_implementation",
[c]="err_objc_parameterized_implementation",
[h]="@implementation cannot have type parameters",
[d]="@implementation cannot have type parameters",
[e]="@implementation cannot have type parameters",
[f]=k,
[g]="@implementation cannot have type parameters",
[g]="@implementation cannot have type parameters",
[b]=k,
[h]=a,
[e]="@implementation cannot have type parameters",
[i]=sc,
[d]=a,
[b]={rc,1436241435,qc,xc},
[f]=mc,
[c]={oc,1436241435,lc,tc},
[j]={{N,2192,"///  objc-implementation:\n///    objc-class-implementation-prologue\n///    objc-category-implementation-prologue\n///\n///  objc-class-implementation-prologue:\n///    @implementation identifier objc-superclass[opt]\n///      objc-class-instance-variables[opt]\n///\n///  objc-category-implementation-prologue:\n///    @implementation identifier ( identifier )\nParser::DeclGroupPtrTy Parser::ParseObjCAtImplementationDeclaration(SourceLocation AtLoc, ParsedAttributes &Attrs) {\n  // ...\n  // Neither a type parameter list nor a list of protocol references is\n  // permitted here. Parse and diagnose them.\n  if (Tok.is(tok::less)) {\n    // ...\n    if (parseObjCTypeParamListOrProtocolRefs(typeParamScope, lAngleLoc, protocolIdents, rAngleLoc)) {\n      Diag(diagLoc, diag::err_objc_parameterized_implementation) << SourceRange(diagLoc, PrevTokLocation);"}},
[j]={{N,2192,"///  objc-implementation:\n///    objc-class-implementation-prologue\n///    objc-category-implementation-prologue\n///\n///  objc-class-implementation-prologue:\n///    @implementation identifier objc-superclass[opt]\n///      objc-class-instance-variables[opt]\n///\n///  objc-category-implementation-prologue:\n///    @implementation identifier ( identifier )\nParser::DeclGroupPtrTy Parser::ParseObjCAtImplementationDeclaration(SourceLocation AtLoc, ParsedAttributes &Attrs) {\n  // ...\n  // Neither a type parameter list nor a list of protocol references is\n  // permitted here. Parse and diagnose them.\n  if (Tok.is(tok::less)) {\n    // ...\n    if (parseObjCTypeParamListOrProtocolRefs(typeParamScope, lAngleLoc, protocolIdents, rAngleLoc)) {\n      Diag(diagLoc, diag::err_objc_parameterized_implementation) << SourceRange(diagLoc, PrevTokLocation);"}},
[l]={
[l]={
[pc]={"clang/test/SemaObjC/parameterized_classes.m:165:20: error: @implementation cannot have type parameters","clang/test/SemaObjC/parameterized_classes.m:171:20: error: @implementation cannot have type parameters","clang/test/SemaObjC/parameterized_classes.m:174:20: error: @implementation cannot have type parameters"}
[oc]={"clang/test/SemaObjC/parameterized_classes.m:165:20: error: @implementation cannot have type parameters","clang/test/SemaObjC/parameterized_classes.m:171:20: error: @implementation cannot have type parameters","clang/test/SemaObjC/parameterized_classes.m:174:20: error: @implementation cannot have type parameters"}
}
}
},
},
["err_objc_postfix_attribute"]={
["err_objc_postfix_attribute"]={
[i]="err_objc_postfix_attribute",
[c]="err_objc_postfix_attribute",
[h]="postfix attributes are not allowed on Objective-C directives",
[d]="postfix attributes are not allowed on Objective-C directives",
[g]="postfix attributes are not allowed on Objective-C directives",
[e]="postfix attributes are not allowed on Objective-C directives",
[b]=k,
[f]=k,
[e]="postfix attributes are not allowed on Objective\\-C directives",
[g]="postfix attributes are not allowed on Objective\\-C directives",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"04e213b6b6fb",1365010571,"Emit a nicer diagnostic for misplaced attributes on ObjC directives.","Emit a nicer diagnostic for misplaced attributes on ObjC directives.\n\nllvm-svn: 178670"},
[b]={"04e213b6b6fb",1365010571,"Emit a nicer diagnostic for misplaced attributes on ObjC directives.","Emit a nicer diagnostic for misplaced attributes on ObjC directives.\n\nllvm-svn: 178670"},
[j]={{N,37,"/// Skips attributes after an Objective-C @ directive. Emits a diagnostic.\nvoid Parser::MaybeSkipAttributes(tok::ObjCKeywordKind Kind) {\n  // ...\n  if (Tok.is(tok::kw___attribute)) {\n    if (Kind == tok::objc_interface || Kind == tok::objc_protocol)\n    // ...\n    else\n      Diag(Tok, diag::err_objc_postfix_attribute);"}},
[j]={{N,37,"/// Skips attributes after an Objective-C @ directive. Emits a diagnostic.\nvoid Parser::MaybeSkipAttributes(tok::ObjCKeywordKind Kind) {\n  // ...\n  if (Tok.is(tok::kw___attribute)) {\n    if (Kind == tok::objc_interface || Kind == tok::objc_protocol)\n    // ...\n    else\n      Diag(Tok, diag::err_objc_postfix_attribute);"}},
[l]={
[l]={
Line 5,136: Line 5,137:
},
},
["err_objc_postfix_attribute_hint"]={
["err_objc_postfix_attribute_hint"]={
[i]="err_objc_postfix_attribute_hint",
[c]="err_objc_postfix_attribute_hint",
[h]="postfix attributes are not allowed on Objective-C directives, place them in front of \'%select{@interface|@protocol}0\'",
[d]="postfix attributes are not allowed on Objective-C directives, place them in front of \'%select{@interface|@protocol}0\'",
[g]={{nil,nil,{"postfix attributes are not allowed on Objective-C directives, place them in front of \'",{"@interface","@protocol"},"\'"}}},
[e]={{nil,nil,{"postfix attributes are not allowed on Objective-C directives, place them in front of \'",{"@interface","@protocol"},"\'"}}},
[b]=k,
[f]=k,
[e]="postfix attributes are not allowed on Objective\\-C directives, place them in front of \'(?:@interface|@protocol)\'",
[g]="postfix attributes are not allowed on Objective\\-C directives, place them in front of \'(?:@interface|@protocol)\'",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={"69a7914fec81",1365034510,"Make the ObjC attributes diagnostics a bit more informative.","Make the ObjC attributes diagnostics a bit more informative.\n\nllvm-svn: 178720"},
[b]={"69a7914fec81",1365034510,"Make the ObjC attributes diagnostics a bit more informative.","Make the ObjC attributes diagnostics a bit more informative.\n\nllvm-svn: 178720"},
[j]={{N,34,"/// Skips attributes after an Objective-C @ directive. Emits a diagnostic.\nvoid Parser::MaybeSkipAttributes(tok::ObjCKeywordKind Kind) {\n  // ...\n  if (Tok.is(tok::kw___attribute)) {\n    if (Kind == tok::objc_interface || Kind == tok::objc_protocol)\n      Diag(Tok, diag::err_objc_postfix_attribute_hint) << (Kind == tok::objc_protocol);"}},
[j]={{N,34,"/// Skips attributes after an Objective-C @ directive. Emits a diagnostic.\nvoid Parser::MaybeSkipAttributes(tok::ObjCKeywordKind Kind) {\n  // ...\n  if (Tok.is(tok::kw___attribute)) {\n    if (Kind == tok::objc_interface || Kind == tok::objc_protocol)\n      Diag(Tok, diag::err_objc_postfix_attribute_hint) << (Kind == tok::objc_protocol);"}},
[l]={
[l]={
Line 5,150: Line 5,151:
},
},
["err_objc_precise_lifetime_bad_type"]={
["err_objc_precise_lifetime_bad_type"]={
[i]="err_objc_precise_lifetime_bad_type",
[c]="err_objc_precise_lifetime_bad_type",
[h]="objc_precise_lifetime only applies to retainable types; type here is %0",
[d]="objc_precise_lifetime only applies to retainable types; type here is %0",
[g]="objc_precise_lifetime only applies to retainable types; type here is A",
[e]="objc_precise_lifetime only applies to retainable types; type here is A",
[b]=k,
[f]=k,
[e]="objc_precise_lifetime only applies to retainable types; type here is (.*?)",
[g]="objc_precise_lifetime only applies to retainable types; type here is (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"31168b077c36",1308178962,"Automatic Reference Counting.","Automatic Reference Counting.\n\nLanguage-design credit goes to a lot of people, but I particularly want\nto single out Blaine Garst and Patrick Beard for their contributions.\n\nCompiler implementation credit goes to Argyrios, Doug, Fariborz, and myself,\nin no particular order.\n\nllvm-svn: 133103"},
[b]={"31168b077c36",1308178962,"Automatic Reference Counting.","Automatic Reference Counting.\n\nLanguage-design credit goes to a lot of people, but I particularly want\nto single out Blaine Garst and Patrick Beard for their contributions.\n\nCompiler implementation credit goes to Argyrios, Doug, Fariborz, and myself,\nin no particular order.\n\nllvm-svn: 133103"},
[j]={{K,6301,"static void handleObjCPreciseLifetimeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!QT->isDependentType() && !QT->isObjCLifetimeType()) {\n    S.Diag(AL.getLoc(), diag::err_objc_precise_lifetime_bad_type) << QT;"}}
[j]={{K,6301,"static void handleObjCPreciseLifetimeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!QT->isDependentType() && !QT->isObjCLifetimeType()) {\n    S.Diag(AL.getLoc(), diag::err_objc_precise_lifetime_bad_type) << QT;"}}
},
},
["err_objc_property_attr_mutually_exclusive"]={
["err_objc_property_attr_mutually_exclusive"]={
[i]="err_objc_property_attr_mutually_exclusive",
[c]="err_objc_property_attr_mutually_exclusive",
[h]="property attributes \'%0\' and \'%1\' are mutually exclusive",
[d]="property attributes \'%0\' and \'%1\' are mutually exclusive",
[g]="property attributes \'A\' and \'B\' are mutually exclusive",
[e]="property attributes \'A\' and \'B\' are mutually exclusive",
[b]=k,
[f]=k,
[e]="property attributes \'(.*?)\' and \'(.*?)\' are mutually exclusive",
[g]="property attributes \'(.*?)\' and \'(.*?)\' are mutually exclusive",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={H,1236199783,I,G},
[b]={J,1236199783,H,I},
[j]={{"clang/lib/ARCMigrate/TransGCAttrs.cpp",290,"static void checkAllAtProps(MigrationContext &MigrateCtx, SourceLocation AtLoc, IndivPropsTy &IndProps) {\n  // ...\n  for (unsigned i = 0, e = ATLs.size(); i != e; ++i) {\n    // ...\n    TA.clearDiagnostic(diag::err_objc_property_attr_mutually_exclusive, AtLoc);"},{L,2644,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  if ((Attributes & ObjCPropertyAttribute::kind_readonly) && (Attributes & ObjCPropertyAttribute::kind_readwrite))\n    Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"readonly\""},{L,2681,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    if (Attributes & ObjCPropertyAttribute::kind_copy) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"assign\""},{L,2686,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_retain) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"assign\""},{L,2691,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_strong) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"assign\""},{L,2697,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    // ...\n    if (getLangOpts().ObjCAutoRefCount && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"assign\""},{L,2705,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n    if (Attributes & ObjCPropertyAttribute::kind_copy) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"unsafe_unretained\""},{L,2710,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_retain) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"unsafe_unretained\""},{L,2715,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_strong) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"unsafe_unretained\""},{L,2721,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n    // ...\n    if (getLangOpts().ObjCAutoRefCount && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"unsafe_unretained\""},{L,2727,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n    if (Attributes & ObjCPropertyAttribute::kind_retain) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"copy\""},{L,2732,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_strong) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"copy\""},{L,2737,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_weak) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"copy\""},{L,2743,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n  // ...\n  } else if ((Attributes & ObjCPropertyAttribute::kind_retain) && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n    Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"retain\""},{L,2748,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n  // ...\n  } else if ((Attributes & ObjCPropertyAttribute::kind_retain) && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n  // ...\n  } else if ((Attributes & ObjCPropertyAttribute::kind_strong) && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n    Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"strong\""},{L,2757,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  if (Attributes & ObjCPropertyAttribute::kind_weak) {\n    // \'weak\' and \'nonnull\' are mutually exclusive.\n    if (auto nullability = PropertyTy->getNullability()) {\n      if (*nullability == NullabilityKind::NonNull)\n        Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"nonnull\""},{L,2764,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  if ((Attributes & ObjCPropertyAttribute::kind_atomic) && (Attributes & ObjCPropertyAttribute::kind_nonatomic)) {\n    Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"atomic\""}},
[j]={{"clang/lib/ARCMigrate/TransGCAttrs.cpp",290,"static void checkAllAtProps(MigrationContext &MigrateCtx, SourceLocation AtLoc, IndivPropsTy &IndProps) {\n  // ...\n  for (unsigned i = 0, e = ATLs.size(); i != e; ++i) {\n    // ...\n    TA.clearDiagnostic(diag::err_objc_property_attr_mutually_exclusive, AtLoc);"},{M,2644,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  if ((Attributes & ObjCPropertyAttribute::kind_readonly) && (Attributes & ObjCPropertyAttribute::kind_readwrite))\n    Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"readonly\""},{M,2681,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    if (Attributes & ObjCPropertyAttribute::kind_copy) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"assign\""},{M,2686,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_retain) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"assign\""},{M,2691,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_strong) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"assign\""},{M,2697,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    // ...\n    if (getLangOpts().ObjCAutoRefCount && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"assign\""},{M,2705,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n    if (Attributes & ObjCPropertyAttribute::kind_copy) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"unsafe_unretained\""},{M,2710,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_retain) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"unsafe_unretained\""},{M,2715,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_strong) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"unsafe_unretained\""},{M,2721,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n    // ...\n    if (getLangOpts().ObjCAutoRefCount && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"unsafe_unretained\""},{M,2727,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n    if (Attributes & ObjCPropertyAttribute::kind_retain) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"copy\""},{M,2732,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_strong) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"copy\""},{M,2737,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_weak) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"copy\""},{M,2743,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n  // ...\n  } else if ((Attributes & ObjCPropertyAttribute::kind_retain) && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n    Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"retain\""},{M,2748,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n  // ...\n  } else if ((Attributes & ObjCPropertyAttribute::kind_retain) && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n  // ...\n  } else if ((Attributes & ObjCPropertyAttribute::kind_strong) && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n    Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"strong\""},{M,2757,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  if (Attributes & ObjCPropertyAttribute::kind_weak) {\n    // \'weak\' and \'nonnull\' are mutually exclusive.\n    if (auto nullability = PropertyTy->getNullability()) {\n      if (*nullability == NullabilityKind::NonNull)\n        Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"nonnull\""},{M,2764,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  if ((Attributes & ObjCPropertyAttribute::kind_atomic) && (Attributes & ObjCPropertyAttribute::kind_nonatomic)) {\n    Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"atomic\""}},
[l]={
[l]={
["clang/test/SemaObjC/weak-property.m"]={"clang/test/SemaObjC/weak-property.m:13:1: error: property attributes \'assign\' and \'weak\' are mutually exclusive","clang/test/SemaObjC/weak-property.m:14:1: error: property attributes \'copy\' and \'weak\' are mutually exclusive","clang/test/SemaObjC/weak-property.m:15:1: error: property attributes \'retain\' and \'weak\' are mutually exclusive","clang/test/SemaObjC/weak-property.m:16:1: error: property attributes \'assign\' and \'weak\' are mutually exclusive"}
["clang/test/SemaObjC/weak-property.m"]={"clang/test/SemaObjC/weak-property.m:13:1: error: property attributes \'assign\' and \'weak\' are mutually exclusive","clang/test/SemaObjC/weak-property.m:14:1: error: property attributes \'copy\' and \'weak\' are mutually exclusive","clang/test/SemaObjC/weak-property.m:15:1: error: property attributes \'retain\' and \'weak\' are mutually exclusive","clang/test/SemaObjC/weak-property.m:16:1: error: property attributes \'assign\' and \'weak\' are mutually exclusive"}
Line 5,175: Line 5,176:
},
},
["err_objc_property_bitfield"]={
["err_objc_property_bitfield"]={
[i]="err_objc_property_bitfield",
[c]="err_objc_property_bitfield",
[h]="property name cannot be a bit-field",
[d]="property name cannot be a bit-field",
[g]="property name cannot be a bit-field",
[e]="property name cannot be a bit-field",
[b]=k,
[f]=k,
[e]="property name cannot be a bit\\-field",
[g]="property name cannot be a bit\\-field",
[d]=a,
[h]=a,
[f]=y,
[i]=y,
[c]={H,1236199783,I,G},
[b]={J,1236199783,H,I},
[j]={{N,778,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n    // ...\n    case tok::objc_property:\n      // ...\n      auto ObjCPropertyCallback = [&](ParsingFieldDeclarator &FD) {\n        // ...\n        if (FD.BitfieldSize) {\n          Diag(AtLoc, diag::err_objc_property_bitfield) << FD.D.getSourceRange();"}},
[j]={{N,778,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n    // ...\n    case tok::objc_property:\n      // ...\n      auto ObjCPropertyCallback = [&](ParsingFieldDeclarator &FD) {\n        // ...\n        if (FD.BitfieldSize) {\n          Diag(AtLoc, diag::err_objc_property_bitfield) << FD.D.getSourceRange();"}},
[l]={
[l]={
Line 5,189: Line 5,190:
},
},
["err_objc_property_requires_field_name"]={
["err_objc_property_requires_field_name"]={
[i]="err_objc_property_requires_field_name",
[c]="err_objc_property_requires_field_name",
[h]="property requires fields to be named",
[d]="property requires fields to be named",
[e]="property requires fields to be named",
[f]=k,
[g]="property requires fields to be named",
[g]="property requires fields to be named",
[b]=k,
[h]=a,
[e]="property requires fields to be named",
[i]=y,
[d]=a,
[b]={J,1236199783,H,I},
[f]=y,
[c]={H,1236199783,I,G},
[j]={{N,773,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n    // ...\n    case tok::objc_property:\n      // ...\n      auto ObjCPropertyCallback = [&](ParsingFieldDeclarator &FD) {\n        if (FD.D.getIdentifier() == nullptr) {\n          Diag(AtLoc, diag::err_objc_property_requires_field_name) << FD.D.getSourceRange();"}},
[j]={{N,773,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n    // ...\n    case tok::objc_property:\n      // ...\n      auto ObjCPropertyCallback = [&](ParsingFieldDeclarator &FD) {\n        if (FD.D.getIdentifier() == nullptr) {\n          Diag(AtLoc, diag::err_objc_property_requires_field_name) << FD.D.getSourceRange();"}},
[l]={
[l]={
Line 5,203: Line 5,204:
},
},
["err_objc_property_requires_object"]={
["err_objc_property_requires_object"]={
[i]="err_objc_property_requires_object",
[c]="err_objc_property_requires_object",
[h]="property with \'%0\' attribute must be of object type",
[d]="property with \'%0\' attribute must be of object type",
[g]="property with \'A\' attribute must be of object type",
[e]="property with \'A\' attribute must be of object type",
[b]=k,
[f]=k,
[e]="property with \'(.*?)\' attribute must be of object type",
[g]="property with \'(.*?)\' attribute must be of object type",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={H,1236199783,I,G},
[b]={J,1236199783,H,I},
[j]={{L,2657,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for copy or retain on non-object types.\n  if ((Attributes & (ObjCPropertyAttribute::kind_weak | ObjCPropertyAttribute::kind_copy | ObjCPropertyAttribute::kind_retain | ObjCPropertyAttribute::kind_strong)) && !PropertyTy->isObjCRetainableType() && !PropertyDecl->hasAttr<ObjCNSObjectAttr>()) {\n    Diag(Loc, diag::err_objc_property_requires_object) << (Attributes & ObjCPropertyAttribute::kind_weak ? \"weak\" : Attributes & ObjCPropertyAttribute::kind_copy ? \"copy\" : \"retain (or strong)\");"}},
[j]={{M,2657,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for copy or retain on non-object types.\n  if ((Attributes & (ObjCPropertyAttribute::kind_weak | ObjCPropertyAttribute::kind_copy | ObjCPropertyAttribute::kind_retain | ObjCPropertyAttribute::kind_strong)) && !PropertyTy->isObjCRetainableType() && !PropertyDecl->hasAttr<ObjCNSObjectAttr>()) {\n    Diag(Loc, diag::err_objc_property_requires_object) << (Attributes & ObjCPropertyAttribute::kind_weak ? \"weak\" : Attributes & ObjCPropertyAttribute::kind_copy ? \"copy\" : \"retain (or strong)\");"}},
[l]={
[l]={
["clang/test/SemaObjC/property-10.m"]={"clang/test/SemaObjC/property-10.m:8:1: error: property with \'retain (or strong)\' attribute must be of object type","clang/test/SemaObjC/property-10.m:9:1: error: property with \'retain (or strong)\' attribute must be of object type","clang/test/SemaObjC/property-10.m:11:1: error: property with \'copy\' attribute must be of object type","clang/test/SemaObjC/property-10.m:30:1: error: property with \'copy\' attribute must be of object type","clang/test/SemaObjC/property-10.m:35:1: error: property with \'retain (or strong)\' attribute must be of object type","clang/test/SemaObjC/property-10.m:36:1: error: property with \'retain (or strong)\' attribute must be of object type","clang/test/SemaObjC/property-10.m:37:1: error: property with \'copy\' attribute must be of object type","clang/test/SemaObjC/property-10.m:38:1: error: property with \'weak\' attribute must be of object type"}
["clang/test/SemaObjC/property-10.m"]={"clang/test/SemaObjC/property-10.m:8:1: error: property with \'retain (or strong)\' attribute must be of object type","clang/test/SemaObjC/property-10.m:9:1: error: property with \'retain (or strong)\' attribute must be of object type","clang/test/SemaObjC/property-10.m:11:1: error: property with \'copy\' attribute must be of object type","clang/test/SemaObjC/property-10.m:30:1: error: property with \'copy\' attribute must be of object type","clang/test/SemaObjC/property-10.m:35:1: error: property with \'retain (or strong)\' attribute must be of object type","clang/test/SemaObjC/property-10.m:36:1: error: property with \'retain (or strong)\' attribute must be of object type","clang/test/SemaObjC/property-10.m:37:1: error: property with \'copy\' attribute must be of object type","clang/test/SemaObjC/property-10.m:38:1: error: property with \'weak\' attribute must be of object type"}
Line 5,217: Line 5,218:
},
},
["err_objc_root_class_subclass"]={
["err_objc_root_class_subclass"]={
[i]="err_objc_root_class_subclass",
[c]="err_objc_root_class_subclass",
[h]="objc_root_class attribute may only be specified on a root class declaration",
[d]="objc_root_class attribute may only be specified on a root class declaration",
[e]="objc_root_class attribute may only be specified on a root class declaration",
[f]=k,
[g]="objc_root_class attribute may only be specified on a root class declaration",
[g]="objc_root_class attribute may only be specified on a root class declaration",
[b]=k,
[h]=a,
[e]="objc_root_class attribute may only be specified on a root class declaration",
[i]=m,
[d]=a,
[b]={"acfbe9e1f228",1333735942,"Added a new attribute, objc_root_class, which informs the compiler when a root class is intentionall...","Added a new attribute, objc_root_class, which informs the compiler when a root class is intentionally declared.\nThe warning this inhibits, -Wobjc-root-class, is opt-in for now. However, all clang unit tests that would trigger\nthe warning have been updated to use -Wno-objc-root-class. <rdar://problem/7446698>\n\nllvm-svn: 154187"},
[f]=m,
[j]={{T,4155,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    // ...\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      // ...\n      if (IDecl->getSuperClass() == nullptr) {\n      // ...\n      } else if (HasRootClassAttr) {\n        // ...\n        Diag(IDecl->getLocation(), diag::err_objc_root_class_subclass);"}},
[c]={"acfbe9e1f228",1333735942,"Added a new attribute, objc_root_class, which informs the compiler when a root class is intentionall...","Added a new attribute, objc_root_class, which informs the compiler when a root class is intentionally declared.\nThe warning this inhibits, -Wobjc-root-class, is opt-in for now. However, all clang unit tests that would trigger\nthe warning have been updated to use -Wno-objc-root-class. <rdar://problem/7446698>\n\nllvm-svn: 154187"},
[j]={{Q,4155,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    // ...\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      // ...\n      if (IDecl->getSuperClass() == nullptr) {\n      // ...\n      } else if (HasRootClassAttr) {\n        // ...\n        Diag(IDecl->getLocation(), diag::err_objc_root_class_subclass);"}},
[l]={
[l]={
["clang/test/SemaObjC/attr-root-class.m"]={"clang/test/SemaObjC/attr-root-class.m:9:12: error: objc_root_class attribute may only be specified on a root class declaration"}
["clang/test/SemaObjC/attr-root-class.m"]={"clang/test/SemaObjC/attr-root-class.m:9:12: error: objc_root_class attribute may only be specified on a root class declaration"}
Line 5,231: Line 5,232:
},
},
["err_objc_runtime_visible_category"]={
["err_objc_runtime_visible_category"]={
[i]="err_objc_runtime_visible_category",
[c]="err_objc_runtime_visible_category",
[h]="cannot implement a category for class %0 that is only visible via the Objective-C runtime",
[d]="cannot implement a category for class %0 that is only visible via the Objective-C runtime",
[g]="cannot implement a category for class A that is only visible via the Objective-C runtime",
[e]="cannot implement a category for class A that is only visible via the Objective-C runtime",
[b]=k,
[f]=k,
[e]="cannot implement a category for class (.*?) that is only visible via the Objective\\-C runtime",
[g]="cannot implement a category for class (.*?) that is only visible via the Objective\\-C runtime",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"24ae22c04796",1459553032,"[Objective-C] Introduce objc_runtime_visible attribute.","[Objective-C] Introduce objc_runtime_visible attribute.\n\nThe objc_runtime_visible attribute deals with an odd corner case where\na particular Objective-C class is known to the Objective-C runtime\n(and, therefore, accessible by name) but its symbol has been hidden\nfor some reason. For such classes, teach CodeGen to use\nobjc_lookUpClass to retrieve the Class object, rather than referencing\nthe class symbol directly.\n\nClasses annotated with objc_runtime_visible have two major limitations\nthat fall out from places where Objective-C metadata needs to refer to\nthe class (or metaclass) symbol directly:\n\n* One cannot implement a subclass of an objc_runtime_visible class.\n* One cannot implement a category on an objc_runtime_visible class.\n\nImplements rdar://problem/25494092.\n\nllvm-svn: 265201"},
[b]={"24ae22c04796",1459553032,"[Objective-C] Introduce objc_runtime_visible attribute.","[Objective-C] Introduce objc_runtime_visible attribute.\n\nThe objc_runtime_visible attribute deals with an odd corner case where\na particular Objective-C class is known to the Objective-C runtime\n(and, therefore, accessible by name) but its symbol has been hidden\nfor some reason. For such classes, teach CodeGen to use\nobjc_lookUpClass to retrieve the Class object, rather than referencing\nthe class symbol directly.\n\nClasses annotated with objc_runtime_visible have two major limitations\nthat fall out from places where Objective-C metadata needs to refer to\nthe class (or metaclass) symbol directly:\n\n* One cannot implement a subclass of an objc_runtime_visible class.\n* One cannot implement a category on an objc_runtime_visible class.\n\nImplements rdar://problem/25494092.\n\nllvm-svn: 265201"},
[j]={{Q,1957,"/// ActOnStartCategoryImplementation - Perform semantic checks on the\n/// category implementation declaration and build an ObjCCategoryImplDecl\n/// object.\nObjCCategoryImplDecl *Sema::ActOnStartCategoryImplementation(SourceLocation AtCatImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *CatName, SourceLocation CatLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  // If the interface has the objc_runtime_visible attribute, we\n  // cannot implement a category for it.\n  if (IDecl && IDecl->hasAttr<ObjCRuntimeVisibleAttr>()) {\n    Diag(ClassLoc, diag::err_objc_runtime_visible_category) << IDecl->getDeclName();"}},
[j]={{T,1957,"/// ActOnStartCategoryImplementation - Perform semantic checks on the\n/// category implementation declaration and build an ObjCCategoryImplDecl\n/// object.\nObjCCategoryImplDecl *Sema::ActOnStartCategoryImplementation(SourceLocation AtCatImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *CatName, SourceLocation CatLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  // If the interface has the objc_runtime_visible attribute, we\n  // cannot implement a category for it.\n  if (IDecl && IDecl->hasAttr<ObjCRuntimeVisibleAttr>()) {\n    Diag(ClassLoc, diag::err_objc_runtime_visible_category) << IDecl->getDeclName();"}},
[l]={
[l]={
["clang/test/SemaObjC/attr-objc-runtime-visible.m"]={"clang/test/SemaObjC/attr-objc-runtime-visible.m:10:17: error: cannot implement a category for class \'A\' that is only visible via the Objective-C runtime"}
["clang/test/SemaObjC/attr-objc-runtime-visible.m"]={"clang/test/SemaObjC/attr-objc-runtime-visible.m:10:17: error: cannot implement a category for class \'A\' that is only visible via the Objective-C runtime"}
Line 5,245: Line 5,246:
},
},
["err_objc_runtime_visible_subclass"]={
["err_objc_runtime_visible_subclass"]={
[i]="err_objc_runtime_visible_subclass",
[c]="err_objc_runtime_visible_subclass",
[h]="cannot implement subclass %0 of a superclass %1 that is only visible via the Objective-C runtime",
[d]="cannot implement subclass %0 of a superclass %1 that is only visible via the Objective-C runtime",
[g]="cannot implement subclass A of a superclass B that is only visible via the Objective-C runtime",
[e]="cannot implement subclass A of a superclass B that is only visible via the Objective-C runtime",
[b]=k,
[f]=k,
[e]="cannot implement subclass (.*?) of a superclass (.*?) that is only visible via the Objective\\-C runtime",
[g]="cannot implement subclass (.*?) of a superclass (.*?) that is only visible via the Objective\\-C runtime",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"24ae22c04796",1459553032,"[Objective-C] Introduce objc_runtime_visible attribute.","[Objective-C] Introduce objc_runtime_visible attribute.\n\nThe objc_runtime_visible attribute deals with an odd corner case where\na particular Objective-C class is known to the Objective-C runtime\n(and, therefore, accessible by name) but its symbol has been hidden\nfor some reason. For such classes, teach CodeGen to use\nobjc_lookUpClass to retrieve the Class object, rather than referencing\nthe class symbol directly.\n\nClasses annotated with objc_runtime_visible have two major limitations\nthat fall out from places where Objective-C metadata needs to refer to\nthe class (or metaclass) symbol directly:\n\n* One cannot implement a subclass of an objc_runtime_visible class.\n* One cannot implement a category on an objc_runtime_visible class.\n\nImplements rdar://problem/25494092.\n\nllvm-svn: 265201"},
[b]={"24ae22c04796",1459553032,"[Objective-C] Introduce objc_runtime_visible attribute.","[Objective-C] Introduce objc_runtime_visible attribute.\n\nThe objc_runtime_visible attribute deals with an odd corner case where\na particular Objective-C class is known to the Objective-C runtime\n(and, therefore, accessible by name) but its symbol has been hidden\nfor some reason. For such classes, teach CodeGen to use\nobjc_lookUpClass to retrieve the Class object, rather than referencing\nthe class symbol directly.\n\nClasses annotated with objc_runtime_visible have two major limitations\nthat fall out from places where Objective-C metadata needs to refer to\nthe class (or metaclass) symbol directly:\n\n* One cannot implement a subclass of an objc_runtime_visible class.\n* One cannot implement a category on an objc_runtime_visible class.\n\nImplements rdar://problem/25494092.\n\nllvm-svn: 265201"},
[j]={{Q,2107,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  // If the superclass has the objc_runtime_visible attribute, we\n  // cannot implement a subclass of it.\n  if (IDecl->getSuperClass() && IDecl->getSuperClass()->hasAttr<ObjCRuntimeVisibleAttr>()) {\n    Diag(ClassLoc, diag::err_objc_runtime_visible_subclass) << IDecl->getDeclName() << IDecl->getSuperClass()->getDeclName();"}},
[j]={{T,2107,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  // If the superclass has the objc_runtime_visible attribute, we\n  // cannot implement a subclass of it.\n  if (IDecl->getSuperClass() && IDecl->getSuperClass()->hasAttr<ObjCRuntimeVisibleAttr>()) {\n    Diag(ClassLoc, diag::err_objc_runtime_visible_subclass) << IDecl->getDeclName() << IDecl->getSuperClass()->getDeclName();"}},
[l]={
[l]={
["clang/test/SemaObjC/attr-objc-runtime-visible.m"]={"clang/test/SemaObjC/attr-objc-runtime-visible.m:16:17: error: cannot implement subclass \'B\' of a superclass \'A\' that is only visible via the Objective-C runtime"}
["clang/test/SemaObjC/attr-objc-runtime-visible.m"]={"clang/test/SemaObjC/attr-objc-runtime-visible.m:16:17: error: cannot implement subclass \'B\' of a superclass \'A\' that is only visible via the Objective-C runtime"}
Line 5,259: Line 5,260:
},
},
["err_objc_subscript_base_type"]={
["err_objc_subscript_base_type"]={
[i]="err_objc_subscript_base_type",
[c]="err_objc_subscript_base_type",
[h]="%select{dictionary|array}1 subscript base type %0 is not an Objective-C object",
[d]="%select{dictionary|array}1 subscript base type %0 is not an Objective-C object",
[g]={{nil,nil,{{"dictionary","array"}," subscript base type A is not an Objective-C object"}}},
[e]={{nil,nil,{{"dictionary","array"}," subscript base type A is not an Objective-C object"}}},
[b]=k,
[f]=k,
[e]="(?:dictionary|array) subscript base type (.*?) is not an Objective\\-C object",
[g]="(?:dictionary|array) subscript base type (.*?) is not an Objective\\-C object",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={jb,1331064356,lb,kb},
[b]={jb,1331064356,kb,lb},
[j]={{P,1166,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  // ...\n  if (ResultType.isNull()) {\n    S.Diag(BaseExpr->getExprLoc(), diag::err_objc_subscript_base_type) << BaseExpr->getType() << arrayRef;"},{P,1270,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (ResultType.isNull()) {\n    S.Diag(BaseExpr->getExprLoc(), diag::err_objc_subscript_base_type) << BaseExpr->getType() << arrayRef;"}}
[j]={{P,1166,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  // ...\n  if (ResultType.isNull()) {\n    S.Diag(BaseExpr->getExprLoc(), diag::err_objc_subscript_base_type) << BaseExpr->getType() << arrayRef;"},{P,1270,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (ResultType.isNull()) {\n    S.Diag(BaseExpr->getExprLoc(), diag::err_objc_subscript_base_type) << BaseExpr->getType() << arrayRef;"}}
},
},
["err_objc_subscript_dic_object_type"]={
["err_objc_subscript_dic_object_type"]={
[i]="err_objc_subscript_dic_object_type",
[c]="err_objc_subscript_dic_object_type",
[h]="method object parameter type %0 is not object type",
[d]="method object parameter type %0 is not object type",
[g]="method object parameter type A is not object type",
[e]="method object parameter type A is not object type",
[b]=k,
[f]=k,
[e]="method object parameter type (.*?) is not object type",
[g]="method object parameter type (.*?) is not object type",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={jb,1331064356,lb,kb},
[b]={jb,1331064356,kb,lb},
[j]={{P,1369,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (AtIndexSetter && arrayRef) {\n  // ...\n  } else if (AtIndexSetter && !arrayRef)\n    for (unsigned i = 0; i < 2; i++) {\n      // ...\n      if (!T->isObjCObjectPointerType()) {\n        if (i == 1)\n        // ...\n        else\n          S.Diag(RefExpr->getBaseExpr()->getExprLoc(), diag::err_objc_subscript_dic_object_type) << T;"}},
[j]={{P,1369,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (AtIndexSetter && arrayRef) {\n  // ...\n  } else if (AtIndexSetter && !arrayRef)\n    for (unsigned i = 0; i < 2; i++) {\n      // ...\n      if (!T->isObjCObjectPointerType()) {\n        if (i == 1)\n        // ...\n        else\n          S.Diag(RefExpr->getBaseExpr()->getExprLoc(), diag::err_objc_subscript_dic_object_type) << T;"}},
[l]={
[l]={
[kc]={"clang/test/SemaObjC/objc-container-subscripting.m:40:3: error: method object parameter type \'void *\' is not object type"}
[lc]={"clang/test/SemaObjC/objc-container-subscripting.m:40:3: error: method object parameter type \'void *\' is not object type"}
}
}
},
},
["err_objc_subscript_index_type"]={
["err_objc_subscript_index_type"]={
[i]="err_objc_subscript_index_type",
[c]="err_objc_subscript_index_type",
[h]="method index parameter type %0 is not integral type",
[d]="method index parameter type %0 is not integral type",
[g]="method index parameter type A is not integral type",
[e]="method index parameter type A is not integral type",
[b]=k,
[f]=k,
[e]="method index parameter type (.*?) is not integral type",
[g]="method index parameter type (.*?) is not integral type",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={jb,1331064356,lb,kb},
[b]={jb,1331064356,kb,lb},
[j]={{P,1229,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  // ...\n  if (AtIndexGetter) {\n    // ...\n    if ((arrayRef && !T->isIntegralOrEnumerationType()) || (!arrayRef && !T->isObjCObjectPointerType())) {\n      S.Diag(RefExpr->getKeyExpr()->getExprLoc(), arrayRef ? diag::err_objc_subscript_index_type : diag::err_objc_subscript_key_type) << T;"},{P,1346,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (AtIndexSetter && arrayRef) {\n    // ...\n    if (!T->isIntegralOrEnumerationType()) {\n      S.Diag(RefExpr->getKeyExpr()->getExprLoc(), diag::err_objc_subscript_index_type) << T;"}},
[j]={{P,1229,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  // ...\n  if (AtIndexGetter) {\n    // ...\n    if ((arrayRef && !T->isIntegralOrEnumerationType()) || (!arrayRef && !T->isObjCObjectPointerType())) {\n      S.Diag(RefExpr->getKeyExpr()->getExprLoc(), arrayRef ? diag::err_objc_subscript_index_type : diag::err_objc_subscript_key_type) << T;"},{P,1346,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (AtIndexSetter && arrayRef) {\n    // ...\n    if (!T->isIntegralOrEnumerationType()) {\n      S.Diag(RefExpr->getKeyExpr()->getExprLoc(), diag::err_objc_subscript_index_type) << T;"}},
[l]={
[l]={
[kc]={"clang/test/SemaObjC/objc-container-subscripting.m:15:25: error: method index parameter type \'double\' is not integral type","clang/test/SemaObjC/objc-container-subscripting.m:16:9: error: method index parameter type \'void *\' is not integral type"}
[lc]={"clang/test/SemaObjC/objc-container-subscripting.m:15:25: error: method index parameter type \'double\' is not integral type","clang/test/SemaObjC/objc-container-subscripting.m:16:9: error: method index parameter type \'void *\' is not integral type"}
}
}
},
},
["err_objc_subscript_key_type"]={
["err_objc_subscript_key_type"]={
[i]="err_objc_subscript_key_type",
[c]="err_objc_subscript_key_type",
[h]="method key parameter type %0 is not object type",
[d]="method key parameter type %0 is not object type",
[g]="method key parameter type A is not object type",
[e]="method key parameter type A is not object type",
[b]=k,
[f]=k,
[e]="method key parameter type (.*?) is not object type",
[g]="method key parameter type (.*?) is not object type",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={jb,1331064356,lb,kb},
[b]={jb,1331064356,kb,lb},
[j]={{P,1230,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  // ...\n  if (AtIndexGetter) {\n    // ...\n    if ((arrayRef && !T->isIntegralOrEnumerationType()) || (!arrayRef && !T->isObjCObjectPointerType())) {\n      S.Diag(RefExpr->getKeyExpr()->getExprLoc(), arrayRef ? diag::err_objc_subscript_index_type : diag::err_objc_subscript_key_type) << T;"},{P,1366,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (AtIndexSetter && arrayRef) {\n  // ...\n  } else if (AtIndexSetter && !arrayRef)\n    for (unsigned i = 0; i < 2; i++) {\n      // ...\n      if (!T->isObjCObjectPointerType()) {\n        if (i == 1)\n          S.Diag(RefExpr->getKeyExpr()->getExprLoc(), diag::err_objc_subscript_key_type) << T;"}},
[j]={{P,1230,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  // ...\n  if (AtIndexGetter) {\n    // ...\n    if ((arrayRef && !T->isIntegralOrEnumerationType()) || (!arrayRef && !T->isObjCObjectPointerType())) {\n      S.Diag(RefExpr->getKeyExpr()->getExprLoc(), arrayRef ? diag::err_objc_subscript_index_type : diag::err_objc_subscript_key_type) << T;"},{P,1366,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (AtIndexSetter && arrayRef) {\n  // ...\n  } else if (AtIndexSetter && !arrayRef)\n    for (unsigned i = 0; i < 2; i++) {\n      // ...\n      if (!T->isObjCObjectPointerType()) {\n        if (i == 1)\n          S.Diag(RefExpr->getKeyExpr()->getExprLoc(), diag::err_objc_subscript_key_type) << T;"}},
[l]={
[l]={
[kc]={"clang/test/SemaObjC/objc-container-subscripting.m:39:26: error: method key parameter type \'id *\' is not object type","clang/test/SemaObjC/objc-container-subscripting.m:40:14: error: method key parameter type \'id *\' is not object type"}
[lc]={"clang/test/SemaObjC/objc-container-subscripting.m:39:26: error: method key parameter type \'id *\' is not object type","clang/test/SemaObjC/objc-container-subscripting.m:40:14: error: method key parameter type \'id *\' is not object type"}
}
}
},
},
["err_objc_subscript_method_not_found"]={
["err_objc_subscript_method_not_found"]={
[i]="err_objc_subscript_method_not_found",
[c]="err_objc_subscript_method_not_found",
[h]="expected method to %select{read|write}1 %select{dictionary|array}2 element not found on object of type %0",
[d]="expected method to %select{read|write}1 %select{dictionary|array}2 element not found on object of type %0",
[g]={{nil,nil,{"expected method to ",{"read","write"}," ",{"dictionary","array"}," element not found on object of type A"}}},
[e]={{nil,nil,{"expected method to ",{"read","write"}," ",{"dictionary","array"}," element not found on object of type A"}}},
[b]=k,
[f]=k,
[e]="expected method to (?:read|write) (?:dictionary|array) element not found on object of type (.*?)",
[g]="expected method to (?:read|write) (?:dictionary|array) element not found on object of type (.*?)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={jb,1331064356,lb,kb},
[b]={jb,1331064356,kb,lb},
[j]={{P,1214,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  // ...\n  if (!AtIndexGetter) {\n    if (!BaseT->isObjCIdType()) {\n      S.Diag(BaseExpr->getExprLoc(), diag::err_objc_subscript_method_not_found) << BaseExpr->getType() << 0 << arrayRef;"},{P,1331,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (!AtIndexSetter) {\n    if (!BaseT->isObjCIdType()) {\n      S.Diag(BaseExpr->getExprLoc(), diag::err_objc_subscript_method_not_found) << BaseExpr->getType() << 1 << arrayRef;"}},
[j]={{P,1214,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  // ...\n  if (!AtIndexGetter) {\n    if (!BaseT->isObjCIdType()) {\n      S.Diag(BaseExpr->getExprLoc(), diag::err_objc_subscript_method_not_found) << BaseExpr->getType() << 0 << arrayRef;"},{P,1331,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (!AtIndexSetter) {\n    if (!BaseT->isObjCIdType()) {\n      S.Diag(BaseExpr->getExprLoc(), diag::err_objc_subscript_method_not_found) << BaseExpr->getType() << 1 << arrayRef;"}},
[l]={
[l]={
[kc]={"clang/test/SemaObjC/objc-container-subscripting.m:20:3: error: expected method to write array element not found on object of type \'I *\'","clang/test/SemaObjC/objc-container-subscripting.m:21:10: error: expected method to read array element not found on object of type \'I *\'"}
[lc]={"clang/test/SemaObjC/objc-container-subscripting.m:20:3: error: expected method to write array element not found on object of type \'I *\'","clang/test/SemaObjC/objc-container-subscripting.m:21:10: error: expected method to read array element not found on object of type \'I *\'"}
}
}
},
},
["err_objc_subscript_object_type"]={
["err_objc_subscript_object_type"]={
[i]="err_objc_subscript_object_type",
[c]="err_objc_subscript_object_type",
[h]="cannot assign to this %select{dictionary|array}1 because assigning method\'s 2nd parameter of type %0 is not an Objective-C pointer type",
[d]="cannot assign to this %select{dictionary|array}1 because assigning method\'s 2nd parameter of type %0 is not an Objective-C pointer type",
[g]={{nil,nil,{"cannot assign to this ",{"dictionary","array"}," because assigning method\'s 2nd parameter of type A is not an Objective-C pointer type"}}},
[e]={{nil,nil,{"cannot assign to this ",{"dictionary","array"}," because assigning method\'s 2nd parameter of type A is not an Objective-C pointer type"}}},
[b]=k,
[f]=k,
[e]="cannot assign to this (?:dictionary|array) because assigning method\'s 2nd parameter of type (.*?) is not an Objective\\-C pointer type",
[g]="cannot assign to this (?:dictionary|array) because assigning method\'s 2nd parameter of type (.*?) is not an Objective\\-C pointer type",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={jb,1331064356,lb,kb},
[b]={jb,1331064356,kb,lb},
[j]={{P,1354,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (AtIndexSetter && arrayRef) {\n    // ...\n    if (!T->isObjCObjectPointerType()) {\n      S.Diag(RefExpr->getBaseExpr()->getExprLoc(), diag::err_objc_subscript_object_type) << T << arrayRef;"}},
[j]={{P,1354,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (AtIndexSetter && arrayRef) {\n    // ...\n    if (!T->isObjCObjectPointerType()) {\n      S.Diag(RefExpr->getBaseExpr()->getExprLoc(), diag::err_objc_subscript_object_type) << T << arrayRef;"}},
[l]={
[l]={
[kc]={"clang/test/SemaObjC/objc-container-subscripting.m:16:3: error: cannot assign to this array because assigning method\'s 2nd parameter of type \'id *\' is not an Objective-C pointer type"}
[lc]={"clang/test/SemaObjC/objc-container-subscripting.m:16:3: error: cannot assign to this array because assigning method\'s 2nd parameter of type \'id *\' is not an Objective-C pointer type"}
}
}
},
},
["err_objc_subscript_pointer"]={
["err_objc_subscript_pointer"]={
[i]="err_objc_subscript_pointer",
[c]="err_objc_subscript_pointer",
[h]="indexing expression is invalid because subscript type %0 is not an Objective-C pointer",
[d]="indexing expression is invalid because subscript type %0 is not an Objective-C pointer",
[g]="indexing expression is invalid because subscript type A is not an Objective-C pointer",
[e]="indexing expression is invalid because subscript type A is not an Objective-C pointer",
[b]=k,
[f]=k,
[e]="indexing expression is invalid because subscript type (.*?) is not an Objective\\-C pointer",
[g]="indexing expression is invalid because subscript type (.*?) is not an Objective\\-C pointer",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={"ba0afde486f5",1332957409,"objective-c: Improve diagnostics and","objective-c: Improve diagnostics and\nprovide \'fixit\' hint when dictionary index \nis not of proper type. // rdar://11062080\n\nllvm-svn: 153584"},
[b]={"ba0afde486f5",1332957409,"objective-c: Improve diagnostics and","objective-c: Improve diagnostics and\nprovide \'fixit\' hint when dictionary index \nis not of proper type. // rdar://11062080\n\nllvm-svn: 153584"},
[j]={{P,1070,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  if (!getLangOpts().CPlusPlus || !RecordTy || RecordTy->isIncompleteType()) {\n    // ...\n    if (isa<StringLiteral>(IndexExpr))\n      Diag(FromE->getExprLoc(), diag::err_objc_subscript_pointer) << T << FixItHint::CreateInsertion(FromE->getExprLoc(), \"@\");"}},
[j]={{P,1070,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  if (!getLangOpts().CPlusPlus || !RecordTy || RecordTy->isIncompleteType()) {\n    // ...\n    if (isa<StringLiteral>(IndexExpr))\n      Diag(FromE->getExprLoc(), diag::err_objc_subscript_pointer) << T << FixItHint::CreateInsertion(FromE->getExprLoc(), \"@\");"}},
[l]={
[l]={
Line 5,354: Line 5,355:
},
},
["err_objc_subscript_type_conversion"]={
["err_objc_subscript_type_conversion"]={
[i]="err_objc_subscript_type_conversion",
[c]="err_objc_subscript_type_conversion",
[h]="indexing expression is invalid because subscript type %0 is not an integral or Objective-C pointer type",
[d]="indexing expression is invalid because subscript type %0 is not an integral or Objective-C pointer type",
[g]="indexing expression is invalid because subscript type A is not an integral or Objective-C pointer type",
[e]="indexing expression is invalid because subscript type A is not an integral or Objective-C pointer type",
[b]=k,
[f]=k,
[e]="indexing expression is invalid because subscript type (.*?) is not an integral or Objective\\-C pointer type",
[g]="indexing expression is invalid because subscript type (.*?) is not an integral or Objective\\-C pointer type",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={jb,1331064356,lb,kb},
[b]={jb,1331064356,kb,lb},
[j]={{P,1073,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  if (!getLangOpts().CPlusPlus || !RecordTy || RecordTy->isIncompleteType()) {\n    // ...\n    if (isa<StringLiteral>(IndexExpr))\n    // ...\n    else\n      Diag(FromE->getExprLoc(), diag::err_objc_subscript_type_conversion) << T;"},{P,1109,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  if (NoIntegrals == 0 && NoObjCIdPointers == 0) {\n    // ...\n    Diag(FromE->getExprLoc(), diag::err_objc_subscript_type_conversion) << FromE->getType();"}},
[j]={{P,1073,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  if (!getLangOpts().CPlusPlus || !RecordTy || RecordTy->isIncompleteType()) {\n    // ...\n    if (isa<StringLiteral>(IndexExpr))\n    // ...\n    else\n      Diag(FromE->getExprLoc(), diag::err_objc_subscript_type_conversion) << T;"},{P,1109,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  if (NoIntegrals == 0 && NoObjCIdPointers == 0) {\n    // ...\n    Diag(FromE->getExprLoc(), diag::err_objc_subscript_type_conversion) << FromE->getType();"}},
[l]={
[l]={
Line 5,368: Line 5,369:
},
},
["err_objc_synchronized_expects_object"]={
["err_objc_synchronized_expects_object"]={
[i]="err_objc_synchronized_expects_object",
[c]="err_objc_synchronized_expects_object",
[h]="@synchronized requires an Objective-C object type (%0 invalid)",
[d]="@synchronized requires an Objective-C object type (%0 invalid)",
[g]="@synchronized requires an Objective-C object type (A invalid)",
[e]="@synchronized requires an Objective-C object type (A invalid)",
[b]=k,
[f]=k,
[e]="@synchronized requires an Objective\\-C object type \\((.*?) invalid\\)",
[g]="@synchronized requires an Objective\\-C object type \\((.*?) invalid\\)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={yb,1480718311,zb,Ab},
[b]={Bb,1480718311,Ab,zb},
[j]={{E,4313,"ExprResult Sema::ActOnObjCAtSynchronizedOperand(SourceLocation atLoc, Expr *operand) {\n  // ...\n  if (!type->isDependentType() && !type->isObjCObjectPointerType()) {\n    // ...\n    if (!pointerType || !pointerType->getPointeeType()->isVoidType()) {\n      if (getLangOpts().CPlusPlus) {\n        if (RequireCompleteType(atLoc, type, diag::err_incomplete_receiver_type))\n          return Diag(atLoc, diag::err_objc_synchronized_expects_object) << type << operand->getSourceRange();"},{E,4320,"ExprResult Sema::ActOnObjCAtSynchronizedOperand(SourceLocation atLoc, Expr *operand) {\n  // ...\n  if (!type->isDependentType() && !type->isObjCObjectPointerType()) {\n    // ...\n    if (!pointerType || !pointerType->getPointeeType()->isVoidType()) {\n      if (getLangOpts().CPlusPlus) {\n        // ...\n        if (!result.isUsable())\n          return Diag(atLoc, diag::err_objc_synchronized_expects_object) << type << operand->getSourceRange();"},{E,4325,"ExprResult Sema::ActOnObjCAtSynchronizedOperand(SourceLocation atLoc, Expr *operand) {\n  // ...\n  if (!type->isDependentType() && !type->isObjCObjectPointerType()) {\n    // ...\n    if (!pointerType || !pointerType->getPointeeType()->isVoidType()) {\n      if (getLangOpts().CPlusPlus) {\n      // ...\n      } else {\n        return Diag(atLoc, diag::err_objc_synchronized_expects_object) << type << operand->getSourceRange();"}},
[j]={{F,4313,"ExprResult Sema::ActOnObjCAtSynchronizedOperand(SourceLocation atLoc, Expr *operand) {\n  // ...\n  if (!type->isDependentType() && !type->isObjCObjectPointerType()) {\n    // ...\n    if (!pointerType || !pointerType->getPointeeType()->isVoidType()) {\n      if (getLangOpts().CPlusPlus) {\n        if (RequireCompleteType(atLoc, type, diag::err_incomplete_receiver_type))\n          return Diag(atLoc, diag::err_objc_synchronized_expects_object) << type << operand->getSourceRange();"},{F,4320,"ExprResult Sema::ActOnObjCAtSynchronizedOperand(SourceLocation atLoc, Expr *operand) {\n  // ...\n  if (!type->isDependentType() && !type->isObjCObjectPointerType()) {\n    // ...\n    if (!pointerType || !pointerType->getPointeeType()->isVoidType()) {\n      if (getLangOpts().CPlusPlus) {\n        // ...\n        if (!result.isUsable())\n          return Diag(atLoc, diag::err_objc_synchronized_expects_object) << type << operand->getSourceRange();"},{F,4325,"ExprResult Sema::ActOnObjCAtSynchronizedOperand(SourceLocation atLoc, Expr *operand) {\n  // ...\n  if (!type->isDependentType() && !type->isObjCObjectPointerType()) {\n    // ...\n    if (!pointerType || !pointerType->getPointeeType()->isVoidType()) {\n      if (getLangOpts().CPlusPlus) {\n      // ...\n      } else {\n        return Diag(atLoc, diag::err_objc_synchronized_expects_object) << type << operand->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjCXX/synchronized.mm"]={"clang/test/SemaObjCXX/synchronized.mm:18:3: error: @synchronized requires an Objective-C object type (\'struct y\' invalid)"}
["clang/test/SemaObjCXX/synchronized.mm"]={"clang/test/SemaObjCXX/synchronized.mm:18:3: error: @synchronized requires an Objective-C object type (\'struct y\' invalid)"}
Line 5,382: Line 5,383:
},
},
["err_objc_throw_expects_object"]={
["err_objc_throw_expects_object"]={
[i]="err_objc_throw_expects_object",
[c]="err_objc_throw_expects_object",
[h]="@throw requires an Objective-C object type (%0 invalid)",
[d]="@throw requires an Objective-C object type (%0 invalid)",
[g]="@throw requires an Objective-C object type (A invalid)",
[e]="@throw requires an Objective-C object type (A invalid)",
[b]=k,
[f]=k,
[e]="@throw requires an Objective\\-C object type \\((.*?) invalid\\)",
[g]="@throw requires an Objective\\-C object type \\((.*?) invalid\\)",
[d]=a,
[h]=a,
[f]=m,
[i]=m,
[c]={yb,1480718311,zb,Ab},
[b]={Bb,1480718311,Ab,zb},
[j]={{E,4271,"StmtResult Sema::BuildObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw) {\n  if (Throw) {\n    // ...\n    // Make sure the expression type is an ObjC pointer or \"void *\".\n    if (!ThrowType->isDependentType() && !ThrowType->isObjCObjectPointerType()) {\n      // ...\n      if (!PT || !PT->getPointeeType()->isVoidType())\n        return StmtError(Diag(AtLoc, diag::err_objc_throw_expects_object) << Throw->getType() << Throw->getSourceRange());"}},
[j]={{F,4271,"StmtResult Sema::BuildObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw) {\n  if (Throw) {\n    // ...\n    // Make sure the expression type is an ObjC pointer or \"void *\".\n    if (!ThrowType->isDependentType() && !ThrowType->isObjCObjectPointerType()) {\n      // ...\n      if (!PT || !PT->getPointeeType()->isVoidType())\n        return StmtError(Diag(AtLoc, diag::err_objc_throw_expects_object) << Throw->getType() << Throw->getSourceRange());"}},
[l]={
[l]={
["clang/test/SemaObjC/try-catch.m"]={"clang/test/SemaObjC/try-catch.m:48:3: error: @throw requires an Objective-C object type (\'int\' invalid)","clang/test/SemaObjC/try-catch.m:49:3: error: @throw requires an Objective-C object type (\'struct s\' invalid)","clang/test/SemaObjC/try-catch.m:50:3: error: @throw requires an Objective-C object type (\'struct s *\' invalid)"}
["clang/test/SemaObjC/try-catch.m"]={"clang/test/SemaObjC/try-catch.m:48:3: error: @throw requires an Objective-C object type (\'int\' invalid)","clang/test/SemaObjC/try-catch.m:49:3: error: @throw requires an Objective-C object type (\'struct s\' invalid)","clang/test/SemaObjC/try-catch.m:50:3: error: @throw requires an Objective-C object type (\'struct s *\' invalid)"}
Line 5,396: Line 5,397:
},
},
["err_objc_type_arg_does_not_match_bound"]={
["err_objc_type_arg_does_not_match_bound"]={
[i]="err_objc_type_arg_does_not_match_bound",
[c]="err_objc_type_arg_does_not_match_bound",
[h]="type argument %0 does not satisfy the bound (%1) of type parameter %2",
[d]="type argument %0 does not satisfy the bound (%1) of type parameter %2",
[g]="type argument A does not satisfy the bound (B) of type parameter C",
[e]="type argument A does not satisfy the bound (B) of type parameter C",
[b]=k,
[f]=k,
[e]="type argument (.*?) does not satisfy the bound \\((.*?)\\) of type parameter (.*?)",
[g]="type argument (.*?) does not satisfy the bound \\((.*?)\\) of type parameter (.*?)",
[d]=a,
[h]=a,
[f]=a,
[i]=w,
[c]={"e9d95f1ecc98",1436241455,"Handle Objective-C type arguments.","Handle Objective-C type arguments.\n\nObjective-C type arguments can be provided in angle brackets following\nan Objective-C interface type. Syntactically, this is the same\nposition as one would provide protocol qualifiers (e.g.,\nid<NSCopying>), so parse both together and let Sema sort out the\nambiguous cases. This applies both when parsing types and when parsing\nthe superclass of an Objective-C class, which can now be a specialized\ntype (e.g., NSMutableArray<T> inherits from NSArray<T>).\n\nCheck Objective-C type arguments against the type parameters of the\ncorresponding class. Verify the length of the type argument list and\nthat each type argument satisfies the corresponding bound.\n\nSpecializations of parameterized Objective-C classes are represented\nin the type system as distinct types. Both specialized types (e.g.,\nNSArray<NSString *> *) and unspecialized types (NSArray *) are\nrepresented, separately.\n\nllvm-svn: 241542"},
[b]={"e9d95f1ecc98",1436241455,"Handle Objective-C type arguments.","Handle Objective-C type arguments.\n\nObjective-C type arguments can be provided in angle brackets following\nan Objective-C interface type. Syntactically, this is the same\nposition as one would provide protocol qualifiers (e.g.,\nid<NSCopying>), so parse both together and let Sema sort out the\nambiguous cases. This applies both when parsing types and when parsing\nthe superclass of an Objective-C class, which can now be a specialized\ntype (e.g., NSMutableArray<T> inherits from NSArray<T>).\n\nCheck Objective-C type arguments against the type parameters of the\ncorresponding class. Verify the length of the type argument list and\nthat each type argument satisfies the corresponding bound.\n\nSpecializations of parameterized Objective-C classes are represented\nin the type system as distinct types. Both specialized types (e.g.,\nNSArray<NSString *> *) and unspecialized types (NSArray *) are\nrepresented, separately.\n\nllvm-svn: 241542"},
[j]={{cb,969,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  // ...\n  for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n    // ...\n    // Objective-C object pointer types must be substitutable for the bounds.\n    if (const auto *typeArgObjC = typeArg->getAs<ObjCObjectPointerType>()) {\n      // ...\n      S.Diag(typeArgInfo->getTypeLoc().getBeginLoc(), diag::err_objc_type_arg_does_not_match_bound) << typeArg << bound << typeParam->getDeclName();"},{cb,997,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  // ...\n  for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n    // ...\n    // Block pointer types are permitted for unqualified \'id\' bounds.\n    if (typeArg->isBlockPointerType()) {\n      // ...\n      S.Diag(typeArgInfo->getTypeLoc().getBeginLoc(), diag::err_objc_type_arg_does_not_match_bound) << typeArg << bound << typeParam->getDeclName();"}},
[j]={{cb,969,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  // ...\n  for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n    // ...\n    // Objective-C object pointer types must be substitutable for the bounds.\n    if (const auto *typeArgObjC = typeArg->getAs<ObjCObjectPointerType>()) {\n      // ...\n      S.Diag(typeArgInfo->getTypeLoc().getBeginLoc(), diag::err_objc_type_arg_does_not_match_bound) << typeArg << bound << typeParam->getDeclName();"},{cb,997,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  // ...\n  for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n    // ...\n    // Block pointer types are permitted for unqualified \'id\' bounds.\n    if (typeArg->isBlockPointerType()) {\n      // ...\n      S.Diag(typeArgInfo->getTypeLoc().getBeginLoc(), diag::err_objc_type_arg_does_not_match_bound) << typeArg << bound << typeParam->getDeclName();"}},
[l]={
[l]={
[pc]={"clang/test/SemaObjC/parameterized_classes.m:272:14: error: type argument \'NSObject *\' does not satisfy the bound (\'id<NSCopying>\') of type parameter \'V\'","clang/test/SemaObjC/parameterized_classes.m:275:14: error: type argument \'id\' does not satisfy the bound (\'NSObject *\') of type parameter \'U\'","clang/test/SemaObjC/parameterized_classes.m:279:14: error: type argument \'id\' does not satisfy the bound (\'id<NSCopying>\') of type parameter \'V\'","clang/test/SemaObjC/parameterized_classes.m:323:29: error: type argument \'T\' (aka \'id\') does not satisfy the bound (\'NSObject *\') of type parameter \'U\'"}
[oc]={"clang/test/SemaObjC/parameterized_classes.m:272:14: error: type argument \'NSObject *\' does not satisfy the bound (\'id<NSCopying>\') of type parameter \'V\'","clang/test/SemaObjC/parameterized_classes.m:275:14: error: type argument \'id\' does not satisfy the bound (\'NSObject *\') of type parameter \'U\'","clang/test/SemaObjC/parameterized_classes.m:279:14: error: type argument \'id\' does not satisfy the bound (\'id<NSCopying>\') of type parameter \'V\'","clang/test/SemaObjC/parameterized_classes.m:323:29: error: type argument \'T\' (aka \'id\') does not satisfy the bound (\'NSObject *\') of type parameter \'U\'"}
}
}
}
}
};
};
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