|
|
Line 2: |
Line 2: |
| local b="regex1"; | | local b="regex1"; |
| local c="commit"; | | local c="commit"; |
| local d="category_hist"; | | local d="regex3"; |
| local e="regex2"; | | local e="regex2"; |
| local f="regex3"; | | local f="category_hist"; |
| local g="hierarchical_hist"; | | local g="hierarchical_hist"; |
| local h="message_hist"; | | local h="message_hist"; |
Line 12: |
Line 12: |
| local l="tests2"; | | local l="tests2"; |
| local m="Semantic Issue"; | | local m="Semantic Issue"; |
| local n="clang/lib/Sema/SemaExpr.cpp"; | | local n="10.0"; |
| local o="5.0"; | | local o="clang/lib/Sema/SemaDecl.cpp"; |
| local p="10.0"; | | local p="16.0"; |
| local q="11.0"; | | local q="7.0"; |
| local r="clang/lib/Sema/SemaTemplate.cpp"; | | local r="5.0"; |
| local s="Update tablegen diagnostic files to be in sync with the def files."; | | local s="15.0"; |
| local t="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004"; | | local t="6.0"; |
| local u="5a8987ca5113"; | | local u="13.0"; |
| local v="12.0"; | | local v="clang/lib/Lex/ModuleMap.cpp"; |
| local w="clang/lib/Sema/SemaDecl.cpp"; | | local w="11.0"; |
| local x="Parse Issue"; | | local x="9.0"; |
| local y="15.0";
| | local y="Parse Issue"; |
| local z="clang/lib/Sema/SemaChecking.cpp"; | | local z="Lexical or Preprocessor Issue"; |
| local A="6.0"; | | local A="destructor"; |
| local B="clang/lib/Parse/ParsePragma.cpp"; | | local B="constructor"; |
| local C="14.0"; | | local C="12.0"; |
| local D="9.0"; | | local D="method F"; |
| local E="8.0"; | | local E="clang/lib/Sema/SemaStmt.cpp"; |
| local F="13.0"; | | local F="clang/lib/Sema/SemaExprObjC.cpp"; |
| local G="Lexical or Preprocessor Issue";
| | 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 H="clang/lib/Sema/SemaDeclCXX.cpp";
| | local H="b1c4d5507fad"; |
| 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 I="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp..."; |
| local J="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp..."; | | local J="defined here"; |
| local K="b1c4d5507fad"; | | local K="clang/lib/Sema/SemaDeclAttr.cpp"; |
| local L="clang/lib/Sema/SemaAttr.cpp"; | | local L="clang/lib/Sema/SemaObjCProperty.cpp"; |
| local M="16.0"; | | local M="Modules Issue"; |
| local N="clang/lib/Lex/PPDirectives.cpp"; | | local N="clang/lib/Parse/ParseObjc.cpp"; |
| local O="7.0"; | | local O="clang/lib/Sema/SemaDeclCXX.cpp"; |
| local P="clang/lib/Sema/SemaExprCXX.cpp"; | | local P="clang/lib/Sema/SemaPseudoObject.cpp"; |
| local Q="clang/lib/Sema/SemaInit.cpp"; | | local Q="clang/lib/Sema/SemaDeclObjC.cpp"; |
| local R="clang/lib/Sema/SemaType.cpp"; | | local R="definition in module \'C\'"; |
| local S="[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 S="14.0"; |
| local T="[WebAssembly] Improve clang diagnostics for wasm attributes"; | | local T="fatal error\\: "; |
| local U="931fcd3ba011"; | | local U="clang/lib/AST/ODRDiagsEmitter.cpp"; |
| local V="clang/lib/Sema/SemaExprMember.cpp";
| | local V="clang/lib/Sema/SemaExpr.cpp"; |
| local W="function"; | | local W="clang/lib/Sema/SemaChecking.cpp"; |
| local X="clang/lib/Lex/Pragma.cpp"; | | local X="AST Deserialization Issue"; |
| local Y="clang/test/SemaSYCL/zero-length-arrays.cpp:9:3: error: zero-length arrays are not permitted in SYCL device code"; | | local Y="clang/lib/Sema/SemaTemplate.cpp"; |
| local Z="clang/lib/Sema/SemaStmt.cpp"; | | local Z="A has different definitions in different modules; first difference is "; |
| local ab="95f50964fbf5"; | | local ab=" found "; |
| local bb="Implement P2361 Unevaluated string literals"; | | local bb=" is "; |
| local cb="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 cb="clang/lib/Sema/SemaType.cpp"; |
| local db="clang/lib/Sema/SemaDeclAttr.cpp"; | | local db="8.0"; |
| local eb="Add #pragma clang attribute\n\nThe new \'#pragma clang attribute\' directive can be used to apply attributes to\nmultiple declarations. An attribute must satisfy the following conditions to\nbe supported by the pragma:\n- It must have a subject list that\'s defined in the TableGen file.\n- It must be documented.\n- It must not be late parsed.\n- It must have a GNU/C++11 spelling.\n\nDifferential Revision: https://reviews.llvm.org/D30009\n\nllvm-svn: 300539"; | | local eb="clang/lib/Parse/ParseDecl.cpp"; |
| local fb="Add #pragma clang attribute"; | | local fb="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004"; |
| local gb="0a849f47d2f7"; | | local gb="Update tablegen diagnostic files to be in sync with the def files."; |
| local hb="clang/lib/Sema/SemaObjCProperty.cpp";
| | local hb="5a8987ca5113"; |
| local ib="11.1";
| | local ib="class"; |
| local jb="clang/lib/Parse/ParseDecl.cpp";
| | local jb="e65b086e07a6"; |
| local kb="method";
| | 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 lb="14f6bfcb52e7";
| | local lb="Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"; |
| local mb="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
| | local mb="clang/lib/Sema/SemaModule.cpp"; |
| local nb="[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 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 ob="clang/test/Parser/pragma-attribute.cpp";
| | local ob="typedef"; |
| local pb="returning A from a function with result type B";
| | local pb="method"; |
| local qb="kernel function";
| | 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 rb="block";
| | local rb="Introduce -Wreserved-identifier"; |
| local sb="arguments to ";
| | local sb="[SYCL] Add sycl_kernel attribute for accelerated code outlining"; |
| local tb="Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545";
| | local tb="clang/lib/Sema/SemaExprCXX.cpp"; |
| local ub="execution configuration ";
| | local ub="c094e7dc4b3f"; |
| local vb="Mass-rename the handful of error_* diagnostics to err_*.";
| | local vb="b83b23275b74"; |
| local wb="f881267db9a9"; | | local wb="clang/lib/Frontend/CompilerInstance.cpp"; |
| local xb="passing A to parameter of type B"; | | local xb="no "; |
| local yb="passing to parameter of different type"; | | local yb="f881267db9a9"; |
| local zb="assigning to different types"; | | local zb="Mass-rename the handful of error_* diagnostics to err_*."; |
| local Ab="returning from function with different return type"; | | local Ab="Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545"; |
| local Bb="converting A to type B"; | | local Bb="clang/test/Parser/MicrosoftExtensions.cpp"; |
| local Cb="converting between types"; | | local Cb="clang/lib/Parse/Parser.cpp"; |
| local Db="initializing A with an expression of type B"; | | 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 Eb="initializing with expression of different type"; | | local Eb="[WebAssembly] Improve clang diagnostics for wasm attributes"; |
| local Fb="sending A to parameter of type B";
| | local Fb="5e77d76c953d"; |
| local Gb="sending to parameter of different type"; | | local Gb="Introduce basic support for parsing module map files."; |
| local Hb="casting A to type B";
| | local Hb="931fcd3ba011"; |
| local Ib="casting between types"; | | local Ib="clang/lib/Serialization/ASTReader.cpp"; |
| local Jb="61d065e21ff3"; | | local Jb="Basic support for Microsoft property declarations and\nreferences thereto.\n\nPatch by Tong Shen!\n\nllvm-svn: 179585"; |
| local Kb="clang/lib/Sema/SemaDeclObjC.cpp";
| | 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 Lb="Let clang atomic builtins fetch add/sub support floating point types"; | | local Lb="718292f260bf"; |
| local Mb="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";
| | local Mb="Basic support for Microsoft property declarations and"; |
| local Nb="clang/lib/Parse/Parser.cpp"; | | local Nb="type alias"; |
| local Ob=" B"; | | local Ob="clang/lib/Frontend/FrontendAction.cpp"; |
| local Pb="clang/lib/Sema/SemaOverload.cpp"; | | local Pb="Add a warning for not packing non-POD members in packed structs"; |
| local Qb="clang/lib/Parse/ParseDeclCXX.cpp"; | | local Qb="ec273d3e3a8c"; |
| local Rb="capturing value"; | | local Rb="clang/lib/Sema/SemaExprMember.cpp"; |
| local Sb="initializing vector element";
| | local Sb="attribute \'"; |
| local Tb="clang/test/Sema/fp-eval-pragma-with-float-double_t-1.c:28:15: error: cannot use type \'float_t\' within \'#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit"; | | local Tb="clang/lib/Sema/SemaCXXScopeSpec.cpp"; |
| local Ub="clang/test/Sema/fp-eval-pragma-with-float-double_t-1.c:30:16: error: cannot use type \'double_t\' within \'#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit"; | | local Ub="clang/test/SemaCXX/attr-musttail.cpp"; |
| local Vb="clang/lib/Parse/ParseExprCXX.cpp"; | | local Vb="Add a warning for not packing non-POD members in packed structs\n\nDifferential Revision: https://reviews.llvm.org/D118511"; |
| local Wb="assigning to A from B"; | | local Wb="default argument"; |
| local Xb="copying variable"; | | local Xb="cpu_dispatch"; |
| local Yb="copying parameter"; | | local Yb="cpu_specific"; |
| local Zb="returning object";
| | local Zb="target"; |
| local ac="clang/lib/Sema/SemaExprObjC.cpp";
| | 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="allocating object"; | | local bc="281d20b601c8"; |
| local cc="copying temporary"; | | local cc="Implement Attribute Target MultiVersioning"; |
| local dc="copying array element"; | | local dc="static assert"; |
| local ec="throwing object"; | | local ec="field"; |
| local fc="copying member subobject"; | | local fc="definition"; |
| local gc="initializing base subobject"; | | local gc="friend declaration"; |
| local hc="739b410f1ff5";
| | local hc="clang/test/Modules/odr_hash.cpp"; |
| local ic="7.1";
| | local ic="data member"; |
| local jc="clang/lib/Sema/SemaCast.cpp";
| | local jc="declaration"; |
| local kc="s";
| | local kc="clang/test/SemaObjC/objc-container-subscripting.m"; |
| local lc="invalid";
| | local lc="Parsing, semantic analysis, and AST for Objective-C type parameters."; |
| local mc="class";
| | local mc="Generics Issue"; |
| local nc="Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit";
| | local nc="no"; |
| local oc="Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit\n\nSee\nhttps://docs.google.com/document/d/1xMkTZMKx9llnMPgso0jrx3ankI4cv60xeZ0y4ksf4wc/preview\nfor background discussion.\n\nThis adds a warning, flags and pragmas to limit the number of\npre-processor tokens either at a certain point in a translation unit, or\noverall.\n\nThe idea is that this would allow projects to limit the size of certain\nwidely included headers, or for translation units overall, as a way to\ninsert backstops for header bloat and prevent compile-time regressions.\n\nDifferential revision: https://reviews.llvm.org/D72703";
| | local oc="85f3f9513dbc"; |
| local pc="function template"; | | local pc="clang/test/SemaObjC/parameterized_classes.m"; |
| local qc="clang/lib/Sema/Sema.cpp"; | | local qc="Parse inferred submodules in module maps, track their contents in"; |
| local rc=" (A and B)"; | | local rc="clang/lib/Sema/AnalysisBasedWarnings.cpp"; |
| local sc="<unused>"; | | 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 tc="class template"; | | 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 uc="\'"; | | local uc="clang/lib/Parse/ParseStmtAsm.cpp"; |
| local vc="6d485ff455ea"; | | local vc="14f6bfcb52e7"; |
| local wc="Improve static checks for sprintf and __builtin___sprintf_chk"; | | local wc="clang/test/Sema/attr-target-mv.c"; |
| local xc="Improve static checks for sprintf and __builtin___sprintf_chk\n\nImplement a pessimistic evaluator of the minimal required size for a buffer\nbased on the format string, and couple that with the fortified version to emit a\nwarning when the buffer size is lower than the lower bound computed from the\nformat string.\n\nDifferential Revision: https://reviews.llvm.org/D71566"; | | 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 yc="initializing statement expression result"; | | local yc="[clang] Implement objc_non_runtime_protocol to remove protocol metadata"; |
| local zc=" option"; | | local zc="Implement P2361 Unevaluated string literals"; |
| local Ac="clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp"; | | local Ac="95f50964fbf5"; |
| local Bc="missing"; | | local Bc="clang/lib/Sema/SemaOverload.cpp"; |
| local Cc="too few "; | | 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 Dc=" of type B";
| | local Dc="734410916a6d"; |
| local Ec="clang/lib/Lex/PPMacroExpansion.cpp";
| |
| local Fc="variable template"; | |
| local Gc="struct";
| |
| local Hc="Refactoring Invocation Issue";
| |
| local Ic="type alias";
| |
| local Jc="; dereference with *";
| |
| local Kc="; take the address with &";
| |
| local Lc="template";
| |
| local Mc="clang/test/Parser/cxx2a-concepts-requires-expr.cpp";
| |
| local Nc="union";
| |
| local Oc="clang/lib/Parse/ParseStmt.cpp";
| |
| local Pc="too many ";
| |
| local Qc="; remove *";
| |
| local Rc="typedef";
| |
| local Sc="; remove &";
| |
| local Tc="__host__";
| |
| local Uc="__global__";
| |
| local Vc="3dbcea8b957a"; | |
| local Wc="volatile";
| |
| local Xc="__device__";
| |
| local Yc="__host__ __device__";
| |
| local Zc="Reland [clang] Check unsupported types in expressions";
| |
| local ad="Reland [clang] Check unsupported types in expressions\n\nThis was committed as ec6c847179fd, but then reverted after a failure\nin: https://lab.llvm.org/buildbot/#/builders/84/builds/13983\n\nI was not able to reproduce the problem, but I added an extra check\nfor a NULL QualType just in case.\n\nOriginal comit message:\n\nThe patch adds missing diagnostics for cases like:\n\n float F3 = ((__float128)F1 * (__float128)F2) / 2.0f;\n\nSema::checkDeviceDecl (renamed to checkTypeSupport) is changed to work\nwith a type without the corresponding ValueDecl. It is also refactored\nso that host diagnostics for unsupported types can be added here as\nwell.\n\nDifferential Revision: https://reviews.llvm.org/D109315";
| |
| local bd="clang/lib/Basic/Targets.cpp"; | |
| local cd="clang/test/Preprocessor/line-directive.c";
| |
| local dd="clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp";
| |
| local ed="clang/test/SemaCXX/exceptions.cpp";
| |
| local fd="[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436";
| |
| local gd="[OPENMP]Fix PR49366: crash on VLAs in task untied regions.";
| |
| local hd="f9c3310d32c6";
| |
| local id="lvalue"; | |
| local jd="sizeof"; | |
| local kd="clang/lib/Sema/SemaLambda.cpp"; | |
| local ld="Reimplement reference initialization (C++ [dcl.init.ref]) using the\nnew notion of an \"initialization sequence\", which encapsulates the\ncomputation of the initialization sequence along with diagnostic\ninformation and the capability to turn the computed sequence into an\nexpression. At present, I\'ve only switched one CheckReferenceInit\ncallers over to this new mechanism; more will follow.\n\nAside from (hopefully) being much more true to the standard, the\ndiagnostics provided by this reference-initialization code are a bit\nbetter than before. Some examples:\n\np5-var.cpp:54:12: error: non-const lvalue reference to type \'struct\nDerived\'\n cannot bind to a value of unrelated type \'struct Base\'\n Derived &dr2 = b; // expected-error{{non-const lvalue reference to\n ...\n ^ ~\np5-var.cpp:55:9: error: binding of reference to type \'struct Base\' to\na value of\n type \'struct Base const\' drops qualifiers\n Base &br3 = bc; // expected-error{{drops qualifiers}}\n ^ ~~\n\np5-var.cpp:57:15: error: ambiguous conversion from derived class\n \'struct Diamond\' to base class \'struct Base\':\n struct Diamond -> struct Derived -> struct Base\n struct Diamond -> struct Derived2 -> struct Base\n Base &br5 = diamond; // expected-error{{ambiguous conversion from\n ...\n ^~~~~~~\np5-var.cpp:59:9: error: non-const lvalue reference to type \'long\'\n cannot bind to\n a value of unrelated type \'int\'\n long &lr = i; // expected-error{{non-const lvalue reference to type\n ...\n ^ ~\n\np5-var.cpp:74:9: error: non-const lvalue reference to type \'struct\nBase\' cannot\n bind to a temporary of type \'struct Base\'\n Base &br1 = Base(); // expected-error{{non-const lvalue reference to\n ...\n ^ ~~~~~~\n\np5-var.cpp:102:9: error: non-const reference cannot bind to bit-field\n\'i\'\n int & ir1 = (ib.i); // expected-error{{non-const reference cannot\n ...\n ^ ~~~~~~\np5-var.cpp:98:7: note: bit-field is declared here\n int i : 17; // expected-note{{bit-field is declared here}}\n ^\n\nllvm-svn: 90992"; | |
| local md="f60dc3caa673";
| |
| local nd="[C++20][Modules] Adjust handling of exports of namespaces and using-decls.";
| |
| local od="[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";
| |
| local pd="Reimplement reference initialization (C++ [dcl.init.ref]) using the";
| |
| local qd="alignof";
| |
| local rd="3e1e52782604";
| |
| local sd="clang/lib/Driver/ToolChains/Arch/ARM.cpp";
| |
| local td="interface";
| |
| local ud="enum";
| |
| local vd="Add #pragma clang module begin/end pragmas and generate them when preprocessing a module.\n\nThese pragmas are intended to simulate the effect of entering or leaving a file\nwith an associated module. This is not completely implemented yet: declarations\nbetween the pragmas will not be attributed to the correct module, but macro\nvisibility is already functional.\n\nModules named by #pragma clang module begin must already be known to clang (in\nsome module map that\'s either loaded or on the search path).\n\nllvm-svn: 302098";
| |
| local wd="d13863008b38";
| |
| local xd="clang/lib/Parse/ParseTemplate.cpp";
| |
| local yd="Add #pragma clang module begin/end pragmas and generate them when preprocessing a module.";
| |
|
| |
|
| return { | | return { |
| ["err_pp_including_mainfile_in_preamble"]={ | | ["err_matrix_incomplete_index"]={ |
| [i]={{nil,D,"err_pp_including_mainfile_in_preamble"}}, | | [i]={{nil,w,"err_matrix_incomplete_index"}}, |
| [h]={{nil,D,"main file cannot be included recursively when building a preamble"}}, | | [h]={{nil,w,"single subscript expressions are not allowed for matrix values"}}, |
| [g]={{nil,D,"main file cannot be included recursively when building a preamble"}}, | | [g]={{nil,w,"single subscript expressions are not allowed for matrix values"}}, |
| [b]=k, | | [b]=k, |
| [e]="main file cannot be included recursively when building a preamble", | | [e]="single subscript expressions are not allowed for matrix values", |
| [f]=a, | | [d]=a, |
| [d]={{nil,D,G}}, | | [f]={{nil,w,a}}, |
| [c]={"3c28a2dc6bdc",1557483935,"[Preamble] Stop circular inclusion of main file when building preamble","[Preamble] Stop circular inclusion of main file when building preamble\n\nIf a header file was processed for the second time, we could end up with a\nwrong conditional stack and skipped ranges:\n\nIn the particular example, if the header guard is evaluated the second time and\nit is decided to skip the conditional block, the corresponding \"#endif\" is\nnever seen since the preamble does not include it and we end up in the\nTok.is(tok::eof) case with a wrong conditional stack.\n\nDetect the circular inclusion, emit a diagnostic and stop processing the\ninclusion.\n\nllvm-svn: 360418"}, | | [c]={Hb,1576908663,Eb,Kb}, |
| [j]={{N,2371,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n/// SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n/// directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n/// lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n // ...\n // Check for circular inclusion of the main file.\n // We can\'t generate a consistent preamble with regard to the conditional\n // stack if the main file is included again as due to the preamble bounds\n // some directives (e.g. #endif of a header guard) will never be seen.\n // Since this will lead to confusing errors, avoid the inclusion.\n if (Action == Enter && File && PreambleConditionalStack.isRecording() && SourceMgr.isMainFile(File->getFileEntry())) {\n Diag(FilenameTok.getLocation(), diag::err_pp_including_mainfile_in_preamble);"}} | | [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);"}}, |
| | [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"} |
| | } |
| }, | | }, |
| ["err_pp_invalid_directive"]={ | | ["err_matrix_index_not_integer"]={ |
| [i]="err_pp_invalid_directive", | | [i]={{nil,w,"err_matrix_index_not_integer"}}, |
| [h]={{nil,y,"invalid preprocessing directive%select{|, did you mean \'#%1\'?}0"},{C,nil,"invalid preprocessing directive"}}, | | [h]={{nil,w,"matrix %select{row|column}0 index is not an integer"}}, |
| [g]={{nil,y,{"invalid preprocessing directive",{a,", did you mean \'#B\'?"}}},{C,nil,"invalid preprocessing directive"}}, | | [g]={{nil,w,{"matrix ",{"row","column"}," index is not an integer"}}}, |
| [b]=k, | | [b]=k, |
| [e]="invalid preprocessing directive(?:|, did you mean \'\\#(.*?)\'\\?)", | | [e]="matrix (?:row|column) index is not an integer", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]={{nil,w,a}}, |
| [c]={K,1236199783,J,I}, | | [c]={Hb,1576908663,Eb,Kb}, |
| [j]={{N,1334,"/// HandleDirective - This callback is invoked when the lexer sees a # token\n/// at the start of a line. This consumes the directive, modifies the\n/// lexer/preprocessor state, and advances the lexer(s) so that the next token\n/// read is the correct one.\nvoid Preprocessor::HandleDirective(Token &Result) {\n // ...\n Diag(Result, diag::err_pp_invalid_directive) << 0;"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Preprocessor/disabled-cond-diags2.c"]={"clang/test/Preprocessor/disabled-cond-diags2.c:14:2: error: invalid preprocessing directive"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pp_invalid_poison"]={ | | ["err_matrix_index_outside_range"]={ |
| [i]="err_pp_invalid_poison", | | [i]={{nil,w,"err_matrix_index_outside_range"}}, |
| [h]="can only poison identifier tokens", | | [h]={{nil,w,"matrix %select{row|column}0 index is outside the allowed range [0, %1)"}}, |
| [g]="can only poison identifier tokens", | | [g]={{nil,w,{"matrix ",{"row","column"}," index is outside the allowed range [0, B)"}}}, |
| [b]=k, | | [b]=k, |
| [e]="can only poison identifier tokens", | | [e]="matrix (?:row|column) index is outside the allowed range \\[0, (.*?)\\)", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]={{nil,w,a}}, |
| [c]={K,1236199783,J,I}, | | [c]={Hb,1576908663,Eb,Kb}, |
| [j]={{X,461,"/// HandlePragmaPoison - Handle \\#pragma GCC poison. PoisonTok is the \'poison\'.\nvoid Preprocessor::HandlePragmaPoison() {\n // ...\n while (true) {\n // ...\n // Can only poison identifiers.\n if (Tok.isNot(tok::raw_identifier)) {\n Diag(Tok, diag::err_pp_invalid_poison);"}} | | [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;"}}, |
| | [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)"} |
| | } |
| }, | | }, |
| ["err_pp_invalid_tok_in_arg_list"]={ | | ["err_matrix_separate_incomplete_index"]={ |
| [i]="err_pp_invalid_tok_in_arg_list", | | [i]={{nil,w,"err_matrix_separate_incomplete_index"}}, |
| [h]="invalid token in macro parameter list", | | [h]={{nil,w,"matrix row and column subscripts cannot be separated by any expression"}}, |
| [g]="invalid token in macro parameter list", | | [g]={{nil,w,"matrix row and column subscripts cannot be separated by any expression"}}, |
| [b]=k, | | [b]=k, |
| [e]="invalid token in macro parameter list", | | [e]="matrix row and column subscripts cannot be separated by any expression", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]={{nil,w,a}}, |
| [c]={K,1236199783,J,I}, | | [c]={Hb,1576908663,Eb,Kb}, |
| [j]={{N,2707,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read. Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn. Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n // ...\n while (true) {\n // ...\n default:\n // ...\n if (!II) {\n // ...\n Diag(Tok, diag::err_pp_invalid_tok_in_arg_list);"}} | | [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);"}}, |
| | [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"} |
| | } |
| }, | | }, |
| ["err_pp_invalid_udl"]={ | | ["err_matrix_subscript_comma"]={ |
| [i]="err_pp_invalid_udl", | | [i]={{nil,w,"err_matrix_subscript_comma"}}, |
| [h]="%select{character|integer}0 literal with user-defined suffix cannot be used in preprocessor constant expression", | | [h]={{nil,w,"comma expressions are not allowed as indices in matrix subscript expressions"}}, |
| [g]={{nil,nil,{{"character","integer"}," literal with user-defined suffix cannot be used in preprocessor constant expression"}}}, | | [g]={{nil,w,"comma expressions are not allowed as indices in matrix subscript expressions"}}, |
| [b]=k, | | [b]=k, |
| [e]="(?:character|integer) literal with user\\-defined suffix cannot be used in preprocessor constant expression", | | [e]="comma expressions are not allowed as indices in matrix subscript expressions", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]={{nil,w,a}}, |
| [c]={"39570d00201c",1331196332,"Add support for cooked forms of user-defined-integer-literal and","Add support for cooked forms of user-defined-integer-literal and\nuser-defined-floating-literal. Support for raw forms of these literals\nto follow.\n\nllvm-svn: 152302"}, | | [c]={Hb,1576908663,Eb,Kb}, |
| [j]={{"clang/lib/Lex/PPExpressions.cpp",315,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result. Return true if there was an error\n/// parsing. This function also returns information about the form of the\n/// expression in DT. See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used. As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n // ...\n case tok::numeric_constant: {\n // ...\n // Complain about, and drop, any ud-suffix.\n if (Literal.hasUDSuffix())\n PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*integer*/ 1;"},{"clang/lib/Lex/PPExpressions.cpp",380,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result. Return true if there was an error\n/// parsing. This function also returns information about the form of the\n/// expression in DT. See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used. As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n // ...\n case tok::char_constant: // \'x\'\n case tok::wide_char_constant: // L\'x\'\n case tok::utf8_char_constant: // u8\'x\'\n case tok::utf16_char_constant: // u\'x\'\n case tok::utf32_char_constant: { // U\'x\'\n // Complain about, and drop, any ud-suffix.\n if (PeekTok.hasUDSuffix())\n PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*character*/ 0;"}}, | | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Parser/cxx11-user-defined-literals.cpp"]={"clang/test/Parser/cxx11-user-defined-literals.cpp:30:5: error: character literal with user-defined suffix cannot be used in preprocessor constant expression","clang/test/Parser/cxx11-user-defined-literals.cpp:30:13: error: character literal with user-defined suffix cannot be used in preprocessor constant expression","clang/test/Parser/cxx11-user-defined-literals.cpp:36:5: error: integer literal with user-defined suffix cannot be used in preprocessor constant expression"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pp_line_digit_sequence"]={ | | ["err_maybe_falloff_nonvoid_block"]={ |
| [i]="err_pp_line_digit_sequence", | | [i]="err_maybe_falloff_nonvoid_block", |
| [h]="%select{#line|GNU line marker}0 directive requires a simple digit sequence", | | [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"}}, |
| [g]={{nil,nil,{{"#line","GNU line marker"}," directive requires a simple digit sequence"}}}, | | [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"}}, |
| [b]=k, | | [b]=k, |
| [e]="(?:\\#line|GNU line marker) directive requires a simple digit sequence", | | [e]="non\\-void block does not return a value in all control paths", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]=m, |
| [c]={"d66f172ab1b6",1240079715,"more fun with line markers: the digit string is required to be interpreted","more fun with line markers: the digit string is required to be interpreted\nas decimal, even if it starts with 0. Also, since things like 0x1 are\ncompletely illegal, don\'t even bother using numericliteralparser for them.\n\nllvm-svn: 69454"}, | | [c]={"3bf1ab48d304",1248818641,"Add noreturn support for blocks.","Add noreturn support for blocks.\n\nllvm-svn: 77377"}, |
| [j]={{N,1375,"/// GetLineValue - Convert a numeric token into an unsigned value, emitting\n/// Diagnostic DiagID if it is invalid, and returning the value in Val.\nstatic bool GetLineValue(Token &DigitTok, unsigned &Val, unsigned DiagID, Preprocessor &PP, bool IsGNULineDirective = false) {\n // ...\n for (unsigned i = 0; i != ActualLength; ++i) {\n // ...\n if (!isDigit(DigitTokBegin[i])) {\n PP.Diag(PP.AdvanceToTokenCharacter(DigitTok.getLocation(), i), diag::err_pp_line_digit_sequence) << IsGNULineDirective;"}}, | | [j]={{rc,599,"struct CheckFallThroughDiagnostics {\n // ...\n static CheckFallThroughDiagnostics MakeForBlock() {\n // ...\n D.diag_MaybeFallThrough_ReturnsNonVoid = diag::err_maybe_falloff_nonvoid_block;"}}, |
| [l]={ | | [l]={ |
| [cd]={"foo:49:5: error: GNU line marker directive requires a simple digit sequence","foo.c:4:8: error: #line directive requires a simple digit sequence","foo.c:5:9: error: #line directive requires a simple digit sequence"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pp_line_invalid_filename"]={ | | ["err_mem_init_not_member_or_class"]={ |
| [i]="err_pp_line_invalid_filename", | | [i]="err_mem_init_not_member_or_class", |
| [h]="invalid filename for #line directive", | | [h]="member initializer %0 does not name a non-static data member or base class", |
| [g]="invalid filename for #line directive", | | [g]="member initializer A does not name a non-static data member or base class", |
| [b]=k, | | [b]=k, |
| [e]="invalid filename for \\#line directive", | | [e]="member initializer (.*?) does not name a non\\-static data member or base class", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]=m, |
| [c]={K,1236199783,J,I}, | | [c]={hb,1237025389,gb,fb}, |
| [j]={{N,1436,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n/// # line digit-sequence\n/// # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n // ...\n // If the StrTok is \"eod\", then it wasn\'t present. Otherwise, it must be a\n // string followed by eod.\n if (StrTok.is(tok::eod))\n // ...\n else if (StrTok.isNot(tok::string_literal)) {\n Diag(StrTok, diag::err_pp_line_invalid_filename);"}}, | | [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());"}}, |
| [l]={ | | [l]={ |
| [cd]={"clang/test/Preprocessor/line-directive.c:42:10: error: invalid filename for #line directive"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pp_line_requires_integer"]={ | | ["err_mem_init_not_member_or_class_suggest"]={ |
| [i]="err_pp_line_requires_integer", | | [i]="err_mem_init_not_member_or_class_suggest", |
| [h]="#line directive requires a positive integer argument", | | [h]="initializer %0 does not name a non-static data member or base class; did you mean the %select{base class|member}1 %2?", |
| [g]="#line directive requires a positive integer argument", | | [g]={{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, | | [b]=k, |
| [e]="\\#line directive requires a positive integer argument", | | [e]="initializer (.*?) does not name a non\\-static data member or base class; did you mean the (?:base class|member) (.*?)\\?", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]=m, |
| [c]={K,1236199783,J,I}, | | [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"}, |
| [j]={{N,1411,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n/// # line digit-sequence\n/// # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n // ...\n if (GetLineValue(DigitTok, LineNo, diag::err_pp_line_requires_integer, *this))"}}, | | [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.*/);"}}, |
| [l]={ | | [l]={ |
| [cd]={"clang/test/Preprocessor/line-directive.c:14:7: error: #line directive requires a positive integer argument"} | | ["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\'?"} |
| } | | } |
| }, | | }, |
| ["err_pp_linemarker_invalid_filename"]={ | | ["err_member_call_without_object"]={ |
| [i]="err_pp_linemarker_invalid_filename", | | [i]="err_member_call_without_object", |
| [h]="invalid filename for line marker directive", | | [h]="call to non-static member function without an object argument", |
| [g]="invalid filename for line marker directive", | | [g]="call to non-static member function without an object argument", |
| [b]=k, | | [b]=k, |
| [e]="invalid filename for line marker directive", | | [e]="call to non\\-static member function without an object argument", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]=m, |
| [c]={K,1236199783,J,I}, | | [c]={H,1236199783,I,G}, |
| [j]={{N,1452,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n/// # line digit-sequence\n/// # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n // ...\n // If the StrTok is \"eod\", then it wasn\'t present. Otherwise, it must be a\n // string followed by eod.\n if (StrTok.is(tok::eod))\n // ...\n else if (StrTok.isNot(tok::string_literal)) {\n // ...\n } else if (StrTok.hasUDSuffix()) {\n // ...\n } else {\n // ...\n if (Literal.Pascal) {\n Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{N,1587,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n/// # 42\n/// # 42 \"file\" (\'1\' | \'2\')?\n/// # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n // ...\n // If the StrTok is \"eod\", then it wasn\'t present. Otherwise, it must be a\n // string followed by eod.\n if (StrTok.is(tok::eod)) {\n // ...\n } else if (StrTok.isNot(tok::string_literal)) {\n Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{N,1603,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n/// # 42\n/// # 42 \"file\" (\'1\' | \'2\')?\n/// # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n // ...\n // If the StrTok is \"eod\", then it wasn\'t present. Otherwise, it must be a\n // string followed by eod.\n if (StrTok.is(tok::eod)) {\n // ...\n } else if (StrTok.isNot(tok::string_literal)) {\n // ...\n } else if (StrTok.hasUDSuffix()) {\n // ...\n } else {\n // ...\n if (Literal.Pascal) {\n Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| [cd]={"foo:44:6: error: invalid filename for line marker directive","foo:45:6: error: invalid filename for line marker directive"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pp_linemarker_invalid_flag"]={ | | ["err_member_decl_does_not_match"]={ |
| [i]="err_pp_linemarker_invalid_flag", | | [i]="err_member_decl_does_not_match", |
| [h]="invalid flag line marker directive", | | [h]="out-of-line %select{declaration|definition}2 of %0 does not match any declaration in %1", |
| [g]="invalid flag line marker directive", | | [g]={{nil,nil,{"out-of-line ",{jc,fc}," of A does not match any declaration in B"}}}, |
| [b]=k, | | [b]=k, |
| [e]="invalid flag line marker directive", | | [e]="out\\-of\\-line (?:declaration|definition) of (.*?) does not match any declaration in (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]=m, |
| [c]={K,1236199783,J,I}, | | [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"}, |
| [j]={{N,1488,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // ...\n if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{N,1496,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // ...\n if (FlagVal == 1) {\n // ...\n if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{N,1522,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // ...\n if (FlagVal == 1) {\n // ...\n } else if (FlagVal == 2) {\n // ...\n if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{N,1528,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // ...\n // We must have 3 if there are still flags.\n if (FlagVal != 3) {\n PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{N,1537,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // ...\n if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{N,1542,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // ...\n // We must have 4 if there is yet another flag.\n if (FlagVal != 4) {\n PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{N,1553,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // ...\n PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"}},
| | [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]={ |
| [cd]={"foo:46:14: error: invalid flag line marker directive","foo:47:12: error: invalid flag line marker directive","foo:48:14: error: invalid flag line marker directive"} | | ["clang/test/CXX/special/class.inhctor/p8.cpp"]={"clang/test/CXX/special/class.inhctor/p8.cpp:32:35: error: out-of-line definition of \'D\' does not match any declaration in \'D\'"} |
| } | | } |
| }, | | }, |
| ["err_pp_linemarker_invalid_pop"]={ | | ["err_member_decl_does_not_match_suggest"]={ |
| [i]="err_pp_linemarker_invalid_pop", | | [i]="err_member_decl_does_not_match_suggest", |
| [h]="invalid line marker flag \'2\': cannot pop empty include stack", | | [h]="out-of-line %select{declaration|definition}2 of %0 does not match any declaration in %1; did you mean %3?", |
| [g]="invalid line marker flag \'2\': cannot pop empty include stack", | | [g]={{nil,nil,{"out-of-line ",{jc,fc}," of A does not match any declaration in B; did you mean D?"}}}, |
| [b]=k, | | [b]=k, |
| [e]="invalid line marker flag \'2\'\\: cannot pop empty include stack", | | [e]="out\\-of\\-line (?:declaration|definition) of (.*?) does not match any declaration in (.*?); did you mean (.*?)\\?", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]=m, |
| [c]={K,1236199783,J,I}, | | [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"}, |
| [j]={{N,1515,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // ...\n if (FlagVal == 1) {\n // ...\n } else if (FlagVal == 2) {\n // ...\n if (IncLoc.isInvalid() || SM.getDecomposedExpansionLoc(IncLoc).first != CurFileID) {\n PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_pop);"}}, | | [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]={ |
| ["clang/test/Preprocessor/line-directive-system-headers.c"]={"foo:44:12: error: invalid line marker flag \'2\': cannot pop empty include stack","foo:44:12: error: invalid line marker flag \'2\': cannot pop empty include stack"} | | ["clang/test/FixIt/typo-crash.cpp"]={"clang/test/FixIt/typo-crash.cpp:23:5: error: out-of-line declaration of \'global\' does not match any declaration in namespace \'PR12297::A\'; did you mean \'::PR12297::global\'?"} |
| } | | } |
| }, | | }, |
| ["err_pp_linemarker_requires_integer"]={ | | ["err_member_def_does_not_match_ret_type"]={ |
| [i]="err_pp_linemarker_requires_integer", | | [i]="err_member_def_does_not_match_ret_type", |
| [h]="line marker directive requires a positive integer argument", | | [h]="return type of out-of-line definition of %q0 differs from that in the declaration", |
| [g]="line marker directive requires a positive integer argument", | | [g]="return type of out-of-line definition of A differs from that in the declaration", |
| [b]=k, | | [b]=k, |
| [e]="line marker directive requires a positive integer argument", | | [e]="return type of out\\-of\\-line definition of (.*?) differs from that in the declaration", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]=m, |
| [c]={K,1236199783,J,I}, | | [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"}, |
| [j]={{N,1569,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n/// # 42\n/// # 42 \"file\" (\'1\' | \'2\')?\n/// # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n // ...\n if (GetLineValue(DigitTok, LineNo, diag::err_pp_linemarker_requires_integer, *this, true))"}} | | [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]={ |
| | ["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:271:10: error: return type of out-of-line definition of \'rdar7980179::A::f0\' differs from that in the declaration"} |
| | } |
| }, | | }, |
| ["err_pp_macro_not_identifier"]={ | | ["err_member_def_undefined_record"]={ |
| [i]="err_pp_macro_not_identifier", | | [i]="err_member_def_undefined_record", |
| [h]="macro name must be an identifier", | | [h]="out-of-line definition of %0 from class %1 without definition", |
| [g]="macro name must be an identifier", | | [g]="out-of-line definition of A from class B without definition", |
| [b]=k, | | [b]=k, |
| [e]="macro name must be an identifier", | | [e]="out\\-of\\-line definition of (.*?) from class (.*?) without definition", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]=m, |
| [c]={K,1236199783,J,I}, | | [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"}, |
| [j]={{N,329,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n // ...\n if (!II)\n return Diag(MacroNameTok, diag::err_pp_macro_not_identifier);"}}, | | [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]={ |
| ["clang/test/Preprocessor/ifdef-recover.c"]={"clang/test/Preprocessor/ifdef-recover.c:9:8: error: macro name must be an identifier","clang/test/Preprocessor/ifdef-recover.c:31:10: error: macro name must be an identifier"} | | ["clang/test/CXX/temp/temp.decls/temp.class.spec/temp.class.spec.mfunc/p1-neg.cpp"]={"clang/test/CXX/temp/temp.decls/temp.class.spec/temp.class.spec.mfunc/p1-neg.cpp:24:15: error: out-of-line definition of \'f1\' from class \'A<T, N>\' without definition"} |
| } | | } |
| }, | | }, |
| ["err_pp_malformed_ident"]={ | | ["err_member_extra_qualification"]={ |
| [i]="err_pp_malformed_ident", | | [i]="err_member_extra_qualification", |
| [h]="invalid #ident directive", | | [h]="extra qualification on member %0", |
| [g]="invalid #ident directive", | | [g]="extra qualification on member A", |
| [b]=k, | | [b]=k, |
| [e]="invalid \\#ident directive", | | [e]="extra qualification on member (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]=m, |
| [c]={K,1236199783,J,I}, | | [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"}, |
| [j]={{N,1674,"/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.\n///\nvoid Preprocessor::HandleIdentSCCSDirective(Token &Tok) {\n // ...\n // If the token kind isn\'t a string, it\'s a malformed directive.\n if (StrTok.isNot(tok::string_literal) && StrTok.isNot(tok::wide_string_literal)) {\n Diag(StrTok, diag::err_pp_malformed_ident);"}} | | [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]={ |
| | ["clang/test/CXX/special/class.ctor/p1.cpp"]={"clang/test/CXX/special/class.ctor/p1.cpp:46:7: error: extra qualification on member \'X2\'","clang/test/CXX/special/class.ctor/p1.cpp:53:7: error: extra qualification on member \'X3\'"} |
| | } |
| }, | | }, |
| ["err_pp_missing_lparen_in_vaopt_use"]={ | | ["err_member_function_call_bad_cvr"]={ |
| [i]={{nil,A,"err_pp_missing_lparen_in_vaopt_use"}}, | | [i]="err_member_function_call_bad_cvr", |
| [h]={{nil,A,"missing \'(\' following __VA_OPT__"}}, | | [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"}}, |
| [g]={{nil,A,"missing \'(\' following __VA_OPT__"}}, | | [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"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="missing \'\\(\' following __VA_OPT__", | | [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)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,A,G}}, | | [f]=m, |
| [c]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)","[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)\n\nThis patch implements an extension to the preprocessor:\n\n__VA_OPT__(contents) --> which expands into its contents if variadic arguments are supplied to the parent macro, or behaves as an empty token if none.\n\n - Currently this feature is only enabled for C++2a (this could be enabled, with some careful tweaks, for other dialects with the appropriate extension or compatibility warnings)\n\n - The patch was reviewed here: https://reviews.llvm.org/D35782 and asides from the above (and moving some of the definition and expansion recognition logic into the corresponding state machines), I believe I incorporated all of Richard\'s suggestions.\n\nA few technicalities (most of which were clarified through private correspondence between rsmith, hubert and thomas) are worth mentioning. Given:\n\n #define F(a,...) a #__VA_OPT__(a ## a) a ## __VA_OPT__(__VA_ARGS__)\n\n - The call F(,) Does not supply any tokens for the variadic arguments and hence VA_OPT behaves as a placeholder.\n - When expanding VA_OPT (for e.g. F(,1) token pasting occurs eagerly within its contents if the contents need to be stringified.\n - A hash or a hashhash prior to VA_OPT does not inhibit expansion of arguments if they are the first token within VA_OPT.\n - When a variadic argument is supplied, argument substitution occurs within the contents as does stringification - and these resulting tokens are inserted back into the macro expansions token stream just prior to the entire stream being rescanned and concatenated.\n\nSee wg21.link/P0306 for further details on the feature.\n\n\nAcknowledgment: This patch would have been poorer if not for Richard Smith\'s usual thoughtful analysis and feedback.\nllvm-svn: 315840"}, | | [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"}, |
| [j]={{N,2916,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // ...\n // Read the rest of the macro body.\n if (MI->isObjectLike()) {\n // ...\n } else {\n // ...\n while (Tok.isNot(tok::eod)) {\n // ...\n if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n // ...\n if (VAOCtx.isVAOptToken(Tok)) {\n // ...\n if (Tok.isNot(tok::l_paren)) {\n Diag(Tok, diag::err_pp_missing_lparen_in_vaopt_use);"}}, | | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:6:29: error: missing \'(\' following __VA_OPT__"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pp_missing_macro_name"]={ | | ["err_member_function_call_bad_ref"]={ |
| [i]="err_pp_missing_macro_name", | | [i]={{nil,t,"err_member_function_call_bad_ref"}}, |
| [h]="macro name missing", | | [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"}}, |
| [g]="macro name missing", | | [g]={{nil,t,{"\'this\' argument to member function A is an ",{"lvalue","rvalue"},", but function has ",{"non-const lvalue","rvalue"}," ref-qualifier"}}}, |
| [b]=k, | | [b]=k, |
| [e]="macro name missing", | | [e]="\'this\' argument to member function (.*?) is an (?:lvalue|rvalue), but function has (?:non\\-const lvalue|rvalue) ref\\-qualifier", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]={{nil,t,m}}, |
| [c]={K,1236199783,J,I}, | | [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"}, |
| [j]={{N,325,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n // Missing macro name?\n if (MacroNameTok.is(tok::eod))\n return Diag(MacroNameTok, diag::err_pp_missing_macro_name);"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Preprocessor/ifdef-recover.c"]={"clang/test/Preprocessor/ifdef-recover.c:5:7: error: macro name missing","clang/test/Preprocessor/ifdef-recover.c:13:12: error: macro name missing","clang/test/Preprocessor/ifdef-recover.c:25:9: error: macro name missing"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pp_missing_rparen_in_macro_def"]={ | | ["err_member_function_call_bad_type"]={ |
| [i]="err_pp_missing_rparen_in_macro_def", | | [i]={{nil,t,"err_member_function_call_bad_type"}}, |
| [h]="missing \')\' in macro parameter list", | | [h]={{nil,t,"cannot initialize object parameter of type %0 with an expression of type %1"}}, |
| [g]="missing \')\' in macro parameter list", | | [g]={{nil,t,"cannot initialize object parameter of type A with an expression of type B"}}, |
| [b]=k, | | [b]=k, |
| [e]="missing \'\\)\' in macro parameter list", | | [e]="cannot initialize object parameter of type (.*?) with an expression of type (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]={{nil,t,m}}, |
| [c]={K,1236199783,J,I}, | | [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"}, |
| [j]={{N,2690,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read. Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn. Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n // ...\n while (true) {\n // ...\n case tok::ellipsis: // #define X(... -> C99 varargs\n // ...\n if (Tok.isNot(tok::r_paren)) {\n Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{N,2699,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read. Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn. Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n // ...\n while (true) {\n // ...\n case tok::eod: // #define X(\n Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{N,2740,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read. Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn. Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n // ...\n while (true) {\n // ...\n default:\n // ...\n case tok::ellipsis: // #define X(A... -> GCC extension\n // ...\n if (Tok.isNot(tok::r_paren)) {\n Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"}}
| | [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();"}} |
| }, | | }, |
| ["err_pp_module_begin_no_module_map"]={ | | ["err_member_function_initialization"]={ |
| [i]={{nil,o,"err_pp_module_begin_no_module_map"}}, | | [i]="err_member_function_initialization", |
| [h]={{nil,o,"no module map available for module %0"}}, | | [h]="initializer on function does not look like a pure-specifier", |
| [g]={{nil,o,"no module map available for module A"}}, | | [g]="initializer on function does not look like a pure-specifier", |
| [b]=k, | | [b]=k, |
| [e]="no module map available for module (.*?)", | | [e]="initializer on function does not look like a pure\\-specifier", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,G}}, | | [f]=m, |
| [c]={wd,1493857794,yd,vd}, | | [c]={H,1236199783,I,G}, |
| [j]={{X,1758,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n/// #pragma clang module begin some.module.name\n/// ...\n/// #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (!M) {\n PP.Diag(ModuleName.front().second, diag::err_pp_module_begin_no_module_map) << Current;"}} | | [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]={ |
| | ["clang/test/SemaCXX/virtuals.cpp"]={"clang/test/SemaCXX/virtuals.cpp:8:8: error: initializer on function does not look like a pure-specifier","clang/test/SemaCXX/virtuals.cpp:9:8: error: initializer on function does not look like a pure-specifier","clang/test/SemaCXX/virtuals.cpp:61:11: error: initializer on function does not look like a pure-specifier"} |
| | } |
| }, | | }, |
| ["err_pp_module_begin_no_submodule"]={ | | ["err_member_name_of_class"]={ |
| [i]={{nil,o,"err_pp_module_begin_no_submodule"}}, | | [i]="err_member_name_of_class", |
| [h]={{nil,o,"submodule %0.%1 not declared in module map"}}, | | [h]="member %0 has the same name as its class", |
| [g]={{nil,o,"submodule A.B not declared in module map"}}, | | [g]="member A has the same name as its class", |
| [b]=k, | | [b]=k, |
| [e]="submodule (.*?)\\.(.*?) not declared in module map", | | [e]="member (.*?) has the same name as its class", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,G}}, | | [f]=m, |
| [c]={wd,1493857794,yd,vd}, | | [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"}, |
| [j]={{X,1764,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n/// #pragma clang module begin some.module.name\n/// ...\n/// #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n for (unsigned I = 1; I != ModuleName.size(); ++I) {\n // ...\n if (!NewM) {\n PP.Diag(ModuleName[I].second, diag::err_pp_module_begin_no_submodule) << M->getFullModuleName() << ModuleName[I].first;"}} | | [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();"}}, |
| | [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"} |
| | } |
| }, | | }, |
| ["err_pp_module_begin_without_module_end"]={ | | ["err_member_not_yet_instantiated"]={ |
| [i]={{nil,o,"err_pp_module_begin_without_module_end"}}, | | [i]="err_member_not_yet_instantiated", |
| [h]={{nil,o,"no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"}}, | | [h]="no member %0 in %1; it has not yet been instantiated", |
| [g]={{nil,o,"no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"}}, | | [g]="no member A in B; it has not yet been instantiated", |
| [b]=k, | | [b]=k, |
| [e]="no matching \'\\#pragma clang module end\' for this \'\\#pragma clang module begin\'", | | [e]="no member (.*?) in (.*?); it has not yet been instantiated", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,G}}, | | [f]=m, |
| [c]={wd,1493857794,yd,vd}, | | [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"}, |
| [j]={{"clang/lib/Lex/PPLexerChange.cpp",353,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file. This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n // ...\n if ((LeavingSubmodule || IncludeMacroStack.empty()) && !BuildingSubmoduleStack.empty() && BuildingSubmoduleStack.back().IsPragma) {\n Diag(BuildingSubmoduleStack.back().ImportLoc, diag::err_pp_module_begin_without_module_end);"}}, | | [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]={ |
| ["clang/test/Preprocessor/pragma_module.c"]={"clang/test/Preprocessor/pragma_module.c:52:22: error: no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"} | | ["clang/test/SemaCXX/many-template-parameter-lists.cpp"]={"clang/test/SemaCXX/many-template-parameter-lists.cpp:31:30: error: no member \'A\' in \'X<int>\'; it has not yet been instantiated"} |
| } | | } |
| }, | | }, |
| ["err_pp_module_begin_wrong_module"]={ | | ["err_member_qualification"]={ |
| [i]={{nil,o,"err_pp_module_begin_wrong_module"}}, | | [i]="err_member_qualification", |
| [h]={{nil,o,"must specify \'-fmodule-name=%0\' to enter %select{|submodule of }1this module%select{ (current module is %3)|}2"}}, | | [h]="non-friend class member %0 cannot have a qualified name", |
| [g]={{nil,o,{"must specify \'-fmodule-name=A\' to enter ",{a,"submodule of "},"this module",{" (current module is D)",a}}}}, | | [g]="non-friend class member A cannot have a qualified name", |
| [b]=k, | | [b]=k, |
| [e]="must specify \'\\-fmodule\\-name\\=(.*?)\' to enter (?:|submodule of )this module(?: \\(current module is (.*?)\\)|)", | | [e]="non\\-friend class member (.*?) cannot have a qualified name", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,G}}, | | [f]=m, |
| [c]={wd,1493857794,yd,vd}, | | [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"}, |
| [j]={{X,1746,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n/// #pragma clang module begin some.module.name\n/// ...\n/// #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (ModuleName.front().first->getName() != Current) {\n PP.Diag(ModuleName.front().second, diag::err_pp_module_begin_wrong_module) << ModuleName.front().first << (ModuleName.size() > 1) << Current.empty() << Current;"}} | | [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();"}}, |
| | [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"} |
| | } |
| }, | | }, |
| ["err_pp_module_build_missing_end"]={ | | ["err_member_redeclared"]={ |
| [i]={{nil,o,"err_pp_module_build_missing_end"}}, | | [i]="err_member_redeclared", |
| [h]={{nil,o,"no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'"}}, | | [h]="class member cannot be redeclared", |
| [g]={{nil,o,"no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'"}}, | | [g]="class member cannot be redeclared", |
| [b]=k, | | [b]=k, |
| [e]="no matching \'\\#pragma clang module endbuild\' for this \'\\#pragma clang module build\'", | | [e]="class member cannot be redeclared", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,G}}, | | [f]=m, |
| [c]={"5d2ed489870c",1497036152,"Add #pragma clang module build/endbuild pragmas for performing a module build","Add #pragma clang module build/endbuild pragmas for performing a module build\nas part of a compilation.\n\nThis is intended for two purposes:\n\n1) Writing self-contained test cases for modules: we can now write a single\nsource file test that builds some number of module files on the side and\nimports them.\n\n2) Debugging / test case reduction. A single-source testcase is much more\namenable to reduction, compared to a VFS tarball or .pcm files.\n\nllvm-svn: 305101"}, | | [c]={hb,1237025389,gb,fb}, |
| [j]={{X,841,"void Preprocessor::HandlePragmaModuleBuild(Token &Tok) {\n // ...\n while (true) {\n // ...\n if (Tok.is(tok::eof)) {\n Diag(Loc, diag::err_pp_module_build_missing_end);"}},
| | [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]={ |
| ["clang/test/Modules/preprocess-build.cpp"]={"clang/test/Modules/preprocess-build.cpp:35:22: error: no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'"} | | ["clang/test/SemaTemplate/injected-class-name.cpp"]={"clang/test/SemaTemplate/injected-class-name.cpp:30:8: error: class member cannot be redeclared","clang/test/SemaTemplate/injected-class-name.cpp:34:8: error: class member cannot be redeclared","clang/test/SemaTemplate/injected-class-name.cpp:38:8: error: class member cannot be redeclared","clang/test/SemaTemplate/injected-class-name.cpp:45:8: error: class member cannot be redeclared"} |
| } | | } |
| }, | | }, |
| ["err_pp_module_end_without_module_begin"]={ | | ["err_member_redeclared_in_instantiation"]={ |
| [i]={{nil,o,"err_pp_module_end_without_module_begin"}}, | | [i]="err_member_redeclared_in_instantiation", |
| [h]={{nil,o,"no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'"}}, | | [h]="multiple overloads of %0 instantiate to the same signature %1", |
| [g]={{nil,o,"no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'"}}, | | [g]="multiple overloads of A instantiate to the same signature B", |
| [b]=k, | | [b]=k, |
| [e]="no matching \'\\#pragma clang module begin\' for this \'\\#pragma clang module end\'", | | [e]="multiple overloads of (.*?) instantiate to the same signature (.*?)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,G}}, | | [f]=m, |
| [c]={wd,1493857794,yd,vd}, | | [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"}, |
| [j]={{X,1802,"/// Handle the clang \\#pragma module end extension.\nstruct PragmaModuleEndHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (M)\n // ...\n else\n PP.Diag(Loc, diag::err_pp_module_end_without_module_begin);"}}, | | [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]={ |
| ["clang/test/Modules/preprocess-unavailable.cpp"]={"clang/test/Modules/preprocess-unavailable.cpp:12:22: error: no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'"} | | ["clang/test/SemaTemplate/instantiate-method.cpp"]={"clang/test/SemaTemplate/instantiate-method.cpp:181:10: error: multiple overloads of \'f\' instantiate to the same signature \'void (const int *)\'"} |
| } | | } |
| }, | | }, |
| ["err_pp_nested_paren"]={ | | ["err_member_reference_needs_call"]={ |
| [i]="err_pp_nested_paren", | | [i]="err_member_reference_needs_call", |
| [h]="nested parentheses not permitted in %0", | | [h]="base of member reference is a function; perhaps you meant to call it%select{| with no arguments}0?", |
| [g]="nested parentheses not permitted in A", | | [g]={{nil,nil,{"base of member reference is a function; perhaps you meant to call it",{a," with no arguments"},"?"}}}, |
| [b]=k, | | [b]=k, |
| [e]="nested parentheses not permitted in (.*?)", | | [e]="base of member reference is a function; perhaps you meant to call it(?:| with no arguments)\\?", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]=m, |
| [c]={"50b6ceff1f06",1459845407,"Consolidate and improve the handling of built-in feature-like macros","Consolidate and improve the handling of built-in feature-like macros\n\nSummary:\nThe parsing logic has been separated out from the macro implementation logic, leading to a number of improvements:\n\n* Gracefully handle unexpected/invalid tokens, too few, too many and nested parameters\n* Provide consistent behaviour between all built-in feature-like macros\n* Simplify the implementation of macro logic\n* Fix __is_identifier to correctly return \'0\' for non-identifiers\n\nReviewers: doug.gregor, rsmith\n\nSubscribers: rsmith, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D17149\n\nllvm-svn: 265381"}, | | [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"}, |
| [j]={{Ec,1337,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n // ...\n already_lexed:\n // ...\n case tok::l_paren:\n // ...\n if (!SuppressDiagnostic) {\n PP.Diag(Tok.getLocation(), diag::err_pp_nested_paren) << II;"}}, | | [j]={{Rb,1681,"fail:\n // ...\n if (S.tryToRecoverWithCall(BaseExpr, S.PDiag(diag::err_member_reference_needs_call),"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Preprocessor/feature_tests.c"]={"clang/test/Preprocessor/feature_tests.c:122:21: error: nested parentheses not permitted in \'__is_identifier\'"} | | ["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?"} |
| } | | } |
| }, | | }, |
| ["err_pp_operator_used_as_macro_name"]={ | | ["err_member_with_template_arguments"]={ |
| [i]="err_pp_operator_used_as_macro_name", | | [i]={{nil,s,"err_member_with_template_arguments"}}, |
| [h]="C++ operator %0 (aka %1) used as a macro name", | | [h]={{nil,s,"member %0 cannot have template arguments"}}, |
| [g]="C++ operator A (aka B) used as a macro name", | | [g]={{nil,s,"member A cannot have template arguments"}}, |
| [b]=k, | | [b]=k, |
| [e]="C\\+\\+ operator (.*?) \\(aka (.*?)\\) used as a macro name", | | [e]="member (.*?) cannot have template arguments", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]={{nil,s,m}}, |
| [c]={K,1236199783,J,I}, | | [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"}, |
| [j]={{N,336,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n // ...\n if (II->isCPlusPlusOperatorKeyword()) {\n // ...\n Diag(MacroNameTok, getLangOpts().MicrosoftExt ? diag::ext_pp_operator_used_as_macro_name : diag::err_pp_operator_used_as_macro_name) << II << MacroNameTok.getKind();"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Preprocessor/cxx_oper_keyword.cpp"]={"clang/test/Preprocessor/cxx_oper_keyword.cpp:16:9: error: C++ operator \'and\' (aka \'&&\') used as a macro name","clang/test/Preprocessor/cxx_oper_keyword.cpp:21:13: error: C++ operator \'xor\' (aka \'^\') used as a macro name","clang/test/Preprocessor/cxx_oper_keyword.cpp:29:8: error: C++ operator \'and\' (aka \'&&\') used as a macro name"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pp_pragma_hdrstop_not_seen"]={ | | ["err_mempointer_in_nonclass_type"]={ |
| [i]={{nil,E,"err_pp_pragma_hdrstop_not_seen"}}, | | [i]="err_mempointer_in_nonclass_type", |
| [h]={{nil,E,"#pragma hdrstop not seen while attempting to use precompiled header"}}, | | [h]="member pointer refers into non-class type %0", |
| [g]={{nil,E,"#pragma hdrstop not seen while attempting to use precompiled header"}}, | | [g]="member pointer refers into non-class type A", |
| [b]="fatal error\\: ",
| |
| [e]="\\#pragma hdrstop not seen while attempting to use precompiled header",
| |
| [f]=a,
| |
| [d]={{nil,E,G}},
| |
| [c]={"58df1affedc0",1536685844,"[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop","[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop\n\nWith clang-cl, when the user specifies /Yc or /Yu without a filename\nthe compiler uses a #pragma hdrstop in the main source file to\ndetermine the end of the PCH. If a header is specified with /Yc or\n/Yu #pragma hdrstop has no effect.\n\nThe optional #pragma hdrstop filename argument is not yet supported.\n\nDifferential Revision: https://reviews.llvm.org/D51391\n\nllvm-svn: 341963"},
| |
| [j]={{"clang/lib/Lex/Preprocessor.cpp",675,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n // ...\n if (ReachedMainFileEOF) {\n if (UsingPCHThroughHeader)\n // ...\n else if (!PPOpts->PCHWithHdrStopCreate)\n Diag(SourceLocation(), diag::err_pp_pragma_hdrstop_not_seen);"}}
| |
| },
| |
| ["err_pp_pragma_unsafe_buffer_usage_syntax"]={
| |
| [i]="err_pp_pragma_unsafe_buffer_usage_syntax",
| |
| [h]="Expected \'begin\' or \'end\'",
| |
| [g]="Expected \'begin\' or \'end\'",
| |
| [b]=k, | | [b]=k, |
| [e]="Expected \'begin\' or \'end\'", | | [e]="member pointer refers into non\\-class type (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]=m, |
| [c]={ab,1625925174,bb,cb}, | | [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"}, |
| [j]={{X,1257,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n // ...\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"},{X,1271,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n // ...\n if (II->isStr(\"begin\")) {\n // ...\n } else if (II->isStr(\"end\")) {\n // ...\n } else\n PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"}}, | | [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]={ |
| ["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:21:35: error: Expected \'begin\' or \'end\'","clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:22:35: error: Expected \'begin\' or \'end\'"} | | ["clang/test/SemaTemplate/instantiate-member-pointers.cpp"]={"clang/test/SemaTemplate/instantiate-member-pointers.cpp:8:24: error: member pointer refers into non-class type \'int\'"} |
| } | | } |
| }, | | }, |
| ["err_pp_remainder_by_zero"]={ | | ["err_memptr_conv_via_virtual"]={ |
| [i]="err_pp_remainder_by_zero", | | [i]="err_memptr_conv_via_virtual", |
| [h]="remainder by zero in preprocessor expression", | | [h]="conversion from pointer to member of class %0 to pointer to member of class %1 via virtual base %2 is not allowed", |
| [g]="remainder by zero in preprocessor expression", | | [g]="conversion from pointer to member of class A to pointer to member of class B via virtual base C is not allowed", |
| [b]=k, | | [b]=k, |
| [e]="remainder by zero in preprocessor expression", | | [e]="conversion from pointer to member of class (.*?) to pointer to member of class (.*?) via virtual base (.*?) is not allowed", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]=m, |
| [c]={K,1236199783,J,I}, | | [c]={hb,1237025389,gb,fb}, |
| [j]={{"clang/lib/Lex/PPExpressions.cpp",709,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec. This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used. As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n // ...\n while (true) {\n // ...\n case tok::percent:\n if (RHS.Val != 0)\n // ...\n else if (ValueLive) {\n PP.Diag(OpLoc, diag::err_pp_remainder_by_zero) << LHS.getRange() << RHS.getRange();"}} | | [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();"}}, |
| | [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"} |
| | } |
| }, | | }, |
| ["err_pp_stringize_not_parameter"]={ | | ["err_memptr_incomplete"]={ |
| [i]="err_pp_stringize_not_parameter", | | [i]={{nil,q,"err_memptr_incomplete"}}, |
| [h]="\'%select{#|#@}0\' is not followed by a macro parameter", | | [h]={{nil,q,"member pointer has incomplete base type %0"}}, |
| [g]={{nil,nil,{uc,{"#","#@"},"\' is not followed by a macro parameter"}}}, | | [g]={{nil,q,"member pointer has incomplete base type A"}}, |
| [b]=k, | | [b]=k, |
| [e]="\'(?:\\#|\\#@)\' is not followed by a macro parameter", | | [e]="member pointer has incomplete base type (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]={{nil,q,m}}, |
| [c]={K,1236199783,J,I}, | | [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"}, |
| [j]={{N,2999,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // ...\n // Read the rest of the macro body.\n if (MI->isObjectLike()) {\n // ...\n } else {\n // ...\n while (Tok.isNot(tok::eod)) {\n // ...\n // Check for a valid macro arg identifier or __VA_OPT__.\n if (!VAOCtx.isVAOptToken(Tok) && (Tok.getIdentifierInfo() == nullptr || MI->getParameterNum(Tok.getIdentifierInfo()) == -1)) {\n // If this is assembler-with-cpp mode, we accept random gibberish after\n // the \'#\' because \'#\' is often a comment character. However, change\n // the kind of the token to tok::unknown so that the preprocessor isn\'t\n // confused.\n if (getLangOpts().AsmPreprocessor && Tok.isNot(tok::eod)) {\n // ...\n } else {\n Diag(Tok, diag::err_pp_stringize_not_parameter) << LastTok.is(tok::hashat);"}}, | | [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]={ |
| ["clang/test/Preprocessor/stringize_skipped.c"]={"clang/test/Preprocessor/stringize_skipped.c:5:20: error: \'#\' is not followed by a macro parameter"} | | ["clang/test/SemaCXX/complete-member-pointers.cpp"]={"clang/test/SemaCXX/complete-member-pointers.cpp:5:3: error: member pointer has incomplete base type \'S\'"} |
| } | | } |
| }, | | }, |
| ["err_pp_through_header_not_found"]={ | | ["err_memtag_any2arg_pointer"]={ |
| [i]={{nil,O,"err_pp_through_header_not_found"}}, | | [i]={{nil,x,"err_memtag_any2arg_pointer"}}, |
| [h]={{nil,O,"\'%0\' required for precompiled header not found"}}, | | [h]={{nil,x,"at least one argument of MTE builtin function must be a pointer (%0, %1 invalid)"}}, |
| [g]={{nil,O,"\'A\' required for precompiled header not found"}},
| | [g]={{nil,x,"at least one argument of MTE builtin function must be a pointer (A, B invalid)"}}, |
| [b]="fatal error\\: ",
| |
| [e]="\'(.*?)\' required for precompiled header not found",
| |
| [f]=a,
| |
| [d]={{nil,O,G}},
| |
| [c]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers","[clang-cl, PCH] Implement support for MS-style PCH through headers\n\nImplement support for MS-style PCH through headers.\n\nThis enables support for /Yc and /Yu where the through header is either\non the command line or included in the source. It replaces the current\nsupport the requires the header also be specified with /FI.\n\nThis change adds a -cc1 option -pch-through-header that is used to either\nstart or stop compilation during PCH create or use.\n\nWhen creating a PCH, the compilation ends after compilation of the through\nheader.\n\nWhen using a PCH, tokens are skipped until after the through header is seen.\n\nPatch By: mikerice\nDifferential Revision: https://reviews.llvm.org/D46652\n\nllvm-svn: 336379"},
| |
| [j]={{"clang/lib/Lex/Preprocessor.cpp",587,"/// EnterMainSourceFile - Enter the specified FileID as the main source file,\n/// which implicitly adds the builtin defines etc.\nvoid Preprocessor::EnterMainSourceFile() {\n // ...\n if (!PPOpts->PCHThroughHeader.empty()) {\n // ...\n if (!File) {\n Diag(SourceLocation(), diag::err_pp_through_header_not_found) << PPOpts->PCHThroughHeader;"}}
| |
| },
| |
| ["err_pp_through_header_not_seen"]={
| |
| [i]={{nil,O,"err_pp_through_header_not_seen"}},
| |
| [h]={{nil,O,"#include of \'%0\' not seen while attempting to %select{create|use}1 precompiled header"}},
| |
| [g]={{nil,O,{"#include of \'A\' not seen while attempting to ",{"create","use"}," precompiled header"}}}, | |
| [b]="fatal error\\: ",
| |
| [e]="\\#include of \'(.*?)\' not seen while attempting to (?:create|use) precompiled header",
| |
| [f]=a,
| |
| [d]={{nil,O,G}},
| |
| [c]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers","[clang-cl, PCH] Implement support for MS-style PCH through headers\n\nImplement support for MS-style PCH through headers.\n\nThis enables support for /Yc and /Yu where the through header is either\non the command line or included in the source. It replaces the current\nsupport the requires the header also be specified with /FI.\n\nThis change adds a -cc1 option -pch-through-header that is used to either\nstart or stop compilation during PCH create or use.\n\nWhen creating a PCH, the compilation ends after compilation of the through\nheader.\n\nWhen using a PCH, tokens are skipped until after the through header is seen.\n\nPatch By: mikerice\nDifferential Revision: https://reviews.llvm.org/D46652\n\nllvm-svn: 336379"},
| |
| [j]={{"clang/lib/Lex/PPLexerChange.cpp",566,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file. This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n // ...\n if (creatingPCHWithThroughHeader() && !LeavingPCHThroughHeader) {\n // ...\n Diag(CurLexer->getFileLoc(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 0;"},{"clang/lib/Lex/Preprocessor.cpp",672,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n // ...\n if (ReachedMainFileEOF) {\n if (UsingPCHThroughHeader)\n Diag(SourceLocation(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 1;"}}
| |
| },
| |
| ["err_pp_unclosed_pragma_unsafe_buffer_usage"]={
| |
| [i]="err_pp_unclosed_pragma_unsafe_buffer_usage",
| |
| [h]="\'#pragma unsafe_buffer_usage\' was not ended",
| |
| [g]="\'#pragma unsafe_buffer_usage\' was not ended",
| |
| [b]=k, | | [b]=k, |
| [e]="\'\\#pragma unsafe_buffer_usage\' was not ended", | | [e]="at least one argument of MTE builtin function must be a pointer \\((.*?), (.*?) invalid\\)", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]={{nil,x,a}}, |
| [c]={ab,1625925174,bb,cb}, | | [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"}, |
| [j]={{"clang/lib/Lex/PPLexerChange.cpp",344,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file. This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n // ...\n if (IncludeMacroStack.empty() && isPPInSafeBufferOptOutRegion(UnclosedSafeBufferOptOutLoc)) {\n // ...\n Diag(UnclosedSafeBufferOptOutLoc, diag::err_pp_unclosed_pragma_unsafe_buffer_usage);"}}, | | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:33:35: error: \'#pragma unsafe_buffer_usage\' was not ended"} | | ["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)"} |
| } | | } |
| }, | | }, |
| ["err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage"]={ | | ["err_memtag_arg_must_be_integer"]={ |
| [i]="err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage", | | [i]={{nil,x,"err_memtag_arg_must_be_integer"}}, |
| [h]="not currently inside \'#pragma unsafe_buffer_usage\'", | | [h]={{nil,x,"%0 argument of MTE builtin function must be an integer type (%1 invalid)"}}, |
| [g]="not currently inside \'#pragma unsafe_buffer_usage\'", | | [g]={{nil,x,"A argument of MTE builtin function must be an integer type (B invalid)"}}, |
| [b]=k, | | [b]=k, |
| [e]="not currently inside \'\\#pragma unsafe_buffer_usage\'", | | [e]="(.*?) argument of MTE builtin function must be an integer type \\((.*?) invalid\\)", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]={{nil,x,a}}, |
| [c]={ab,1625925174,bb,cb}, | | [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"}, |
| [j]={{X,1269,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n // ...\n if (II->isStr(\"begin\")) {\n // ...\n } else if (II->isStr(\"end\")) {\n if (PP.enterOrExitSafeBufferOptOutRegion(false, Loc))\n PP.Diag(Loc, diag::err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage);"}}, | | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:13:35: error: not currently inside \'#pragma unsafe_buffer_usage\'"} | | ["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)"} |
| } | | } |
| }, | | }, |
| ["err_pp_unmatched_end_of_arc_cf_code_audited"]={ | | ["err_memtag_arg_must_be_pointer"]={ |
| [i]="err_pp_unmatched_end_of_arc_cf_code_audited", | | [i]={{nil,x,"err_memtag_arg_must_be_pointer"}}, |
| [h]="not currently inside \'#pragma clang arc_cf_code_audited\'", | | [h]={{nil,x,"%0 argument of MTE builtin function must be a pointer (%1 invalid)"}}, |
| [g]="not currently inside \'#pragma clang arc_cf_code_audited\'", | | [g]={{nil,x,"A argument of MTE builtin function must be a pointer (B invalid)"}}, |
| [b]=k, | | [b]=k, |
| [e]="not currently inside \'\\#pragma clang arc_cf_code_audited\'", | | [e]="(.*?) argument of MTE builtin function must be a pointer \\((.*?) invalid\\)", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]={{nil,x,a}}, |
| [c]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their","Add explicit attributes to mark functions as having had their\nCoreFoundation object-transfer properties audited, and add a #pragma\nto cause them to be automatically applied to functions in a particular\nspan of code. This has to be implemented largely in the preprocessor\nbecause of the requirement that the region be entirely contained in\na single file; that\'s hard to impose from the parser without registering\nfor a ton of callbacks.\n\nllvm-svn: 140846"}, | | [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"}, |
| [j]={{X,1906,"/// PragmaARCCFCodeAuditedHandler -\n/// \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n // ...\n if (IsBegin) {\n // ...\n } else {\n // Complain about attempts to leave an audit that doesn\'t exist.\n if (!BeginLoc.isValid()) {\n PP.Diag(Loc, diag::err_pp_unmatched_end_of_arc_cf_code_audited);"}}, | | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Sema/pragma-arc-cf-code-audited.c"]={"clang/test/Sema/pragma-arc-cf-code-audited.c:8:15: error: not currently inside \'#pragma clang arc_cf_code_audited\'"} | | ["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)"} |
| } | | } |
| }, | | }, |
| ["err_pp_unmatched_end_of_assume_nonnull"]={ | | ["err_memtag_arg_null_or_pointer"]={ |
| [i]="err_pp_unmatched_end_of_assume_nonnull", | | [i]={{nil,x,"err_memtag_arg_null_or_pointer"}}, |
| [h]="not currently inside \'#pragma clang assume_nonnull\'", | | [h]={{nil,x,"%0 argument of MTE builtin function must be a null or a pointer (%1 invalid)"}}, |
| [g]="not currently inside \'#pragma clang assume_nonnull\'", | | [g]={{nil,x,"A argument of MTE builtin function must be a null or a pointer (B invalid)"}}, |
| [b]=k, | | [b]=k, |
| [e]="not currently inside \'\\#pragma clang assume_nonnull\'", | | [e]="(.*?) argument of MTE builtin function must be a null or a pointer \\((.*?) invalid\\)", |
| [f]=a, | | [d]=a, |
| [d]="Nullability Issue", | | [f]={{nil,x,a}}, |
| [c]={"2a20bd1a9457",1434738357,"Introduced pragmas for audited nullability regions.","Introduced pragmas for audited nullability regions.\n\nIntroduce the clang pragmas \"assume_nonnull begin\" and \"assume_nonnull\nend\" in which we make default assumptions about the nullability of many\nunannotated pointers:\n\n - Single-level pointers are inferred to __nonnull\n - NSError** in a (function or method) parameter list is inferred to\n NSError * __nullable * __nullable.\n - CFErrorRef * in a (function or method) parameter list is inferred\n to CFErrorRef __nullable * __nullable.\n - Other multi-level pointers are never inferred to anything.\n\nImplements rdar://problem/19191042.\n\nllvm-svn: 240156"}, | | [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"}, |
| [j]={{X,1964,"/// PragmaAssumeNonNullHandler -\n/// \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n // ...\n if (IsBegin) {\n // ...\n } else {\n // Complain about attempts to leave an audit that doesn\'t exist.\n if (!BeginLoc.isValid()) {\n PP.Diag(Loc, diag::err_pp_unmatched_end_of_assume_nonnull);"}} | | [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();"}}, |
| | [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)"} |
| | } |
| }, | | }, |
| ["err_pp_unterminated_conditional"]={ | | ["err_messaging_class_with_direct_method"]={ |
| [i]="err_pp_unterminated_conditional", | | [i]={{nil,n,"err_messaging_class_with_direct_method"}}, |
| [h]="unterminated conditional directive", | | [h]={{nil,n,"messaging a Class with a method that is possibly direct"}}, |
| [g]="unterminated conditional directive", | | [g]={{nil,n,"messaging a Class with a method that is possibly direct"}}, |
| [b]=k, | | [b]=k, |
| [e]="unterminated conditional directive", | | [e]="messaging a Class with a method that is possibly direct", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]={{nil,n,m}}, |
| [c]={K,1236199783,J,I}, | | [c]={ub,1573050950,sb,qb}, |
| [j]={{"clang/lib/Lex/Lexer.cpp",3037,"/// LexEndOfFile - CurPtr points to the end of this file. Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n // ...\n // If we are in a #if directive, emit an error.\n while (!ConditionalStack.empty()) {\n if (PP->getCodeCompletionFileLoc() != FileLoc)\n PP->Diag(ConditionalStack.back().IfLoc, diag::err_pp_unterminated_conditional);"}}, | | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Lexer/eof-number.c"]={"clang/test/Lexer/eof-number.c:9:2: error: unterminated conditional directive"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pp_used_poisoned_id"]={ | | ["err_messaging_super_with_direct_method"]={ |
| [i]="err_pp_used_poisoned_id", | | [i]={{nil,n,"err_messaging_super_with_direct_method"}}, |
| [h]="attempt to use a poisoned identifier", | | [h]={{nil,n,"messaging super with a direct method"}}, |
| [g]="attempt to use a poisoned identifier", | | [g]={{nil,n,"messaging super with a direct method"}}, |
| [b]=k, | | [b]=k, |
| [e]="attempt to use a poisoned identifier", | | [e]="messaging super with a direct method", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]={{nil,n,m}}, |
| [c]={K,1236199783,J,I}, | | [c]={ub,1573050950,sb,qb}, |
| [j]={{"clang/lib/Lex/Preprocessor.cpp",768,"void Preprocessor::HandlePoisonedIdentifier(Token &Identifier) {\n // ...\n if (it == PoisonReasons.end())\n Diag(Identifier, diag::err_pp_used_poisoned_id);"}}, | | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Preprocessor/pragma_poison.c"]={"clang/test/Preprocessor/pragma_poison.c:4:1: error: attempt to use a poisoned identifier","clang/test/Preprocessor/pragma_poison.c:9:3: error: attempt to use a poisoned identifier"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pp_vaopt_nested_use"]={ | | ["err_messaging_unqualified_id_with_direct_method"]={ |
| [i]={{nil,A,"err_pp_vaopt_nested_use"}}, | | [i]={{nil,n,"err_messaging_unqualified_id_with_direct_method"}}, |
| [h]={{nil,A,"__VA_OPT__ cannot be nested within its own replacement tokens"}}, | | [h]={{nil,n,"messaging unqualified id with a method that is possibly direct"}}, |
| [g]={{nil,A,"__VA_OPT__ cannot be nested within its own replacement tokens"}}, | | [g]={{nil,n,"messaging unqualified id with a method that is possibly direct"}}, |
| [b]=k, | | [b]=k, |
| [e]="__VA_OPT__ cannot be nested within its own replacement tokens", | | [e]="messaging unqualified id with a method that is possibly direct", |
| [f]=a, | | [d]=a, |
| [d]={{nil,A,G}}, | | [f]={{nil,n,m}}, |
| [c]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)","[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)\n\nThis patch implements an extension to the preprocessor:\n\n__VA_OPT__(contents) --> which expands into its contents if variadic arguments are supplied to the parent macro, or behaves as an empty token if none.\n\n - Currently this feature is only enabled for C++2a (this could be enabled, with some careful tweaks, for other dialects with the appropriate extension or compatibility warnings)\n\n - The patch was reviewed here: https://reviews.llvm.org/D35782 and asides from the above (and moving some of the definition and expansion recognition logic into the corresponding state machines), I believe I incorporated all of Richard\'s suggestions.\n\nA few technicalities (most of which were clarified through private correspondence between rsmith, hubert and thomas) are worth mentioning. Given:\n\n #define F(a,...) a #__VA_OPT__(a ## a) a ## __VA_OPT__(__VA_ARGS__)\n\n - The call F(,) Does not supply any tokens for the variadic arguments and hence VA_OPT behaves as a placeholder.\n - When expanding VA_OPT (for e.g. F(,1) token pasting occurs eagerly within its contents if the contents need to be stringified.\n - A hash or a hashhash prior to VA_OPT does not inhibit expansion of arguments if they are the first token within VA_OPT.\n - When a variadic argument is supplied, argument substitution occurs within the contents as does stringification - and these resulting tokens are inserted back into the macro expansions token stream just prior to the entire stream being rescanned and concatenated.\n\nSee wg21.link/P0306 for further details on the feature.\n\n\nAcknowledgment: This patch would have been poorer if not for Richard Smith\'s usual thoughtful analysis and feedback.\nllvm-svn: 315840"}, | | [c]={ub,1573050950,sb,qb}, |
| [j]={{N,2910,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // ...\n // Read the rest of the macro body.\n if (MI->isObjectLike()) {\n // ...\n } else {\n // ...\n while (Tok.isNot(tok::eod)) {\n // ...\n if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n // ...\n if (VAOCtx.isVAOptToken(Tok)) {\n // If we\'re already within a VAOPT, emit an error.\n if (VAOCtx.isInVAOpt()) {\n Diag(Tok, diag::err_pp_vaopt_nested_use);"}},
| | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:25:28: error: __VA_OPT__ cannot be nested within its own replacement tokens"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pp_visibility_non_macro"]={ | | ["err_method_kernel"]={ |
| [i]="err_pp_visibility_non_macro", | | [i]={{nil,x,"err_method_kernel"}}, |
| [h]="no macro named %0", | | [h]={{nil,x,"kernel functions cannot be class members"}}, |
| [g]="no macro named A", | | [g]={{nil,x,"kernel functions cannot be class members"}}, |
| [b]=k, | | [b]=k, |
| [e]="no macro named (.*?)", | | [e]="kernel functions cannot be class members", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]={{nil,x,m}}, |
| [c]={"ebf004990163",1318865549,"For modules, all macros that aren\'t include guards are implicitly","For modules, all macros that aren\'t include guards are implicitly\npublic. Add a __private_macro__ directive to hide a macro, similar to\nthe __module_private__ declaration specifier.\n\nllvm-svn: 142188"}, | | [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"}, |
| [j]={{N,1715,"/// Handle a #public directive.\nvoid Preprocessor::HandleMacroPublicDirective(Token &Tok) {\n // ...\n // If the macro is not defined, this is an error.\n if (!MD) {\n Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{N,1742,"/// Handle a #private directive.\nvoid Preprocessor::HandleMacroPrivateDirective() {\n // ...\n // If the macro is not defined, this is an error.\n if (!MD) {\n Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{X,2026,"/// This handles parsing pragmas that take a macro name and optional message\nstatic IdentifierInfo *HandleMacroAnnotationPragma(Preprocessor &PP, Token &Tok, const char *Pragma, std::string &MessageString) {\n // ...\n if (!II->hasMacroDefinition()) {\n PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"},{X,2114,"/// \"\\#pragma clang final(...)\"\n///\n/// The syntax is\n/// \\code\n/// #pragma clang final(MACRO_NAME)\n/// \\endcode\nstruct PragmaFinalHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (!II->hasMacroDefinition()) {\n PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"}},
| | [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]={ |
| ["clang/test/Lexer/deprecate-macro.c"]={"clang/test/Lexer/deprecate-macro.c:10:26: error: no macro named \'foo\'","clang/test/Lexer/deprecate-macro.c:52:26: error: no macro named \'main\'"} | | ["clang/test/SemaOpenCLCXX/invalid-kernel.clcpp"]={"clang/test/SemaOpenCLCXX/invalid-kernel.clcpp:9:15: error: kernel functions cannot be class members"} |
| } | | } |
| }, | | }, |
| ["err_ppc_builtin_requires_abi"]={ | | ["err_method_not_found_with_typo"]={ |
| [i]={{nil,C,"err_ppc_builtin_requires_abi"}}, | | [i]="err_method_not_found_with_typo", |
| [h]={{nil,C,"this builtin requires ABI -mabi=%0"}}, | | [h]="%select{instance|class}1 method %0 not found ; did you mean %2?", |
| [g]={{nil,C,"this builtin requires ABI -mabi=A"}}, | | [g]={{nil,nil,{{"instance",ib}," method A not found ; did you mean C?"}}}, |
| [b]=k, | | [b]=k, |
| [e]="this builtin requires ABI \\-mabi\\=(.*?)", | | [e]="(?:instance|class) method (.*?) not found ; did you mean (.*?)\\?", |
| [f]=a, | | [d]=a, |
| [d]={{nil,C,m}}, | | [f]=m, |
| [c]={hd,1616787805,gd,fd}, | | [c]={yb,1480718311,zb,Ab}, |
| [j]={{z,4281,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n case PPC::BI__builtin_pack_longdouble:\n if (&TI.getLongDoubleFormat() != &llvm::APFloat::PPCDoubleDouble())\n return Diag(TheCall->getBeginLoc(), diag::err_ppc_builtin_requires_abi) << \"ibmlongdouble\";"}} | | [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;"}}, |
| | [l]={ |
| | ["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:432:6: error: instance method \'test18\' not found ; did you mean \'test17\'?"} |
| | } |
| }, | | }, |
| ["err_ppc_invalid_test_data_class_type"]={ | | ["err_mips_builtin_requires_dsp"]={ |
| [i]={{nil,C,"err_ppc_invalid_test_data_class_type"}}, | | [i]={{nil,n,"err_mips_builtin_requires_dsp"}}, |
| [h]={{nil,M,"expected a \'float\', \'double\' or \'__float128\' for the first argument"},{y,C,"expected a \'float\' or \'double\' for the first argument"}}, | | [h]={{nil,n,"this builtin requires \'dsp\' ASE, please use -mdsp"}}, |
| [g]={{nil,M,"expected a \'float\', \'double\' or \'__float128\' for the first argument"},{y,C,"expected a \'float\' or \'double\' for the first argument"}}, | | [g]={{nil,n,"this builtin requires \'dsp\' ASE, please use -mdsp"}}, |
| [b]=k, | | [b]=k, |
| [e]="expected a \'float\', \'double\' or \'__float128\' for the first argument", | | [e]="this builtin requires \'dsp\' ASE, please use \\-mdsp", |
| [f]=a, | | [d]=a, |
| [d]={{nil,C,m}}, | | [f]={{nil,n,m}}, |
| [c]={Vc,1615397021,Zc,ad}, | | [c]={ub,1573050950,sb,qb}, |
| [j]={{z,4361,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n case PPC::BI__builtin_ppc_test_data_class: {\n // ...\n if (ArgType != QualType(Context.FloatTy) && ArgType != QualType(Context.DoubleTy) && ArgType != QualType(Context.Float128Ty))\n return Diag(TheCall->getBeginLoc(), diag::err_ppc_invalid_test_data_class_type);"}}, | | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-error.c:47:10: error: expected a \'float\', \'double\' or \'__float128\' for the first argument"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_ppc_invalid_use_mma_type"]={ | | ["err_mips_builtin_requires_dspr2"]={ |
| [i]={{nil,v,"err_ppc_invalid_use_mma_type"}}, | | [i]={{nil,n,"err_mips_builtin_requires_dspr2"}}, |
| [h]={{nil,v,"invalid use of PPC MMA type"}}, | | [h]={{nil,n,"this builtin requires \'dsp r2\' ASE, please use -mdspr2"}}, |
| [g]={{nil,v,"invalid use of PPC MMA type"}}, | | [g]={{nil,n,"this builtin requires \'dsp r2\' ASE, please use -mdspr2"}}, |
| [b]=k, | | [b]=k, |
| [e]="invalid use of PPC MMA type", | | [e]="this builtin requires \'dsp r2\' ASE, please use \\-mdspr2", |
| [f]=a, | | [d]=a, |
| [d]={{nil,v,m}}, | | [f]={{nil,n,m}}, |
| [c]={Jb,1590001902,Lb,Mb}, | | [c]={ub,1573050950,sb,qb}, |
| [j]={{z,4410,"#include \"clang/Basic/PPCTypes.def\"\n ) {\n Diag(TypeLoc, diag::err_ppc_invalid_use_mma_type);"}}, | | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Sema/ppc-pair-mma-types.c"]={"clang/test/Sema/ppc-pair-mma-types.c:17:31: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:22:37: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:27:28: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:33:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:35:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:38:12: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:40:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:44:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:45:21: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:48:6: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:55:17: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:112:31: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:117:37: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:122:28: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:128:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:130:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:133:12: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:135:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:139:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:140:21: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:143:6: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:149:17: error: invalid use of PPC MMA type"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pragma_alloc_text_c_linkage"]={ | | ["err_mips_builtin_requires_msa"]={ |
| [i]={{nil,y,"err_pragma_alloc_text_c_linkage"}}, | | [i]={{nil,n,"err_mips_builtin_requires_msa"}}, |
| [h]={{nil,y,"\'#pragma alloc_text\' is applicable only to functions with C linkage"}}, | | [h]={{nil,n,"this builtin requires \'msa\' ASE, please use -mmsa"}}, |
| [g]={{nil,y,"\'#pragma alloc_text\' is applicable only to functions with C linkage"}}, | | [g]={{nil,n,"this builtin requires \'msa\' ASE, please use -mmsa"}}, |
| [b]=k, | | [b]=k, |
| [e]="\'\\#pragma alloc_text\' is applicable only to functions with C linkage", | | [e]="this builtin requires \'msa\' ASE, please use \\-mmsa", |
| [f]=a, | | [d]=a, |
| [d]={{nil,y,m}}, | | [f]={{nil,n,m}}, |
| [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"}, | | [c]={ub,1573050950,sb,qb}, |
| [j]={{L,816,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n // ...\n for (auto &Function : Functions) {\n // ...\n if (getLangOpts().CPlusPlus && !FD->isInExternCContext()) {\n Diag(Loc, diag::err_pragma_alloc_text_c_linkage);"}}, | | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:10:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage","clang/test/Sema/pragma-ms-alloc-text.cpp:35:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage","clang/test/Sema/pragma-ms-alloc-text.cpp:55:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pragma_alloc_text_not_function"]={ | | ["err_mips_fp64_req"]={ |
| [i]={{nil,y,"err_pragma_alloc_text_not_function"}}, | | [i]={{nil,db,"err_mips_fp64_req"}}, |
| [h]={{nil,y,"\'#pragma alloc_text\' is applicable only to functions"}}, | | [h]={{nil,db,"\'%0\' can only be used if the target supports the mfhc1 and mthc1 instructions"}}, |
| [g]={{nil,y,"\'#pragma alloc_text\' is applicable only to functions"}}, | | [g]={{nil,db,"\'A\' can only be used if the target supports the mfhc1 and mthc1 instructions"}}, |
| [b]=k, | | [b]=k, |
| [e]="\'\\#pragma alloc_text\' is applicable only to functions", | | [e]="\'(.*?)\' can only be used if the target supports the mfhc1 and mthc1 instructions", |
| [f]=a, | | [d]=a, |
| [d]={{nil,y,m}}, | | [f]={{nil,db,a}}, |
| [c]={ab,1625925174,bb,cb}, | | [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"}, |
| [j]={{L,811,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n // ...\n for (auto &Function : Functions) {\n // ...\n if (!FD) {\n Diag(Loc, diag::err_pragma_alloc_text_not_function);"}},
| | [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\";"}} |
| [l]={ | |
| ["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:59:23: error: \'#pragma alloc_text\' is applicable only to functions"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_attr_attr_no_push"]={ | | ["err_mismatched_code_seg_base"]={ |
| [i]={{nil,E,"err_pragma_attr_attr_no_push"}}, | | [i]={{nil,q,"err_mismatched_code_seg_base"}}, |
| [h]={{nil,E,"\'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'"}}, | | [h]={{nil,q,"derived class must specify the same code segment as its base classes"}}, |
| [g]={{nil,E,"\'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'"}}, | | [g]={{nil,q,"derived class must specify the same code segment as its base classes"}}, |
| [b]=k, | | [b]=k, |
| [e]="\'\\#pragma clang attribute\' attribute with no matching \'\\#pragma clang attribute push\'", | | [e]="derived class must specify the same code segment as its base classes", |
| [f]=a, | | [d]=a, |
| [d]={{nil,E,m}}, | | [f]={{nil,q,m}}, |
| [c]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute","Support for groups of attributes in #pragma clang attribute\n\nThis commit enables pushing an empty #pragma clang attribute push, then adding\nmultiple attributes to it, then popping them all with #pragma clang attribute\npop, just like #pragma clang diagnostic. We still support the current way of\nadding these, #pragma clang attribute push(__attribute__((...))), by treating it\nlike a combined push/attribute. This is needed to create macros like:\n\nDO_SOMETHING_BEGIN(attr1, attr2, attr3)\n// ...\nDO_SOMETHING_END\n\nrdar://45496947\n\nDifferential revision: https://reviews.llvm.org/D53621\n\nllvm-svn: 345486"}, | | [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"}, |
| [j]={{L,1066,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n // ...\n if (PragmaAttributeStack.empty()) {\n Diag(PragmaLoc, diag::err_pragma_attr_attr_no_push);"}}, | | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:62:15: error: \'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_duplicate_subject"]={ | | ["err_mismatched_code_seg_override"]={ |
| [i]={{nil,o,"err_pragma_attribute_duplicate_subject"}}, | | [i]={{nil,q,"err_mismatched_code_seg_override"}}, |
| [h]={{nil,o,"duplicate attribute subject matcher \'%0\'"}}, | | [h]={{nil,q,"overriding virtual function must specify the same code segment as its overridden function"}}, |
| [g]={{nil,o,"duplicate attribute subject matcher \'A\'"}}, | | [g]={{nil,q,"overriding virtual function must specify the same code segment as its overridden function"}}, |
| [b]=k, | | [b]=k, |
| [e]="duplicate attribute subject matcher \'(.*?)\'", | | [e]="overriding virtual function must specify the same code segment as its overridden function", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,x}}, | | [f]={{nil,q,m}}, |
| [c]={gb,1492508507,fb,eb}, | | [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"}, |
| [j]={{B,1624,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n // ...\n do {\n // ...\n if (isAbstractAttrMatcherRule(PrimaryRule)) {\n // ...\n } else if (Parens.consumeOpen()) {\n if (!SubjectMatchRules.insert(std::make_pair(PrimaryRule, SourceRange(RuleLoc, RuleLoc))).second)\n Diag(RuleLoc, diag::err_pragma_attribute_duplicate_subject) << Name << FixItHint::CreateRemoval(SourceRange(RuleLoc, Tok.is(tok::comma) ? Tok.getLocation() : RuleLoc));"},{B,1679,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n // ...\n do {\n // ...\n if (!SubjectMatchRules.insert(std::make_pair(SubRule, SourceRange(RuleLoc, RuleEndLoc))).second) {\n Diag(RuleLoc, diag::err_pragma_attribute_duplicate_subject) << attr::getSubjectMatchRuleSpelling(SubRule) << FixItHint::CreateRemoval(SourceRange(RuleLoc, Tok.is(tok::comma) ? Tok.getLocation() : RuleEndLoc));"}},
| | [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);"}}, |
| [l]={ | | [l]={ |
| [ob]={"clang/test/Parser/pragma-attribute.cpp:93:91: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:94:91: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:94:101: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:95:97: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:96:87: error: duplicate attribute subject matcher \'enum\'","clang/test/Parser/pragma-attribute.cpp:98:102: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:99:112: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:99:133: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:100:113: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'","clang/test/Parser/pragma-attribute.cpp:101:113: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'","clang/test/Parser/pragma-attribute.cpp:101:151: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_expected_attribute"]={ | | ["err_mismatched_exception_spec"]={ |
| [i]={{nil,o,"err_pragma_attribute_expected_attribute"}}, | | [i]="err_mismatched_exception_spec", |
| [h]={{nil,o,"expected an attribute after \'(\'"}}, | | [h]="exception specification in declaration does not match previous declaration", |
| [g]={{nil,o,"expected an attribute after \'(\'"}}, | | [g]="exception specification in declaration does not match previous declaration", |
| [b]=k, | | [b]=k, |
| [e]="expected an attribute after \'\\(\'", | | [e]="exception specification in declaration does not match previous declaration", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,x}}, | | [f]=m, |
| [c]={gb,1492508507,fb,eb}, | | [c]={"4f4d7b5d8e5f",1246707540,"Catch function redeclarations with incompatible exception specifications.","Catch function redeclarations with incompatible exception specifications.\n\nllvm-svn: 74787"}, |
| [j]={{B,3931,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n/// #pragma clang attribute push (attribute, subject-set)\n/// #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n/// #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n/// #pragma clang attribute namespace.push\n/// #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n // Parse the actual attribute.\n if ((Info->Action == PragmaAttributeInfo::Push && Tok.isNot(tok::eod)) || Info->Action == PragmaAttributeInfo::Attribute) {\n // ...\n if (AttributeTokens.empty()) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_attribute);"}}, | | [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]={ |
| [ob]={"clang/test/Parser/pragma-attribute.cpp:109:85: error: expected an attribute after \'(\'","clang/test/Parser/pragma-attribute.cpp:111:31: error: expected an attribute after \'(\'"} | | ["clang/test/CXX/special/class.dtor/p3.cpp"]={"clang/test/CXX/special/class.dtor/p3.cpp:16:30: error: exception specification in declaration does not match previous declaration"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_expected_attribute_name"]={ | | ["err_mismatched_exception_spec_explicit_instantiation"]={ |
| [i]={{nil,o,"err_pragma_attribute_expected_attribute_name"}}, | | [i]="err_mismatched_exception_spec_explicit_instantiation", |
| [h]={{nil,o,"expected identifier that represents an attribute name"}}, | | [h]="exception specification in explicit instantiation does not match instantiated one", |
| [g]={{nil,o,"expected identifier that represents an attribute name"}}, | | [g]="exception specification in explicit instantiation does not match instantiated one", |
| [b]=k, | | [b]=k, |
| [e]="expected identifier that represents an attribute name", | | [e]="exception specification in explicit instantiation does not match instantiated one", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,x}}, | | [f]=m, |
| [c]={gb,1492508507,fb,eb}, | | [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]={{B,1847,"void Parser::HandlePragmaAttribute() {\n // ...\n if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n // ...\n } else if (Tok.is(tok::kw___attribute)) {\n // ...\n // Parse the comma-separated list of attributes.\n do {\n if (Tok.isNot(tok::identifier)) {\n Diag(Tok, diag::err_pragma_attribute_expected_attribute_name);"}}, | | [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]={ |
| [ob]={"clang/test/Parser/pragma-attribute.cpp:121:46: error: expected identifier that represents an attribute name","clang/test/Parser/pragma-attribute.cpp:171:45: error: expected identifier that represents an attribute name","clang/test/Parser/pragma-attribute.cpp:217:65: error: expected identifier that represents an attribute name"} | | ["clang/test/SemaTemplate/explicit-instantiation.cpp"]={"clang/test/SemaTemplate/explicit-instantiation.cpp:156:10: error: exception specification in explicit instantiation does not match instantiated one","clang/test/SemaTemplate/explicit-instantiation.cpp:158:10: error: exception specification in explicit instantiation does not match instantiated one","clang/test/SemaTemplate/explicit-instantiation.cpp:160:10: error: exception specification in explicit instantiation does not match instantiated one","clang/test/SemaTemplate/explicit-instantiation.cpp:164:10: error: exception specification in explicit instantiation does not match instantiated one"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_expected_attribute_syntax"]={ | | ["err_mismatched_ms_inheritance"]={ |
| [i]={{nil,o,"err_pragma_attribute_expected_attribute_syntax"}}, | | [i]="err_mismatched_ms_inheritance", |
| [h]={{nil,o,"expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax"}}, | | [h]="inheritance model does not match %select{definition|previous declaration}0", |
| [g]={{nil,o,"expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax"}}, | | [g]={{nil,nil,{"inheritance model does not match ",{fc,"previous declaration"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="expected an attribute that is specified using the GNU, C\\+\\+11 or \'__declspec\' syntax", | | [e]="inheritance model does not match (?:definition|previous declaration)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,x}}, | | [f]=m, |
| [c]={gb,1492508507,fb,eb}, | | [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"}, |
| [j]={{B,1872,"void Parser::HandlePragmaAttribute() {\n // ...\n if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n // ...\n } else if (Tok.is(tok::kw___attribute)) {\n // ...\n } else if (Tok.is(tok::kw___declspec)) {\n // ...\n } else {\n Diag(Tok, diag::err_pragma_attribute_expected_attribute_syntax);"}}, | | [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]={ |
| [ob]={"clang/test/Parser/pragma-attribute.cpp:176:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:177:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:178:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:180:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax"} | | ["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:243:8: error: inheritance model does not match definition","clang/test/SemaCXX/member-pointer-ms.cpp:245:8: error: inheritance model does not match definition","clang/test/SemaCXX/member-pointer-ms.cpp:300:8: error: inheritance model does not match previous declaration"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_expected_period"]={ | | ["err_mismatched_owning_module"]={ |
| [i]={{nil,E,"err_pragma_attribute_expected_period"}}, | | [i]={{nil,t,"err_mismatched_owning_module"}}, |
| [h]={{nil,E,"expected \'.\' after pragma attribute namespace %0"}}, | | [h]={{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,E,"expected \'.\' after pragma attribute namespace A"}}, | | [g]={{nil,t,{"declaration of A in ",{"the global module","module C"}," follows declaration in ",{"the global module","module E"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="expected \'\\.\' after pragma attribute namespace (.*?)", | | [e]="declaration of (.*?) in (?:the global module|module (.*?)) follows declaration in (?:the global module|module (.*?))", |
| [f]=a, | | [d]=a, |
| [d]={{nil,E,x}}, | | [f]={{nil,t,m}}, |
| [c]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","Add support for namespaces on #pragma clang attribute\n\nNamespaces are introduced by adding an \"identifier.\" before a\npush/pop directive. Pop directives with namespaces can only pop a\nattribute group that was pushed with the same namespace. Push and pop\ndirectives that don\'t opt into namespaces have the same semantics.\n\nThis is necessary to prevent a pitfall of using multiple #pragma\nclang attribute directives spread out in a large file, particularly\nwhen macros are involved. It isn\'t easy to see which pop corripsonds\nto which push, so its easy to inadvertently pop the wrong group.\n\nDifferential revision: https://reviews.llvm.org/D55628\n\nllvm-svn: 349845"}, | | [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"}, |
| [j]={{B,3866,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n/// #pragma clang attribute push (attribute, subject-set)\n/// #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n/// #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n/// #pragma clang attribute namespace.push\n/// #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n // Parse the optional namespace followed by a period.\n if (Tok.is(tok::identifier)) {\n // ...\n if (!II->isStr(\"push\") && !II->isStr(\"pop\")) {\n // ...\n if (!Tok.is(tok::period)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_period) << II;"}}, | | [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]={ |
| [ob]={"clang/test/Parser/pragma-attribute.cpp:105:110: error: expected \'.\' after pragma attribute namespace \'pushpop\'"} | | ["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:34:5: error: declaration of \'a\' in module Foo follows declaration in the global module"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_expected_push_pop_paren"]={ | | ["err_mismatched_uuid"]={ |
| [i]={{nil,E,"err_pragma_attribute_expected_push_pop_paren"}}, | | [i]="err_mismatched_uuid", |
| [h]={{nil,E,"expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'"}}, | | [h]="uuid does not match previous declaration", |
| [g]={{nil,E,"expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'"}}, | | [g]="uuid does not match previous declaration", |
| [b]=k, | | [b]=k, |
| [e]="expected \'push\', \'pop\', or \'\\(\' after \'\\#pragma clang attribute\'", | | [e]="uuid does not match previous declaration", |
| [f]=a, | | [d]=a, |
| [d]={{nil,E,x}}, | | [f]=m, |
| [c]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute","Support for groups of attributes in #pragma clang attribute\n\nThis commit enables pushing an empty #pragma clang attribute push, then adding\nmultiple attributes to it, then popping them all with #pragma clang attribute\npop, just like #pragma clang diagnostic. We still support the current way of\nadding these, #pragma clang attribute push(__attribute__((...))), by treating it\nlike a combined push/attribute. This is needed to create macros like:\n\nDO_SOMETHING_BEGIN(attr1, attr2, attr3)\n// ...\nDO_SOMETHING_END\n\nrdar://45496947\n\nDifferential revision: https://reviews.llvm.org/D53621\n\nllvm-svn: 345486"}, | | [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]={{B,3876,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n/// #pragma clang attribute push (attribute, subject-set)\n/// #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n/// #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n/// #pragma clang attribute namespace.push\n/// #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n if (!Tok.isOneOf(tok::identifier, tok::l_paren)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_push_pop_paren);"}}, | | [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]={ |
| [ob]={"clang/test/Parser/pragma-attribute.cpp:103:109: error: expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'","clang/test/Parser/pragma-attribute.cpp:104:25: error: expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'"} | | ["clang/test/SemaCXX/ms-uuid.cpp"]={"clang/test/SemaCXX/ms-uuid.cpp:41:18: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:43:18: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:49:18: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:60:2: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:62:2: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:66:18: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:71:2: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:83:18: error: uuid does not match previous declaration"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_expected_subject_identifier"]={ | | ["err_mismatched_visibility"]={ |
| [i]={{nil,o,"err_pragma_attribute_expected_subject_identifier"}}, | | [i]="err_mismatched_visibility", |
| [h]={{nil,o,"expected an identifier that corresponds to an attribute subject rule"}}, | | [h]="visibility does not match previous declaration", |
| [g]={{nil,o,"expected an identifier that corresponds to an attribute subject rule"}}, | | [g]="visibility does not match previous declaration", |
| [b]=k, | | [b]=k, |
| [e]="expected an identifier that corresponds to an attribute subject rule", | | [e]="visibility does not match previous declaration", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,x}}, | | [f]=m, |
| [c]={gb,1492508507,fb,eb}, | | [c]={"0232c19a3128",1336436919,"Add missing \'y\'.","Add missing \'y\'.\n\nllvm-svn: 156348"}, |
| [j]={{B,1602,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n // ...\n do {\n // ...\n if (Name.empty()) {\n Diag(Tok, diag::err_pragma_attribute_expected_subject_identifier);"}}, | | [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]={ |
| [ob]={"clang/test/Parser/pragma-attribute.cpp:44:76: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:47:90: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:50:76: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:52:81: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:53:80: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:54:91: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:208:71: error: expected an identifier that corresponds to an attribute subject rule"} | | ["clang/test/Sema/attr-visibility.c"]={"clang/test/Sema/attr-visibility.c:12:23: error: visibility does not match previous declaration","clang/test/Sema/attr-visibility.c:16:23: error: visibility does not match previous declaration","clang/test/Sema/attr-visibility.c:18:33: error: visibility does not match previous declaration","clang/test/Sema/attr-visibility.c:22:33: error: visibility does not match previous declaration"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_expected_subject_sub_identifier"]={ | | ["err_misplaced_ellipsis_in_declaration"]={ |
| [i]={{nil,o,"err_pragma_attribute_expected_subject_sub_identifier"}}, | | [i]="err_misplaced_ellipsis_in_declaration", |
| [h]={{nil,o,"expected an identifier that corresponds to an attribute subject matcher sub-rule; \'%0\' matcher %select{does not support sub-rules|supports the following sub-rules: %2|}1"}}, | | [h]="\'...\' must %select{immediately precede declared identifier|be innermost component of anonymous pack declaration}0", |
| [g]={{nil,o,{"expected an identifier that corresponds to an attribute subject matcher sub-rule; \'A\' matcher ",{"does not support sub-rules","supports the following sub-rules: C",a}}}}, | | [g]={{nil,nil,{"\'...\' must ",{"immediately precede declared identifier","be innermost component of anonymous pack declaration"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="expected an identifier that corresponds to an attribute subject matcher sub\\-rule; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?)|)", | | [e]="\'\\.\\.\\.\' must (?:immediately precede declared identifier|be innermost component of anonymous pack declaration)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,x}}, | | [f]=y, |
| [c]={gb,1492508507,fb,eb}, | | [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"}, |
| [j]={{B,1565,"static void diagnoseExpectedAttributeSubjectSubRule(Parser &PRef, attr::SubjectMatchRule PrimaryRule, StringRef PrimaryRuleName, SourceLocation SubRuleLoc) {\n auto Diagnostic = PRef.Diag(SubRuleLoc, diag::err_pragma_attribute_expected_subject_sub_identifier) << PrimaryRuleName;"}}, | | [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]={ |
| [ob]={"clang/test/Parser/pragma-attribute.cpp:66:89: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:73:99: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:74:101: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'namespace\' matcher does not support sub-rules","clang/test/Parser/pragma-attribute.cpp:87:99: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:88:96: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'enum\' matcher does not support sub-rules"} | | ["clang/test/Parser/cxx11-templates.cpp"]={"clang/test/Parser/cxx11-templates.cpp:12:37: error: \'...\' must immediately precede declared identifier","clang/test/Parser/cxx11-templates.cpp:13:44: error: \'...\' must immediately precede declared identifier","clang/test/Parser/cxx11-templates.cpp:31:15: error: \'...\' must immediately precede declared identifier"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_extra_tokens_after_attribute"]={ | | ["err_misplaced_ivar"]={ |
| [i]={{nil,o,"err_pragma_attribute_extra_tokens_after_attribute"}}, | | [i]="err_misplaced_ivar", |
| [h]={{nil,o,"extra tokens after attribute in a \'#pragma clang attribute push\'"}}, | | [h]="instance variables may not be placed in %select{categories|class extension}0", |
| [g]={{nil,o,"extra tokens after attribute in a \'#pragma clang attribute push\'"}}, | | [g]={{nil,nil,{"instance variables may not be placed in ",{"categories","class extension"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="extra tokens after attribute in a \'\\#pragma clang attribute push\'", | | [e]="instance variables may not be placed in (?:categories|class extension)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,x}}, | | [f]=m, |
| [c]={gb,1492508507,fb,eb}, | | [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"}, |
| [j]={{B,1957,"void Parser::HandlePragmaAttribute() {\n // ...\n // Tokens following an ill-formed attribute will remain in the token stream\n // and must be removed.\n if (Tok.isNot(tok::eof)) {\n Diag(Tok, diag::err_pragma_attribute_extra_tokens_after_attribute);"}}, | | [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]={ |
| [ob]={"clang/test/Parser/pragma-attribute.cpp:124:76: error: extra tokens after attribute in a \'#pragma clang attribute push\'"} | | ["clang/test/SemaObjC/ivar-in-class-extension.m"]={"clang/test/SemaObjC/ivar-in-class-extension.m:35:13: error: instance variables may not be placed in categories"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_invalid_argument"]={ | | ["err_missing_actual_pipe_type"]={ |
| [i]={{nil,o,"err_pragma_attribute_invalid_argument"}}, | | [i]="err_missing_actual_pipe_type", |
| [h]={{nil,o,"unexpected argument \'%0\' to \'#pragma clang attribute\'; expected \'push\' or \'pop\'"}}, | | [h]="missing actual type specifier for pipe", |
| [g]={{nil,o,"unexpected argument \'A\' to \'#pragma clang attribute\'; expected \'push\' or \'pop\'"}}, | | [g]="missing actual type specifier for pipe", |
| [b]=k, | | [b]=k, |
| [e]="unexpected argument \'(.*?)\' to \'\\#pragma clang attribute\'; expected \'push\' or \'pop\'", | | [e]="missing actual type specifier for pipe", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,x}}, | | [f]=m, |
| [c]={gb,1492508507,fb,eb}, | | [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]={{B,3897,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n/// #pragma clang attribute push (attribute, subject-set)\n/// #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n/// #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n/// #pragma clang attribute namespace.push\n/// #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n // Determine what action this pragma clang attribute represents.\n if (Tok.is(tok::l_paren)) {\n // ...\n } else {\n // ...\n if (II->isStr(\"push\"))\n // ...\n else if (II->isStr(\"pop\"))\n // ...\n else {\n PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_invalid_argument) << PP.getSpelling(Tok);"}}
| | [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]={ |
| | ["clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl"]={"clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl:24:17: error: missing actual type specifier for pipe"} |
| | } |
| }, | | }, |
| ["err_pragma_attribute_invalid_matchers"]={ | | ["err_missing_atsign_prefix"]={ |
| [i]={{nil,o,"err_pragma_attribute_invalid_matchers"}}, | | [i]="err_missing_atsign_prefix", |
| [h]={{nil,o,"attribute %0 can\'t be applied to %1"}}, | | [h]={{nil,w,"%select{string|numeric}0 literal must be prefixed by \'@\'"},{n,nil,"string literal must be prefixed by \'@\' "}}, |
| [g]={{nil,o,"attribute A can\'t be applied to B"}}, | | [g]={{nil,w,{{"string","numeric"}," literal must be prefixed by \'@\'"}},{n,nil,"string literal must be prefixed by \'@\' "}}, |
| [b]=k, | | [b]=k, |
| [e]="attribute (.*?) can\'t be applied to (.*?)", | | [e]="(?:string|numeric) literal must be prefixed by \'@\'", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,m}}, | | [f]=m, |
| [c]={gb,1492508507,fb,eb}, | | [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"}, |
| [j]={{L,1048,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n // ...\n if (!Rules.empty()) {\n auto Diagnostic = Diag(PragmaLoc, diag::err_pragma_attribute_invalid_matchers) << Attribute;"}}, | | [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(), \"@\");"}}, |
| [l]={ | | [l]={ |
| [ob]={"clang/test/Parser/pragma-attribute.cpp:126:15: error: attribute \'objc_bridge_related\' can\'t be applied to \'function\'","clang/test/Parser/pragma-attribute.cpp:185:15: error: attribute \'uninitialized\' can\'t be applied to \'function\'","clang/test/Parser/pragma-attribute.cpp:187:15: error: attribute \'uninitialized\' can\'t be applied to \'variable\'","clang/test/Parser/pragma-attribute.cpp:189:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_thread_local)\'","clang/test/Parser/pragma-attribute.cpp:191:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:193:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_parameter)\', and \'variable(unless(is_parameter))\'"} | | ["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 \'@\'"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_invalid_subject_set_specifier"]={ | | ["err_missing_before_module_end"]={ |
| [i]={{nil,o,"err_pragma_attribute_invalid_subject_set_specifier"}}, | | [i]="err_missing_before_module_end", |
| [h]={{nil,o,"expected attribute subject set specifier \'apply_to\'"}}, | | [h]="expected %0 at end of module", |
| [g]={{nil,o,"expected attribute subject set specifier \'apply_to\'"}}, | | [g]="expected A at end of module", |
| [b]=k, | | [b]=k, |
| [e]="expected attribute subject set specifier \'apply_to\'", | | [e]="expected (.*?) at end of module", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,x}}, | | [f]=M, |
| [c]={gb,1492508507,fb,eb}, | | [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"}, |
| [j]={{B,1922,"void Parser::HandlePragmaAttribute() {\n // ...\n if (Tok.isNot(tok::identifier)) {\n createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"},{B,1930,"void Parser::HandlePragmaAttribute() {\n // ...\n if (!II->isStr(\"apply_to\")) {\n createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"}},
| | [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;"}}, |
| [l]={ | | [l]={ |
| [ob]={"clang/test/Parser/pragma-attribute.cpp:27:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:28:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:29:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:30:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:31:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:32:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:33:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:34:64: error: expected attribute subject set specifier \'apply_to\'"} | | ["clang/test/Modules/extern_cxx.cpp"]={"clang/test/Modules/extern_cxx.cpp:22:24: error: expected \'}\' at end of module"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_matcher_negated_subrule_contradicts_subrule"]={ | | ["err_missing_catch_finally"]={ |
| [i]={{nil,o,"err_pragma_attribute_matcher_negated_subrule_contradicts_subrule"}}, | | [i]="err_missing_catch_finally", |
| [h]={{nil,o,"negated attribute subject matcher sub-rule \'%0\' contradicts sub-rule \'%1\'"}}, | | [h]="@try statement without a @catch and @finally clause", |
| [g]={{nil,o,"negated attribute subject matcher sub-rule \'A\' contradicts sub-rule \'B\'"}}, | | [g]="@try statement without a @catch and @finally clause", |
| [b]=k, | | [b]=k, |
| [e]="negated attribute subject matcher sub\\-rule \'(.*?)\' contradicts sub\\-rule \'(.*?)\'", | | [e]="@try statement without a @catch and @finally clause", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,m}}, | | [f]=y, |
| [c]={gb,1492508507,fb,eb}, | | [c]={H,1236199783,I,G}, |
| [j]={{L,1036,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n // ...\n // Figure out which subject matching rules are valid.\n if (StrictSubjectMatchRuleSet.empty()) {\n // ...\n for (const auto &Rule : Rules) {\n // ...\n if (It != RulesToFirstSpecifiedNegatedSubRule.end() && It->second != Rule) {\n // ...\n Diag(It->second.second.getBegin(), diag::err_pragma_attribute_matcher_negated_subrule_contradicts_subrule) << attr::getSubjectMatchRuleSpelling(attr::SubjectMatchRule(It->second.first)) << attr::getSubjectMatchRuleSpelling(MatchRule) << Rule.second << FixItHint::CreateRemoval(replacementRangeForListElement(*this, It->second.second));"}}, | | [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]={ |
| ["clang/test/Sema/pragma-attribute-strict-subjects.c"]={"clang/test/Sema/pragma-attribute-strict-subjects.c:25:130: error: negated attribute subject matcher sub-rule \'variable(unless(is_parameter))\' contradicts sub-rule \'variable(is_parameter)\'","clang/test/Sema/pragma-attribute-strict-subjects.c:30:106: error: negated attribute subject matcher sub-rule \'variable(unless(is_parameter))\' contradicts sub-rule \'variable(is_global)\'"} | | ["clang/test/Parser/objc-try-catch-1.m"]={"clang/test/Parser/objc-try-catch-1.m:41:3: error: @try statement without a @catch and @finally clause","clang/test/Parser/objc-try-catch-1.m:49:3: error: @try statement without a @catch and @finally clause","clang/test/Parser/objc-try-catch-1.m:55:3: error: @try statement without a @catch and @finally clause"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_matcher_subrule_contradicts_rule"]={ | | ["err_missing_comma_before_ellipsis"]={ |
| [i]={{nil,o,"err_pragma_attribute_matcher_subrule_contradicts_rule"}}, | | [i]="err_missing_comma_before_ellipsis", |
| [h]={{nil,o,"redundant attribute subject matcher sub-rule \'%0\'; \'%1\' already matches those declarations"}}, | | [h]="C requires a comma prior to the ellipsis in a variadic function type", |
| [g]={{nil,o,"redundant attribute subject matcher sub-rule \'A\'; \'B\' already matches those declarations"}}, | | [g]="C requires a comma prior to the ellipsis in a variadic function type", |
| [b]=k, | | [b]=k, |
| [e]="redundant attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' already matches those declarations", | | [e]="C requires a comma prior to the ellipsis in a variadic function type", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,m}}, | | [f]=y, |
| [c]={gb,1492508507,fb,eb}, | | [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]={{L,953,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n // ...\n // Figure out which subject matching rules are valid.\n if (StrictSubjectMatchRuleSet.empty()) {\n // ...\n for (const auto &Rule : Rules) {\n // ...\n if (It != Rules.end()) {\n // ...\n Diag(Rule.second.getBegin(), diag::err_pragma_attribute_matcher_subrule_contradicts_rule) << attr::getSubjectMatchRuleSpelling(MatchRule) << attr::getSubjectMatchRuleSpelling(*ParentRule) << It->second << FixItHint::CreateRemoval(replacementRangeForListElement(*this, Rule.second));"}}, | | [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/Sema/pragma-attribute-strict-subjects.c"]={"clang/test/Sema/pragma-attribute-strict-subjects.c:9:153: error: redundant attribute subject matcher sub-rule \'variable(is_global)\'; \'variable\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:9:108: error: redundant attribute subject matcher sub-rule \'variable(is_parameter)\'; \'variable\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:15:99: error: redundant attribute subject matcher sub-rule \'function(is_member)\'; \'function\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:20:109: error: redundant attribute subject matcher sub-rule \'variable(unless(is_parameter))\'; \'variable\' already matches those declarations"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_namespace_on_attribute"]={ | | ["err_missing_default_ctor"]={ |
| [i]={{nil,E,"err_pragma_attribute_namespace_on_attribute"}}, | | [i]="err_missing_default_ctor", |
| [h]={{nil,E,"namespace can only apply to \'push\' or \'pop\' directives"}}, | | [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", |
| [g]={{nil,E,"namespace can only apply to \'push\' or \'pop\' directives"}}, | | [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"}}}, |
| [b]=k, | | [b]=k, |
| [e]="namespace can only apply to \'push\' or \'pop\' directives", | | [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", |
| [f]=a, | | [d]=a, |
| [d]={{nil,E,x}}, | | [f]=m, |
| [c]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","Add support for namespaces on #pragma clang attribute\n\nNamespaces are introduced by adding an \"identifier.\" before a\npush/pop directive. Pop directives with namespaces can only pop a\nattribute group that was pushed with the same namespace. Push and pop\ndirectives that don\'t opt into namespaces have the same semantics.\n\nThis is necessary to prevent a pitfall of using multiple #pragma\nclang attribute directives spread out in a large file, particularly\nwhen macros are involved. It isn\'t easy to see which pop corripsonds\nto which push, so its easy to inadvertently pop the wrong group.\n\nDifferential revision: https://reviews.llvm.org/D55628\n\nllvm-svn: 349845"}, | | [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"}, |
| [j]={{B,3884,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n/// #pragma clang attribute push (attribute, subject-set)\n/// #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n/// #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n/// #pragma clang attribute namespace.push\n/// #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n // Determine what action this pragma clang attribute represents.\n if (Tok.is(tok::l_paren)) {\n if (Info->Namespace) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_namespace_on_attribute);"}}, | | [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]={ |
| ["clang/test/Sema/pragma-attribute-namespace.c"]={"clang/test/Sema/pragma-attribute-namespace.c:25:31: error: namespace can only apply to \'push\' or \'pop\' directives"} | | ["clang/test/CXX/dcl.decl/dcl.init/p14-0x.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/p14-0x.cpp:39:3: error: constructor for \'S\' must explicitly initialize the member \'e1\' which does not have a default constructor"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_no_pop_eof"]={ | | ["err_missing_dependent_template_keyword"]={ |
| [i]={{nil,o,"err_pragma_attribute_no_pop_eof"}}, | | [i]="err_missing_dependent_template_keyword", |
| [h]={{nil,o,"unterminated \'#pragma clang attribute push\' at end of file"}}, | | [h]="use \'template\' keyword to treat \'%0\' as a dependent template name", |
| [g]={{nil,o,"unterminated \'#pragma clang attribute push\' at end of file"}}, | | [g]="use \'template\' keyword to treat \'A\' as a dependent template name", |
| [b]=k, | | [b]=k, |
| [e]="unterminated \'\\#pragma clang attribute push\' at end of file", | | [e]="use \'template\' keyword to treat \'(.*?)\' as a dependent template name", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,m}}, | | [f]=y, |
| [c]={gb,1492508507,fb,eb}, | | [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"}, |
| [j]={{L,1149,"void Sema::DiagnoseUnterminatedPragmaAttribute() {\n // ...\n Diag(PragmaAttributeStack.back().Loc, diag::err_pragma_attribute_no_pop_eof);"}}, | | [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]={ |
| ["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:68:15: error: unterminated \'#pragma clang attribute push\' at end of file"} | | ["clang/test/Parser/cxx2a-concepts-requires-expr.cpp"]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:80:45: error: use \'template\' keyword to treat \'temp\' as a dependent template name"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_stack_mismatch"]={ | | ["err_missing_end_of_definition"]={ |
| [i]={{nil,o,"err_pragma_attribute_stack_mismatch"}}, | | [i]="err_missing_end_of_definition", |
| [h]={{nil,E,"\'#pragma clang attribute %select{%1.|}0pop\' with no matching \'#pragma clang attribute %select{%1.|}0push\'"},{ic,o,"\'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'"}}, | | [h]="missing \'}\' at end of definition of %q0", |
| [g]={{nil,E,{"\'#pragma clang attribute ",{"B.",a},"pop\' with no matching \'#pragma clang attribute ",{"B.",a},"push\'"}},{ic,o,"\'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'"}}, | | [g]="missing \'}\' at end of definition of A", |
| [b]=k, | | [b]=k, |
| [e]="\'\\#pragma clang attribute (?:(.*?)\\.|)pop\' with no matching \'\\#pragma clang attribute (?:(.*?)\\.|)push\'", | | [e]="missing \'\\}\' at end of definition of (.*?)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,m}}, | | [f]=y, |
| [c]={gb,1492508507,fb,eb}, | | [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"}, |
| [j]={{L,1081,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n if (PragmaAttributeStack.empty()) {\n Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"},{L,1095,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n // ...\n if (Namespace)\n Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 0 << Namespace->getName();"},{L,1131,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n // ...\n if (Namespace)\n // ...\n else\n Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"}}, | | [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]={ |
| ["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:3:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:47:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:60:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:66:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'"} | | ["clang/test/Parser/recovery.cpp"]={"clang/test/Parser/recovery.cpp:39:10: error: missing \'}\' at end of definition of \'MissingBrace::S\'","clang/test/Parser/recovery.cpp:48:31: error: missing \'}\' at end of definition of \'MissingBrace::PR17949\'"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_unknown_subject_rule"]={ | | ["err_missing_exception_specification"]={ |
| [i]={{nil,o,"err_pragma_attribute_unknown_subject_rule"}}, | | [i]="err_missing_exception_specification", |
| [h]={{nil,o,"unknown attribute subject rule \'%0\'"}}, | | [h]="%0 is missing exception specification \'%1\'", |
| [g]={{nil,o,"unknown attribute subject rule \'A\'"}}, | | [g]="A is missing exception specification \'B\'", |
| [b]=k, | | [b]=k, |
| [e]="unknown attribute subject rule \'(.*?)\'", | | [e]="(.*?) is missing exception specification \'(.*?)\'", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,x}}, | | [f]=m, |
| [c]={gb,1492508507,fb,eb}, | | [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"}, |
| [j]={{B,1609,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n // ...\n do {\n // ...\n if (!Rule.first) {\n Diag(Tok, diag::err_pragma_attribute_unknown_subject_rule) << Name;"}}, | | [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]={ |
| [ob]={"clang/test/Parser/pragma-attribute.cpp:56:81: error: unknown attribute subject rule \'diag\'","clang/test/Parser/pragma-attribute.cpp:57:81: error: unknown attribute subject rule \'a\'","clang/test/Parser/pragma-attribute.cpp:58:91: error: unknown attribute subject rule \'for\'","clang/test/Parser/pragma-attribute.cpp:59:81: error: unknown attribute subject rule \'function42\'"} | | ["clang/test/CXX/except/except.spec/p3.cpp"]={"clang/test/CXX/except/except.spec/p3.cpp:29:13: error: \'f5\' is missing exception specification \'throw(int)\'","clang/test/CXX/except/except.spec/p3.cpp:116:23: error: \'missing\' is missing exception specification \'noexcept(X)\'"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_unknown_subject_sub_rule"]={ | | ["err_missing_method_context"]={ |
| [i]={{nil,o,"err_pragma_attribute_unknown_subject_sub_rule"}}, | | [i]="err_missing_method_context", |
| [h]={{nil,o,"%select{invalid use of|unknown}2 attribute subject matcher sub-rule \'%0\'; \'%1\' matcher %select{does not support sub-rules|supports the following sub-rules: %3}2"}}, | | [h]="missing context for method declaration", |
| [g]={{nil,o,{{"invalid use of","unknown"}," attribute subject matcher sub-rule \'A\'; \'B\' matcher ",{"does not support sub-rules","supports the following sub-rules: D"}}}}, | | [g]="missing context for method declaration", |
| [b]=k, | | [b]=k, |
| [e]="(?:invalid use of|unknown) attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?))", | | [e]="missing context for method declaration", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,x}}, | | [f]=m, |
| [c]={gb,1492508507,fb,eb}, | | [c]={yb,1480718311,zb,Ab}, |
| [j]={{B,1578,"static void diagnoseUnknownAttributeSubjectSubRule(Parser &PRef, attr::SubjectMatchRule PrimaryRule, StringRef PrimaryRuleName, StringRef SubRuleName, SourceLocation SubRuleLoc) {\n auto Diagnostic = PRef.Diag(SubRuleLoc, diag::err_pragma_attribute_unknown_subject_sub_rule) << SubRuleName << PrimaryRuleName;"}}, | | [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]={ |
| [ob]={"clang/test/Parser/pragma-attribute.cpp:67:89: error: unknown attribute subject matcher sub-rule \'is\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:72:99: error: unknown attribute subject matcher sub-rule \'is\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:77:81: error: invalid use of attribute subject matcher sub-rule \'is_parameter\'; \'enum\' matcher does not support sub-rules","clang/test/Parser/pragma-attribute.cpp:78:85: error: invalid use of attribute subject matcher sub-rule \'is_parameter\'; \'enum\' matcher does not support sub-rules","clang/test/Parser/pragma-attribute.cpp:82:99: error: unknown attribute subject matcher sub-rule \'unless(is)\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:90:99: error: unknown attribute subject matcher sub-rule \'unless(is_global)\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:91:86: error: invalid use of attribute subject matcher sub-rule \'unless(is_parameter)\'; \'enum\' matcher does not support sub-rules"} | | ["clang/test/SemaObjC/method-no-context.m"]={"clang/test/SemaObjC/method-no-context.m:3:1: error: missing context for method declaration"} |
| } | | } |
| }, | | }, |
| ["err_pragma_attribute_unsupported_attribute"]={ | | ["err_missing_module"]={ |
| [i]={{nil,o,"err_pragma_attribute_unsupported_attribute"}}, | | [i]="err_missing_module", |
| [h]={{nil,o,"attribute %0 is not supported by \'#pragma clang attribute\'"}}, | | [h]="no module named \'%0\' declared in module map file \'%1\'", |
| [g]={{nil,o,"attribute A is not supported by \'#pragma clang attribute\'"}}, | | [g]="no module named \'A\' declared in module map file \'B\'", |
| [b]=k, | | [b]=T, |
| [e]="attribute (.*?) is not supported by \'\\#pragma clang attribute\'", | | [e]="no module named \'(.*?)\' declared in module map file \'(.*?)\'", |
| | [d]=a, |
| [f]=a, | | [f]=a, |
| [d]={{nil,o,x}},
| | [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"}, |
| [c]={gb,1492508507,fb,eb}, | | [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]={{B,1903,"void Parser::HandlePragmaAttribute() {\n // ...\n for (const ParsedAttr &Attribute : Attrs) {\n if (!Attribute.isSupportedByPragmaAttribute()) {\n Diag(PragmaLoc, diag::err_pragma_attribute_unsupported_attribute) << Attribute;"}}, | |
| [l]={ | | [l]={ |
| ["clang/test/Parser/pragma-attribute-declspec.cpp"]={"clang/test/Parser/pragma-attribute-declspec.cpp:12:15: error: attribute \'align\' is not supported by \'#pragma clang attribute\'"} | | ["clang/test/Modules/preprocess-build.cpp"]={"fatal error: no module named \'unterminated\' declared in module map file \'unterminated.map\'"} |
| } | | } |
| }, | | }, |
| ["err_pragma_cannot_end_force_cuda_host_device"]={ | | ["err_missing_module_name"]={ |
| [i]="err_pragma_cannot_end_force_cuda_host_device", | | [i]="err_missing_module_name", |
| [h]="force_cuda_host_device end pragma without matching force_cuda_host_device begin", | | [h]="no module name provided; specify one with -fmodule-name=", |
| [g]="force_cuda_host_device end pragma without matching force_cuda_host_device begin", | | [g]="no module name provided; specify one with -fmodule-name=", |
| [b]=k, | | [b]=T, |
| [e]="force_cuda_host_device end pragma without matching force_cuda_host_device begin", | | [e]="no module name provided; specify one with \\-fmodule\\-name\\=", |
| | [d]=a, |
| [f]=a, | | [f]=a, |
| [d]=x,
| | [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"}, |
| [c]={"67a78a6cc021",1475964958,"[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas.","[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas.\n\nSummary:\nThese cause us to consider all functions in-between to be __host__\n__device__.\n\nYou can nest these pragmas; you just can\'t have more \'end\'s than\n\'begin\'s.\n\nReviewers: rsmith\n\nSubscribers: tra, jhen, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D24975\n\nllvm-svn: 283677"}, | | [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]={{B,3815,"void PragmaForceCUDAHostDeviceHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Info->isStr(\"begin\"))\n // ...\n else if (!Actions.PopForceCUDAHostDevice())\n PP.Diag(FirstTok.getLocation(), diag::err_pragma_cannot_end_force_cuda_host_device);"}} | |
| }, | | }, |
| ["err_pragma_clang_section_expected_equal"]={ | | ["err_missing_open_square_message_send"]={ |
| [i]={{nil,o,"err_pragma_clang_section_expected_equal"}}, | | [i]="err_missing_open_square_message_send", |
| [h]={{nil,p,"expected \'=\' following \'#pragma clang section %select{invalid|bss|data|rodata|text|relro}0\'"},{D,o,"expected \'=\' following \'#pragma clang section %select{invalid|bss|data|rodata|text}0\'"}}, | | [h]="missing \'[\' at start of message send expression", |
| [g]={{nil,p,{"expected \'=\' following \'#pragma clang section ",{lc,"bss","data","rodata","text","relro"},uc}},{D,o,{"expected \'=\' following \'#pragma clang section ",{lc,"bss","data","rodata","text"},uc}}}, | | [g]="missing \'[\' at start of message send expression", |
| [b]=k, | | [b]=k, |
| [e]="expected \'\\=\' following \'\\#pragma clang section (?:invalid|bss|data|rodata|text|relro)\'", | | [e]="missing \'\\[\' at start of message send expression", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,x}}, | | [f]=m, |
| [c]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section","Add support for #pragma clang section\n\nThis patch provides a means to specify section-names for global variables, \nfunctions and static variables, using #pragma directives. \nThis feature is only defined to work sensibly for ELF targets.\nOne can specify section names as:\n#pragma clang section bss=\"myBSS\" data=\"myData\" rodata=\"myRodata\" text=\"myText\"\nOne can \"unspecify\" a section name with empty string e.g.\n#pragma clang section bss=\"\" data=\"\" text=\"\" rodata=\"\"\n\nReviewers: Roger Ferrer, Jonathan Roelofs, Reid Kleckner\nDifferential Revision: https://reviews.llvm.org/D33412\n\nllvm-svn: 304705"}, | | [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"}, |
| [j]={{B,2230,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n while (Tok.isNot(tok::eod)) {\n // ...\n if (Tok.isNot(tok::equal)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_clang_section_expected_equal) << SecKind;"}}, | | [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, \"[\");"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Sema/pragma-clang-section.c"]={"clang/test/Sema/pragma-clang-section.c:13:27: error: expected \'=\' following \'#pragma clang section bss\'","clang/test/Sema/pragma-clang-section.c:14:28: error: expected \'=\' following \'#pragma clang section data\'","clang/test/Sema/pragma-clang-section.c:15:30: error: expected \'=\' following \'#pragma clang section rodata\'","clang/test/Sema/pragma-clang-section.c:16:28: error: expected \'=\' following \'#pragma clang section text\'","clang/test/Sema/pragma-clang-section.c:17:29: error: expected \'=\' following \'#pragma clang section relro\'"} | | ["clang/test/Parser/stmt-attributes.m"]={"clang/test/Parser/stmt-attributes.m:26:22: error: missing \'[\' at start of message send expression"} |
| } | | } |
| }, | | }, |
| ["err_pragma_comment_malformed"]={ | | ["err_missing_param"]={ |
| [i]="err_pragma_comment_malformed", | | [i]="err_missing_param", |
| [h]="pragma comment requires parenthesized identifier and optional string", | | [h]="expected parameter declarator", |
| [g]="pragma comment requires parenthesized identifier and optional string", | | [g]="expected parameter declarator", |
| [b]=k, | | [b]=k, |
| [e]="pragma comment requires parenthesized identifier and optional string", | | [e]="expected parameter declarator", |
| [f]=a, | | [d]=a, |
| [d]=x, | | [f]=y, |
| [c]={K,1236199783,J,I}, | | [c]={H,1236199783,I,G}, |
| [j]={{B,3089,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc. See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::l_paren)) {\n PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{B,3096,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc. See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{B,3137,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc. See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"},{B,3143,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc. See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"}}, | | [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/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:9:31: error: pragma comment requires parenthesized identifier and optional string","clang/test/Preprocessor/pragma_microsoft.c:24:22: error: pragma comment requires parenthesized identifier and optional string"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pragma_comment_unknown_kind"]={ | | ["err_missing_property_context"]={ |
| [i]="err_pragma_comment_unknown_kind", | | [i]="err_missing_property_context", |
| [h]="unknown kind of pragma comment", | | [h]="missing context for property implementation declaration", |
| [g]="unknown kind of pragma comment", | | [g]="missing context for property implementation declaration", |
| [b]=k, | | [b]=k, |
| [e]="unknown kind of pragma comment", | | [e]="missing context for property implementation declaration", |
| [f]=a, | | [d]=a, |
| [d]=x, | | [f]=m, |
| [c]={K,1236199783,J,I}, | | [c]={yb,1480718311,zb,Ab}, |
| [j]={{B,3111,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc. See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PCK_Unknown) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_comment_unknown_kind);"}}, | | [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/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:17:17: error: unknown kind of pragma comment"} | | ["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:66:1: error: missing context for property implementation declaration"} |
| } | | } |
| }, | | }, |
| ["err_pragma_detect_mismatch_malformed"]={ | | ["err_missing_property_interface"]={ |
| [i]="err_pragma_detect_mismatch_malformed", | | [i]="err_missing_property_interface", |
| [h]="pragma detect_mismatch is malformed; it requires two comma-separated string literals", | | [h]="property implementation in a category with no category declaration", |
| [g]="pragma detect_mismatch is malformed; it requires two comma-separated string literals", | | [g]="property implementation in a category with no category declaration", |
| [b]=k, | | [b]=k, |
| [e]="pragma detect_mismatch is malformed; it requires two comma\\-separated string literals", | | [e]="property implementation in a category with no category declaration", |
| [f]=a, | | [d]=a, |
| [d]=x, | | [f]=m, |
| [c]={"5d041beb4e86",1370311634,"Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker co...","Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker command into the object file.\n\nllvm-svn: 183178"}, | | [c]={yb,1480718311,zb,Ab}, |
| [j]={{B,3047,"/// Handle the Microsoft \\#pragma detect_mismatch extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma detect_mismatch(\"name\", \"value\")\n/// \\endcode\n/// Where \'name\' and \'value\' are quoted strings. The values are embedded in\n/// the object file and passed along to the linker. If the linker detects a\n/// mismatch in the object file\'s values for the given name, a LNK2038 error\n/// is emitted. See MSDN for more details.\nvoid PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::comma)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"},{B,3062,"/// Handle the Microsoft \\#pragma detect_mismatch extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma detect_mismatch(\"name\", \"value\")\n/// \\endcode\n/// Where \'name\' and \'value\' are quoted strings. The values are embedded in\n/// the object file and passed along to the linker. If the linker detects a\n/// mismatch in the object file\'s values for the given name, a LNK2038 error\n/// is emitted. See MSDN for more details.\nvoid PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"}}, | | [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/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:34:31: error: pragma detect_mismatch is malformed; it requires two comma-separated string literals"} | | ["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:35:1: error: property implementation in a category with no category declaration"} |
| } | | } |
| }, | | }, |
| ["err_pragma_expected_clang_section_name"]={ | | ["err_missing_property_ivar_decl"]={ |
| [i]={{nil,o,"err_pragma_expected_clang_section_name"}}, | | [i]="err_missing_property_ivar_decl", |
| [h]={{nil,p,"expected one of [bss|data|rodata|text|relro] section kind in \'#pragma %0\'"},{D,o,"expected one of [bss|data|rodata|text] section kind in \'#pragma %0\'"}}, | | [h]="synthesized property %0 must either be named the same as a compatible instance variable or must explicitly name an instance variable", |
| [g]={{nil,p,"expected one of [bss|data|rodata|text|relro] section kind in \'#pragma A\'"},{D,o,"expected one of [bss|data|rodata|text] section kind in \'#pragma A\'"}}, | | [g]="synthesized property A must either be named the same as a compatible instance variable or must explicitly name an instance variable", |
| [b]=k, | | [b]=k, |
| [e]="expected one of \\[bss\\|data\\|rodata\\|text\\|relro\\] section kind in \'\\#pragma (.*?)\'", | | [e]="synthesized property (.*?) must either be named the same as a compatible instance variable or must explicitly name an instance variable", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,x}}, | | [f]=m, |
| [c]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section","Add support for #pragma clang section\n\nThis patch provides a means to specify section-names for global variables, \nfunctions and static variables, using #pragma directives. \nThis feature is only defined to work sensibly for ELF targets.\nOne can specify section names as:\n#pragma clang section bss=\"myBSS\" data=\"myData\" rodata=\"myRodata\" text=\"myText\"\nOne can \"unspecify\" a section name with empty string e.g.\n#pragma clang section bss=\"\" data=\"\" text=\"\" rodata=\"\"\n\nReviewers: Roger Ferrer, Jonathan Roelofs, Reid Kleckner\nDifferential Revision: https://reviews.llvm.org/D33412\n\nllvm-svn: 304705"}, | | [c]={yb,1480718311,zb,Ab}, |
| [j]={{B,2207,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n while (Tok.isNot(tok::eod)) {\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"},{B,2223,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n while (Tok.isNot(tok::eod)) {\n // ...\n if (SecType->isStr(\"bss\"))\n // ...\n else if (SecType->isStr(\"data\"))\n // ...\n else if (SecType->isStr(\"rodata\"))\n // ...\n else if (SecType->isStr(\"relro\"))\n // ...\n else if (SecType->isStr(\"text\"))\n // ...\n else {\n PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Sema/pragma-clang-section.c"]={"clang/test/Sema/pragma-clang-section.c:6:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:7:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:8:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:9:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:11:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:18:56: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pragma_expected_file_scope"]={ | | ["err_missing_type_specifier"]={ |
| [i]={{nil,y,"err_pragma_expected_file_scope"}}, | | [i]="err_missing_type_specifier", |
| [h]={{nil,y,"\'#pragma %0\' can only appear at file scope"}}, | | [h]={{nil,s,"a type specifier is required for all declarations"},{S,nil,"C++ requires a type specifier for all declarations"}}, |
| [g]={{nil,y,"\'#pragma A\' can only appear at file scope"}}, | | [g]={{nil,s,"a type specifier is required for all declarations"},{S,nil,"C++ requires a type specifier for all declarations"}}, |
| [b]=k, | | [b]=k, |
| [e]="\'\\#pragma (.*?)\' can only appear at file scope", | | [e]="a type specifier is required for all declarations", |
| [f]=a, | | [d]=a, |
| [d]={{nil,y,m}}, | | [f]=m, |
| [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"}, | | [c]={hb,1237025389,gb,fb}, |
| [j]={{L,793,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n if (!CurContext->getRedeclContext()->isFileContext()) {\n Diag(PragmaLocation, diag::err_pragma_expected_file_scope) << \"alloc_text\";"},{L,1159,"void Sema::ActOnPragmaMSOptimize(SourceLocation Loc, bool IsOn) {\n if (!CurContext->getRedeclContext()->isFileContext()) {\n Diag(Loc, diag::err_pragma_expected_file_scope) << \"optimize\";"},{L,1260,"void Sema::ActOnPragmaMSFunction(SourceLocation Loc, const llvm::SmallVectorImpl<StringRef> &NoBuiltins) {\n if (!CurContext->getRedeclContext()->isFileContext()) {\n Diag(Loc, diag::err_pragma_expected_file_scope) << \"function\";"}},
| | [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]={ |
| ["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:27:19: error: \'#pragma alloc_text\' can only appear at file scope"} | | ["clang/test/SemaCXX/implicit-int.cpp"]={"clang/test/SemaCXX/implicit-int.cpp:3:1: error: a type specifier is required for all declarations","clang/test/SemaCXX/implicit-int.cpp:5:1: error: a type specifier is required for all declarations"} |
| } | | } |
| }, | | }, |
| ["err_pragma_expected_integer"]={ | | ["err_missing_vfs_overlay_file"]={ |
| [i]={{nil,q,"err_pragma_expected_integer"}}, | | [i]="err_missing_vfs_overlay_file", |
| [h]={{nil,q,"expected an integer argument in \'#pragma %0\'"}}, | | [h]="virtual filesystem overlay file \'%0\' not found", |
| [g]={{nil,q,"expected an integer argument in \'#pragma A\'"}}, | | [g]="virtual filesystem overlay file \'A\' not found", |
| | [b]=T, |
| | [e]="virtual filesystem overlay file \'(.*?)\' not found", |
| | [d]=a, |
| | [f]=a, |
| | [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"}, |
| | [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"]={ |
| | [i]="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 \'< ::\'?"}}, |
| | [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 \'< ::\'?"}}}, |
| [b]=k, | | [b]=k, |
| [e]="expected an integer argument in \'\\#pragma (.*?)\'", | | [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 \'\\< \\:\\:\'\\?", |
| [f]=a, | | [d]=a, |
| [d]={{nil,q,x}}, | | [f]=y, |
| [c]={hc,1570627358,nc,oc}, | | [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"}, |
| [j]={{B,3983,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::numeric_constant) || !PP.parseSimpleIntegerLiteral(Tok, MaxTokens)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_expected_integer) << \"clang max_tokens_here\";"},{B,4015,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::numeric_constant) || !PP.parseSimpleIntegerLiteral(Tok, MaxTokens)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_expected_integer) << \"clang max_tokens_total\";"}},
| | [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]={ |
| ["clang/test/Parser/max-tokens.cpp"]={"clang/test/Parser/max-tokens.cpp:8:31: error: expected an integer argument in \'#pragma clang max_tokens_here\'","clang/test/Parser/max-tokens.cpp:15:32: error: expected an integer argument in \'#pragma clang max_tokens_total\'"} | | ["clang/test/Parser/cxx-casting.cpp"]={"clang/test/Parser/cxx-casting.cpp:46:19: error: found \'<::\' after a const_cast which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:51:21: error: found \'<::\' after a dynamic_cast which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:56:25: error: found \'<::\' after a reinterpret_cast which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:61:20: error: found \'<::\' after a static_cast which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:84:12: error: found \'<::\' after a template name which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:89:21: error: found \'<::\' after a static_cast which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:101:6: error: found \'<::\' after a template name which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:106:4: error: found \'<::\' after a template name which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:111:6: error: found \'<::\' after a template name which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:116:4: error: found \'<::\' after a template name which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"} |
| } | | } |
| }, | | }, |
| ["err_pragma_fc_except_requires_precise"]={ | | ["err_mixing_cxx_try_seh_try"]={ |
| [i]={{nil,q,"err_pragma_fc_except_requires_precise"}}, | | [i]="err_mixing_cxx_try_seh_try", |
| [h]={{nil,q,"\'#pragma float_control(except, on)\' is illegal when precise is disabled"}}, | | [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\'"}}, |
| [g]={{nil,q,"\'#pragma float_control(except, on)\' is illegal when precise is disabled"}}, | | [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\'"}}, |
| [b]=k, | | [b]=k, |
| [e]="\'\\#pragma float_control\\(except, on\\)\' is illegal when precise is disabled", | | [e]="cannot use (?:C\\+\\+ \'try\'|Objective\\-C \'@try\') in the same function as SEH \'__try\'", |
| [f]=a, | | [d]=a, |
| [d]={{nil,q,m}}, | | [f]=m, |
| [c]={U,1576908663,T,S}, | | [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"}, |
| [j]={{L,579,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n // ...\n case PFC_Except:\n if (!isPreciseFPEnabled())\n Diag(Loc, diag::err_pragma_fc_except_requires_precise);"}} | | [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;"}}, |
| },
| |
| ["err_pragma_fc_noprecise_requires_noexcept"]={
| |
| [i]={{nil,q,"err_pragma_fc_noprecise_requires_noexcept"}},
| |
| [h]={{nil,q,"\'#pragma float_control(precise, off)\' is illegal when except is enabled"}},
| |
| [g]={{nil,q,"\'#pragma float_control(precise, off)\' is illegal when except is enabled"}},
| |
| [b]=k,
| |
| [e]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when except is enabled",
| |
| [f]=a,
| |
| [d]={{nil,q,m}},
| |
| [c]={U,1576908663,T,S},
| |
| [j]={{L,570,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n // ...\n case PFC_NoPrecise:\n if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n Diag(Loc, diag::err_pragma_fc_noprecise_requires_noexcept);"}},
| |
| [l]={ | | [l]={ |
| ["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:62:9: error: \'#pragma float_control(precise, off)\' is illegal when except is enabled","clang/test/Parser/fp-floatcontrol-syntax.cpp:68:9: error: \'#pragma float_control(precise, off)\' is illegal when except is enabled"} | | ["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\'"} |
| } | | } |
| }, | | }, |
| ["err_pragma_fc_noprecise_requires_nofenv"]={ | | ["err_mmap_config_macro_submodule"]={ |
| [i]={{nil,q,"err_pragma_fc_noprecise_requires_nofenv"}}, | | [i]="err_mmap_config_macro_submodule", |
| [h]={{nil,q,"\'#pragma float_control(precise, off)\' is illegal when fenv_access is enabled"}}, | | [h]="configuration macros are only allowed in top-level modules", |
| [g]={{nil,q,"\'#pragma float_control(precise, off)\' is illegal when fenv_access is enabled"}}, | | [g]="configuration macros are only allowed in top-level modules", |
| [b]=k, | | [b]=k, |
| [e]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when fenv_access is enabled", | | [e]="configuration macros are only allowed in top\\-level modules", |
| [f]=a, | | [d]=a, |
| [d]={{nil,q,m}}, | | [f]=z, |
| [c]={U,1576908663,T,S}, | | [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]={{L,572,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n // ...\n case PFC_NoPrecise:\n if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n // ...\n else if (CurFPFeatures.getAllowFEnvAccess())\n Diag(Loc, diag::err_pragma_fc_noprecise_requires_nofenv);"}} | | [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_pragma_fc_pp_scope"]={ | | ["err_mmap_conflicting_export_as"]={ |
| [i]={{nil,q,"err_pragma_fc_pp_scope"}}, | | [i]={{nil,t,"err_mmap_conflicting_export_as"}}, |
| [h]={{nil,C,"\'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification"},{F,q,"\'#pragma float_control push/pop\' can only appear at file scope or namespace scope"}}, | | [h]={{nil,t,"conflicting re-export of module \'%0\' as \'%1\' or \'%2\'"}}, |
| [g]={{nil,C,"\'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification"},{F,q,"\'#pragma float_control push/pop\' can only appear at file scope or namespace scope"}}, | | [g]={{nil,t,"conflicting re-export of module \'A\' as \'B\' or \'C\'"}}, |
| [b]=k, | | [b]=k, |
| [e]="\'\\#pragma float_control push\\/pop\' can only appear at file or namespace scope or within a language linkage specification", | | [e]="conflicting re\\-export of module \'(.*?)\' as \'(.*?)\' or \'(.*?)\'", |
| [f]=a, | | [d]=a, |
| [d]={{nil,q,m}}, | | [f]={{nil,t,z}}, |
| [c]={U,1576908663,T,S}, | | [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"}, |
| [j]={{L,558,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n // ...\n if ((Action == PSK_Push_Set || Action == PSK_Push || Action == PSK_Pop) && !CurContext->getRedeclContext()->isFileContext()) {\n // ...\n Diag(Loc, diag::err_pragma_fc_pp_scope);"}}, | | [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();"}} |
| [l]={
| |
| ["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:33:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:34:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:35:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:36:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_fenv_requires_precise"]={ | | ["err_mmap_duplicate_header_attribute"]={ |
| [i]={{nil,q,"err_pragma_fenv_requires_precise"}}, | | [i]={{nil,r,"err_mmap_duplicate_header_attribute"}}, |
| [h]={{nil,q,"\'#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled"}}, | | [h]={{nil,r,"header attribute \'%0\' specified multiple times"}}, |
| [g]={{nil,q,"\'#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled"}}, | | [g]={{nil,r,"header attribute \'A\' specified multiple times"}}, |
| [b]=k, | | [b]=k, |
| [e]="\'\\#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled", | | [e]="header attribute \'(.*?)\' specified multiple times", |
| [f]=a, | | [d]=a, |
| [d]={{nil,q,m}}, | | [f]={{nil,r,z}}, |
| [c]={U,1576908663,T,S}, | | [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"}, |
| [j]={{L,1360,"void Sema::ActOnPragmaFEnvAccess(SourceLocation Loc, bool IsEnabled) {\n // ...\n if (IsEnabled) {\n // Verify Microsoft restriction:\n // You can\'t enable fenv_access unless precise semantics are enabled.\n // Precise semantics can be enabled either by the float_control\n // pragma, or by using the /fp:precise or /fp:strict compiler options\n if (!isPreciseFPEnabled())\n Diag(Loc, diag::err_pragma_fenv_requires_precise);"}} | | [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_pragma_file_or_compound_scope"]={ | | ["err_mmap_expected_attribute"]={ |
| [i]={{nil,q,"err_pragma_file_or_compound_scope"}}, | | [i]="err_mmap_expected_attribute", |
| [h]={{nil,q,"\'#pragma %0\' can only appear at file scope or at the start of a compound statement"}}, | | [h]="expected an attribute name", |
| [g]={{nil,q,"\'#pragma A\' can only appear at file scope or at the start of a compound statement"}}, | | [g]="expected an attribute name", |
| [b]=k, | | [b]=k, |
| [e]="\'\\#pragma (.*?)\' can only appear at file scope or at the start of a compound statement", | | [e]="expected an attribute name", |
| [f]=a, | | [d]=a, |
| [d]={{nil,q,x}}, | | [f]=z, |
| [c]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control","Add support for #pragma float_control\n\nReviewers: rjmccall, erichkeane, sepavloff\n\nDifferential Revision: https://reviews.llvm.org/D72841"}, | | [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]={{Oc,422,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n case tok::annot_pragma_fp_contract:\n // ...\n Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"fp_contract\";"},{Oc,429,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n case tok::annot_pragma_fp:\n // ...\n Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"clang fp\";"},{Oc,437,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n case tok::annot_pragma_fenv_access:\n case tok::annot_pragma_fenv_access_ms:\n // ...\n Diag(Tok, diag::err_pragma_file_or_compound_scope) << (Kind == tok::annot_pragma_fenv_access ? \"STDC FENV_ACCESS\" : \"fenv_access\");"},{Oc,446,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n case tok::annot_pragma_fenv_round:\n // ...\n Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"STDC FENV_ROUND\";"},{Oc,453,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n case tok::annot_pragma_float_control:\n // ...\n Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"float_control\";"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:6:14: error: \'#pragma fp_contract\' can only appear at file scope or at the start of a compound statement","clang/test/Parser/pragma-fp-contract.c:31:15: error: \'#pragma clang fp\' can only appear at file scope or at the start of a compound statement"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_float_control_malformed"]={ | | ["err_mmap_expected_config_macro"]={ |
| [i]={{nil,q,"err_pragma_float_control_malformed"}}, | | [i]="err_mmap_expected_config_macro", |
| [h]={{nil,q,"pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"}}, | | [h]="expected configuration macro name after \',\'", |
| [g]={{nil,q,"pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"}}, | | [g]="expected configuration macro name after \',\'", |
| [b]=k, | | [b]=k, |
| [e]="pragma float_control is malformed; use \'float_control\\(\\{push\\|pop\\}\\)\' or \'float_control\\(\\{precise\\|except\\}, \\{on\\|off\\} \\[,push\\]\\)\'", | | [e]="expected configuration macro name after \',\'", |
| [f]=a, | | [d]=a, |
| [d]={{nil,q,x}}, | | [f]=z, |
| [c]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control","Add support for #pragma float_control\n\nReviewers: rjmccall, erichkeane, sepavloff\n\nDifferential Revision: https://reviews.llvm.org/D72841"}, | | [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]={{B,2919,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{B,2934,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PFC_Unknown) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{B,2938,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PFC_Unknown) {\n // ...\n } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{B,2948,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PFC_Unknown) {\n // ...\n } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n // ...\n } else {\n if (Tok.is(tok::r_paren))\n // ...\n else if (Tok.isNot(tok::comma)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{B,2953,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PFC_Unknown) {\n // ...\n } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n // ...\n } else {\n if (Tok.is(tok::r_paren))\n // ...\n else if (Tok.isNot(tok::comma)) {\n // ...\n } else {\n // ...\n if (!Tok.isAnyIdentifier()) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{B,2968,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PFC_Unknown) {\n // ...\n } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n // ...\n } else {\n if (Tok.is(tok::r_paren))\n // ...\n else if (Tok.isNot(tok::comma)) {\n // ...\n } else {\n // ...\n if (PushOnOff == \"on\")\n // ...\n else if (PushOnOff == \"off\") {\n // ...\n } else if (PushOnOff == \"push\") {\n // ...\n } else {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{B,2975,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PFC_Unknown) {\n // ...\n } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n // ...\n } else {\n if (Tok.is(tok::r_paren))\n // ...\n else if (Tok.isNot(tok::comma)) {\n // ...\n } else {\n // ...\n if (Tok.is(tok::comma)) {\n // ...\n if (!Tok.isAnyIdentifier()) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{B,2982,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PFC_Unknown) {\n // ...\n } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n // ...\n } else {\n if (Tok.is(tok::r_paren))\n // ...\n else if (Tok.isNot(tok::comma)) {\n // ...\n } else {\n // ...\n if (Tok.is(tok::comma)) {\n // ...\n if (ExpectedPush == \"push\") {\n // ...\n } else {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{B,2988,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n/// #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Kind == PFC_Unknown) {\n // ...\n } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n // ...\n } else {\n if (Tok.is(tok::r_paren))\n // ...\n else if (Tok.isNot(tok::comma)) {\n // ...\n } else {\n // ...\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"}},
| | [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);"}} |
| [l]={
| |
| ["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:37:39: error: pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_fp_invalid_argument"]={ | | ["err_mmap_expected_conflicts_comma"]={ |
| [i]={{nil,o,"err_pragma_fp_invalid_argument"}}, | | [i]="err_mmap_expected_conflicts_comma", |
| [h]={{nil,y,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; expected %select{\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'|\'source\', \'double\' or \'extended\'}2"},{C,v,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; expected %select{\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'}2"},{ib,q,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; %select{expected \'fast\' or \'on\' or \'off\'|expected \'on\' or \'off\'}2"},{p,o,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; expected \'on\', \'fast\' or \'off\'"}}, | | [h]="expected \',\' after conflicting module name", |
| [g]={{nil,y,{"unexpected argument \'A\' to \'#pragma clang fp B\'; expected ",{"\'fast\' or \'on\' or \'off\'","\'on\' or \'off\'","\'ignore\', \'maytrap\' or \'strict\'","\'source\', \'double\' or \'extended\'"}}},{C,v,{"unexpected argument \'A\' to \'#pragma clang fp B\'; expected ",{"\'fast\' or \'on\' or \'off\'","\'on\' or \'off\'","\'ignore\', \'maytrap\' or \'strict\'"}}},{ib,q,{"unexpected argument \'A\' to \'#pragma clang fp B\'; ",{"expected \'fast\' or \'on\' or \'off\'","expected \'on\' or \'off\'"}}},{p,o,"unexpected argument \'A\' to \'#pragma clang fp B\'; expected \'on\', \'fast\' or \'off\'"}}, | | [g]="expected \',\' after conflicting module name", |
| [b]=k, | | [b]=k, |
| [e]="unexpected argument \'(.*?)\' to \'\\#pragma clang fp (.*?)\'; expected (?:\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'|\'source\', \'double\' or \'extended\')", | | [e]="expected \',\' after conflicting module name", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,x}}, | | [f]=z, |
| [c]={"60d3264d5fbe",1491340716,"Add #pragma clang fp","Add #pragma clang fp\n\nThis adds the new pragma and the first variant, contract(on/off/fast).\n\nThe pragma has the same block scope rules as STDC FP_CONTRACT, i.e. it can be\nplaced at the beginning of a compound statement or at file scope.\n\nSimilarly to STDC FP_CONTRACT there is no need to use attributes. First an\nannotate token is inserted with the parsed details of the pragma. Then the\nannotate token is parsed in the proper contexts and the Sema is updated with\nthe corresponding FPOptions using the shared ActOn function with STDC\nFP_CONTRACT.\n\nAfter this the FPOptions from the Sema is propagated into the AST expression\nnodes. There is no change here.\n\nI was going to add a \'default\' option besides \'on/off/fast\' similar to STDC\nFP_CONTRACT but then decided against it. I think that we\'d have to make option\nuppercase then to avoid using \'default\' the keyword. Also because of the\nscoped activation of pragma I am not sure there is really a need a for this.\n\nDifferential Revision: https://reviews.llvm.org/D31276\n\nllvm-svn: 299470"}, | | [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]={{B,3248,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n while (Tok.is(tok::identifier)) {\n // ...\n // Don\'t diagnose if we have an eval_metod pragma with \"double\" kind.\n if (Tok.isNot(tok::identifier) && !isEvalMethodDouble) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << static_cast<int>(*FlagKind);"},{B,3264,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n while (Tok.is(tok::identifier)) {\n // ...\n if (FlagKind == TokFPAnnotValue::Contract) {\n // ...\n if (!AnnotValue->ContractValue) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{B,3276,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n while (Tok.is(tok::identifier)) {\n // ...\n if (FlagKind == TokFPAnnotValue::Contract) {\n // ...\n } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n // ...\n if (!AnnotValue->ReassociateValue) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{B,3289,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n while (Tok.is(tok::identifier)) {\n // ...\n if (FlagKind == TokFPAnnotValue::Contract) {\n // ...\n } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n // ...\n } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n // ...\n if (!AnnotValue->ExceptionsValue) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{B,3302,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n while (Tok.is(tok::identifier)) {\n // ...\n if (FlagKind == TokFPAnnotValue::Contract) {\n // ...\n } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n // ...\n } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n // ...\n } else if (FlagKind == TokFPAnnotValue::EvalMethod) {\n // ...\n if (!AnnotValue->EvalMethodValue) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:38:30: error: unexpected argument \'fast\' to \'#pragma clang fp reassociate\'; expected \'on\' or \'off\'"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_fp_invalid_option"]={ | | ["err_mmap_expected_conflicts_message"]={ |
| [i]={{nil,o,"err_pragma_fp_invalid_option"}}, | | [i]="err_mmap_expected_conflicts_message", |
| [h]={{nil,v,"%select{invalid|missing}0 option%select{ %1|}0; expected \'contract\', \'reassociate\' or \'exceptions\'"},{ib,q,"%select{invalid|missing}0 option%select{ %1|}0; expected \'contract\' or \'reassociate\'"},{p,o,"%select{invalid|missing}0 option%select{ %1|}0; expected contract"}}, | | [h]="expected a message describing the conflict with \'%0\'", |
| [g]={{nil,v,{{lc,Bc},zc,{Ob,a},"; expected \'contract\', \'reassociate\' or \'exceptions\'"}},{ib,q,{{lc,Bc},zc,{Ob,a},"; expected \'contract\' or \'reassociate\'"}},{p,o,{{lc,Bc},zc,{Ob,a},"; expected contract"}}}, | | [g]="expected a message describing the conflict with \'A\'", |
| [b]=k, | | [b]=k, |
| [e]="(?:invalid|missing) option(?: (.*?)|); expected \'contract\', \'reassociate\' or \'exceptions\'", | | [e]="expected a message describing the conflict with \'(.*?)\'", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,x}}, | | [f]=z, |
| [c]={"60d3264d5fbe",1491340716,"Add #pragma clang fp","Add #pragma clang fp\n\nThis adds the new pragma and the first variant, contract(on/off/fast).\n\nThe pragma has the same block scope rules as STDC FP_CONTRACT, i.e. it can be\nplaced at the beginning of a compound statement or at file scope.\n\nSimilarly to STDC FP_CONTRACT there is no need to use attributes. First an\nannotate token is inserted with the parsed details of the pragma. Then the\nannotate token is parsed in the proper contexts and the Sema is updated with\nthe corresponding FPOptions using the shared ActOn function with STDC\nFP_CONTRACT.\n\nAfter this the FPOptions from the Sema is propagated into the AST expression\nnodes. There is no change here.\n\nI was going to add a \'default\' option besides \'on/off/fast\' similar to STDC\nFP_CONTRACT but then decided against it. I think that we\'d have to make option\nuppercase then to avoid using \'default\' the keyword. Also because of the\nscoped activation of pragma I am not sure there is really a need a for this.\n\nDifferential Revision: https://reviews.llvm.org/D31276\n\nllvm-svn: 299470"}, | | [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]={{B,3213,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/true << \"\";"},{B,3231,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n while (Tok.is(tok::identifier)) {\n // ...\n if (!FlagKind) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/false << OptionInfo;"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/Parser/pragma-fp.cpp"]={"clang/test/Parser/pragma-fp.cpp:5:17: error: missing option; expected \'contract\', \'reassociate\' or \'exceptions\'","clang/test/Parser/pragma-fp.cpp:12:18: error: invalid option \'blah\'; expected \'contract\', \'reassociate\' or \'exceptions\'"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_invalid_keyword"]={ | | ["err_mmap_expected_export_wildcard"]={ |
| [i]="err_pragma_invalid_keyword", | | [i]="err_mmap_expected_export_wildcard", |
| [h]="invalid argument; expected \'enable\'%select{|, \'full\'}0%select{|, \'assume_safety\'}1 or \'disable\'", | | [h]="only \'*\' can be exported from an inferred submodule", |
| [g]={{nil,nil,{"invalid argument; expected \'enable\'",{a,", \'full\'"},{a,", \'assume_safety\'"}," or \'disable\'"}}}, | | [g]="only \'*\' can be exported from an inferred submodule", |
| [b]=k, | | [b]=k, |
| [e]="invalid argument; expected \'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\'", | | [e]="only \'\\*\' can be exported from an inferred submodule", |
| [f]=a, | | [d]=a, |
| [d]=x, | | [f]=z, |
| [c]={"cab7ca3e2a64",1406753673,"Add a state variable to the loop hint attribute.","Add a state variable to the loop hint attribute.\n\nThis patch is necessary to support constant expressions which replaces the integer value in the loop hint attribute with an expression. The integer value was also storing the pragma’s state for options like vectorize(enable/disable) and the pragma unroll and nounroll directive. The state variable is introduced to hold the state of those options/pragmas. This moves the validation of the state (keywords) from SemaStmtAttr handler to the loop hint annotation token handler.\n\nReviewed by Aaron Ballman\n\nllvm-svn: 214333"}, | | [c]={Dc,1323124064,qc,Cc}, |
| [j]={{B,1415,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // ...\n // Validate the argument.\n if (StateOption) {\n // ...\n if (!Valid) {\n if (OptionPipelineDisabled) {\n // ...\n } else {\n Diag(Toks[0].getLocation(), diag::err_pragma_invalid_keyword) << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/Parser/pragma-loop-safety.cpp"]={"clang/test/Parser/pragma-loop-safety.cpp:18:109: error: invalid argument; expected \'enable\', \'full\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:19:105: error: invalid argument; expected \'enable\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:21:121: error: invalid argument; expected \'enable\', \'assume_safety\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:22:122: error: invalid argument; expected \'enable\', \'assume_safety\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:23:109: error: invalid argument; expected \'enable\', \'full\' or \'disable\'"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_loop_compatibility"]={ | | ["err_mmap_expected_feature"]={ |
| [i]="err_pragma_loop_compatibility", | | [i]="err_mmap_expected_feature", |
| [h]="%select{incompatible|duplicate}0 directives \'%1\' and \'%2\'", | | [h]="expected a feature name", |
| [g]={{nil,nil,{{"incompatible","duplicate"}," directives \'B\' and \'C\'"}}}, | | [g]="expected a feature name", |
| [b]=k, | | [b]=k, |
| [e]="(?:incompatible|duplicate) directives \'(.*?)\' and \'(.*?)\'", | | [e]="expected a feature name", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=z, |
| [c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints.","Adding a new #pragma for the vectorize and interleave optimization hints.\n\nPatch thanks to Tyler Nowicki!\n\nllvm-svn: 210330"}, | | [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]={{"clang/lib/Sema/SemaStmtAttr.cpp",431,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n // ...\n for (const auto *I : Attrs) {\n // ...\n if (PrevAttr)\n // ...\n S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/true << PrevAttr->getDiagnosticName(Policy) << LH->getDiagnosticName(Policy);"},{"clang/lib/Sema/SemaStmtAttr.cpp",442,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n // ...\n for (const auto *I : Attrs) {\n // ...\n if (CategoryState.StateAttr && CategoryState.NumericAttr && (Category == Unroll || Category == UnrollAndJam || CategoryState.StateAttr->getState() == LoopHintAttr::Disable)) {\n // ...\n S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/false << CategoryState.StateAttr->getDiagnosticName(Policy) << CategoryState.NumericAttr->getDiagnosticName(Policy);"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:27:15: error: incompatible directives \'pipeline(disable)\' and \'pipeline_initiation_interval(4)\'"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_loop_invalid_argument_type"]={ | | ["err_mmap_expected_header"]={ |
| [i]="err_pragma_loop_invalid_argument_type", | | [i]="err_mmap_expected_header", |
| [h]="invalid argument of type %0; expected an integer type", | | [h]="expected a header name after \'%0\'", |
| [g]="invalid argument of type A; expected an integer type", | | [g]="expected a header name after \'A\'", |
| [b]=k, | | [b]=k, |
| [e]="invalid argument of type (.*?); expected an integer type", | | [e]="expected a header name after \'(.*?)\'", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=z, |
| [c]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints.","Allow constant expressions in pragma loop hints.\n\nPreviously loop hints such as #pragma loop vectorize_width(#) required a constant. This patch allows a constant expression to be used as well. Such as a non-type template parameter or an expression (2 * c + 1).\n\nReviewed by Richard Smith\n\nllvm-svn: 219589"}, | | [c]={Lb,1321038628,Gb,Db}, |
| [j]={{n,3826,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n // ...\n if (!QT->isIntegerType() || QT->isBooleanType() || QT->isCharType()) {\n Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_type) << QT;"}},
| | [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\";"}} |
| [l]={
| |
| ["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:12:134: error: invalid argument of type \'double\'; expected an integer type"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_loop_invalid_argument_value"]={ | | ["err_mmap_expected_header_attribute"]={ |
| [i]="err_pragma_loop_invalid_argument_value", | | [i]={{nil,r,"err_mmap_expected_header_attribute"}}, |
| [h]="%select{invalid value \'%0\'; must be positive|value \'%0\' is too large}1", | | [h]={{nil,r,"expected a header attribute name (\'size\' or \'mtime\')"}}, |
| [g]={{nil,nil,{{"invalid value \'A\'; must be positive","value \'A\' is too large"}}}}, | | [g]={{nil,r,"expected a header attribute name (\'size\' or \'mtime\')"}}, |
| [b]=k, | | [b]=k, |
| [e]="(?:invalid value \'(.*?)\'; must be positive|value \'(.*?)\' is too large)", | | [e]="expected a header attribute name \\(\'size\' or \'mtime\'\\)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,r,z}}, |
| [c]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints.","Allow constant expressions in pragma loop hints.\n\nPreviously loop hints such as #pragma loop vectorize_width(#) required a constant. This patch allows a constant expression to be used as well. Such as a non-type template parameter or an expression (2 * c + 1).\n\nReviewed by Richard Smith\n\nllvm-svn: 219589"}, | | [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"}, |
| [j]={{n,3838,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n // ...\n if (!ValueIsPositive || ValueAPS.getActiveBits() > 31) {\n Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_value) << toString(ValueAPS, 10) << ValueIsPositive;"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:13:110: error: invalid value \'0\'; must be positive","clang/test/Sema/pragma-pipeline.cpp:14:111: error: invalid value \'-1\'; must be positive"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_loop_invalid_option"]={ | | ["err_mmap_expected_inferred_member"]={ |
| [i]="err_pragma_loop_invalid_option", | | [i]="err_mmap_expected_inferred_member", |
| [h]={{nil,p,"%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"},{D,E,"%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, or distribute"},{ic,nil,"%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, or distribute"}}, | | [h]="expected %select{module exclusion with \'exclude\'|\'export *\'}0", |
| [g]={{nil,p,{{lc,Bc},zc,{Ob,a},"; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"}},{D,E,{{lc,Bc},zc,{Ob,a},"; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, or distribute"}},{ic,nil,{{lc,Bc},zc,{Ob,a},"; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, or distribute"}}}, | | [g]={{nil,nil,{"expected ",{"module exclusion with \'exclude\'","\'export *\'"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="(?:invalid|missing) option(?: (.*?)|); expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute", | | [e]="expected (?:module exclusion with \'exclude\'|\'export \\*\')", |
| [f]=a, | | [d]=a, |
| [d]=x, | | [f]=z, |
| [c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints.","Adding a new #pragma for the vectorize and interleave optimization hints.\n\nPatch thanks to Tyler Nowicki!\n\nllvm-svn: 210330"}, | | [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]={{B,3515,"/// Handle the \\#pragma clang loop directive.\n/// #pragma clang \'loop\' loop-hints\n///\n/// loop-hints:\n/// loop-hint loop-hints[opt]\n///\n/// loop-hint:\n/// \'vectorize\' \'(\' loop-hint-keyword \')\'\n/// \'interleave\' \'(\' loop-hint-keyword \')\'\n/// \'unroll\' \'(\' unroll-hint-keyword \')\'\n/// \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n/// \'vectorize_width\' \'(\' loop-hint-value \')\'\n/// \'interleave_count\' \'(\' loop-hint-value \')\'\n/// \'unroll_count\' \'(\' loop-hint-value \')\'\n/// \'pipeline\' \'(\' disable \')\'\n/// \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n/// loop-hint-keyword:\n/// \'enable\'\n/// \'disable\'\n/// \'assume_safety\'\n///\n/// unroll-hint-keyword:\n/// \'enable\'\n/// \'disable\'\n/// \'full\'\n///\n/// loop-hint-value:\n/// constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known. Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time. Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/true << \"\";"},{B,3537,"/// Handle the \\#pragma clang loop directive.\n/// #pragma clang \'loop\' loop-hints\n///\n/// loop-hints:\n/// loop-hint loop-hints[opt]\n///\n/// loop-hint:\n/// \'vectorize\' \'(\' loop-hint-keyword \')\'\n/// \'interleave\' \'(\' loop-hint-keyword \')\'\n/// \'unroll\' \'(\' unroll-hint-keyword \')\'\n/// \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n/// \'vectorize_width\' \'(\' loop-hint-value \')\'\n/// \'interleave_count\' \'(\' loop-hint-value \')\'\n/// \'unroll_count\' \'(\' loop-hint-value \')\'\n/// \'pipeline\' \'(\' disable \')\'\n/// \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n/// loop-hint-keyword:\n/// \'enable\'\n/// \'disable\'\n/// \'assume_safety\'\n///\n/// unroll-hint-keyword:\n/// \'enable\'\n/// \'disable\'\n/// \'full\'\n///\n/// loop-hint-value:\n/// constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known. Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time. Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n while (Tok.is(tok::identifier)) {\n // ...\n if (!OptionValid) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/false << OptionInfo;"}},
| | [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);"}} |
| [l]={
| |
| ["clang/test/Parser/pragma-unroll-and-jam.cpp"]={"clang/test/Parser/pragma-unroll-and-jam.cpp:70:242: error: invalid option \'unroll_and_jam\'; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_loop_invalid_vectorize_option"]={ | | ["err_mmap_expected_lbrace"]={ |
| [i]={{nil,v,"err_pragma_loop_invalid_vectorize_option"}}, | | [i]="err_mmap_expected_lbrace", |
| [h]={{nil,v,"vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')"}}, | | [h]="expected \'{\' to start module \'%0\'", |
| [g]={{nil,v,"vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')"}}, | | [g]="expected \'{\' to start module \'A\'", |
| [b]=k, | | [b]=k, |
| [e]="vectorize_width loop hint malformed; use vectorize_width\\(X, fixed\\) or vectorize_width\\(X, scalable\\) where X is an integer, or vectorize_width\\(\'fixed\' or \'scalable\'\\)", | | [e]="expected \'\\{\' to start module \'(.*?)\'", |
| [f]=a, | | [d]=a, |
| [d]={{nil,v,x}}, | | [f]=z, |
| [c]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors","[SVE] Add support to vectorize_width loop pragma for scalable vectors\n\nThis patch adds support for two new variants of the vectorize_width\npragma:\n\n1. vectorize_width(X[, fixed|scalable]) where an optional second\nparameter is passed to the vectorize_width pragma, which indicates if\nthe user wishes to use fixed width or scalable vectorization. For\nexample the user can now write something like:\n\n #pragma clang loop vectorize_width(4, fixed)\nor\n #pragma clang loop vectorize_width(4, scalable)\n\nIn the absence of a second parameter it is assumed the user wants\nfixed width vectorization, in order to maintain compatibility with\nexisting code.\n2. vectorize_width(fixed|scalable) where the width is left unspecified,\nbut the user hints what type of vectorization they prefer, either\nfixed width or scalable.\n\nI have implemented this by making use of the LLVM loop hint attribute:\n\n llvm.loop.vectorize.scalable.enable\n\nTests were added to\n\n clang/test/CodeGenCXX/pragma-loop.cpp\n\nfor both the \'fixed\' and \'scalable\' optional parameter.\n\nSee this thread for context: http://lists.llvm.org/pipermail/cfe-dev/2020-November/067262.html\n\nDifferential Revision: https://reviews.llvm.org/D89031"}, | | [c]={Lb,1321038628,Gb,Db}, |
| [j]={{B,1466,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // ...\n // Validate the argument.\n if (StateOption) {\n // ...\n } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n // ...\n // Look for vectorize_width(fixed|scalable)\n if (IsScalableStr == \"scalable\" || IsScalableStr == \"fixed\") {\n // ...\n } else {\n // ...\n if (Tok.is(tok::comma)) {\n // ...\n if (IsScalableStr != \"scalable\" && IsScalableStr != \"fixed\") {\n Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_vectorize_option);"}}
| | [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_pragma_loop_missing_argument"]={ | | ["err_mmap_expected_lbrace_wildcard"]={ |
| [i]="err_pragma_loop_missing_argument", | | [i]="err_mmap_expected_lbrace_wildcard", |
| [h]="missing argument; expected %select{an integer value|\'enable\'%select{|, \'full\'}1%select{|, \'assume_safety\'}2 or \'disable\'}0", | | [h]="expected \'{\' to start inferred submodule", |
| [g]={{nil,nil,{"missing argument; expected ",{"an integer value",{"\'enable\'",{a,", \'full\'"},{a,", \'assume_safety\'"}," or \'disable\'"}}}}}, | | [g]="expected \'{\' to start inferred submodule", |
| [b]=k, | | [b]=k, |
| [e]="missing argument; expected (?:an integer value|\'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\')", | | [e]="expected \'\\{\' to start inferred submodule", |
| [f]=a, | | [d]=a, |
| [d]=x, | | [f]=z, |
| [c]={"f637790102ea",1403202615,"Fix PR20069: bad loop pragma arguments crash FE","Fix PR20069: bad loop pragma arguments crash FE\n\nThis patch fixes a crash when handling malformed arguments to loop pragmas such\nas: \"#pragma clang loop vectorize(()\". Essentially any argument which is not an\nidentifier or constant resulted in a crash. This patch also changes a couple of\nthe error messages which weren\'t quite correct. New behavior with this patch vs\nold behavior:\n\n#pragma clang loop vectorize(1)\nOLD: error: missing keyword; expected \'enable\' or \'disable\'\nNEW: error: invalid argument; expected \'enable\' or \'disable\'\n\n#pragma clang loop vectorize()\nOLD: error: expected \')\'\nNEW: error: missing argument to loop pragma \'vectorize\'\n\n#pragma clang loop vectorize_width(bad)\nOLD: error: missing value; expected a positive integer value\nNEW: error: invalid argument; expected a positive integer value\n\n#pragma clang loop vectorize(bad)\nOLD: invalid keyword \'bad\'; expected \'enable\' or \'disable\'\nNEW: error: invalid argument; expected \'enable\' or \'disable\'\n\nhttp://reviews.llvm.org/D4197\n\nPatch by Mark Heffernan\n\nllvm-svn: 211292"}, | | [c]={Dc,1323124064,qc,Cc}, |
| [j]={{B,1391,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // ...\n // Verify loop hint has an argument.\n if (Toks[0].is(tok::eof)) {\n // ...\n Diag(Toks[0].getLocation(), diag::err_pragma_loop_missing_argument) << /*StateArgument=*/StateOption << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}},
| | [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);"}} |
| [l]={
| |
| ["clang/test/Parser/pragma-unroll-and-jam.cpp"]={"clang/test/Parser/pragma-unroll-and-jam.cpp:31:94: error: missing argument; expected an integer value"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_loop_precedes_nonloop"]={ | | ["err_mmap_expected_library_name"]={ |
| [i]="err_pragma_loop_precedes_nonloop", | | [i]="err_mmap_expected_library_name", |
| [h]="expected a for, while, or do-while loop to follow \'%0\'", | | [h]="expected %select{library|framework}0 name as a string", |
| [g]="expected a for, while, or do-while loop to follow \'A\'", | | [g]={{nil,nil,{"expected ",{"library","framework"}," name as a string"}}}, |
| [b]=k, | | [b]=k, |
| [e]="expected a for, while, or do\\-while loop to follow \'(.*?)\'", | | [e]="expected (?:library|framework) name as a string", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=z, |
| [c]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints.","Adding a new #pragma for the vectorize and interleave optimization hints.\n\nPatch thanks to Tyler Nowicki!\n\nllvm-svn: 210330"}, | | [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"}, |
| [j]={{"clang/lib/Sema/SemaStmtAttr.cpp",91,"static Attr *handleLoopHintAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange) {\n // ...\n // This could be handled automatically by adding a Subjects definition in\n // Attr.td, but that would make the diagnostic behavior worse in this case\n // because the user spells this attribute as a pragma.\n if (!isa<DoStmt, ForStmt, CXXForRangeStmt, WhileStmt>(St)) {\n // ...\n S.Diag(St->getBeginLoc(), diag::err_pragma_loop_precedes_nonloop) << Pragma;"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:22:97: error: expected a for, while, or do-while loop to follow \'#pragma clang loop\'","clang/test/Sema/pragma-pipeline.cpp:24:97: error: expected a for, while, or do-while loop to follow \'#pragma clang loop\'"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_message_malformed"]={ | | ["err_mmap_expected_member"]={ |
| [i]="err_pragma_message_malformed", | | [i]="err_mmap_expected_member", |
| [h]="pragma %select{message|warning|error}0 requires parenthesized string", | | [h]="expected umbrella, header, submodule, or module export", |
| [g]={{nil,nil,{"pragma ",{"message","warning","error"}," requires parenthesized string"}}}, | | [g]="expected umbrella, header, submodule, or module export", |
| [b]=k, | | [b]=k, |
| [e]="pragma (?:message|warning|error) requires parenthesized string", | | [e]="expected umbrella, header, submodule, or module export", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]=z, |
| [c]={"30c924b3e874",1277572299,"Implement support for #pragma message, patch by Michael Spencer!","Implement support for #pragma message, patch by Michael Spencer!\n\nllvm-svn: 106950"}, | | [c]={Lb,1321038628,Gb,Db}, |
| [j]={{X,1653,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension. The syntax is:\n/// \\code\n/// #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n/// #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n default:\n PP.Diag(MessageLoc, diag::err_pragma_message_malformed) << Kind;"},{X,1664,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension. The syntax is:\n/// \\code\n/// #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n/// #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (ExpectClosingParen) {\n if (Tok.isNot(tok::r_paren)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"},{X,1671,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension. The syntax is:\n/// \\code\n/// #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n/// #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/Lexer/pragma-message.c"]={"clang/test/Lexer/pragma-message.c:30:9: error: pragma message requires parenthesized string","clang/test/Lexer/pragma-message.c:31:90: error: pragma warning requires parenthesized string"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_misplaced_in_decl"]={ | | ["err_mmap_expected_mmap_file"]={ |
| [i]={{nil,p,"err_pragma_misplaced_in_decl"}}, | | [i]="err_mmap_expected_mmap_file", |
| [h]={{nil,p,"this pragma cannot appear in %0 declaration"}}, | | [h]="expected a module map file name", |
| [g]={{nil,p,"this pragma cannot appear in A declaration"}}, | | [g]="expected a module map file name", |
| [b]=k, | | [b]=k, |
| [e]="this pragma cannot appear in (.*?) declaration", | | [e]="expected a module map file name", |
| [f]=a, | | [d]=a, |
| [d]={{nil,p,x}}, | | [f]=z, |
| [c]={"037861b23092",1564913331,"[Parser] Emit descriptive diagnostic for misplaced pragma","[Parser] Emit descriptive diagnostic for misplaced pragma\n\nIf a class or struct or union declaration contains a pragma that\nis not valid in this context, compiler issues generic error like\n\"expected member name or \';\' after declaration specifiers\". With this\nchange the error tells that this pragma cannot appear in this declaration.\n\nDifferential Revision: https://reviews.llvm.org/D64932\n\nllvm-svn: 367779"}, | | [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]={{jb,4671,"/// ParseStructUnionBody\n/// struct-contents:\n/// struct-declaration-list\n/// [EXT] empty\n/// [GNU] \"struct-declaration-list\" without terminating \';\'\n/// struct-declaration-list:\n/// struct-declaration\n/// struct-declaration-list struct-declaration\n/// [OBC] \'@\' \'defs\' \'(\' class-name \')\'\n///\nvoid Parser::ParseStructUnionBody(SourceLocation RecordLoc, DeclSpec::TST TagType, RecordDecl *TagDecl) {\n // ...\n // While we still have something to read, read the declarations in the struct.\n while (!tryParseMisplacedModuleImport() && Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) {\n // ...\n if (tok::isPragmaAnnotation(Tok.getKind())) {\n Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"},{Qb,3421,"Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(AccessSpecifier &AS, ParsedAttributes &AccessAttrs, DeclSpec::TST TagType, Decl *TagDecl) {\n // ...\n default:\n if (tok::isPragmaAnnotation(Tok.getKind())) {\n Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:16:14: error: this pragma cannot appear in struct declaration","clang/test/Parser/pragma-fp-contract.c:24:14: error: this pragma cannot appear in union declaration"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_missing_argument"]={ | | ["err_mmap_expected_module"]={ |
| [i]="err_pragma_missing_argument", | | [i]="err_mmap_expected_module", |
| [h]="missing argument to \'#pragma %0\'%select{|; expected %2}1", | | [h]="expected module declaration", |
| [g]={{nil,nil,{"missing argument to \'#pragma A\'",{a,"; expected C"}}}}, | | [g]="expected module declaration", |
| [b]=k, | | [b]=k, |
| [e]="missing argument to \'\\#pragma (.*?)\'(?:|; expected (.*?))", | | [e]="expected module declaration", |
| [f]=a, | | [d]=a, |
| [d]=x, | | [f]=z, |
| [c]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'.","Add support for \'#pragma unroll\'.\n\nllvm-svn: 213574"}, | | [c]={Lb,1321038628,Gb,Db}, |
| [j]={{B,3162,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n if (Tok.is(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang optimize\" << /*Expected=*/true << \"\'on\' or \'off\'\";"},{B,3974,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.is(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_here\" << /*Expected=*/true << \"integer\";"},{B,4006,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.is(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_total\" << /*Expected=*/true << \"integer\";"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:14:114: error: missing argument to \'#pragma clang optimize\'; expected \'on\' or \'off\'"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_optimize_extra_argument"]={ | | ["err_mmap_expected_module_name"]={ |
| [i]="err_pragma_optimize_extra_argument", | | [i]="err_mmap_expected_module_name", |
| [h]="unexpected extra argument \'%0\' to \'#pragma clang optimize\'", | | [h]="expected module name", |
| [g]="unexpected extra argument \'A\' to \'#pragma clang optimize\'", | | [g]="expected module name", |
| [b]=k, | | [b]=k, |
| [e]="unexpected extra argument \'(.*?)\' to \'\\#pragma clang optimize\'", | | [e]="expected module name", |
| [f]=a, | | [d]=a, |
| [d]=x, | | [f]=z, |
| [c]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.","Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.\n\nThis patch implements support for selectively disabling optimizations on a\nrange of function definitions through a pragma. The implementation is that\nall function definitions in the range are decorated with attribute\n\'optnone\'.\n\n #pragma clang optimize off\n // All function definitions in here are decorated with \'optnone\'.\n #pragma clang optimize on\n // Compilation resumes as normal.\n\nllvm-svn: 209510"}, | | [c]={Lb,1321038628,Gb,Db}, |
| [j]={{B,3184,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_extra_argument) << PP.getSpelling(Tok);"}},
| | [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]={ |
| ["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:8:27: error: unexpected extra argument \'top\' to \'#pragma clang optimize\'"} | | ["clang/test/Modules/preprocess-build.cpp"]={"clang/test/Modules/preprocess-build.cpp:34:70: error: expected module name"} |
| } | | } |
| }, | | }, |
| ["err_pragma_optimize_invalid_argument"]={ | | ["err_mmap_expected_rbrace"]={ |
| [i]="err_pragma_optimize_invalid_argument", | | [i]="err_mmap_expected_rbrace", |
| [h]="unexpected argument \'%0\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'", | | [h]="expected \'}\'", |
| [g]="unexpected argument \'A\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'", | | [g]="expected \'}\'", |
| [b]=k, | | [b]=k, |
| [e]="unexpected argument \'(.*?)\' to \'\\#pragma clang optimize\'; expected \'on\' or \'off\'", | | [e]="expected \'\\}\'", |
| [f]=a, | | [d]=a, |
| [d]=x, | | [f]=z, |
| [c]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.","Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.\n\nThis patch implements support for selectively disabling optimizations on a\nrange of function definitions through a pragma. The implementation is that\nall function definitions in the range are decorated with attribute\n\'optnone\'.\n\n #pragma clang optimize off\n // All function definitions in here are decorated with \'optnone\'.\n #pragma clang optimize on\n // Compilation resumes as normal.\n\nllvm-svn: 209510"}, | | [c]={Lb,1321038628,Gb,Db}, |
| [j]={{B,3167,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n if (Tok.isNot(tok::identifier)) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"},{B,3177,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n if (II->isStr(\"on\")) {\n // ...\n } else if (!II->isStr(\"off\")) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"}},
| | [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]={ |
| ["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:11:24: error: unexpected argument \'something_wrong\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'"} | | ["clang/test/Parser/objcxx-at.mm"]={"clang/test/Parser/objcxx-at.mm:15:80: error: expected \'}\'"} |
| } | | } |
| }, | | }, |
| ["err_pragma_options_align_mac68k_target_unsupported"]={ | | ["err_mmap_expected_rsquare"]={ |
| [i]="err_pragma_options_align_mac68k_target_unsupported", | | [i]="err_mmap_expected_rsquare", |
| [h]="mac68k alignment pragma is not supported on this target", | | [h]="expected \']\' to close attribute", |
| [g]="mac68k alignment pragma is not supported on this target", | | [g]="expected \']\' to close attribute", |
| [b]=k, | | [b]=k, |
| [e]="mac68k alignment pragma is not supported on this target", | | [e]="expected \'\\]\' to close attribute", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=z, |
| [c]={"bd60652ace14",1274920516,"Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin.","Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin.\n\nllvm-svn: 104789"}, | | [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]={{L,246,"void Sema::ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind, SourceLocation PragmaLoc) {\n // ...\n case POAK_Mac68k:\n // Check if the target supports this.\n if (!this->Context.getTargetInfo().hasAlignMac68kSupport()) {\n Diag(PragmaLoc, diag::err_pragma_options_align_mac68k_target_unsupported);"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/Sema/pragma-align-mac68k-unsupported.c"]={"clang/test/Sema/pragma-align-mac68k-unsupported.c:4:75: error: mac68k alignment pragma is not supported on this target"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_pack_identifer_not_supported"]={ | | ["err_mmap_explicit_inferred_framework"]={ |
| [i]={{nil,v,"err_pragma_pack_identifer_not_supported"}}, | | [i]="err_mmap_explicit_inferred_framework", |
| [h]={{nil,v,"specifying an identifier within `#pragma pack` is not supported on this target"}}, | | [h]="inferred framework modules cannot be \'explicit\'", |
| [g]={{nil,v,"specifying an identifier within `#pragma pack` is not supported on this target"}}, | | [g]="inferred framework modules cannot be \'explicit\'", |
| [b]=k, | | [b]=k, |
| [e]="specifying an identifier within `\\#pragma pack` is not supported on this target", | | [e]="inferred framework modules cannot be \'explicit\'", |
| [f]=a, | | [d]=a, |
| [d]={{nil,v,m}}, | | [f]=z, |
| [c]={Jb,1590001902,Lb,Mb}, | | [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]={{L,328,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n // ...\n // XL pragma pack does not support identifier syntax.\n if (IsXLPragma && !SlotLabel.empty()) {\n Diag(PragmaLoc, diag::err_pragma_pack_identifer_not_supported);"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/Sema/aix-pragma-pack-and-align.c"]={"clang/test/Sema/aix-pragma-pack-and-align.c:194:9: error: specifying an identifier within `#pragma pack` is not supported on this target"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_pack_invalid_alignment"]={ | | ["err_mmap_explicit_top_level"]={ |
| [i]={{nil,v,"err_pragma_pack_invalid_alignment"}}, | | [i]="err_mmap_explicit_top_level", |
| [h]={{nil,v,"expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'"}}, | | [h]="\'explicit\' is not permitted on top-level modules", |
| [g]={{nil,v,"expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'"}}, | | [g]="\'explicit\' is not permitted on top-level modules", |
| [b]=k, | | [b]=k, |
| [e]="expected \\#pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'", | | [e]="\'explicit\' is not permitted on top\\-level modules", |
| [f]=a, | | [d]=a, |
| [d]={{nil,v,m}}, | | [f]=z, |
| [c]={Jb,1590001902,Lb,Mb}, | | [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]={{L,353,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n // ...\n if (Alignment) {\n // ...\n if (IsXLPragma && *Val == 0) {\n // ...\n Diag(PragmaLoc, diag::err_pragma_pack_invalid_alignment);"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/Sema/aix-pragma-pack-and-align.c"]={"clang/test/Sema/aix-pragma-pack-and-align.c:147:9: error: expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_pipeline_invalid_keyword"]={ | | ["err_mmap_inferred_framework_submodule"]={ |
| [i]={{nil,E,"err_pragma_pipeline_invalid_keyword"}}, | | [i]="err_mmap_inferred_framework_submodule", |
| [h]={{nil,E,"invalid argument; expected \'disable\'"}}, | | [h]="inferred submodule cannot be a framework submodule", |
| [g]={{nil,E,"invalid argument; expected \'disable\'"}}, | | [g]="inferred submodule cannot be a framework submodule", |
| [b]=k, | | [b]=k, |
| [e]="invalid argument; expected \'disable\'", | | [e]="inferred submodule cannot be a framework submodule", |
| [f]=a, | | [d]=a, |
| [d]={{nil,E,x}}, | | [f]=z, |
| [c]={"9bdf515c744f",1546622400,"Add two new pragmas for controlling software pipelining optimizations.","Add two new pragmas for controlling software pipelining optimizations.\n\nThis patch adds #pragma clang loop pipeline and #pragma clang loop pipeline_initiation_interval for debugging or reducing compile time purposes. It is possible to disable SWP for concrete loops to save compilation time or to find bugs by not doing SWP to certain loops. It is possible to set value of initiation interval to concrete number to save compilation time by not doing extra pipeliner passes or to check created schedule for specific initiation interval.\n\nPatch by Alexey Lapshin.\n\nllvm-svn: 350414"}, | | [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]={{B,1413,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // ...\n // Validate the argument.\n if (StateOption) {\n // ...\n if (!Valid) {\n if (OptionPipelineDisabled) {\n Diag(Toks[0].getLocation(), diag::err_pragma_pipeline_invalid_keyword);"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/Parser/pragma-pipeline.cpp"]={"clang/test/Parser/pragma-pipeline.cpp:20:91: error: invalid argument; expected \'disable\'","clang/test/Parser/pragma-pipeline.cpp:21:91: error: invalid argument; expected \'disable\'"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_pointers_to_members_unknown_kind"]={ | | ["err_mmap_inferred_no_umbrella"]={ |
| [i]="err_pragma_pointers_to_members_unknown_kind", | | [i]="err_mmap_inferred_no_umbrella", |
| [h]="unexpected %0, expected to see one of %select{|\'best_case\', \'full_generality\', }1\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'", | | [h]="inferred submodules require a module with an umbrella", |
| [g]={{nil,nil,{"unexpected A, expected to see one of ",{a,"\'best_case\', \'full_generality\', "},"\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'"}}}, | | [g]="inferred submodules require a module with an umbrella", |
| [b]=k, | | [b]=k, |
| [e]="unexpected (.*?), expected to see one of (?:|\'best_case\', \'full_generality\', )\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'", | | [e]="inferred submodules require a module with an umbrella", |
| [f]=a, | | [d]=a, |
| [d]=x, | | [f]=z, |
| [c]={"4bb0980d9628",1392061815,"MS ABI: Add support for #pragma pointers_to_members","MS ABI: Add support for #pragma pointers_to_members\n\nIntroduce a notion of a \'current representation method\' for\npointers-to-members.\n\nWhen starting out, this is set to \'best case\' (representation method is\nchosen by examining the class, selecting the smallest representation\nthat would work given the class definition or lack thereof).\n\nThis pragma allows the translation unit to dictate exactly what\nrepresentation to use, similar to how the inheritance model keywords\noperate.\n\nN.B. PCH support is forthcoming.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2723\n\nllvm-svn: 201105"}, | | [c]={Dc,1323124064,qc,Cc}, |
| [j]={{B,2705,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Arg->isStr(\"best_case\")) {\n // ...\n } else {\n if (Arg->isStr(\"full_generality\")) {\n if (Tok.is(tok::comma)) {\n // ...\n if (!Arg) {\n PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Tok.getKind() << /*OnlyInheritanceModels*/ 0;"},{B,2734,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Arg->isStr(\"best_case\")) {\n // ...\n } else {\n // ...\n if (Arg) {\n if (Arg->isStr(\"single_inheritance\")) {\n // ...\n } else if (Arg->isStr(\"multiple_inheritance\")) {\n // ...\n } else if (Arg->isStr(\"virtual_inheritance\")) {\n // ...\n } else {\n PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Arg << /*HasPointerDeclaration*/ 1;"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:292:35: error: unexpected \'single\', expected to see one of \'best_case\', \'full_generality\', \'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_pop_visibility_mismatch"]={ | | ["err_mmap_inferred_redef"]={ |
| [i]="err_pragma_pop_visibility_mismatch", | | [i]="err_mmap_inferred_redef", |
| [h]="#pragma visibility pop with no matching #pragma visibility push", | | [h]="redefinition of inferred submodule", |
| [g]="#pragma visibility pop with no matching #pragma visibility push", | | [g]="redefinition of inferred submodule", |
| [b]=k, | | [b]=k, |
| [e]="\\#pragma visibility pop with no matching \\#pragma visibility push", | | [e]="redefinition of inferred submodule", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=z, |
| [c]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".\n\nllvm-svn: 149559"}, | | [c]={Dc,1323124064,qc,Cc}, |
| [j]={{L,1370,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n if (!VisContext) {\n Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"},{L,1381,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n // ...\n if (StartsWithPragma && IsNamespaceEnd) {\n // ...\n } else if (!StartsWithPragma && !IsNamespaceEnd) {\n Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:4:13: error: #pragma visibility pop with no matching #pragma visibility push","clang/test/SemaCXX/pragma-visibility.cpp:12:13: error: #pragma visibility pop with no matching #pragma visibility push"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_push_pop_macro_malformed"]={ | | ["err_mmap_invalid_header_attribute_value"]={ |
| [i]="err_pragma_push_pop_macro_malformed", | | [i]={{nil,r,"err_mmap_invalid_header_attribute_value"}}, |
| [h]="pragma %0 requires a parenthesized string", | | [h]={{nil,r,"expected integer literal as value for header attribute \'%0\'"}}, |
| [g]="pragma A requires a parenthesized string", | | [g]={{nil,r,"expected integer literal as value for header attribute \'A\'"}}, |
| [b]=k, | | [b]=k, |
| [e]="pragma (.*?) requires a parenthesized string", | | [e]="expected integer literal as value for header attribute \'(.*?)\'", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]={{nil,r,z}}, |
| [c]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!","Implement #pragma push_macro, patch by Francois Pichet!\n\nllvm-svn: 111234"}, | | [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"}, |
| [j]={{X,580,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n // ...\n if (Tok.isNot(tok::l_paren)) {\n Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{X,588,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n // ...\n if (Tok.isNot(tok::string_literal)) {\n Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{X,604,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n // ...\n if (Tok.isNot(tok::r_paren)) {\n Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"}} | | [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_pragma_push_visibility_mismatch"]={ | | ["err_mmap_missing_exclude_name"]={ |
| [i]="err_pragma_push_visibility_mismatch", | | [i]="err_mmap_missing_exclude_name", |
| [h]="#pragma visibility push with no matching #pragma visibility pop", | | [h]="expected excluded module name", |
| [g]="#pragma visibility push with no matching #pragma visibility pop", | | [g]="expected excluded module name", |
| [b]=k, | | [b]=k, |
| [e]="\\#pragma visibility push with no matching \\#pragma visibility pop", | | [e]="expected excluded module name", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=z, |
| [c]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".\n\nllvm-svn: 149559"}, | | [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]={{L,1371,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n // ...\n if (StartsWithPragma && IsNamespaceEnd) {\n Diag(Back->second, diag::err_pragma_push_visibility_mismatch);"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:9:13: error: #pragma visibility push with no matching #pragma visibility pop"}
| |
| }
| |
| }, | | }, |
| ["err_pragma_section_invalid_for_target"]={ | | ["err_mmap_missing_module_qualified"]={ |
| [i]={{nil,F,"err_pragma_section_invalid_for_target"}}, | | [i]="err_mmap_missing_module_qualified", |
| [h]={{nil,F,"argument to #pragma section is not valid for this target: %0"}}, | | [h]="no module named \'%0\' in \'%1\'", |
| [g]={{nil,F,"argument to #pragma section is not valid for this target: A"}}, | | [g]="no module named \'A\' in \'B\'", |
| [b]=k, | | [b]=k, |
| [e]="argument to \\#pragma section is not valid for this target\\: (.*?)", | | [e]="no module named \'(.*?)\' in \'(.*?)\'", |
| [f]=a, | | [d]=a, |
| [d]={{nil,F,m}}, | | [f]=z, |
| [c]={Jb,1590001902,Lb,Mb}, | | [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"}, |
| [j]={{L,309,"void Sema::ActOnPragmaClangSection(SourceLocation PragmaLoc, PragmaClangSectionAction Action, PragmaClangSectionKind SecKind, StringRef SecName) {\n // ...\n if (llvm::Error E = isValidSectionSpecifier(SecName)) {\n Diag(PragmaLoc, diag::err_pragma_section_invalid_for_target) << toString(std::move(E));"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/Sema/pragma-clang-section-macho.c"]={"clang/test/Sema/pragma-clang-section-macho.c:5:54: error: argument to #pragma section is not valid for this target: mach-o section specifier requires a segment and section separated by a comma","clang/test/Sema/pragma-clang-section-macho.c:6:54: error: argument to #pragma section is not valid for this target: mach-o section specifier requires a section whose length is between 1 and 16 characters"}
| |
| }
| |
| }, | | }, |
| ["err_preserve_enum_value_invalid"]={ | | ["err_mmap_missing_module_unqualified"]={ |
| [i]={{nil,v,"err_preserve_enum_value_invalid"}}, | | [i]="err_mmap_missing_module_unqualified", |
| [h]={{nil,v,"__builtin_preserve_enum_value argument %0 invalid"}}, | | [h]="no module named \'%0\' visible from \'%1\'", |
| [g]={{nil,v,"__builtin_preserve_enum_value argument A invalid"}}, | | [g]="no module named \'A\' visible from \'B\'", |
| [b]=k, | | [b]=k, |
| [e]="__builtin_preserve_enum_value argument (.*?) invalid", | | [e]="no module named \'(.*?)\' visible from \'(.*?)\'", |
| [f]=a, | | [d]=a, |
| [d]={{nil,v,a}}, | | [f]=z, |
| [c]={lb,1582847864,mb,nb}, | | [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"}, |
| [j]={{z,3540,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n // ...\n } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n // ...\n } else if (BuiltinID == BPF::BI__builtin_preserve_enum_value) {\n if (!isValidBPFPreserveEnumValueArg(Arg)) {\n // ...\n kind = diag::err_preserve_enum_value_invalid;"}}, | | [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();"}} |
| [l]={
| |
| ["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:95:40: error: __builtin_preserve_enum_value argument 1 invalid","clang/test/Sema/builtins-bpf.c:99:40: error: __builtin_preserve_enum_value argument 1 invalid"}
| |
| }
| |
| }, | | }, |
| ["err_preserve_enum_value_not_const"]={ | | ["err_mmap_missing_parent_module"]={ |
| [i]={{nil,v,"err_preserve_enum_value_not_const"}}, | | [i]={{nil,C,"err_mmap_missing_parent_module"}}, |
| [h]={{nil,v,"__builtin_preserve_enum_value argument %0 not a constant"}}, | | [h]={{nil,C,"no module named \'%0\' %select{found|in \'%2\'}1, parent module must be defined before the submodule"}}, |
| [g]={{nil,v,"__builtin_preserve_enum_value argument A not a constant"}}, | | [g]={{nil,C,{"no module named \'A\' ",{"found","in \'C\'"},", parent module must be defined before the submodule"}}}, |
| [b]=k, | | [b]=k, |
| [e]="__builtin_preserve_enum_value argument (.*?) not a constant", | | [e]="no module named \'(.*?)\' (?:found|in \'(.*?)\'), parent module must be defined before the submodule", |
| [f]=a, | | [d]=a, |
| [d]={{nil,v,a}}, | | [f]={{nil,C,z}}, |
| [c]={lb,1582847864,mb,nb}, | | [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"}, |
| [j]={{z,3518,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n if (!Value) {\n if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n // ...\n else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n // ...\n else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n // ...\n else\n kind = diag::err_preserve_enum_value_not_const;"}} | | [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_preserve_field_info_not_const"]={ | | ["err_mmap_module_id"]={ |
| [i]={{nil,p,"err_preserve_field_info_not_const"}}, | | [i]="err_mmap_module_id", |
| [h]={{nil,p,"__builtin_preserve_field_info argument %0 not a constant"}}, | | [h]="expected a module name or \'*\'", |
| [g]={{nil,p,"__builtin_preserve_field_info argument A not a constant"}}, | | [g]="expected a module name or \'*\'", |
| [b]=k, | | [b]=k, |
| [e]="__builtin_preserve_field_info argument (.*?) not a constant", | | [e]="expected a module name or \'\\*\'", |
| [f]=a, | | [d]=a, |
| [d]={{nil,p,a}}, | | [f]=z, |
| [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"}, | | [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"}, |
| [j]={{z,3512,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n if (!Value) {\n if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n kind = diag::err_preserve_field_info_not_const;"}},
| | [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);"}} |
| [l]={
| |
| ["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:64:48: error: __builtin_preserve_field_info argument 2 not a constant","clang/test/Sema/builtins-bpf.c:68:48: error: __builtin_preserve_field_info argument 2 not a constant"}
| |
| }
| |
| }, | | }, |
| ["err_preserve_field_info_not_field"]={ | | ["err_mmap_module_redefinition"]={ |
| [i]={{nil,p,"err_preserve_field_info_not_field"}}, | | [i]="err_mmap_module_redefinition", |
| [h]={{nil,p,"__builtin_preserve_field_info argument %0 not a field access"}}, | | [h]="redefinition of module \'%0\'", |
| [g]={{nil,p,"__builtin_preserve_field_info argument A not a field access"}}, | | [g]="redefinition of module \'A\'", |
| [b]=k, | | [b]=k, |
| [e]="__builtin_preserve_field_info argument (.*?) not a field access", | | [e]="redefinition of module \'(.*?)\'", |
| [f]=a, | | [d]=a, |
| [d]={{nil,p,a}}, | | [f]=z, |
| [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"}, | | [c]={Lb,1321038628,Gb,Db}, |
| [j]={{z,3530,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n if (!isValidBPFPreserveFieldInfoArg(Arg)) {\n // ...\n kind = diag::err_preserve_field_info_not_field;"}},
| | [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;"}} |
| [l]={
| |
| ["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:28:40: error: __builtin_preserve_field_info argument 1 not a field access","clang/test/Sema/builtins-bpf.c:32:40: error: __builtin_preserve_field_info argument 1 not a field access"}
| |
| }
| |
| }, | | }, |
| ["err_preserve_type_info_invalid"]={ | | ["err_mmap_nested_submodule_id"]={ |
| [i]={{nil,v,"err_preserve_type_info_invalid"}}, | | [i]="err_mmap_nested_submodule_id", |
| [h]={{nil,v,"__builtin_preserve_type_info argument %0 invalid"}}, | | [h]="qualified module name can only be used to define modules at the top level", |
| [g]={{nil,v,"__builtin_preserve_type_info argument A invalid"}}, | | [g]="qualified module name can only be used to define modules at the top level", |
| [b]=k, | | [b]=k, |
| [e]="__builtin_preserve_type_info argument (.*?) invalid", | | [e]="qualified module name can only be used to define modules at the top level", |
| [f]=a, | | [d]=a, |
| [d]={{nil,v,a}}, | | [f]=z, |
| [c]={lb,1582847864,mb,nb}, | | [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]={{z,3535,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n // ...\n } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n if (!isValidBPFPreserveTypeInfoArg(Arg)) {\n // ...\n kind = diag::err_preserve_type_info_invalid;"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:103:39: error: __builtin_preserve_type_info argument 1 invalid"}
| |
| }
| |
| }, | | }, |
| ["err_preserve_type_info_not_const"]={ | | ["err_mmap_submodule_export_as"]={ |
| [i]={{nil,v,"err_preserve_type_info_not_const"}}, | | [i]={{nil,t,"err_mmap_submodule_export_as"}}, |
| [h]={{nil,v,"__builtin_preserve_type_info argument %0 not a constant"}}, | | [h]={{nil,t,"only top-level modules can be re-exported as public"}}, |
| [g]={{nil,v,"__builtin_preserve_type_info argument A not a constant"}}, | | [g]={{nil,t,"only top-level modules can be re-exported as public"}}, |
| [b]=k, | | [b]=k, |
| [e]="__builtin_preserve_type_info argument (.*?) not a constant", | | [e]="only top\\-level modules can be re\\-exported as public", |
| [f]=a, | | [d]=a, |
| [d]={{nil,v,a}}, | | [f]={{nil,t,z}}, |
| [c]={lb,1582847864,mb,nb}, | | [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"}, |
| [j]={{z,3516,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n if (!Value) {\n if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n // ...\n else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n // ...\n else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n kind = diag::err_preserve_type_info_not_const;"}} | | [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_private_ivar_access"]={ | | ["err_mmap_top_level_inferred_submodule"]={ |
| [i]="err_private_ivar_access", | | [i]="err_mmap_top_level_inferred_submodule", |
| [h]="instance variable %0 is private", | | [h]="only submodules and framework modules may be inferred with wildcard syntax", |
| [g]="instance variable A is private", | | [g]="only submodules and framework modules may be inferred with wildcard syntax", |
| [b]=k, | | [b]=k, |
| [e]="instance variable (.*?) is private", | | [e]="only submodules and framework modules may be inferred with wildcard syntax", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=z, |
| [c]={wb,1480718311,vb,tb}, | | [c]={Dc,1323124064,qc,Cc}, |
| [j]={{n,2971,"/// The parser has read a name in, and Sema has detected that we\'re currently\n/// inside an ObjC method. Perform some additional checks and determine if we\n/// should form a reference to an ivar.\n///\n/// Ideally, most of this would be done by lookup, but there\'s\n/// actually quite a lot of extra work involved.\nDeclResult Sema::LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S, IdentifierInfo *II) {\n // ...\n if (LookForIvars) {\n // ...\n if (IFace && (IV = IFace->lookupInstanceVariable(II, ClassDeclared))) {\n // ...\n // Diagnose the use of an ivar outside of the declaring class.\n if (IV->getAccessControl() == ObjCIvarDecl::Private && !declaresSameEntity(ClassDeclared, IFace) && !getLangOpts().DebuggerSupport)\n Diag(Loc, diag::err_private_ivar_access) << IV->getDeclName();"},{V,1445,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n // ...\n if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n // ...\n if (!S.getLangOpts().DebuggerSupport) {\n if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n if (!declaresSameEntity(ClassDeclared, IDecl) || !declaresSameEntity(ClassOfMethodDecl, ClassDeclared))\n S.Diag(MemberLoc, diag::err_private_ivar_access) << IV->getDeclName();"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/SemaObjC/synthesized-ivar.m"]={"clang/test/SemaObjC/synthesized-ivar.m:16:26: error: instance variable \'IP\' is private","clang/test/SemaObjC/synthesized-ivar.m:48:4: error: instance variable \'_PROP_INMAIN\' is private","clang/test/SemaObjC/synthesized-ivar.m:49:4: error: instance variable \'_PROP_INCLASSEXT\' is private","clang/test/SemaObjC/synthesized-ivar.m:50:11: error: instance variable \'private_ivar\' is private"}
| |
| }
| |
| }, | | }, |
| ["err_private_module_fragment_expected_semi"]={ | | ["err_mmap_umbrella_clash"]={ |
| [i]={{nil,D,"err_private_module_fragment_expected_semi"}}, | | [i]="err_mmap_umbrella_clash", |
| [h]={{nil,D,"expected \';\' after private module fragment declaration"}}, | | [h]="umbrella for module \'%0\' already covers this directory", |
| [g]={{nil,D,"expected \';\' after private module fragment declaration"}}, | | [g]="umbrella for module \'A\' already covers this directory", |
| [b]=k, | | [b]=k, |
| [e]="expected \';\' after private module fragment declaration", | | [e]="umbrella for module \'(.*?)\' already covers this directory", |
| [f]=a, | | [d]=a, |
| [d]={{nil,D,"Modules Issue"}}, | | [f]=z, |
| [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"}, | | [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"}, |
| [j]={{Nb,2438,"/// 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 // ...\n ExpectAndConsumeSemi(diag::err_private_module_fragment_expected_semi);"}} | | [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_private_module_fragment_not_module"]={ | | ["err_mmap_unknown_token"]={ |
| [i]={{nil,D,"err_private_module_fragment_not_module"}}, | | [i]="err_mmap_unknown_token", |
| [h]={{nil,D,"private module fragment declaration with no preceding module declaration"}}, | | [h]="skipping stray token", |
| [g]={{nil,D,"private module fragment declaration with no preceding module declaration"}}, | | [g]="skipping stray token", |
| [b]=k, | | [b]=k, |
| [e]="private module fragment declaration with no preceding module declaration", | | [e]="skipping stray token", |
| [f]=a, | | [d]=a, |
| [d]={{nil,D,"Modules Issue"}}, | | [f]=z, |
| [c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments.\n\nllvm-svn: 358713"}, | | [c]={Lb,1321038628,Gb,Db}, |
| [j]={{"clang/lib/Sema/SemaModule.cpp",437,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n // ...\n case Module::ModuleMapModule:\n case Module::ExplicitGlobalModuleFragment:\n case Module::ImplicitGlobalModuleFragment:\n case Module::ModulePartitionImplementation:\n case Module::ModulePartitionInterface:\n case Module::ModuleHeaderUnit:\n Diag(PrivateLoc, diag::err_private_module_fragment_not_module);"}}, | | [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);"}} |
| [l]={ | | }, |
| ["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:43:9: error: private module fragment declaration with no preceding module declaration"}
| | ["err_mmap_use_decl_submodule"]={ |
| }
| | [i]="err_mmap_use_decl_submodule", |
| | [h]="use declarations are only allowed in top-level modules", |
| | [g]="use declarations are only allowed in top-level modules", |
| | [b]=k, |
| | [e]="use declarations are only allowed in top\\-level modules", |
| | [d]=a, |
| | [f]=z, |
| | [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"}, |
| | [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_private_module_fragment_not_module_interface"]={ | | ["err_mode_not_primitive"]={ |
| [i]={{nil,D,"err_private_module_fragment_not_module_interface"}}, | | [i]="err_mode_not_primitive", |
| [h]={{nil,D,"private module fragment in module implementation unit"}}, | | [h]="mode attribute only supported for integer and floating-point types", |
| [g]={{nil,D,"private module fragment in module implementation unit"}}, | | [g]="mode attribute only supported for integer and floating-point types", |
| [b]=k, | | [b]=k, |
| [e]="private module fragment in module implementation unit", | | [e]="mode attribute only supported for integer and floating\\-point types", |
| [f]=a, | | [d]=a, |
| [d]={{nil,D,"Modules Issue"}}, | | [f]=m, |
| [c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments.\n\nllvm-svn: 358713"}, | | [c]={H,1236199783,I,G}, |
| [j]={{"clang/lib/Sema/SemaModule.cpp",446,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n // ...\n case Module::ModuleImplementationUnit:\n Diag(PrivateLoc, diag::err_private_module_fragment_not_module_interface);"}}, | | [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]={ |
| ["clang/test/CXX/basic/basic.link/p2.cpp"]={"clang/test/CXX/basic/basic.link/p2.cpp:16:9: error: private module fragment in module implementation unit"} | | ["clang/test/SemaCXX/ext-int.cpp"]={"clang/test/SemaCXX/ext-int.cpp:260:48: error: mode attribute only supported for integer and floating-point types"} |
| } | | } |
| }, | | }, |
| ["err_private_module_fragment_redefined"]={ | | ["err_mode_wrong_type"]={ |
| [i]={{nil,D,"err_private_module_fragment_redefined"}}, | | [i]="err_mode_wrong_type", |
| [h]={{nil,D,"private module fragment redefined"}}, | | [h]="type of machine mode does not match type of base type", |
| [g]={{nil,D,"private module fragment redefined"}}, | | [g]="type of machine mode does not match type of base type", |
| [b]=k, | | [b]=k, |
| [e]="private module fragment redefined", | | [e]="type of machine mode does not match type of base type", |
| [f]=a, | | [d]=a, |
| [d]={{nil,D,"Modules Issue"}}, | | [f]=m, |
| [c]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments.\n\nllvm-svn: 358713"}, | | [c]={H,1236199783,I,G}, |
| [j]={{"clang/lib/Sema/SemaModule.cpp",441,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n // ...\n case Module::PrivateModuleFragment:\n Diag(PrivateLoc, diag::err_private_module_fragment_redefined);"}},
| | [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]={ |
| ["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:54:9: error: private module fragment redefined"} | | ["clang/test/Sema/attr-mode-vector-types.c"]={"clang/test/Sema/attr-mode-vector-types.c:21:30: error: type of machine mode does not match type of base type","clang/test/Sema/attr-mode-vector-types.c:26:28: error: type of machine mode does not match type of base type","clang/test/Sema/attr-mode-vector-types.c:29:30: error: type of machine mode does not match type of base type"} |
| } | | } |
| }, | | }, |
| ["err_probability_not_constant_float"]={ | | ["err_modifier_expected_colon"]={ |
| [i]={{nil,q,"err_probability_not_constant_float"}}, | | [i]={{nil,p,"err_modifier_expected_colon"}}, |
| [h]={{nil,q,"probability argument to __builtin_expect_with_probability must be constant floating-point expression"}}, | | [h]={{nil,p,"missing \':\' after %0 modifier"}}, |
| [g]={{nil,q,"probability argument to __builtin_expect_with_probability must be constant floating-point expression"}}, | | [g]={{nil,p,"missing \':\' after A modifier"}}, |
| [b]=k, | | [b]=k, |
| [e]="probability argument to __builtin_expect_with_probability must be constant floating\\-point expression", | | [e]="missing \'\\:\' after (.*?) modifier", |
| [f]=a, | | [d]=a, |
| [d]={{nil,q,a}}, | | [f]={{nil,p,y}}, |
| [c]={lb,1582847864,mb,nb}, | | [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"}, |
| [j]={{z,2441,"#include \"clang/Basic/Builtins.def\"\n // ...\n case Builtin::BI__builtin_expect_with_probability: {\n // ...\n if ((!ProbArg->EvaluateAsConstantExpr(Eval, Context)) || !Eval.Val.isFloat()) {\n Diag(ProbArg->getBeginLoc(), diag::err_probability_not_constant_float) << ProbArg->getSourceRange();"}}, | | [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]={ |
| ["clang/test/Sema/builtin-expect-with-probability-avr.cpp"]={"clang/test/Sema/builtin-expect-with-probability-avr.cpp:8:55: error: probability argument to __builtin_expect_with_probability must be constant floating-point expression"} | | ["clang/test/OpenMP/taskloop_strict_modifier_messages.cpp"]={"clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:17:34: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:26:34: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:40:41: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:50:46: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:60:50: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:70:55: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:80:41: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:90:46: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:100:50: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:110:55: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:119:41: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:129:46: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:139:50: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:149:55: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:159:41: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:169:46: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:178:50: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:188:55: error: missing \':\' after strict modifier"} |
| } | | } |
| }, | | }, |
| ["err_probability_out_of_range"]={ | | ["err_module_build_disabled"]={ |
| [i]={{nil,q,"err_probability_out_of_range"}}, | | [i]="err_module_build_disabled", |
| [h]={{nil,q,"probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"}}, | | [h]="module \'%0\' is needed but has not been provided, and implicit use of module files is disabled", |
| [g]={{nil,q,"probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"}}, | | [g]="module \'A\' is needed but has not been provided, and implicit use of module files is disabled", |
| [b]=k, | | [b]=T, |
| [e]="probability argument to __builtin_expect_with_probability is outside the range \\[0\\.0, 1\\.0\\]", | | [e]="module \'(.*?)\' is needed but has not been provided, and implicit use of module files is disabled", |
| [f]=a, | | [d]=a, |
| [d]={{nil,q,a}}, | | [f]=y, |
| [c]={lb,1582847864,mb,nb}, | | [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"}, |
| [j]={{z,2453,"#include \"clang/Basic/Builtins.def\"\n // ...\n case Builtin::BI__builtin_expect_with_probability: {\n // ...\n if (!(Probability >= llvm::APFloat(0.0) && Probability <= llvm::APFloat(1.0))) {\n Diag(ProbArg->getBeginLoc(), diag::err_probability_out_of_range) << ProbArg->getSourceRange();"}}, | | [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]={ |
| ["clang/test/Sema/builtin-expect-with-probability-avr.cpp"]={"clang/test/Sema/builtin-expect-with-probability-avr.cpp:6:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:7:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:10:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:11:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:13:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:14:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"} | | ["clang/test/Modules/implicit-module-with-missing-path.cpp"]={"clang/test/Modules/implicit-module-with-missing-path.cpp:12:8: fatal error: module \'C\' is needed but has not been provided, and implicit use of module files is disabled"} |
| } | | } |
| }, | | }, |
| ["err_property_accessor_type"]={ | | ["err_module_build_requires_fmodules"]={ |
| [i]="err_property_accessor_type", | | [i]={{nil,r,"err_module_build_requires_fmodules"}}, |
| [h]="type of property %0 (%1) does not match type of accessor %2 (%3)", | | [h]={{nil,r,"module compilation requires \'-fmodules\'"}}, |
| [g]="type of property A (B) does not match type of accessor C (D)", | | [g]={{nil,r,"module compilation requires \'-fmodules\'"}}, |
| [b]=k, | | [b]=k, |
| [e]="type of property (.*?) \\((.*?)\\) does not match type of accessor (.*?) \\((.*?)\\)", | | [e]="module compilation requires \'\\-fmodules\'", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,r,a}}, |
| [c]={wb,1480718311,vb,tb}, | | [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"}, |
| [j]={{hb,1727,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n // ...\n if (!compat) {\n // ...\n if ((propertyObjCPtr = PropertyRValueType->getAs<ObjCObjectPointerType>()) && (getterObjCPtr = GetterType->getAs<ObjCObjectPointerType>()))\n // ...\n else if (CheckAssignmentConstraints(Loc, GetterType, PropertyRValueType) != Compatible) {\n Diag(Loc, diag::err_property_accessor_type) << property->getDeclName() << PropertyRValueType << GetterMethod->getSelector() << GetterType;"}}, | | [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);"}} |
| [l]={ | | }, |
| ["clang/test/SemaObjC/property-impl-misuse.m"]={"clang/test/SemaObjC/property-impl-misuse.m:40:15: error: type of property \'P\' (\'int\') does not match type of accessor \'P\' (\'void\')","clang/test/SemaObjC/property-impl-misuse.m:46:15: error: type of property \'P2\' (\'int\') does not match type of accessor \'P2\' (\'double *\')"}
| | ["err_module_build_shadowed_submodule"]={ |
| }
| | [i]={{nil,q,"err_module_build_shadowed_submodule"}}, |
| | [h]={{nil,q,"build a shadowed submodule \'%0\'"}}, |
| | [g]={{nil,q,"build a shadowed submodule \'A\'"}}, |
| | [b]=T, |
| | [e]="build a shadowed submodule \'(.*?)\'", |
| | [d]=a, |
| | [f]={{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"}, |
| | [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_property_found_suggest"]={ | | ["err_module_cannot_create_includes"]={ |
| [i]="err_property_found_suggest", | | [i]="err_module_cannot_create_includes", |
| [h]="property %0 found on object of type %1; did you mean to access it with the \".\" operator?", | | [h]="cannot create includes file for module %0: %1", |
| [g]="property A found on object of type B; did you mean to access it with the \".\" operator?", | | [g]="cannot create includes file for module A: B", |
| [b]=k, | | [b]=k, |
| [e]="property (.*?) found on object of type (.*?); did you mean to access it with the \"\\.\" operator\\?", | | [e]="cannot create includes file for module (.*?)\\: (.*?)", |
| | [d]=a, |
| [f]=a, | | [f]=a, |
| [d]=m,
| | [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"}, |
| [c]={"c297cd883641",1309219252,"Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access.","Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access.\n// rdar://7811841\n\nllvm-svn: 133970"}, | | [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]={{V,1398,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n // ...\n if (!IV) {\n // ...\n if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n // ...\n } else {\n if (IsArrow && IDecl->FindPropertyDeclaration(Member, ObjCPropertyQueryKind::OBJC_PR_query_instance)) {\n S.Diag(MemberLoc, diag::err_property_found_suggest) << Member << BaseExpr.get()->getType() << FixItHint::CreateReplacement(OpLoc, \".\");"}}, | | }, |
| [l]={
| | ["err_module_cycle"]={ |
| ["clang/test/FixIt/fixit-objc.m"]={"clang/test/FixIt/fixit-objc.m:54:37: error: property \'y\' found on object of type \'Radar7861841 *\'; did you mean to access it with the \".\" operator?"}
| | [i]="err_module_cycle", |
| } | | [h]="cyclic dependency in module \'%0\': %1", |
| | [g]="cyclic dependency in module \'A\': B", |
| | [b]=T, |
| | [e]="cyclic dependency in module \'(.*?)\'\\: (.*?)", |
| | [d]=a, |
| | [f]=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"}, |
| | [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_property_function_in_objc_container"]={ | | ["err_module_decl_in_header_unit"]={ |
| [i]="err_property_function_in_objc_container", | | [i]={{nil,p,"err_module_decl_in_header_unit"}}, |
| [h]="use of Objective-C property in function nested in Objective-C container not supported, move function outside its container", | | [h]={{nil,p,"\'module\' declaration found while building header unit"}}, |
| [g]="use of Objective-C property in function nested in Objective-C container not supported, move function outside its container", | | [g]={{nil,p,"\'module\' declaration found while building header unit"}}, |
| [b]=k, | | [b]=k, |
| [e]="use of Objective\\-C property in function nested in Objective\\-C container not supported, move function outside its container", | | [e]="\'module\' declaration found while building header unit", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,p,M}}, |
| [c]={"555132824a9e",1401300730,"Objective-C. Diagnose use of properties in functions nested in, ","Objective-C. Diagnose use of properties in functions nested in, \nnow deprecated, ObjC containers instead of crashing. \n// rdar://16859666\n\nllvm-svn: 209758"}, | | [c]={Ac,1625925174,zc,sc}, |
| [j]={{"clang/lib/Sema/SemaPseudoObject.cpp",699,"void ObjCPropertyOpBuilder::DiagnoseUnsupportedPropertyUse() {\n if (S.getCurLexicalContext()->isObjCContainer() && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCCategoryImpl && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCImplementation) {\n if (ObjCPropertyDecl *prop = RefExpr->getExplicitProperty()) {\n S.Diag(RefExpr->getLocation(), diag::err_property_function_in_objc_container);"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/SemaObjC/deprecate_function_containers.m"]={"clang/test/SemaObjC/deprecate_function_containers.m:34:37: error: use of Objective-C property in function nested in Objective-C container not supported, move function outside its container"}
| |
| }
| |
| }, | | }, |
| ["err_property_implemented"]={ | | ["err_module_decl_in_module_map_module"]={ |
| [i]="err_property_implemented", | | [i]={{nil,r,"err_module_decl_in_module_map_module"}}, |
| [h]="property %0 is already implemented", | | [h]={{nil,r,"\'module\' declaration found while building module from module map"}}, |
| [g]="property A is already implemented", | | [g]={{nil,r,"\'module\' declaration found while building module from module map"}}, |
| [b]=k, | | [b]=k, |
| [e]="property (.*?) is already implemented", | | [e]="\'module\' declaration found while building module from module map", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,r,M}}, |
| [c]={wb,1480718311,vb,tb},
| | [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"}, |
| [j]={{hb,1569,"/// 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) {\n // ...\n if (ObjCPropertyImplDecl *PPIDecl = IC->FindPropertyImplDecl(PropertyId, QueryKind)) {\n Diag(PropertyLoc, diag::err_property_implemented) << PropertyId;"},{hb,1608,"/// 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) {\n // ...\n } else {\n // ...\n if (ObjCPropertyImplDecl *PPIDecl = CatImplClass->FindPropertyImplDecl(PropertyId, QueryKind)) {\n Diag(PropertyDiagLoc, diag::err_property_implemented) << PropertyId;"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:21:13: error: property \'prop_id\' is already implemented"}
| |
| }
| |
| }, | | }, |
| ["err_property_is_variably_modified"]={ | | ["err_module_decl_not_at_start"]={ |
| [i]="err_property_is_variably_modified", | | [i]={{nil,x,"err_module_decl_not_at_start"}}, |
| [h]="property %0 has a variably modified type", | | [h]={{nil,x,"module declaration must occur at the start of the translation unit"}}, |
| [g]="property A has a variably modified type", | | [g]={{nil,x,"module declaration must occur at the start of the translation unit"}}, |
| [b]=k, | | [b]=k, |
| [e]="property (.*?) has a variably modified type", | | [e]="module declaration must occur at the start of the translation unit", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,x,M}}, |
| [c]={"5e77d76c953d",1366097310,"Basic support for Microsoft property declarations and","Basic support for Microsoft property declarations and\nreferences thereto.\n\nPatch by Tong Shen!\n\nllvm-svn: 179585"}, | | [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"}, |
| [j]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",1305,"Decl *TemplateDeclInstantiator::VisitMSPropertyDecl(MSPropertyDecl *D) {\n // ...\n if (DI->getType()->isVariablyModifiedType()) {\n SemaRef.Diag(D->getLocation(), diag::err_property_is_variably_modified) << D;"}} | | [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);"}}, |
| },
| |
| ["err_property_ivar_type"]={
| |
| [i]="err_property_ivar_type",
| |
| [h]="type of property %0 (%1) does not match type of instance variable %2 (%3)",
| |
| [g]="type of property A (B) does not match type of instance variable C (D)",
| |
| [b]=k,
| |
| [e]="type of property (.*?) \\((.*?)\\) does not match type of instance variable (.*?) \\((.*?)\\)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={wb,1480718311,vb,tb},
| |
| [j]={{hb,1376,"/// 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 // Check that type of property and its ivar are type compatible.\n if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n // ...\n if (!compat) {\n Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"},{hb,1391,"/// 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 // Check that type of property and its ivar are type compatible.\n if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n // ...\n if (!compat) {\n // ...\n } else {\n // ...\n if (lhsType != rhsType && lhsType->isArithmeticType()) {\n Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"}},
| |
| [l]={ | | [l]={ |
| ["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:21:13: error: type of property \'prop_id\' (\'id\') does not match type of instance variable \'IVAR\' (\'int\')"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_property_method_unavailable"]={ | | ["err_module_declaration_missing"]={ |
| [i]="err_property_method_unavailable", | | [i]={{nil,t,"err_module_declaration_missing"}}, |
| [h]="property access is using %0 method which is unavailable", | | [h]={{nil,t,"missing \'export module\' declaration in module interface unit"}}, |
| [g]="property access is using A method which is unavailable", | | [g]={{nil,t,"missing \'export module\' declaration in module interface unit"}}, |
| [b]=k, | | [b]=k, |
| [e]="property access is using (.*?) method which is unavailable", | | [e]="missing \'export module\' declaration in module interface unit", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,t,M}}, |
| [c]={"89ea9610b306",1402939541,"Objective-C. Diagnose when property access is using declared","Objective-C. Diagnose when property access is using declared\nproperty accessor methods which have become deprecated\nor available. // rdar://15951801\n\nllvm-svn: 211039"}, | | [c]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration.","[Modules TS] Diagnose missing/duplicate module-declaration.\n\nllvm-svn: 315397"}, |
| [j]={{"clang/lib/Sema/SemaAvailability.cpp",448,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n // ...\n case AR_Unavailable:\n diag = !ObjCPropertyAccess ? diag::err_unavailable : diag::err_property_method_unavailable;"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/SemaObjC/property-deprecated-warning.m"]={"clang/test/SemaObjC/property-deprecated-warning.m:168:14: error: property access is using \'x\' method which is unavailable"}
| |
| }
| |
| }, | | }, |
| ["err_property_not_as_forward_class"]={ | | ["err_module_declaration_missing_after_global_module_introducer"]={ |
| [i]="err_property_not_as_forward_class", | | [i]={{nil,x,"err_module_declaration_missing_after_global_module_introducer"}}, |
| [h]="property %0 refers to an incomplete Objective-C class %1 (with no @interface available)", | | [h]={{nil,x,"missing \'module\' declaration at end of global module fragment introduced here"}}, |
| [g]="property A refers to an incomplete Objective-C class B (with no @interface available)", | | [g]={{nil,x,"missing \'module\' declaration at end of global module fragment introduced here"}}, |
| [b]=k, | | [b]=k, |
| [e]="property (.*?) refers to an incomplete Objective\\-C class (.*?) \\(with no @interface available\\)", | | [e]="missing \'module\' declaration at end of global module fragment introduced here", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,x,M}}, |
| [c]={"05d389f407d0",1297905974,"Improve diagnostics when property names an object type of","Improve diagnostics when property names an object type of\na forward class. // rdar://8851803\n\nllvm-svn: 125699"}, | | [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"}, |
| [j]={{ac,2138,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface. This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n // ...\n if (ObjCIvarDecl *Ivar = IFace->lookupInstanceVariable(Member, ClassDeclared)) {\n // ...\n if (const ObjCObjectPointerType *OBJPT = T->getAsObjCInterfacePointerType()) {\n if (RequireCompleteType(MemberLoc, OBJPT->getPointeeType(), diag::err_property_not_as_forward_class, MemberName, BaseExpr))"}}, | | [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]={ |
| ["clang/test/SemaObjC/property-missing.m"]={"clang/test/SemaObjC/property-missing.m:32:11: error: property \'someOtherObject\' refers to an incomplete Objective-C class \'SomeOtherClass\' (with no @interface available)"} | | ["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:15:1: error: missing \'module\' declaration at end of global module fragment introduced here"} |
| } | | } |
| }, | | }, |
| ["err_property_not_found"]={ | | ["err_module_different_modmap"]={ |
| [i]="err_property_not_found", | | [i]="err_module_different_modmap", |
| [h]="property %0 not found on object of type %1", | | [h]="module \'%0\' %select{uses|does not use}1 additional module map \'%2\'%select{| not}1 used when the module was built", |
| [g]="property A not found on object of type B", | | [g]={{nil,nil,{"module \'A\' ",{"uses","does not use"}," additional module map \'C\'",{a," not"}," used when the module was built"}}}, |
| [b]=k, | | [b]=k, |
| [e]="property (.*?) not found on object of type (.*?)", | | [e]="module \'(.*?)\' (?:uses|does not use) additional module map \'(.*?)\'(?:| not) used when the module was built", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=X, |
| [c]={u,1237025389,s,t}, | | [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"}, |
| [j]={{V,1549,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n // ...\n // id, with and without qualifiers.\n if (OT->isObjCId()) {\n // ...\n return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{V,1604,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n // ...\n // \'Class\', unqualified only.\n if (OT->isObjCClass()) {\n // ...\n return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{ac,2149,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface. This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n // ...\n Diag(MemberLoc, diag::err_property_not_found) << MemberName << QualType(OPT, 0);"},{ac,2257,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n // ...\n return ExprError(Diag(propertyNameLoc, diag::err_property_not_found) << &propertyName << Context.getObjCInterfaceType(IFace));"}},
| | [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();"}} |
| [l]={
| |
| ["clang/test/SemaObjC/conditional-expr-4.m"]={"clang/test/SemaObjC/conditional-expr-4.m:78:25: error: property \'x\' not found on object of type \'id\'"}
| |
| }
| |
| }, | | }, |
| ["err_property_not_found_forward_class"]={ | | ["err_module_expected_ident"]={ |
| [i]="err_property_not_found_forward_class", | | [i]="err_module_expected_ident", |
| [h]="property %0 cannot be found in forward class object %1", | | [h]="expected a module name after module%select{| import}0", |
| [g]="property A cannot be found in forward class object B", | | [g]={{nil,r,{"expected a module name after \'",{"module","import"},"\'"}},{nil,nil,{"expected a module name after module",{a," import"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="property (.*?) cannot be found in forward class object (.*?)", | | [e]="expected a module name after \'(?:module|import)\'", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=M, |
| [c]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up","Improve diagnostics when property being looked up\nin a forward @class object. // rdar://8774513\n\nllvm-svn: 121933"}, | | [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]={{ac,1995,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface. This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n // ...\n if (RequireCompleteType(MemberLoc, OPT->getPointeeType(), diag::err_property_not_found_forward_class, MemberName, BaseRange))"}}, | | [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;"}} |
| [l]={
| |
| ["clang/test/SemaObjC/property-9.m"]={"clang/test/SemaObjC/property-9.m:106:21: error: property \'path\' cannot be found in forward class object \'MDAInstance\'"}
| |
| }
| |
| }, | | }, |
| ["err_property_not_found_suggest"]={ | | ["err_module_expected_semi"]={ |
| [i]="err_property_not_found_suggest", | | [i]="err_module_expected_semi", |
| [h]="property %0 not found on object of type %1; did you mean %2?", | | [h]="expected \';\' after module name", |
| [g]="property A not found on object of type B; did you mean C?", | | [g]="expected \';\' after module name", |
| [b]=k, | | [b]=k, |
| [e]="property (.*?) not found on object of type (.*?); did you mean (.*?)\\?", | | [e]="expected \';\' after module name", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=M, |
| [c]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific","Implement typo correction for a variety of Objective-C-specific\nconstructs:\n\n - Instance variable lookup (\"foo->ivar\" and, in instance methods, \"ivar\")\n - Property name lookup (\"foo.prop\")\n - Superclasses\n - Various places where a class name is required\n - Protocol names (e.g., id<proto>)\n\nThis seems to cover many of the common places where typos could occur.\n\nllvm-svn: 92449"}, | | [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]={{ac,2124,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface. This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n // ...\n if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(MemberName, MemberLoc), LookupOrdinaryName, nullptr, nullptr, CCC, CTK_ErrorRecovery, IFace, false, OPT)) {\n // ...\n if (TypoResult.isIdentifier() && TypoResult.getAsIdentifierInfo() == Member) {\n // ...\n } else {\n diagnoseTypo(Corrected, PDiag(diag::err_property_not_found_suggest) << MemberName << QualType(OPT, 0));"}}, | | [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/FixIt/typo.m"]={"clang/test/FixIt/typo.m:54:8: error: property \'hisprop\' not found on object of type \'B *\'; did you mean \'his_prop\'?","clang/test/FixIt/typo.m:55:8: error: property \'herprop\' not found on object of type \'B *\'; did you mean \'her_prop\'?","clang/test/FixIt/typo.m:56:8: error: property \'s_prop\' not found on object of type \'B *\'; did you mean \'sprop\'?","clang/test/FixIt/typo.m:81:5: error: property \'valu\' not found on object of type \'Collide *\'; did you mean \'value\'?"} | | ["clang/test/CXX/basic/basic.link/p3.cpp"]={"clang/test/CXX/basic/basic.link/p3.cpp:32:9: error: expected \';\' after module name"} |
| } | | } |
| }, | | }, |
| ["err_property_setter_ambiguous_use"]={ | | ["err_module_file_conflict"]={ |
| [i]="err_property_setter_ambiguous_use", | | [i]="err_module_file_conflict", |
| [h]="synthesized properties %0 and %1 both claim setter %2 - use of this setter will cause unexpected behavior", | | [h]="module \'%0\' is defined in both \'%1\' and \'%2\'", |
| [g]="synthesized properties A and B both claim setter C - use of this setter will cause unexpected behavior", | | [g]="module \'A\' is defined in both \'B\' and \'C\'", |
| [b]=k, | | [b]=T, |
| [e]="synthesized properties (.*?) and (.*?) both claim setter (.*?) \\- use of this setter will cause unexpected behavior", | | [e]="module \'(.*?)\' is defined in both \'(.*?)\' and \'(.*?)\'", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=X, |
| [c]={wb,1480718311,vb,tb}, | | [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"}, |
| [j]={{"clang/lib/Sema/SemaPseudoObject.cpp",675,"/// Try to find the most accurate setter declaration for the property\n/// reference.\n///\n/// \\return true if a setter was found, in which case Setter\nbool ObjCPropertyOpBuilder::findSetter(bool warn) {\n // ...\n // Do a normal method lookup first.\n if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n if (setter->isPropertyAccessor() && warn)\n if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n // ...\n if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n S.Diag(RefExpr->getExprLoc(), diag::err_property_setter_ambiguous_use) << prop << prop1 << setter->getSelector();"}}, | | [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]={ |
| ["clang/test/SemaObjC/property-user-setter.m"]={"clang/test/SemaObjC/property-user-setter.m:130:3: error: synthesized properties \'t\' and \'T\' both claim setter \'setT:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:131:3: error: synthesized properties \'T\' and \'t\' both claim setter \'setT:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:132:3: error: synthesized properties \'Pxyz\' and \'pxyz\' both claim setter \'setPxyz:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:133:3: error: synthesized properties \'pxyz\' and \'Pxyz\' both claim setter \'setPxyz:\' - use of this setter will cause unexpected behavior"} | | ["clang/test/Modules/explicit-build.cpp"]={"fatal error: module \'a\' is defined in both \'build/tools/clang/test/Modules/Output/explicit-build.cpp.tmp/a.pcm\' and \'/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/build/tools/clang/test/Modules/Output/explicit-build.cpp.tmp/2VHNCOTT5YBWK/a-I2CR4V90YFI2.pcm\'"} |
| } | | } |
| }, | | }, |
| ["err_property_type"]={ | | ["err_module_file_missing_top_level_submodule"]={ |
| [i]="err_property_type", | | [i]={{nil,n,"err_module_file_missing_top_level_submodule"}}, |
| [h]="property cannot have array or function type %0", | | [h]={{nil,n,"module file \'%0\' is missing its top-level submodule"}}, |
| [g]="property cannot have array or function type A", | | [g]={{nil,n,"module file \'A\' is missing its top-level submodule"}}, |
| [b]=k, | | [b]=T, |
| [e]="property cannot have array or function type (.*?)", | | [e]="module file \'(.*?)\' is missing its top\\-level submodule", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,n,X}}, |
| [c]={K,1236199783,J,I}, | | [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"}, |
| [j]={{hb,638,"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 (T->isArrayType() || T->isFunctionType()) {\n Diag(AtLoc, diag::err_property_type) << T;"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/SemaObjC/rdr-6211479-array-property.m"]={"clang/test/SemaObjC/rdr-6211479-array-property.m:7:1: error: property cannot have array or function type \'T\' (aka \'int[2]\')"}
| |
| }
| |
| }, | | }, |
| ["err_protected_ivar_access"]={ | | ["err_module_file_not_module"]={ |
| [i]="err_protected_ivar_access", | | [i]="err_module_file_not_module", |
| [h]="instance variable %0 is protected", | | [h]="AST file \'%0\' was not built as a module", |
| [g]="instance variable A is protected", | | [g]="AST file \'A\' was not built as a module", |
| | [b]=T, |
| | [e]="AST file \'(.*?)\' was not built as a module", |
| | [d]=a, |
| | [f]=X, |
| | [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"}, |
| | [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"]={ |
| | [i]="err_module_format_unhandled", |
| | [h]="no handler registered for module format \'%0\'", |
| | [g]="no handler registered for module format \'A\'", |
| | [b]=T, |
| | [e]="no handler registered for module format \'(.*?)\'", |
| | [d]=a, |
| | [f]=a, |
| | [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"} |
| | }, |
| | ["err_module_fragment_exported"]={ |
| | [i]={{nil,x,"err_module_fragment_exported"}}, |
| | [h]={{nil,x,"%select{global|private}0 module fragment cannot be exported"}}, |
| | [g]={{nil,x,{{"global","private"}," module fragment cannot be exported"}}}, |
| [b]=k, | | [b]=k, |
| [e]="instance variable (.*?) is protected", | | [e]="(?:global|private) module fragment cannot be exported", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,x,M}}, |
| [c]={wb,1480718311,vb,tb}, | | [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"}, |
| [j]={{V,1449,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n // ...\n if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n // ...\n if (!S.getLangOpts().DebuggerSupport) {\n if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n // ...\n } else if (!IDecl->isSuperClassOf(ClassOfMethodDecl))\n // ...\n S.Diag(MemberLoc, diag::err_protected_ivar_access) << IV->getDeclName();"}}, | | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaObjC/ivar-access-tests.m"]={"clang/test/SemaObjC/ivar-access-tests.m:65:17: error: instance variable \'protected\' is protected","clang/test/SemaObjC/ivar-access-tests.m:68:17: error: instance variable \'protected\' is protected","clang/test/SemaObjC/ivar-access-tests.m:77:15: error: instance variable \'protected\' is protected"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_protocol_has_circular_dependency"]={ | | ["err_module_header_file_not_found"]={ |
| [i]="err_protocol_has_circular_dependency", | | [i]={{nil,db,"err_module_header_file_not_found"}}, |
| [h]="protocol has circular dependency", | | [h]={{nil,db,"module header file \'%0\' not found"}}, |
| [g]="protocol has circular dependency", | | [g]={{nil,db,"module header file \'A\' not found"}}, |
| | [b]=T, |
| | [e]="module header file \'(.*?)\' not found", |
| | [d]=a, |
| | [f]={{nil,db,a}}, |
| | [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"}, |
| | [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;"}} |
| | }, |
| | ["err_module_header_missing"]={ |
| | [i]="err_module_header_missing", |
| | [h]="%select{|umbrella }0header \'%1\' not found", |
| | [g]={{nil,nil,{{a,"umbrella "},"header \'B\' not found"}}}, |
| [b]=k, | | [b]=k, |
| [e]="protocol has circular dependency", | | [e]="(?:|umbrella )header \'(.*?)\' not found", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=y, |
| [c]={u,1237025389,s,t}, | | [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"}, |
| [j]={{Kb,1205,"bool Sema::CheckForwardProtocolDeclarationForCircularDependency(IdentifierInfo *PName, SourceLocation &Ploc, SourceLocation PrevLoc, const ObjCList<ObjCProtocolDecl> &PList) {\n // ...\n for (ObjCList<ObjCProtocolDecl>::iterator I = PList.begin(), E = PList.end(); I != E; ++I) {\n if (ObjCProtocolDecl *PDecl = LookupProtocol((*I)->getIdentifier(), Ploc)) {\n if (PDecl->getIdentifier() == PName) {\n Diag(Ploc, diag::err_protocol_has_circular_dependency);"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaObjC/protocols.m"]={"clang/test/SemaObjC/protocols.m:61:11: error: protocol has circular dependency"} | | ["clang/test/Modules/dependency-gen.modulemap"]={"clang/test/Modules/dependency-gen.modulemap:12:10: error: header \'Inputs/dependency-gen.h\' not found"} |
| } | | } |
| }, | | }, |
| ["err_protocol_property_mismatch"]={ | | ["err_module_import_in_implementation"]={ |
| [i]={{nil,o,"err_protocol_property_mismatch"}}, | | [i]="err_module_import_in_implementation", |
| [h]={{nil,o,"property %select{of type %1|with attribute \'%1\'|without attribute \'%1\'|with getter %1|with setter %1}0 was selected for synthesis"}}, | | [h]="@import of module \'%0\' in implementation of \'%1\'; use #import", |
| [g]={{nil,o,{"property ",{"of type B","with attribute \'B\'","without attribute \'B\'","with getter B","with setter B"}," was selected for synthesis"}}}, | | [g]="@import of module \'A\' in implementation of \'B\'; use #import", |
| [b]=k, | | [b]=k, |
| [e]="property (?:of type (.*?)|with attribute \'(.*?)\'|without attribute \'(.*?)\'|with getter (.*?)|with setter (.*?)) was selected for synthesis", | | [e]="@import of module \'(.*?)\' in implementation of \'(.*?)\'; use \\#import", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,m}}, | | [f]=M, |
| [c]={"50b2dd336e39",1499943982,"[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous","[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous\nproperty and check for incompatible attributes\n\nThis commit changes the way ambiguous property synthesis (i.e. when synthesizing\na property that\'s declared in multiple protocols) is performed. Previously,\nClang synthesized the first property that was found. This lead to problems when\nthe property was synthesized in a class that conformed to two protocols that\ndeclared that property and a second protocols had a \'readwrite\' declaration -\nthe setter was not synthesized so the class didn\'t really conform to the second\nprotocol and user\'s code would crash at runtime when they would try to set the\nproperty.\n\nThis commit ensures that a first readwrite property is selected. This is a\nsemantic change that changes users code in this manner:\n\n```\n@protocol P @property(readonly) int p; @end\n@protocol P2 @property(readwrite) id p; @end\n@interface I <P2> @end\n@implementation I\n@syntesize p; // Users previously got a warning here, and Clang synthesized\n // readonly \'int p\' here. Now Clang synthesizes readwrite \'id\' p..\n@end\n```\n\nTo ensure that this change is safe, the warning about incompatible types is\npromoted to an error when this kind of readonly/readwrite ambiguity is detected\nin the @implementation. This will ensure that previous code that had this subtle\nbug and ignored the warning now will fail to compile with an error, and users\nshould not get suprises at runtime once they resolve the error.\n\nThe commit also extends the ambiguity checker, and now it can detect conflicts\namong the different property attributes. An error diagnostic is used for\nconflicting attributes, to ensure that the user won\'t get \"suprises\" at runtime.\n\nProtocolPropertyMap is removed in favour of a a set + vector because the map\'s\norder of iteration is non-deterministic, so it couldn\'t be used to select the\nreadwrite property.\n\nrdar://31579994\n\nDifferential Revision: https://reviews.llvm.org/D35268\n\nllvm-svn: 307903"}, | | [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"}, |
| [j]={{hb,969,"/// SelectPropertyForSynthesisFromProtocols - Finds the most appropriate\n/// property declaration that should be synthesised in all of the inherited\n/// protocols. It also diagnoses properties declared in inherited protocols with\n/// mismatched types or attributes, since any of them can be candidate for\n/// synthesis.\nstatic ObjCPropertyDecl *SelectPropertyForSynthesisFromProtocols(Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) {\n // ...\n // Diagnose incompability.\n {\n // ...\n auto Diag = S.Diag(Property->getLocation(), Property != OriginalProperty || HasIncompatibleAttributes ? diag::err_protocol_property_mismatch : diag::warn_protocol_property_mismatch);"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaObjC/arc-property-decl-attrs.m"]={"clang/test/SemaObjC/arc-property-decl-attrs.m:130:43: error: property with attribute \'copy\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:143:25: error: property without attribute \'retain (or strong)\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:156:42: error: property without attribute \'atomic\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:169:31: error: property with getter \'prop\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:185:46: error: property with setter \'setp:\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:198:42: error: property of type \'int\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:220:45: error: property of type \'id\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:264:40: error: property with attribute \'retain (or strong)\' was selected for synthesis"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_pseudo_dtor_base_not_scalar"]={ | | ["err_module_import_not_at_top_level_fatal"]={ |
| [i]="err_pseudo_dtor_base_not_scalar", | | [i]="err_module_import_not_at_top_level_fatal", |
| [h]="object expression of non-scalar type %0 cannot be used in a pseudo-destructor expression", | | [h]="import of module \'%0\' appears within %1", |
| [g]="object expression of non-scalar type A cannot be used in a pseudo-destructor expression", | | [g]="import of module \'A\' appears within B", |
| [b]=k, | | [b]=T, |
| [e]="object expression of non\\-scalar type (.*?) cannot be used in a pseudo\\-destructor expression", | | [e]="import of module \'(.*?)\' appears within (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=M, |
| [c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor","Implement AST, semantics, and CodeGen for C++ pseudo-destructor\nexpressions, e.g.,\n\n p->~T()\n\nwhen p is a pointer to a scalar type. \n\nWe don\'t currently diagnose errors when pseudo-destructor expressions\nare used in any way other than by forming a call.\n\nllvm-svn: 81009"}, | | [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"}, |
| [j]={{P,7770,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n // ...\n if (!ObjectType->isDependentType() && !ObjectType->isScalarType() && !ObjectType->isVectorType()) {\n if (getLangOpts().MSVCCompat && ObjectType->isVoidType())\n // ...\n else {\n Diag(OpLoc, diag::err_pseudo_dtor_base_not_scalar) << ObjectType << Base->getSourceRange();"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:34:6: error: object expression of non-scalar type \'void\' cannot be used in a pseudo-destructor expression","clang/test/SemaCXX/pseudo-destructors.cpp:195:19: error: object expression of non-scalar type \'void ()\' cannot be used in a pseudo-destructor expression"} | | ["clang/test/Modules/misplaced-3.cpp"]={"clang/test/Modules/misplaced-3.cpp:5:1: fatal error: import of module \'dummy\' appears within \'C1\'"} |
| } | | } |
| }, | | }, |
| ["err_pseudo_dtor_call_with_args"]={ | | ["err_module_interface_implementation_mismatch"]={ |
| [i]="err_pseudo_dtor_call_with_args", | | [i]="err_module_interface_implementation_mismatch", |
| [h]="call to pseudo-destructor cannot have any arguments", | | [h]="%select{\'module\'|\'module partition\'|\'module implementation\'}0 declaration found while %select{not |not |}0building module interface", |
| [g]="call to pseudo-destructor cannot have any arguments", | | [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"}}}, |
| | [b]=k, |
| | [e]="missing \'export\' specifier in module declaration while building module interface", |
| | [d]=a, |
| | [f]=M, |
| | [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"}, |
| | [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 \");"}} |
| | }, |
| | ["err_module_interface_requires_cpp_modules"]={ |
| | [i]={{nil,x,"err_module_interface_requires_cpp_modules"}}, |
| | [h]="module interface compilation requires \'-std=c++20\'", |
| | [g]="module interface compilation requires \'-std=c++20\'", |
| [b]=k, | | [b]=k, |
| [e]="call to pseudo\\-destructor cannot have any arguments", | | [e]="module interface compilation requires \'\\-std\\=c\\+\\+20\'", |
| | [d]=a, |
| | [f]={{nil,x,a}}, |
| | [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"}, |
| | [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"]={ |
| | [i]="err_module_map_not_found", |
| | [h]="module map file \'%0\' not found", |
| | [g]="module map file \'A\' not found", |
| | [b]=T, |
| | [e]="module map file \'(.*?)\' not found", |
| | [d]=a, |
| [f]=a, | | [f]=a, |
| [d]=m,
| | [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"}, |
| [c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor","Implement AST, semantics, and CodeGen for C++ pseudo-destructor\nexpressions, e.g.,\n\n p->~T()\n\nwhen p is a pointer to a scalar type. \n\nWe don\'t currently diagnose errors when pseudo-destructor expressions\nare used in any way other than by forming a call.\n\nllvm-svn: 81009"}, | | [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]={{n,7307,"/// BuildCallExpr - Handle a call to Fn with the specified array of arguments.\n/// This provides the location of the left/right parens and a list of comma\n/// locations.\nExprResult Sema::BuildCallExpr(Scope *Scope, Expr *Fn, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n // ...\n if (getLangOpts().CPlusPlus) {\n // If this is a pseudo-destructor expression, build the call immediately.\n if (isa<CXXPseudoDestructorExpr>(Fn)) {\n if (!ArgExprs.empty()) {\n // ...\n Diag(Fn->getBeginLoc(), diag::err_pseudo_dtor_call_with_args) << FixItHint::CreateRemoval(SourceRange(ArgExprs.front()->getBeginLoc(), ArgExprs.back()->getEndLoc()));"}}, | |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:40:3: error: call to pseudo-destructor cannot have any arguments"} | | ["clang/test/Modules/module_map_cwd.c"]={"fatal error: module map file \'map\' not found"} |
| } | | } |
| }, | | }, |
| ["err_pseudo_dtor_destructor_non_type"]={ | | ["err_module_no_size_mtime_for_header"]={ |
| [i]="err_pseudo_dtor_destructor_non_type", | | [i]={{nil,r,"err_module_no_size_mtime_for_header"}}, |
| [h]="%0 does not refer to a type name in pseudo-destructor expression; expected the name of type %1", | | [h]={{nil,r,"cannot emit module %0: %select{size|mtime}1 must be explicitly specified for missing header file \"%2\""}}, |
| [g]="A does not refer to a type name in pseudo-destructor expression; expected the name of type B", | | [g]={{nil,r,{"cannot emit module A: ",{"size","mtime"}," must be explicitly specified for missing header file \"C\""}}}, |
| [b]=k, | | [b]=k, |
| [e]="(.*?) does not refer to a type name in pseudo\\-destructor expression; expected the name of type (.*?)", | | [e]="cannot emit module (.*?)\\: (?:size|mtime) must be explicitly specified for missing header file \"(.*?)\"", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,r,"AST Serialization Issue"}}, |
| [c]={"0d5b0a1e5edb",1267046952,"ActOnPseudoDestructorExpr now performs all semantic analysis for","ActOnPseudoDestructorExpr now performs all semantic analysis for\npseudo-destructor expressions, and builds the CXXPseudoDestructorExpr\nnode directly. Currently, this only affects pseudo-destructor\nexpressions when they are parsed, but not after template\ninstantiation. That\'s coming next...\n\nImprove parsing of pseudo-destructor-names. When parsing the\nnested-name-specifier and we hit the sequence of tokens X :: ~, query\nthe actual module to determine whether X is a type-name (in which case\nthe X :: is part of the pseudo-destructor-name but not the\nnested-name-specifier) or not (in which case the X :: is part of the\nnested-name-specifier). \n\nllvm-svn: 97058"}, | | [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"}, |
| [j]={{P,7920,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n // ...\n if (SecondTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n // ...\n if (!T && ((SS.isSet() && !computeDeclContext(SS, false)) || (!SS.isSet() && ObjectType->isDependentType()))) {\n // ...\n } else if (!T) {\n Diag(SecondTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << SecondTypeName.Identifier << ObjectType;"},{P,7972,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n // ...\n if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_TemplateId || FirstTypeName.Identifier) {\n if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n // ...\n if (!T) {\n Diag(FirstTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << FirstTypeName.Identifier << ObjectType;"}}, | | [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"]={ |
| | [i]="err_module_not_built", |
| | [h]="could not build module \'%0\'", |
| | [g]="could not build module \'A\'", |
| | [b]=T, |
| | [e]="could not build module \'(.*?)\'", |
| | [d]=a, |
| | [f]=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"}, |
| | [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]={ |
| ["clang/test/Frontend/crash-diagnostic-renderer.cpp"]={"clang/test/Frontend/crash-diagnostic-renderer.cpp:13:23: error: \'b\' does not refer to a type name in pseudo-destructor expression; expected the name of type \'volatile long\'"} | | ["clang/test/Modules/import-textual-noguard.mm"]={"clang/test/Modules/import-textual-noguard.mm:4:10: fatal error: could not build module \'M\'"} |
| } | | } |
| }, | | }, |
| ["err_pseudo_dtor_type_mismatch"]={ | | ["err_module_not_defined"]={ |
| [i]="err_pseudo_dtor_type_mismatch", | | [i]={{nil,t,"err_module_not_defined"}}, |
| [h]="the type of object expression %diff{($) does not match the type being destroyed ($)|does not match the type being destroyed}0,1 in pseudo-destructor expression", | | [h]={{nil,t,"definition of module \'%0\' is not available; use -fmodule-file= to specify path to precompiled module interface"}}, |
| [g]={{nil,nil,{"the type of object expression ",{"(A) does not match the type being destroyed (B)","does not match the type being destroyed"}," in pseudo-destructor expression"}}}, | | [g]={{nil,t,"definition of module \'A\' is not available; use -fmodule-file= to specify path to precompiled module interface"}}, |
| [b]=k, | | [b]=k, |
| [e]="the type of object expression (?:\\((.*?)\\) does not match the type being destroyed \\((.*?)\\)|does not match the type being destroyed) in pseudo\\-destructor expression", | | [e]="definition of module \'(.*?)\' is not available; use \\-fmodule\\-file\\= to specify path to precompiled module interface", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,t,M}}, |
| [c]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor","Implement AST, semantics, and CodeGen for C++ pseudo-destructor\nexpressions, e.g.,\n\n p->~T()\n\nwhen p is a pointer to a scalar type. \n\nWe don\'t currently diagnose errors when pseudo-destructor expressions\nare used in any way other than by forming a call.\n\nllvm-svn: 81009"}, | | [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"}, |
| [j]={{P,7805,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n // ...\n // C++ [expr.pseudo]p2:\n // [...] The cv-unqualified versions of the object type and of the type\n // designated by the pseudo-destructor-name shall be the same type.\n if (DestructedTypeInfo) {\n // ...\n if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n // Detect dot pseudo destructor calls on pointer objects, e.g.:\n // Foo *foo;\n // foo.~Foo();\n if (OpKind == tok::period && ObjectType->isPointerType() && Context.hasSameUnqualifiedType(DestructedType, ObjectType->getPointeeType())) {\n // ...\n } else {\n Diag(DestructedTypeStart, diag::err_pseudo_dtor_type_mismatch) << ObjectType << DestructedType << Base->getSourceRange() << DestructedTypeInfo->getTypeLoc().getSourceRange();"},{P,7849,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n // ...\n // C++ [expr.pseudo]p2:\n // [...] Furthermore, the two type-names in a pseudo-destructor-name of the\n // form\n //\n // ::[opt] nested-name-specifier[opt] type-name :: ~ type-name\n //\n // shall designate the same scalar type.\n if (ScopeTypeInfo) {\n // ...\n if (!ScopeType->isDependentType() && !ObjectType->isDependentType() && !Context.hasSameUnqualifiedType(ScopeType, ObjectType)) {\n Diag(ScopeTypeInfo->getTypeLoc().getSourceRange().getBegin(), diag::err_pseudo_dtor_type_mismatch) << ObjectType << ScopeType << Base->getSourceRange() << ScopeTypeInfo->getTypeLoc().getSourceRange();"}}, | | [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;"}} |
| | }, |
| | ["err_module_not_found"]={ |
| | [i]="err_module_not_found", |
| | [h]="module \'%0\' not found", |
| | [g]="module \'A\' not found", |
| | [b]=T, |
| | [e]="module \'(.*?)\' not found", |
| | [d]=a, |
| | [f]=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"}, |
| | [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]={ |
| ["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:32:7: error: the type of object expression (\'int\') does not match the type being destroyed (\'Bar\' (aka \'Foo\')) in pseudo-destructor expression","clang/test/SemaCXX/pseudo-destructors.cpp:51:16: error: the type of object expression (\'int\') does not match the type being destroyed (\'Double\' (aka \'double\')) in pseudo-destructor expression"} | | ["clang/test/CXX/module/dcl.dcl/dcl.module/p2.cpp"]={"clang/test/CXX/module/dcl.dcl/dcl.module/p2.cpp:4:8: fatal error: module \'M\' not found"} |
| } | | } |
| }, | | }, |
| ["err_pure_friend"]={ | | ["err_module_odr_violation_definition_data"]={ |
| [i]="err_pure_friend", | | [i]={{nil,t,"err_module_odr_violation_definition_data"}}, |
| [h]="friend declaration cannot have a pure-specifier", | | [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"}}, |
| [g]="friend declaration cannot have a pure-specifier", | | [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"}}}}}, |
| [b]=k, | | [b]=k, |
| [e]="friend declaration cannot have a pure\\-specifier", | | [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)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,p,a},{s,t,X}}, |
| [c]={"9ba0fec83e7f",1435627736,"Rework parsing of pure-specifiers. Perform the grammar matching and","Rework parsing of pure-specifiers. Perform the grammar matching and\ndisambiguation in the parser rather than trying to do it in Sema.\n\nllvm-svn: 241032"}, | | [c]={"e13eabe7d339",1506737957,"[ODRHash] Add base classes to hashing CXXRecordDecl.","[ODRHash] Add base classes to hashing CXXRecordDecl.\n\nllvm-svn: 314581"}, |
| [j]={{H,18148,"void Sema::ActOnPureSpecifier(Decl *D, SourceLocation ZeroLoc) {\n if (D->getFriendObjectKind())\n Diag(D->getLocation(), diag::err_pure_friend);"}}, | | [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]={ |
| ["clang/test/SemaCXX/virtuals.cpp"]={"clang/test/SemaCXX/virtuals.cpp:70:28: error: friend declaration cannot have a pure-specifier","clang/test/SemaCXX/virtuals.cpp:73:19: error: friend declaration cannot have a pure-specifier"} | | [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"} |
| } | | } |
| }, | | }, |
| ["err_qualified_catch_declarator"]={ | | ["err_module_odr_violation_different_definitions"]={ |
| [i]="err_qualified_catch_declarator", | | [i]="err_module_odr_violation_different_definitions", |
| [h]="exception declarator cannot be qualified", | | [h]="%q0 has different definitions in different modules; %select{definition in module \'%2\' is here|defined here}1", |
| [g]="exception declarator cannot be qualified", | | [g]={{nil,nil,{"A has different definitions in different modules; ",{"definition in module \'C\' is here",J}}}}, |
| [b]=k, | | [b]=k, |
| [e]="exception declarator cannot be qualified", | | [e]="(.*?) has different definitions in different modules; (?:definition in module \'(.*?)\' is here|defined here)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,p,a},{s,nil,X}}, |
| [c]={u,1237025389,s,t}, | | [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"}, |
| [j]={{H,16772,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n // ...\n if (D.getCXXScopeSpec().isSet() && !Invalid) {\n Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator) << D.getCXXScopeSpec().getRange();"}} | | [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"]={ |
| | [i]="err_module_odr_violation_different_instantiations", |
| | [h]="instantiation of %q0 is different in different modules", |
| | [g]="instantiation of A is different in different modules", |
| | [b]=k, |
| | [e]="instantiation of (.*?) is different in different modules", |
| | [d]=a, |
| | [f]=X, |
| | [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"}, |
| | [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_qualified_friend_def"]={ | | ["err_module_odr_violation_enum"]={ |
| [i]="err_qualified_friend_def", | | [i]={{nil,q,"err_module_odr_violation_enum"}}, |
| [h]="friend function definition cannot be qualified with \'%0\'", | | [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"}}, |
| [g]="friend function definition cannot be qualified with \'A\'", | | [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}}}}, |
| [b]=k, | | [b]=k, |
| [e]="friend function definition cannot be qualified with \'(.*?)\'", | | [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|)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,p,a},{s,q,X}}, |
| [c]={"16e65616d64b",1318209119,"Implement the restrictions in C++ [class.friend]p6, which disallow","Implement the restrictions in C++ [class.friend]p6, which disallow\ndefining a friend function with a qualified name or in a local\nclass. Fixes PR9853. \n\nllvm-svn: 141524"}, | | [c]={"ab4d730f14d1",1532559125,"[ODRHash] Support hashing enums.","[ODRHash] Support hashing enums.\n\nllvm-svn: 337978"}, |
| [j]={{H,17657,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n // ...\n if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n // ...\n } else if (SS.isInvalid() || !SS.isSet()) {\n // ...\n } else if (!SS.getScopeRep()->isDependent()) {\n // ...\n if (D.isFunctionDefinition()) {\n // ...\n SemaDiagnosticBuilder DB = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);"},{H,17676,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n // ...\n if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n // ...\n } else if (SS.isInvalid() || !SS.isSet()) {\n // ...\n } else if (!SS.getScopeRep()->isDependent()) {\n // ...\n } else {\n if (D.isFunctionDefinition()) {\n // ...\n Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def) << SS.getScopeRep();"}}, | | [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]={ |
| ["clang/test/CXX/class.access/class.friend/p6.cpp"]={"clang/test/CXX/class.access/class.friend/p6.cpp:10:15: error: friend function definition cannot be qualified with \'::\'","clang/test/CXX/class.access/class.friend/p6.cpp:11:15: error: friend function definition cannot be qualified with \'X::\'","clang/test/CXX/class.access/class.friend/p6.cpp:15:15: error: friend function definition cannot be qualified with \'T::\'"} | | [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"} |
| } | | } |
| }, | | }, |
| ["err_qualified_friend_no_match"]={ | | ["err_module_odr_violation_field"]={ |
| [i]="err_qualified_friend_no_match", | | [i]={{nil,s,"err_module_odr_violation_field"}}, |
| [h]={{nil,E,"friend declaration of %0 does not match any declaration in %1"}}, | | [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", |
| [g]={{nil,E,"friend declaration of A does not match any declaration in B"}}, | | [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"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="friend declaration of (.*?) does not match any declaration in (.*?)", | | [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)", |
| [f]=a,
| | [d]=a, |
| [d]={{nil,E,m}},
| | [f]={{nil,p,a},{s,s,X}}, |
| [c]={"8ce732b46f55",1546840846,"DR674, PR38883, PR40238: Qualified friend lookup should look for a","DR674, PR38883, PR40238: Qualified friend lookup should look for a\ntemplate specialization if there is no matching non-template function.\n\nThis exposed a couple of related bugs:\n - we would sometimes substitute into a friend template instead of a\n suitable non-friend declaration; this would now crash because we\'d\n decide the specialization of the friend is a redeclaration of itself\n - ADL failed to properly handle the case where an invisible local\n extern declaration redeclares an invisible friend\n\nBoth are fixed herein: in particular, we now never make invisible\nfriends or local extern declarations visible to name lookup unless\nthey are the only declaration of the entity. (We already mostly did\nthis for local extern declarations.)\n\nllvm-svn: 350505"},
| | [c]={Qb,1643408541,Pb,Vb}, |
| [j]={{w,8957,"/// 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;"},{r,9482,"/// Perform semantic analysis for the given function template\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit function template specialization. On successful completion,\n/// the function declaration \\p FD will become a function template\n/// specialization.\n///\n/// \\param FD the function declaration, which will be updated to become a\n/// function template specialization.\n///\n/// \\param ExplicitTemplateArgs the explicitly-provided template arguments,\n/// if any. Note that this may be valid info even when 0 arguments are\n/// explicitly provided as in, e.g., \\c void sort<>(char*, char*);\n/// as it anyway contains info on the angle brackets locations.\n///\n/// \\param Previous the set of declarations that may be specialized by\n/// this function specialization.\n///\n/// \\param QualifiedFriend whether this is a lookup for a qualified friend\n/// declaration with no explicit template argument list that might be\n/// befriending a function template specialization.\nbool Sema::CheckFunctionTemplateSpecialization(FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs, LookupResult &Previous, bool QualifiedFriend) {\n // ...\n // For a qualified friend declaration (with no explicit marker to indicate\n // that a template specialization was intended), note all (template and\n // non-template) candidates.\n if (QualifiedFriend && Candidates.empty()) {\n Diag(FD->getLocation(), diag::err_qualified_friend_no_match) << FD->getDeclName() << FDLookupContext;"}}
| | [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; };"}}, |
| },
| |
| ["err_qualified_function_typeid"]={
| |
| [i]={{nil,p,"err_qualified_function_typeid"}},
| |
| [h]={{nil,p,"type operand %0 of \'typeid\' cannot have \'%1\' qualifier"}},
| |
| [g]={{nil,p,"type operand A of \'typeid\' cannot have \'B\' qualifier"}},
| |
| [b]=k,
| |
| [e]="type operand (.*?) of \'typeid\' cannot have \'(.*?)\' qualifier",
| |
| [f]=a, | |
| [d]={{nil,p,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"}, | |
| [j]={{R,2145,"bool Sema::CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc) {\n // ...\n Diag(Loc, diag::err_qualified_function_typeid) << T << getFunctionQualifiersAsString(FPT);"}}, | |
| [l]={ | | [l]={ |
| ["clang/test/SemaTemplate/instantiate-expr-4.cpp"]={"clang/test/SemaTemplate/instantiate-expr-4.cpp:198:12: error: type operand \'void () const\' of \'typeid\' cannot have \'const\' qualifier","clang/test/SemaTemplate/instantiate-expr-4.cpp:198:12: error: type operand \'void () &\' of \'typeid\' cannot have \'&\' qualifier"} | | ["clang/test/Modules/odr_hash-gnu.cpp"]={"build/tools/clang/test/Modules/Output/odr_hash-gnu.cpp.tmp/Inputs/first.h:40:17: error: \'Types::TypeOfExpr::Invalid1\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found field \'x\' with type \'typeof (1 + 2)\' (aka \'int\')","build/tools/clang/test/Modules/Output/odr_hash-gnu.cpp.tmp/Inputs/first.h:81:15: error: \'Types::TypeOf::Invalid2\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found field \'x\' with type \'typeof(int)\' (aka \'int\')"} |
| } | | } |
| }, | | }, |
| ["err_qualified_member_nonclass"]={ | | ["err_module_odr_violation_function"]={ |
| [i]="err_qualified_member_nonclass", | | [i]={{nil,t,"err_module_odr_violation_function"}}, |
| [h]="qualified member access refers to a member in %0", | | [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"}}, |
| [g]="qualified member access refers to a member in A", | | [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"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="qualified member access refers to a member in (.*?)", | | [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)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,p,a},{s,t,X}}, |
| [c]={"0b3d95ae64a5",1255819074,"Fix a crash with qualified member access into a non-type, from Sean Hunt!","Fix a crash with qualified member access into a non-type, from Sean Hunt!\n\nllvm-svn: 84370"}, | | [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"}, |
| [j]={{V,683,"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 if (SS.isSet()) {\n // ...\n if (!isa<TypeDecl>(DC)) {\n SemaRef.Diag(R.getNameLoc(), diag::err_qualified_member_nonclass) << DC << SS.getRange();"}}, | | [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]={ |
| ["clang/test/SemaCXX/member-expr.cpp"]={"clang/test/SemaCXX/member-expr.cpp:43:9: error: qualified member access refers to a member in the global namespace","clang/test/SemaCXX/member-expr.cpp:44:10: error: qualified member access refers to a member in namespace \'C\'"} | | ["clang/test/Modules/odr_hash.cl"]={"build/tools/clang/test/Modules/Output/odr_hash.cl.tmp/Inputs/second.h:50:6: error: \'invalid1\' has different definitions in different modules; definition in module \'SecondModule\' first difference is function body","build/tools/clang/test/Modules/Output/odr_hash.cl.tmp/Inputs/second.h:53:6: error: \'invalid2\' has different definitions in different modules; definition in module \'SecondModule\' first difference is function body"} |
| } | | } |
| }, | | }, |
| ["err_qualified_member_of_unrelated"]={ | | ["err_module_odr_violation_method_params"]={ |
| [i]="err_qualified_member_of_unrelated", | | [i]={{nil,p,"err_module_odr_violation_method_params"}}, |
| [h]="%q0 is not a member of class %1", | | [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"}}, |
| [g]="A is not a member of class B", | | [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"}}}}}, |
| [b]=k, | | [b]=k, |
| [e]="(.*?) is not a member of class (.*?)", | | [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 (.*?))", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,p,a}}, |
| [c]={"1e67dd6b2f6a",1272332618,"Improve the diagnostic you get when making a qualified member access","Improve the diagnostic you get when making a qualified member access\nwith a qualifier referencing a different type.\n\nllvm-svn: 102409"}, | | [c]={Qb,1643408541,Pb,Vb}, |
| [j]={{V,540,"/// We know that the given qualified member reference points only to\n/// declarations which do not belong to the static type of the base\n/// expression. Diagnose the problem.\nstatic void DiagnoseQualifiedMemberReference(Sema &SemaRef, Expr *BaseExpr, QualType BaseType, const CXXScopeSpec &SS, NamedDecl *rep, const DeclarationNameInfo &nameInfo) {\n // ...\n SemaRef.Diag(nameInfo.getLoc(), diag::err_qualified_member_of_unrelated) << SS.getRange() << rep << BaseType;"}}, | | [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]={ |
| ["clang/test/CXX/expr/expr.prim/expr.prim.general/p8-0x.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.general/p8-0x.cpp:33:34: error: \'PR10127::outer::middle::mfunc\' is not a member of class \'decltype(outer::middle::inner())\' (aka \'PR10127::outer::middle::inner\')"} | | [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...\'"} |
| } | | } |
| }, | | }, |
| ["err_qualified_objc_access"]={ | | ["err_module_odr_violation_mismatch_decl"]={ |
| [i]="err_qualified_objc_access", | | [i]={{nil,r,"err_module_odr_violation_mismatch_decl"}}, |
| [h]="%select{property|instance variable}0 access cannot be qualified with \'%1\'", | | [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"}}, |
| [g]={{nil,nil,{{"property","instance variable"}," access cannot be qualified with \'B\'"}}}, | | [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}}}}, |
| [b]=k, | | [b]=k, |
| [e]="(?:property|instance variable) access cannot be qualified with \'(.*?)\'", | | [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)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,p,a},{s,r,X}}, |
| [c]={"12340e5b1868",1318202569,"Diagnose attempts to qualify the name of an instance variable or","Diagnose attempts to qualify the name of an instance variable or\nproperty in an Objective-C++ member access expression. Fixes PR9759.\n\nllvm-svn: 141522"}, | | [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"}, |
| [j]={{V,1331,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n if (!SS.isEmpty() && !SS.isInvalid()) {\n S.Diag(SS.getRange().getBegin(), diag::err_qualified_objc_access) << 1 << SS.getScopeRep() << FixItHint::CreateRemoval(SS.getRange());"},{V,1494,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n if (!SS.isEmpty() && !SS.isInvalid()) {\n S.Diag(SS.getRange().getBegin(), diag::err_qualified_objc_access) << 0 << SS.getScopeRep() << FixItHint::CreateRemoval(SS.getRange());"}},
| | [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]={ |
| ["clang/test/SemaObjCXX/propert-dot-error.mm"]={"clang/test/SemaObjCXX/propert-dot-error.mm:65:5: error: property access cannot be qualified with \'Forward::\'","clang/test/SemaObjCXX/propert-dot-error.mm:66:6: error: instance variable access cannot be qualified with \'Forward::\'"} | | ["clang/test/Modules/odr_hash-blocks.cpp"]={"build/tools/clang/test/Modules/Output/odr_hash-blocks.cpp.tmp/Inputs/second.h:100:3: error: \'Blocks::Invalid1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found private access specifier"} |
| } | | } |
| }, | | }, |
| ["err_qualified_objc_catch_parm"]={ | | ["err_module_odr_violation_mismatch_decl_unknown"]={ |
| [i]="err_qualified_objc_catch_parm", | | [i]={{nil,r,"err_module_odr_violation_mismatch_decl_unknown"}}, |
| [h]="@catch parameter declarator cannot be qualified", | | [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"}}, |
| [g]="@catch parameter declarator cannot be qualified", | | [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"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="@catch parameter declarator cannot be qualified", | | [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)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,p,a},{s,r,X}}, |
| [c]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from","Refactor Objective-C @catch parameter checking by detangling it from\nfunction-parameter checking and splitting it into the normal\nActOn*/Build* pair in Sema. We now use VarDecl to represent the @catch\nparameter rather than the ill-fitting ParmVarDecl.\n\nllvm-svn: 102347"}, | | [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"}, |
| [j]={{Kb,5226,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n // ...\n // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).\n if (D.getCXXScopeSpec().isSet()) {\n Diag(D.getIdentifierLoc(), diag::err_qualified_objc_catch_parm) << D.getCXXScopeSpec().getRange();"}} | | [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_qualified_param_declarator"]={ | | ["err_module_odr_violation_missing_decl"]={ |
| [i]="err_qualified_param_declarator", | | [i]="err_module_odr_violation_missing_decl", |
| [h]="parameter declarator cannot be qualified", | | [h]="%q0 from module \'%1\' is not present in definition of %q2%select{ in module \'%4\'| provided earlier}3", |
| [g]="parameter declarator cannot be qualified", | | [g]={{nil,nil,{"A from module \'B\' is not present in definition of C",{" in module \'E\'"," provided earlier"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="parameter declarator cannot be qualified", | | [e]="(.*?) from module \'(.*?)\' is not present in definition of (.*?)(?: in module \'(.*?)\'| provided earlier)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=X, |
| [c]={u,1237025389,s,t}, | | [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"}, |
| [j]={{w,14694,"/// Common checks for a parameter-declaration that should apply to both function\n/// parameters and non-type template parameters.\nvoid Sema::CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D) {\n // ...\n // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).\n if (D.getCXXScopeSpec().isSet()) {\n Diag(D.getIdentifierLoc(), diag::err_qualified_param_declarator) << D.getCXXScopeSpec().getRange();"}}, | | [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]={ |
| ["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:73:17: error: parameter declarator cannot be qualified"} | | ["clang/test/Modules/odr.cpp"]={"clang/test/Modules/Inputs/odr/a.h:8:7: error: \'X::n\' from module \'a\' is not present in definition of \'X\' provided earlier","clang/test/Modules/Inputs/odr/b.h:2:7: error: \'Y::m\' from module \'b\' is not present in definition of \'Y\' in module \'a\'","clang/test/Modules/Inputs/odr/b.h:5:10: error: \'e2\' from module \'b\' is not present in definition of \'E\' in module \'a\'","clang/test/Modules/Inputs/odr/b.h:3:10: error: \'Y::f\' from module \'b\' is not present in definition of \'Y\' in module \'a\'"} |
| } | | } |
| }, | | }, |
| ["err_qualified_typedef_declarator"]={ | | ["err_module_odr_violation_objc_interface"]={ |
| [i]="err_qualified_typedef_declarator", | | [i]={{nil,p,"err_module_odr_violation_objc_interface"}}, |
| [h]="typedef declarator cannot be qualified", | | [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"}}, |
| [g]="typedef declarator cannot be qualified", | | [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"}}}}}}, |
| [b]=k, | | [b]=k, |
| [e]="typedef declarator cannot be qualified", | | [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))", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,p,a}}, |
| [c]={u,1237025389,s,t}, | | [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"}, |
| [j]={{w,6661,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n // Typedef declarators cannot be qualified (C++ [dcl.meaning]p1).\n if (D.getCXXScopeSpec().isSet()) {\n Diag(D.getIdentifierLoc(), diag::err_qualified_typedef_declarator) << D.getCXXScopeSpec().getRange();"}}, | | [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]={ |
| ["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:101:18: error: typedef declarator cannot be qualified"} | | ["clang/test/Modules/method_pool.m"]={"clang/test/Modules/Inputs/MethodPoolB.h:10:12: error: \'B\' has different definitions in different modules; first difference is definition in module \'MethodPoolB\' found no super class"} |
| } | | } |
| }, | | }, |
| ["err_range_on_array_parameter"]={ | | ["err_module_odr_violation_objc_method"]={ |
| [i]="err_range_on_array_parameter", | | [i]="err_module_odr_violation_objc_method", |
| [h]="cannot build range expression with array function parameter %0 since parameter with array type %1 is treated as pointer type %2", | | [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"}}, |
| [g]="cannot build range expression with array function parameter A since parameter with array type B is treated as pointer type C", | | [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"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="cannot build range expression with array function parameter (.*?) since parameter with array type (.*?) is treated as pointer type (.*?)", | | [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 (.*?))", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,p,a}}, |
| [c]={"0825469126d7",1381529764,"Improve the error message for attempting to build a for range loop using a","Improve the error message for attempting to build a for range loop using a\nfunction parameter that has array type. Such a parameter will be treated as\na pointer type instead, resulting in a missing begin function error is a\nsuggestion to dereference the pointer. This provides a different,\nmore informative diagnostic as well as point to the parameter declaration.\n\nllvm-svn: 192512"}, | | [c]={Qb,1643408541,Pb,Vb}, |
| [j]={{Z,2926,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n // ...\n if (RangeVarType->isDependentType()) {\n // ...\n } else if (!BeginDeclStmt.get()) {\n // ...\n if (const ArrayType *UnqAT = RangeType->getAsArrayTypeUnsafe()) {\n // ...\n } else {\n // ...\n if (Kind == BFRK_Build && RangeStatus == FRS_NoViableFunction && BEFFailure == BEF_begin) {\n // If the range is being built from an array parameter, emit a\n // a diagnostic that it is being treated as a pointer.\n if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Range)) {\n if (ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n // ...\n if (PointerTy->isPointerType() && ArrayTy->isArrayType()) {\n Diag(Range->getBeginLoc(), diag::err_range_on_array_parameter) << RangeLoc << PVD << ArrayTy << PointerTy;"}}, | | [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; };"}} |
| [l]={
| |
| ["clang/test/SemaCXX/for-range-examples.cpp"]={"clang/test/SemaCXX/for-range-examples.cpp:198:19: error: cannot build range expression with array function parameter \'arr\' since parameter with array type \'int[]\' is treated as pointer type \'int *\'","clang/test/SemaCXX/for-range-examples.cpp:209:19: error: cannot build range expression with array function parameter \'arr\' since parameter with array type \'vector[]\' is treated as pointer type \'vector *\'"}
| |
| }
| |
| }, | | }, |
| ["err_raw_delim_too_long"]={ | | ["err_module_odr_violation_objc_property"]={ |
| [i]="err_raw_delim_too_long", | | [i]={{nil,p,"err_module_odr_violation_objc_property"}}, |
| [h]="raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string", | | [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"}}, |
| [g]="raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string", | | [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"}}}}}, |
| [b]=k, | | [b]=k, |
| [e]="raw string delimiter longer than 16 characters; use PREFIX\\( \\)PREFIX to delimit raw string", | | [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)", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]={{nil,p,a}}, |
| [c]={"54edccafc5e3",1313035575,"Add support for C++0x raw string literals.","Add support for C++0x raw string literals.\n\nllvm-svn: 137298"}, | | [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"}, |
| [j]={{"clang/lib/Lex/Lexer.cpp",2158,"/// LexRawStringLiteral - Lex the remainder of a raw string literal, after\n/// having lexed R\", LR\", u8R\", uR\", or UR\".\nbool Lexer::LexRawStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n // ...\n // If the last character was not a \'(\', then we didn\'t lex a valid delimiter.\n if (CurPtr[PrefixLen] != \'(\') {\n if (!isLexingRawMode()) {\n // ...\n if (PrefixLen == 16) {\n Diag(PrefixEnd, diag::err_raw_delim_too_long);"}}, | | [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; };"}} |
| [l]={
| |
| ["clang/test/Lexer/cxx0x_raw_string_delim_length.cpp"]={"clang/test/Lexer/cxx0x_raw_string_delim_length.cpp:7:38: error: raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string"}
| |
| }
| |
| }, | | }, |
| ["err_readonly_message_assignment"]={ | | ["err_module_odr_violation_record"]={ |
| [i]="err_readonly_message_assignment", | | [i]="err_module_odr_violation_record", |
| [h]="assigning to \'readonly\' return result of an Objective-C message not allowed", | | [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"}}, |
| [g]="assigning to \'readonly\' return result of an Objective-C message not allowed", | | [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}}}}, |
| [b]=k, | | [b]=k, |
| [e]="assigning to \'readonly\' return result of an Objective\\-C message not allowed", | | [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|)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,p,a},{s,s,X}}, |
| [c]={wb,1480718311,vb,tb}, | | [c]={Qb,1643408541,Pb,Vb}, |
| [j]={{n,14373,"/// 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_InvalidMessageExpression:\n DiagID = diag::err_readonly_message_assignment;"}}, | | [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]={ |
| ["clang/test/SemaObjC/assign-rvalue-message.m"]={"clang/test/SemaObjC/assign-rvalue-message.m:23:18: error: assigning to \'readonly\' return result of an Objective-C message not allowed"} | | [hc]={ |
| | [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", |
| | [3]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:135:17: error: \'StaticAssert::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found static assert with condition", |
| | [4]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:442:8: error: \'Method::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'B\'", |
| | [5]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:458:8: error: \'Method::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is not static", |
| | [6]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:474:8: error: \'Method::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is not virtual", |
| | [7]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:490:16: error: \'Method::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is virtual", |
| | [8]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:505:8: error: \'Method::S6\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is not inline", |
| | [9]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:520:8: error: \'Method::S7\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is not volatile", |
| | [10]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:536:8: error: \'Method::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is not const", |
| | [11]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:597:8: error: \'Method::S12\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter without a default argument", |
| | [12]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:611:8: error: \'Method::S13\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter with a default argument", |
| | [13]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:697:7: error: \'MethodBody::S2\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'BothBodies\' with body", |
| | [14]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:711:7: error: \'MethodBody::S3\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'FirstBody\' with body", |
| | [15]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:725:7: error: \'MethodBody::S4\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'SecondBody\' with no body", |
| | [16]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:743:7: error: \'MethodBody::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'FirstBodySecondOutOfLine\' with no body", |
| | [17]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:754:7: error: \'MethodBody::S6\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'FirstOutOfLineSecondBody\' with no body", |
| | [18]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:789:7: error: \'MethodBody::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'FirstBodySecondOutOfLine\' with no body", |
| | [19]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:800:7: error: \'MethodBody::S9\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'FirstOutOfLineSecondBody\' with no body", |
| | [20]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:816:3: error: \'MethodBody::S10\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found constructor is deleted", |
| | [21]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:831:3: error: \'MethodBody::S11\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found constructor is defaulted", |
| | [22]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:886:8: error: \'Constructor::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'foo\'", |
| | [23]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:945:3: error: \'Destructor::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found constructor", |
| | [24]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:961:3: error: \'Destructor::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found destructor is not virtual", |
| | [25]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1861:8: error: \'TemplateArgument::S7\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'run\' with no template arguments", |
| | [26]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1881:19: error: \'TemplateArgument::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'run\' with 2 template arguments", |
| | [27]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1899:19: error: \'TemplateArgument::S9\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'run\' with \'b\' for 1st template argument", |
| | [28]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1917:19: error: \'TemplateArgument::S10\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'run\' with \'b\' for 2nd template argument", |
| | [29]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1935:19: error: \'TemplateArgument::S11\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'run\' with 3 template arguments", |
| | [30]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1951:20: error: \'TemplateArgument::S12\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'f\' with 2 for 1st template argument", |
| | [31]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1981:20: error: \'TemplateArgument::S14\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'f\' with 0 for 1st template argument", |
| | [32]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2027:20: error: \'TemplateArgument::S17\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'f\' with nullptr for 1st template argument", |
| | [33]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2077:20: error: \'TemplateArgument::S20\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'f\' with 18446744073709551615 for 1st template argument", |
| | [34]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2399:3: error: \'Friend::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found friend \'T1\'", |
| | [35]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2415:3: error: \'Friend::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found friend \'struct T2\'", |
| | [36]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2430:3: error: \'Friend::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found friend function", |
| | [37]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2444:3: error: \'Friend::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found friend function \'T5b\'", |
| | [38]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2990:25: error: \'FunctionTemplate::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter named \'y\'", |
| | [39]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3033:30: error: \'FunctionTemplate::S6\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with no default argument", |
| | [40]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3047:36: error: \'FunctionTemplate::S7\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument \'int\'", |
| | [41]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3065:46: error: \'FunctionTemplate::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument \'T8\'", |
| | [42]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3081:41: error: \'FunctionTemplate::S9\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with no default argument", |
| | [43]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3096:46: error: \'FunctionTemplate::S10\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with one type", |
| | [44]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3111:39: error: \'FunctionTemplate::S11\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with no name", |
| | [45]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3126:32: error: \'FunctionTemplate::S12\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 2 template parameters", |
| | [46]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3141:32: error: \'FunctionTemplate::S13\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument \'void\'", |
| | [47]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3155:25: error: \'FunctionTemplate::S14\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with no default argument", |
| | [48]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3169:32: error: \'FunctionTemplate::S15\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument", |
| | [49]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3183:29: error: \'FunctionTemplate::S16\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument", |
| | [50]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3197:33: error: \'FunctionTemplate::S17\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument 1 + 1", |
| | [51]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3212:23: error: \'FunctionTemplate::S18\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with one type", |
| | [52]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3228:28: error: \'FunctionTemplate::S19\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter being a template parameter pack", |
| | [53]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3244:28: error: \'FunctionTemplate::S20\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter being a template parameter pack", |
| | [54]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3260:41: error: \'FunctionTemplate::S21\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter not being a template parameter pack", |
| | [55]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3277:25: error: \'FunctionTemplate::S22\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter being a type template parameter", |
| | [56]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3295:23: error: \'FunctionTemplate::S23\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter being a non-type template parameter", |
| | [57]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3313:41: error: \'FunctionTemplate::S24\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter being a template template parameter", |
| | [58]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:4633:10: error: \'DefaultArguments::S::R\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'foo\' with 1st parameter with a default argument", |
| | [59]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:4652:8: error: \'DefaultArguments::Bravo\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'charlie\' with 1st parameter with a default argument" |
| | } |
| } | | } |
| }, | | }, |
| ["err_realimag_invalid_type"]={ | | ["err_module_odr_violation_referenced_protocols"]={ |
| [i]="err_realimag_invalid_type", | | [i]={{nil,p,"err_module_odr_violation_referenced_protocols"}}, |
| [h]="invalid type %0 to %1 operator", | | [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"}}, |
| [g]="invalid type A to B operator", | | [g]={{nil,p,{Z,{R,J},ab,{{"E referenced ",{"protocol","protocols"}},"E referenced protocol with name F"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="invalid type (.*?) to (.*?) operator", | | [e]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(.*?) referenced (?:protocol|protocols)|(.*?) referenced protocol with name (.*?))", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,p,a}}, |
| [c]={u,1237025389,s,t}, | | [c]={Qb,1643408541,Pb,Vb}, |
| [j]={{n,4914,"static QualType CheckRealImagOperand(Sema &S, ExprResult &V, SourceLocation Loc, bool IsReal) {\n // ...\n S.Diag(Loc, diag::err_realimag_invalid_type) << V.get()->getType() << (IsReal ? \"__real\" : \"__imag\");"}}, | | [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; };"}} |
| [l]={
| |
| ["clang/test/SemaCXX/unary-real-imag.cpp"]={"clang/test/SemaCXX/unary-real-imag.cpp:4:9: error: invalid type \'A\' to __real operator","clang/test/SemaCXX/unary-real-imag.cpp:5:9: error: invalid type \'A\' to __imag operator"}
| |
| }
| |
| }, | | }, |
| ["err_record_with_pointers_kernel_param"]={ | | ["err_module_odr_violation_template_parameter"]={ |
| [i]="err_record_with_pointers_kernel_param", | | [i]={{nil,t,"err_module_odr_violation_template_parameter"}}, |
| [h]="%select{struct|union}0 kernel parameters may not contain pointers", | | [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"}}, |
| [g]={{nil,nil,{{Gc,Nc}," kernel parameters may not contain pointers"}}}, | | [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"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="(?:struct|union) kernel parameters may not contain pointers", | | [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)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,p,a},{s,t,X}}, |
| [c]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL","Error on more illegal kernel argument types for OpenCL\n\nbool, half, pointers and structs / unions containing any\nof these are not allowed. Does not yet reject size_t and\nrelated integer types that are also disallowed.\n\nllvm-svn: 186908"}, | | [c]={"498117bf11d8",1503456239,"[ODRHash] Diagnose differing template parameters.","[ODRHash] Diagnose differing template parameters.\n\nllvm-svn: 311519"}, |
| [j]={{w,9578,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n // ...\n do {\n // ...\n for (const auto *FD : RD->fields()) {\n // ...\n // OpenCL v1.2 s6.9.p:\n // Arguments to kernel functions that are declared to be a struct or union\n // do not allow OpenCL objects to be passed as elements of the struct or\n // union. This restriction was lifted in OpenCL v2.0 with the introduction\n // of SVM.\n if (ParamType == PtrKernelParam || ParamType == PtrPtrKernelParam || ParamType == InvalidAddrSpacePtrKernelParam) {\n S.Diag(Param->getLocation(), diag::err_record_with_pointers_kernel_param) << PT->isUnionType() << PT;"}}, | | [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]={ |
| ["clang/test/SemaOpenCL/invalid-kernel-parameters.cl"]={"clang/test/SemaOpenCL/invalid-kernel-parameters.cl:98:44: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:105:39: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:119:43: error: union kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:130:56: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:147:78: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:207:85: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:207:106: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:213:44: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:219:50: error: struct kernel parameters may not contain pointers"} | | [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"} |
| } | | } |
| }, | | }, |
| ["err_recursive_default_argument"]={ | | ["err_module_odr_violation_typedef"]={ |
| [i]="err_recursive_default_argument", | | [i]={{nil,s,"err_module_odr_violation_typedef"}}, |
| [h]="recursive evaluation of default argument", | | [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"}}, |
| [g]="recursive evaluation of default argument", | | [g]={{nil,s,{Z,{R,J},ab,{{{ob,Nb}," name F"},{{ob,Nb}," F with underlying type G"}}}}}, |
| [b]=k, | | [b]=k, |
| [e]="recursive evaluation of default argument", | | [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 (.*?))", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,p,a},{s,s,X}}, |
| [c]={"b82a9401dfb7",1465872956,"Detect recursive default argument definition","Detect recursive default argument definition\n\nIf definition of default function argument uses itself, clang crashed,\nbecause corresponding function parameter is not associated with the default\nargument yet. With this fix clang emits appropriate error message.\n\nThis change fixes PR28105.\n\nDifferential Revision: http://reviews.llvm.org/D21301\n\nllvm-svn: 272623"}, | | [c]={Qb,1643408541,Pb,Vb}, |
| [j]={{n,6027,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n if (Param->hasUnparsedDefaultArg()) {\n // ...\n // If we\'ve already cleared out the location for the default argument,\n // that means we\'re parsing it right now.\n if (!UnparsedDefaultArgLocs.count(Param)) {\n Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"},{"clang/lib/Sema/SemaTemplateInstantiate.cpp",2966,"/// Substitute the given template arguments into the default argument.\nbool Sema::SubstDefaultArgument(SourceLocation Loc, ParmVarDecl *Param, const MultiLevelTemplateArgumentList &TemplateArgs, bool ForCallExpr) {\n // ...\n if (Inst.isAlreadyInstantiating()) {\n Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"}}, | | [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]={ |
| ["clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp:46:17: error: recursive evaluation of default argument"} | | ["clang/test/Modules/odr_hash.mm"]={"build/tools/clang/test/Modules/Output/odr_hash.mm.tmp/Inputs/second.h:207:9: error: \'Types::ObjCObject::Invalid3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found type alias \'T\' with underlying type \'Interface2<P1>\'"} |
| } | | } |
| }, | | }, |
| ["err_recursive_superclass"]={ | | ["err_module_odr_violation_variable"]={ |
| [i]="err_recursive_superclass", | | [i]={{nil,s,"err_module_odr_violation_variable"}}, |
| [h]="trying to recursively use %0 as superclass of %1", | | [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"}}, |
| [g]="trying to recursively use A as superclass of B", | | [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"}}}}}}, |
| [b]=k, | | [b]=k, |
| [e]="trying to recursively use (.*?) as superclass of (.*?)", | | [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))", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,p,a},{s,s,X}}, |
| [c]={"5582f231f2b2",1247177306,"don\'t crash if class is using itself as its super class.","don\'t crash if class is using itself as its super class.\n\nllvm-svn: 75178"}, | | [c]={Qb,1643408541,Pb,Vb}, |
| [j]={{Kb,570,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n // ...\n if (declaresSameEntity(PrevDecl, IDecl)) {\n Diag(SuperLoc, diag::err_recursive_superclass) << SuperName << ClassName << SourceRange(AtInterfaceLoc, ClassLoc);"}}, | | [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]={ |
| ["clang/test/SemaObjC/undef-superclass-1.m"]={"clang/test/SemaObjC/undef-superclass-1.m:29:29: error: trying to recursively use \'RecursiveClass\' as superclass of \'RecursiveClass\'"} | | [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"} |
| } | | } |
| }, | | }, |
| ["err_redeclaration_different_type"]={ | | ["err_module_prebuilt"]={ |
| [i]="err_redeclaration_different_type", | | [i]="err_module_prebuilt", |
| [h]="redeclaration of %0 with a different type%diff{: $ vs $|}1,2", | | [h]="error in loading module \'%0\' from prebuilt module path", |
| [g]={{nil,nil,{"redeclaration of A with a different type",{": B vs C",a}}}}, | | [g]="error in loading module \'A\' from prebuilt module path", |
| | [b]=T, |
| | [e]="error in loading module \'(.*?)\' from prebuilt module path", |
| | [d]=a, |
| | [f]=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"}, |
| | [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"]={ |
| | [i]="err_module_private_local", |
| | [h]="%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__"}}}, |
| [b]=k, | | [b]=k, |
| [e]="redeclaration of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)", | | [e]="(?:local variable|parameter|typedef) (.*?) cannot be declared __module_private__", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=M, |
| [c]={"38a50c0a1620",1436904529,"[Sema] Emit a better diagnostic when variable redeclarations disagree","[Sema] Emit a better diagnostic when variable redeclarations disagree\n\nWe referred to all declaration in definitions in our diagnostic messages\nwhich is can be inaccurate. Instead, classify the declaration and emit\nan appropriate diagnostic for the new declaration and an appropriate\nnote pointing to the old one.\n\nThis fixes PR24116.\n\nllvm-svn: 242190"}, | | [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"}, |
| [j]={{w,4383,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n // ...\n S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}}, | | [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]={ |
| ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:162:14: error: redeclaration of \'n_var\' with a different type: \'double\' vs \'int\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:214:24: error: redeclaration of \'arr\' with a different type: \'int[3]\' vs \'int[2]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:149:14: error: redeclaration of \'arrX\' with a different type: \'int[4]\' vs \'int[3]\'"} | | ["clang/test/Modules/module-private.cpp"]={"clang/test/Modules/module-private.cpp:79:47: error: parameter \'param\' cannot be declared __module_private__","clang/test/Modules/module-private.cpp:80:49: error: local variable \'local\' cannot be declared __module_private__","clang/test/Modules/module-private.cpp:82:27: error: local variable \'[x, y]\' cannot be declared __module_private__","clang/test/Modules/module-private.cpp:86:34: error: typedef \'local_typedef\' cannot be declared __module_private__","clang/test/Modules/module-private.cpp:89:42: error: parameter \'\' cannot be declared __module_private__"} |
| } | | } |
| }, | | }, |
| ["err_redeclaration_non_exported"]={ | | ["err_module_private_local_class"]={ |
| [i]={{nil,C,"err_redeclaration_non_exported"}}, | | [i]="err_module_private_local_class", |
| [h]={{nil,y,"cannot export redeclaration %0 here since the previous declaration %select{is not exported|has internal linkage|has module linkage}1"},{C,C,"cannot export redeclaration %0 here since the previous declaration is not exported"}}, | | [h]="local %select{struct|interface|union|class|enum}0 cannot be declared __module_private__", |
| [g]={{nil,y,{"cannot export redeclaration A here since the previous declaration ",{"is not exported","has internal linkage","has module linkage"}}},{C,C,"cannot export redeclaration A here since the previous declaration is not exported"}}, | | [g]={{nil,nil,{"local ",{"struct","interface","union",ib,"enum"}," cannot be declared __module_private__"}}}, |
| [b]=k, | | [b]=k, |
| [e]="cannot export redeclaration (.*?) here since the previous declaration (?:is not exported|has internal linkage|has module linkage)", | | [e]="local (?:struct|interface|union|class|enum) cannot be declared __module_private__", |
| [f]=a, | | [d]=a, |
| [d]={{nil,C,m}}, | | [f]=M, |
| [c]={hd,1616787805,gd,fd}, | | [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"}, |
| [j]={{w,1735,"// [module.interface]p6:\n// A redeclaration of an entity X is implicitly exported if X was introduced by\n// an exported declaration; otherwise it shall not be exported.\nbool Sema::CheckRedeclarationExported(NamedDecl *New, NamedDecl *Old) {\n // ...\n Diag(New->getLocation(), diag::err_redeclaration_non_exported) << New << S;"}}, | | [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]={ |
| ["clang/test/CXX/module/module.interface/p6.cpp"]={"clang/test/CXX/module/module.interface/p6.cpp:12:15: error: cannot export redeclaration \'S\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:20:15: error: cannot export redeclaration \'X\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:23:15: error: cannot export redeclaration \'Z\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:32:15: error: cannot export redeclaration \'B\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:33:15: error: cannot export redeclaration \'C\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:40:8: error: cannot export redeclaration \'TemplS\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:46:8: error: cannot export redeclaration \'TemplS2\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:49:13: error: cannot export redeclaration \'baz\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:54:13: error: cannot export redeclaration \'bar\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:66:16: error: cannot export redeclaration \'f1\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:72:6: error: cannot export redeclaration \'TemplFunc\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:79:6: error: cannot export redeclaration \'TemplFunc2\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:85:9: error: cannot export redeclaration \'TemplFunc3\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:88:12: error: cannot export redeclaration \'var\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:93:3: error: cannot export redeclaration \'TemplVar\' here since the previous declaration has module linkage"} | | ["clang/test/Modules/module-private.cpp"]={"clang/test/Modules/module-private.cpp:84:3: error: local struct cannot be declared __module_private__"} |
| } | | } |
| }, | | }, |
| ["err_redefinition"]={ | | ["err_module_private_specialization"]={ |
| [i]="err_redefinition", | | [i]="err_module_private_specialization", |
| [h]="redefinition of %0", | | [h]="%select{template|partial|member}0 specialization cannot be declared __module_private__", |
| [g]="redefinition of A", | | [g]={{nil,nil,{{"template","partial","member"}," specialization cannot be declared __module_private__"}}}, |
| [b]=k, | | [b]=k, |
| [e]="redefinition of (.*?)", | | [e]="(?:template|partial|member) specialization cannot be declared __module_private__", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=M, |
| [c]={u,1237025389,s,t}, | | [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"}, |
| [j]={{w,2719,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'. Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n // ...\n if (getLangOpts().CPlusPlus) {\n // ...\n Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{w,3042,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n // ...\n for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n // ...\n if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n // ...\n } else {\n // ...\n unsigned Diag = cast<VarDecl>(Def)->isThisDeclarationADefinition() == VarDecl::TentativeDefinition ? diag::err_alias_after_tentative : diag::err_redefinition;"},{w,3044,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n // ...\n for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n // ...\n if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n // ...\n } else {\n // ...\n if (Diag == diag::err_redefinition)"},{w,4683,"/// 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 // FIXME: The test for external storage here seems wrong? We still\n // need to check for mismatches.\n if (!New->hasExternalStorage() && !New->isFileVarDecl() &&\n // ...\n Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{w,4837,"/// We\'ve just determined that \\p Old and \\p New both appear to be definitions\n/// of the same variable. Either diagnose or fix the problem.\nbool Sema::checkVarDeclRedefinition(VarDecl *Old, VarDecl *New) {\n if (!hasVisibleDefinition(Old) && (New->getFormalLinkage() == InternalLinkage || New->isInline() || isa<VarTemplateSpecializationDecl>(New) || New->getDescribedVarTemplate() || New->getNumTemplateParameterLists() || New->getDeclContext()->isDependentContext())) {\n // ...\n } else {\n Diag(New->getLocation(), diag::err_redefinition) << New;"},{w,15170,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n // ...\n if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n // ...\n else\n Diag(FD->getLocation(), diag::err_redefinition) << FD;"},{w,17369,"/// 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 if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n // ...\n } else if (!IsExplicitSpecializationAfterInstantiation) {\n // A redeclaration in function prototype scope in C isn\'t\n // visible elsewhere, so merely issue a warning.\n if (!getLangOpts().CPlusPlus && S->containedInPrototypeScope())\n // ...\n else\n Diag(NameLoc, diag::err_redefinition) << Name;"},{w,19504,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n // ...\n if (PrevDecl) {\n // ...\n if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n if (isa<EnumConstantDecl>(PrevDecl))\n // ...\n else\n Diag(IdLoc, diag::err_redefinition) << Id;"},{H,909,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n // ...\n // Build the BindingDecls.\n for (auto &B : D.getDecompositionDeclarator().bindings()) {\n // ...\n if (!Previous.empty()) {\n // ...\n Diag(B.NameLoc, diag::err_redefinition) << B.Name;"},{H,12947,"/// Checks that the given using declaration is not an invalid\n/// redeclaration. Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n // ...\n // C++03 [namespace.udecl]p8:\n // C++0x [namespace.udecl]p10:\n // A using-declaration is a declaration and can therefore be used\n // repeatedly where (and only where) multiple declarations are\n // allowed.\n //\n // That\'s in non-member contexts.\n if (!CurContext->getRedeclContext()->isRecord()) {\n // A dependent qualifier outside a class can only ever resolve to an\n // enumeration type. Therefore it conflicts with any other non-type\n // declaration in the same scope.\n // FIXME: How should we check for dependent type-type conflicts at block\n // scope?\n if (Qual->isDependent() && !HasTypenameKeyword) {\n for (auto *D : Prev) {\n if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) {\n // ...\n Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{H,13443,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n // ...\n if (PrevR.isSingleResult()) {\n // ...\n if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n // ...\n } else if (isVisible(PrevDecl)) {\n unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{H,16762,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n // ...\n if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(), LookupOrdinaryName, ForVisibleRedeclaration)) {\n // ...\n if (isDeclInScope(PrevDecl, CurContext, S)) {\n Diag(D.getIdentifierLoc(), diag::err_redefinition) << D.getIdentifier();"},{n,5565,"ExprResult Sema::ActOnOMPIteratorExpr(Scope *S, SourceLocation IteratorKwLoc, SourceLocation LLoc, SourceLocation RLoc, ArrayRef<OMPIteratorData> Data) {\n // ...\n for (const OMPIteratorData &D : Data) {\n // ...\n if (S) {\n // ...\n if (!Previous.empty()) {\n // ...\n Diag(D.DeclIdentLoc, diag::err_redefinition) << VD->getDeclName();"},{r,2028,"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 (PrevClassTemplate) {\n // ...\n // Check for redefinition of this class template.\n if (TUK == TUK_Definition) {\n if (TagDecl *Def = PrevRecordDecl->getDefinition()) {\n // ...\n if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n // ...\n } else {\n Diag(NameLoc, diag::err_redefinition) << Name;"},{r,8904,"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 // Check that this isn\'t a redefinition of this specialization.\n if (TUK == TUK_Definition) {\n // ...\n if (Def && SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n // ...\n } else if (Def) {\n // ...\n Diag(TemplateNameLoc, diag::err_redefinition) << Specialization << Range;"},{r,9077,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n // ...\n if (hasReachableDefinition(OldConcept) && IsRedefinitionInModule(NewDecl, OldConcept)) {\n Diag(NewDecl->getLocation(), diag::err_redefinition) << NewDecl->getDeclName();"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",3838,"Decl *TemplateDeclInstantiator::VisitClassTemplateSpecializationDecl(ClassTemplateSpecializationDecl *D) {\n // ...\n // If PrevDecl was a definition and D is also a definition, diagnose.\n // This happens in cases like:\n //\n // template<typename T, typename U>\n // struct Outer {\n // template<typename X> struct Inner;\n // template<> struct Inner<T> {};\n // template<> struct Inner<U> {};\n // };\n //\n // Outer<int, int> outer; // error: the explicit specializations of Inner\n // // have the same signature.\n if (PrevDecl && PrevDecl->getDefinition() && D->isThisDeclarationADefinition()) {\n SemaRef.Diag(D->getLocation(), diag::err_redefinition) << PrevDecl;"}},
| | [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]={ |
| ["clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp"]={"clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:6:9: error: redefinition of \'binding_a\'"} | | ["clang/test/Modules/module-private.cpp"]={"clang/test/Modules/module-private.cpp:56:12: error: template specialization cannot be declared __module_private__","clang/test/Modules/module-private.cpp:67:57: error: member specialization cannot be declared __module_private__","clang/test/Modules/module-private.cpp:68:54: error: member specialization cannot be declared __module_private__","clang/test/Modules/module-private.cpp:71:27: error: template specialization cannot be declared __module_private__","clang/test/Modules/module-private.cpp:74:27: error: partial specialization cannot be declared __module_private__"} |
| } | | } |
| }, | | }, |
| ["err_redefinition_different_concept"]={ | | ["err_module_rebuild_finalized"]={ |
| [i]={{nil,y,"err_redefinition_different_concept"}}, | | [i]={{nil,u,"err_module_rebuild_finalized"}}, |
| [h]={{nil,y,"redefinition of concept %0 with different template parameters or requirements"}}, | | [h]={{nil,u,"cannot rebuild module \'%0\' as it is already finalized"}}, |
| [g]={{nil,y,"redefinition of concept A with different template parameters or requirements"}}, | | [g]={{nil,u,"cannot rebuild module \'A\' as it is already finalized"}}, |
| [b]=k, | | [b]=T, |
| [e]="redefinition of concept (.*?) with different template parameters or requirements", | | [e]="cannot rebuild module \'(.*?)\' as it is already finalized", |
| [f]=a, | | [d]=a, |
| [d]={{nil,y,m}}, | | [f]={{nil,u,y}}, |
| [c]={ab,1625925174,bb,cb}, | | [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"}, |
| [j]={{r,9069,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n // ...\n if (!IsSame) {\n Diag(NewDecl->getLocation(), diag::err_redefinition_different_concept) << NewDecl->getDeclName();"}} | | [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_redefinition_different_kind"]={ | | ["err_module_redeclaration"]={ |
| [i]="err_redefinition_different_kind", | | [i]={{nil,t,"err_module_redeclaration"}}, |
| [h]="redefinition of %0 as different kind of symbol", | | [h]={{nil,t,"translation unit contains multiple module declarations"}}, |
| [g]="redefinition of A as different kind of symbol", | | [g]={{nil,t,"translation unit contains multiple module declarations"}}, |
| [b]=k, | | [b]=k, |
| [e]="redefinition of (.*?) as different kind of symbol", | | [e]="translation unit contains multiple module declarations", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,t,M}}, |
| [c]={u,1237025389,s,t},
| | [c]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration.","[Modules TS] Diagnose missing/duplicate module-declaration.\n\nllvm-svn: 315397"}, |
| [j]={{w,2624,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'. Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n // ...\n if (!Old) {\n Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{w,3661,"/// 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 (!Old) {\n if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n // ...\n } else {\n Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{w,4557,"/// 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) {\n Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{w,17460,"/// 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 // ...\n } else {\n // Use a better diagnostic if an elaborated-type-specifier\n // found the wrong kind of type on the first\n // (non-redeclaration) lookup.\n if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n // ...\n } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n // ...\n } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n // ...\n } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n // ...\n } else {\n // ...\n Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{H,11434,"/// ActOnStartNamespaceDef - This is called at the start of a namespace\n/// definition.\nDecl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope, SourceLocation InlineLoc, SourceLocation NamespaceLoc, SourceLocation IdentLoc, IdentifierInfo *II, SourceLocation LBrace, const ParsedAttributesView &AttrList, UsingDirectiveDecl *&UD, bool IsNested) {\n // ...\n if (II) {\n // ...\n if (PrevNS) {\n // ...\n } else if (PrevDecl) {\n // ...\n Diag(Loc, diag::err_redefinition_different_kind) << II;"},{H,12948,"/// Checks that the given using declaration is not an invalid\n/// redeclaration. Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n // ...\n // C++03 [namespace.udecl]p8:\n // C++0x [namespace.udecl]p10:\n // A using-declaration is a declaration and can therefore be used\n // repeatedly where (and only where) multiple declarations are\n // allowed.\n //\n // That\'s in non-member contexts.\n if (!CurContext->getRedeclContext()->isRecord()) {\n // A dependent qualifier outside a class can only ever resolve to an\n // enumeration type. Therefore it conflicts with any other non-type\n // declaration in the same scope.\n // FIXME: How should we check for dependent type-type conflicts at block\n // scope?\n if (Qual->isDependent() && !HasTypenameKeyword) {\n for (auto *D : Prev) {\n if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) {\n // ...\n Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{H,13317,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n // ...\n if (TemplateParamLists.size()) {\n // ...\n if (!Previous.empty()) {\n // ...\n if (!OldDecl && !Invalid) {\n Diag(UsingLoc, diag::err_redefinition_different_kind) << Name.Identifier;"},{H,13444,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n // ...\n if (PrevR.isSingleResult()) {\n // ...\n if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n // ...\n } else if (isVisible(PrevDecl)) {\n unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{Kb,610,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n // ...\n if (declaresSameEntity(PrevDecl, IDecl)) {\n // ...\n } else {\n // ...\n if (PrevDecl && !SuperClassDecl) {\n // ...\n // This handles the following case:\n //\n // typedef int SuperClass;\n // @interface MyClass : SuperClass {} @end\n //\n if (!SuperClassDecl) {\n Diag(SuperLoc, diag::err_redefinition_different_kind) << SuperName;"},{Kb,991,"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 (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{Kb,1993,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n // ...\n if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{Kb,2026,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n // ...\n if (SuperClassname) {\n // ...\n if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n Diag(SuperClassLoc, diag::err_redefinition_different_kind) << SuperClassname;"},{Kb,3082,"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 (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n // ...\n if (!TDD || !TDD->getUnderlyingType()->isObjCObjectType()) {\n Diag(AtClassLoc, diag::err_redefinition_different_kind) << IdentList[i];"},{r,2042,"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 (PrevClassTemplate) {\n // ...\n } else if (PrevDecl) {\n // ...\n Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{r,9060,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n // ...\n if (!OldConcept) {\n // ...\n Diag(NewDecl->getLocation(), diag::err_redefinition_different_kind) << NewDecl->getDeclName();"}}, | | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp"]={"clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:8:10: error: redefinition of \'binding_b\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:11:28: error: redefinition of \'vartemplate_a\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:13:10: error: redefinition of \'vartemplate_b\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:16:24: error: redefinition of \'aliastemplate_a\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:18:10: error: redefinition of \'aliastemplate_b\' as different kind of symbol"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_redefinition_different_namespace_alias"]={ | | ["err_module_redefinition"]={ |
| [i]="err_redefinition_different_namespace_alias", | | [i]="err_module_redefinition", |
| [h]="redefinition of %0 as an alias for a different namespace", | | [h]="redefinition of module \'%0\'", |
| [g]="redefinition of A as an alias for a different namespace", | | [g]="redefinition of module \'A\'", |
| [b]=k, | | [b]=k, |
| [e]="redefinition of (.*?) as an alias for a different namespace", | | [e]="redefinition of module \'(.*?)\'", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=M, |
| [c]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes","[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes\nmerging of namespace aliases across modules and improves source fidelity.\nIncidentally also fixes PR20816.\n\nllvm-svn: 217103"}, | | [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"}, |
| [j]={{H,13435,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n // ...\n if (PrevR.isSingleResult()) {\n // ...\n if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n // We already have an alias with the same name that points to the same\n // namespace; check that it matches.\n if (AD->getNamespace()->Equals(getNamespaceDecl(ND))) {\n // ...\n } else if (isVisible(PrevDecl)) {\n Diag(AliasLoc, diag::err_redefinition_different_namespace_alias) << Alias;"}}, | | [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;"}} |
| [l]={
| |
| ["clang/test/SemaCXX/namespace-alias.cpp"]={"clang/test/SemaCXX/namespace-alias.cpp:43:13: error: redefinition of \'B\' as an alias for a different namespace"}
| |
| }
| |
| }, | | }, |
| ["err_redefinition_different_type"]={ | | ["err_module_self_import"]={ |
| [i]="err_redefinition_different_type", | | [i]="err_module_self_import", |
| [h]="redefinition of %0 with a different type%diff{: $ vs $|}1,2", | | [h]="import of module \'%0\' appears within same top-level module \'%1\'", |
| [g]={{nil,nil,{"redefinition of A with a different type",{": B vs C",a}}}}, | | [g]="import of module \'A\' appears within same top-level module \'B\'", |
| [b]=k, | | [b]=k, |
| [e]="redefinition of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)", | | [e]="import of module \'(.*?)\' appears within same top\\-level module \'(.*?)\'", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=M, |
| [c]={u,1237025389,s,t}, | | [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"}, |
| [j]={{w,4382,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n // ...\n S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}}, | | [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;"}} |
| | }, |
| | ["err_module_self_import_cxx20"]={ |
| | [i]={{nil,s,"err_module_self_import_cxx20"}}, |
| | [h]={{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"}}}}, |
| | [b]=k, |
| | [e]="import of module \'(.*?)\' appears within its own (?:interface|implementation)", |
| | [d]=a, |
| | [f]={{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"}, |
| | [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;"}} |
| | }, |
| | ["err_module_shadowed"]={ |
| | [i]={{nil,q,"err_module_shadowed"}}, |
| | [h]={{nil,q,"import of shadowed module \'%0\'"}}, |
| | [g]={{nil,q,"import of shadowed module \'A\'"}}, |
| | [b]=T, |
| | [e]="import of shadowed module \'(.*?)\'", |
| | [d]=a, |
| | [f]={{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"}, |
| | [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]={ |
| ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:173:9: error: redefinition of \'o_var\' with a different type: \'float\' vs \'int\'"} | | ["clang/test/Modules/shadow.m"]={"clang/test/Modules/Inputs/shadow/A2/module.modulemap:1:8: fatal error: import of shadowed module \'A\'"} |
| } | | } |
| }, | | }, |
| ["err_redefinition_different_typedef"]={ | | ["err_module_unable_to_hash_content"]={ |
| [i]="err_redefinition_different_typedef", | | [i]={{nil,n,"err_module_unable_to_hash_content"}}, |
| [h]="%select{typedef|type alias|type alias template}0 redefinition with different types%diff{ ($ vs $)|}1,2", | | [h]={{nil,n,"failed to hash content for \'%0\' because memory buffer cannot be retrieved"}}, |
| [g]={{nil,nil,{{Rc,Ic,"type alias template"}," redefinition with different types",{" (B vs C)",a}}}}, | | [g]={{nil,n,"failed to hash content for \'A\' because memory buffer cannot be retrieved"}}, |
| | [b]=k, |
| | [e]="failed to hash content for \'(.*?)\' because memory buffer cannot be retrieved", |
| | [d]=a, |
| | [f]={{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"}, |
| | [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"]={ |
| | [i]="err_module_unavailable", |
| | [h]="module \'%0\' %select{is incompatible with|requires}1 feature \'%2\'", |
| | [g]={{nil,nil,{"module \'A\' ",{"is incompatible with","requires"}," feature \'C\'"}}}, |
| [b]=k, | | [b]=k, |
| [e]="(?:typedef|type alias|type alias template) redefinition with different types(?: \\((.*?) vs (.*?)\\)|)", | | [e]="module \'(.*?)\' (?:is incompatible with|requires) feature \'(.*?)\'", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=y, |
| [c]={u,1237025389,s,t}, | | [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]={{w,2559,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n // ...\n if (OldType != NewType && !OldType->isDependentType() && !NewType->isDependentType() && !Context.hasSameType(OldType, NewType)) {\n // ...\n Diag(New->getLocation(), diag::err_redefinition_different_typedef) << Kind << NewType << OldType;"},{H,13343,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n // ...\n if (TemplateParamLists.size()) {\n // ...\n if (!Previous.empty()) {\n // ...\n if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {\n // ...\n if (!Invalid && !Context.hasSameType(OldTD->getUnderlyingType(), NewTD->getUnderlyingType())) {\n // ...\n Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef) << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();"}},
| | [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]={ |
| ["clang/test/SemaCXX/libstdcxx_common_type_hack.cpp"]={"clang/test/SemaCXX/libstdcxx_common_type_hack.cpp:31:7: error: type alias redefinition with different types (\'decltype(true ? std::declval<int>() : std::declval<int>())\' (aka \'int &&\') vs \'int\')"} | | ["clang/test/Modules/preprocess-unavailable.cpp"]={"clang/test/Modules/preprocess-unavailable.cpp:3:10: error: module \'a.b\' requires feature \'cplusplus11\'"} |
| } | | } |
| }, | | }, |
| ["err_redefinition_extern_inline"]={ | | ["err_module_unimported_use"]={ |
| [i]="err_redefinition_extern_inline", | | [i]="err_module_unimported_use", |
| [h]="redefinition of a \'extern inline\' function %0 is not supported in %select{C99 mode|C++}1", | | [h]="%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,{"redefinition of a \'extern inline\' function A is not supported in ",{"C99 mode","C++"}}}}, | | [g]={{nil,nil,{{jc,fc,Wb,"explicit specialization","partial specialization"}," of B must be imported from module \'C\' before it is required"}}}, |
| [b]=k, | | [b]=k, |
| [e]="redefinition of a \'extern inline\' function (.*?) is not supported in (?:C99 mode|C\\+\\+)", | | [e]="(?:declaration|definition|default argument|explicit specialization|partial specialization) of (.*?) must be imported from module \'(.*?)\' before it is required", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=M, |
| [c]={"a7d6e3d0f526",1283874661,"Provide a specific diagnostic when trying to redefine an \"extern","Provide a specific diagnostic when trying to redefine an \"extern\ninline\" function outside of GNU89 mode. Fixes\n<rdar://problem/6880464>.\n\nllvm-svn: 113204"}, | | [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"}, |
| [j]={{w,15167,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n // ...\n if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n Diag(FD->getLocation(), diag::err_redefinition_extern_inline) << FD << getLangOpts().CPlusPlus;"}}, | | [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]={ |
| ["clang/test/Sema/redefinition.c"]={"clang/test/Sema/redefinition.c:14:5: error: redefinition of a \'extern inline\' function \'g\' is not supported in C99 mode"} | | ["clang/test/Modules/submodules.cpp"]={"clang/test/Modules/submodules.cpp:10:1: error: declaration of \'remove_reference\' must be imported from module \'std.type_traits\' before it is required","clang/test/Modules/submodules.cpp:24:1: error: declaration of \'hash_map\' must be imported from module \'std.hash_map\' before it is required"} |
| } | | } |
| }, | | }, |
| ["err_redefinition_of_enumerator"]={ | | ["err_module_unimported_use_header"]={ |
| [i]="err_redefinition_of_enumerator", | | [i]="err_module_unimported_use_header", |
| [h]="redefinition of enumerator %0", | | [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"}}, |
| [g]="redefinition of enumerator A", | | [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"}}}, |
| [b]=k, | | [b]=k, |
| [e]="redefinition of enumerator (.*?)", | | [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", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=M, |
| [c]={u,1237025389,s,t}, | | [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"}, |
| [j]={{w,19502,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n // ...\n if (PrevDecl) {\n // ...\n if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n if (isa<EnumConstantDecl>(PrevDecl))\n Diag(IdLoc, diag::err_redefinition_of_enumerator) << Id;"}}, | | [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]={ |
| ["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:159:5: error: redefinition of enumerator \'PR15071_One\'"} | | ["clang/test/Modules/submodule-visibility-cycles.cpp"]={"clang/test/Modules/submodule-visibility-cycles.cpp:6:1: error: missing \'#include \"cycle2.h\"\'; \'C2\' must be declared before it is used"} |
| } | | } |
| }, | | }, |
| ["err_redefinition_of_label"]={ | | ["err_module_unimported_use_multiple"]={ |
| [i]="err_redefinition_of_label", | | [i]="err_module_unimported_use_multiple", |
| [h]="redefinition of label %0", | | [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", |
| [g]="redefinition of label A", | | [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"}}}, |
| [b]=k, | | [b]=k, |
| [e]="redefinition of label (.*?)", | | [e]="(?:declaration|definition|default argument|explicit specialization|partial specialization) of (.*?) must be imported from one of the following modules before it is required\\:(.*?)", |
| | [d]=a, |
| | [f]=M, |
| | [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"}, |
| | [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"]={ |
| | [i]="err_modules_embed_file_not_found", |
| | [h]="file \'%0\' specified by \'-fmodules-embed-file=\' not found", |
| | [g]="file \'A\' specified by \'-fmodules-embed-file=\' not found", |
| | [b]=T, |
| | [e]="file \'(.*?)\' specified by \'\\-fmodules\\-embed\\-file\\=\' not found", |
| | [d]=a, |
| [f]=a, | | [f]=a, |
| [d]=m, | | [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"}, |
| [c]={u,1237025389,s,t},
| | [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]={{Z,559,"StmtResult Sema::ActOnLabelStmt(SourceLocation IdentLoc, LabelDecl *TheDecl, SourceLocation ColonLoc, Stmt *SubStmt) {\n // If the label was multiply defined, reject it now.\n if (TheDecl->getStmt()) {\n Diag(IdentLoc, diag::err_redefinition_of_label) << TheDecl->getDeclName();"}}, | |
| [l]={
| |
| ["clang/test/Parser/goto.c"]={"clang/test/Parser/goto.c:26:3: error: redefinition of label \'l\'"}
| |
| }
| |
| }, | | }, |
| ["err_redefinition_variably_modified_typedef"]={ | | ["err_ms___leave_not_in___try"]={ |
| [i]="err_redefinition_variably_modified_typedef", | | [i]="err_ms___leave_not_in___try", |
| [h]="redefinition of %select{typedef|type alias}0 for variably-modified type %1", | | [h]="\'__leave\' statement not in __try block", |
| [g]={{nil,nil,{"redefinition of ",{Rc,Ic}," for variably-modified type B"}}}, | | [g]="\'__leave\' statement not in __try block", |
| [b]=k, | | [b]=k, |
| [e]="redefinition of (?:typedef|type alias) for variably\\-modified type (.*?)", | | [e]="\'__leave\' statement not in __try block", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"aab36986ab66",1326321228,"Improve the diagnostic when trying to redefine a typedef with a","Improve the diagnostic when trying to redefine a typedef with a\nvariably-modified type.\n\nllvm-svn: 147973"}, | | [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]={{w,2546,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n // ...\n if (NewType->isVariablyModifiedType()) {\n // ...\n Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef) << Kind << NewType;"}}, | | [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/Sema/c11-typedef-redef.c"]={"clang/test/Sema/c11-typedef-redef.c:13:15: error: redefinition of typedef for variably-modified type \'int[N]\'","clang/test/Sema/c11-typedef-redef.c:17:16: error: redefinition of typedef for variably-modified type \'vla2\' (aka \'int[N]\')"} | | ["clang/test/SemaCXX/__try.cpp"]={"clang/test/SemaCXX/__try.cpp:86:5: error: \'__leave\' statement not in __try block"} |
| } | | } |
| }, | | }, |
| ["err_ref_array_type"]={ | | ["err_ms_asm_bitfield_unsupported"]={ |
| [i]="err_ref_array_type", | | [i]={{nil,p,"err_ms_asm_bitfield_unsupported"}}, |
| [h]="cannot refer to declaration with an array type inside block", | | [h]={{nil,p,"an inline asm block cannot have an operand which is a bit-field"}}, |
| [g]="cannot refer to declaration with an array type inside block", | | [g]={{nil,p,"an inline asm block cannot have an operand which is a bit-field"}}, |
| [b]=k, | | [b]=k, |
| [e]="cannot refer to declaration with an array type inside block", | | [e]="an inline asm block cannot have an operand which is a bit\\-field", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,p,"Inline Assembly Issue"}}, |
| [c]={"8971a8653847",1262661036,"Disallow captured arrays in blocks as well. Radar 7438948.","Disallow captured arrays in blocks as well. Radar 7438948.\n\nllvm-svn: 92677"}, | | [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"}, |
| [j]={{n,19231,"// Returns true if the capture by block was successful.\nstatic bool captureInBlock(BlockScopeInfo *BSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool Nested, Sema &S, bool Invalid) {\n // ...\n // Blocks are not allowed to capture arrays, excepting OpenCL.\n // OpenCL v2.0 s1.12.5 (revision 40): arrays are captured by reference\n // (decayed to pointers).\n if (!Invalid && !S.getLangOpts().OpenCL && CaptureType->isArrayType()) {\n if (BuildAndDiagnose) {\n S.Diag(Loc, diag::err_ref_array_type);"}}, | | [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]={ |
| ["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:220:11: error: cannot refer to declaration with an array type inside block","clang/test/Sema/block-misc.c:221:11: error: cannot refer to declaration with an array type inside block"} | | ["clang/test/Parser/ms-inline-asm.c"]={"clang/test/Parser/ms-inline-asm.c:73:9: error: an inline asm block cannot have an operand which is a bit-field","clang/test/Parser/ms-inline-asm.c:72:14: error: an inline asm block cannot have an operand which is a bit-field"} |
| } | | } |
| }, | | }, |
| ["err_ref_bad_target"]={ | | ["err_ms_attributes_not_enabled"]={ |
| [i]="err_ref_bad_target", | | [i]={{nil,r,"err_ms_attributes_not_enabled"}}, |
| [h]={{nil,v,"reference to %select{__device__|__global__|__host__|__host__ __device__}0 %select{function|variable}1 %2 in %select{__device__|__global__|__host__|__host__ __device__}3 function"},{ib,nil,"reference to %select{__device__|__global__|__host__|__host__ __device__}0 function %1 in %select{__device__|__global__|__host__|__host__ __device__}2 function"}}, | | [h]={{nil,r,"\'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes"}}, |
| [g]={{nil,v,{"reference to ",{Xc,Uc,Tc,Yc}," ",{W,"variable"}," C in ",{Xc,Uc,Tc,Yc}," function"}},{ib,nil,{"reference to ",{Xc,Uc,Tc,Yc}," function B in ",{Xc,Uc,Tc,Yc}," function"}}}, | | [g]={{nil,r,"\'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes"}}, |
| [b]=k, | | [b]=k, |
| [e]="reference to (?:__device__|__global__|__host__|__host__ __device__) (?:function|variable) (.*?) in (?:__device__|__global__|__host__|__host__ __device__) function", | | [e]="\'__declspec\' attributes are not enabled; use \'\\-fdeclspec\' or \'\\-fms\\-extensions\' to enable support for __declspec attributes", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,r,y}}, |
| [c]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets","CUDA: diagnose invalid calls across targets\n\nllvm-svn: 140978"}, | | [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"}, |
| [j]={{"clang/lib/Sema/SemaCUDA.cpp",835,"bool Sema::CheckCUDACall(SourceLocation Loc, FunctionDecl *Callee) {\n // ...\n SemaDiagnosticBuilder(DiagKind, Loc, diag::err_ref_bad_target, Caller, *this) << IdentifyCUDATarget(Callee) << /*function*/ 0 << Callee << IdentifyCUDATarget(Caller);"},{n,19015,"/// Directly mark a variable odr-used. Given a choice, prefer to use\n/// MarkVariableReferenced since it does additional checks and then\n/// calls MarkVarDeclODRUsed.\n/// If the variable must be captured:\n/// - if FunctionScopeIndexToStopAt is null, capture it in the CurContext\n/// - else capture it in the DeclContext that maps to the\n/// *FunctionScopeIndexToStopAt on the FunctionScopeInfo stack.\nstatic void MarkVarDeclODRUsed(ValueDecl *V, SourceLocation Loc, Sema &SemaRef, const unsigned *const FunctionScopeIndexToStopAt = nullptr) {\n // ...\n if (SemaRef.LangOpts.CUDA && Var->hasGlobalStorage()) {\n // ...\n if (VarTarget == Sema::CVT_Host && (UserTarget == Sema::CFT_Device || UserTarget == Sema::CFT_HostDevice || UserTarget == Sema::CFT_Global)) {\n // Diagnose ODR-use of host global variables in device functions.\n // Reference of device global variables in host functions is allowed\n // through shadow variables therefore it is not diagnosed.\n if (SemaRef.LangOpts.CUDAIsDevice) {\n SemaRef.targetDiag(Loc, diag::err_ref_bad_target) << /*host*/ 2 << /*variable*/ 1 << Var << UserTarget;"}}, | | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Parser/cuda-force-host-device-templates.cu"]={"clang/test/Parser/cuda-force-host-device-templates.cu:18:11: error: reference to __host__ function \'foo<int>\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:19:12: error: reference to __host__ function \'foo\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:38:11: error: reference to __host__ function \'bar<int>\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:39:12: error: reference to __host__ function \'bar\' in __host__ __device__ function"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_ref_bad_target_global_initializer"]={ | | ["err_ms_declspec_type"]={ |
| [i]="err_ref_bad_target_global_initializer", | | [i]="err_ms_declspec_type", |
| [h]="reference to %select{__device__|__global__|__host__|__host__ __device__}0 function %1 in global initializer", | | [h]="__declspec attributes must be an identifier or string literal", |
| [g]={{nil,nil,{"reference to ",{Xc,Uc,Tc,Yc}," function B in global initializer"}}}, | | [g]="__declspec attributes must be an identifier or string literal", |
| [b]=k, | | [b]=k, |
| [e]="reference to (?:__device__|__global__|__host__|__host__ __device__) function (.*?) in global initializer", | | [e]="__declspec attributes must be an identifier or string literal", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=y, |
| [c]={"c989c3e78475",1470791361,"[CUDA] Reject calls to __device__ functions from host variable global initializers.","[CUDA] Reject calls to __device__ functions from host variable global initializers.\n\nReviewers: tra\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D23335\n\nllvm-svn: 278196"}, | | [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]={{"clang/lib/Sema/SemaCUDA.cpp",639,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n // ...\n if (IsDeviceOrConstantVar || IsSharedVar) {\n // ...\n } else {\n // ...\n if (InitFn) {\n // ...\n if (InitFnTarget != CFT_Host && InitFnTarget != CFT_HostDevice) {\n Diag(VD->getLocation(), diag::err_ref_bad_target_global_initializer) << InitFnTarget << InitFn;"}}, | | [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/SemaCUDA/global-initializers-host.cu"]={"clang/test/SemaCUDA/global-initializers-host.cu:13:3: error: reference to __device__ function \'S\' in global initializer","clang/test/SemaCUDA/global-initializers-host.cu:26:3: error: reference to __device__ function \'U\' in global initializer","clang/test/SemaCUDA/global-initializers-host.cu:31:5: error: reference to __device__ function \'device_fn\' in global initializer"} | | ["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:68:19: error: __declspec attributes must be an identifier or string literal"} |
| } | | } |
| }, | | }, |
| ["err_ref_flexarray_type"]={ | | ["err_ms_property_duplicate_accessor"]={ |
| [i]="err_ref_flexarray_type", | | [i]="err_ms_property_duplicate_accessor", |
| [h]="cannot refer to declaration of structure variable with flexible array member inside block", | | [h]="property declaration specifies \'%0\' accessor twice", |
| [g]="cannot refer to declaration of structure variable with flexible array member inside block", | | [g]="property declaration specifies \'A\' accessor twice", |
| [b]=k, | | [b]=k, |
| [e]="cannot refer to declaration of structure variable with flexible array member inside block", | | [e]="property declaration specifies \'(.*?)\' accessor twice", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=y, |
| [c]={"a716a345276c",1357687071,"objectiveC blocks: It is impractical to capture ","objectiveC blocks: It is impractical to capture \nstruct variables with flexiable array members in\nblocks (and lambdas). Issue error instead of\ncrashing in IRGen. // rdar://12655829\n\nllvm-svn: 171912"}, | | [c]={Fb,1366097310,Mb,Jb}, |
| [j]={{n,19177,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n // ...\n // Prohibit structs with flexible array members too.\n // We cannot capture what is in the tail end of the struct.\n if (const RecordType *VTTy = Var->getType()->getAs<RecordType>()) {\n if (VTTy->getDecl()->hasFlexibleArrayMember()) {\n if (Diagnose) {\n if (IsBlock)\n S.Diag(Loc, diag::err_ref_flexarray_type);"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm"]={"clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm:6:12: error: cannot refer to declaration of structure variable with flexible array member inside block"} | | [Bb]={"clang/test/Parser/MicrosoftExtensions.cpp:367:41: error: property declaration specifies \'get\' accessor twice"} |
| } | | } |
| }, | | }, |
| ["err_ref_init_ambiguous"]={ | | ["err_ms_property_expected_accessor_name"]={ |
| [i]="err_ref_init_ambiguous", | | [i]="err_ms_property_expected_accessor_name", |
| [h]="reference initialization of type %0 with initializer of type %1 is ambiguous", | | [h]="expected name of accessor method", |
| [g]="reference initialization of type A with initializer of type B is ambiguous", | | [g]="expected name of accessor method", |
| [b]=k, | | [b]=k, |
| [e]="reference initialization of type (.*?) with initializer of type (.*?) is ambiguous", | | [e]="expected name of accessor method", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=y, |
| [c]={"31481d8b22a9",1255481563,"Handle ambiguity of reference initialization.","Handle ambiguity of reference initialization.\nRemoves a FIXME.\n\nllvm-svn: 84068"}, | | [c]={Fb,1366097310,Mb,Jb}, |
| [j]={{Q,9651,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitOverloadFailed:\n case FK_UserConversionOverloadFailed:\n // ...\n case OR_Ambiguous:\n FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), Failure == FK_UserConversionOverloadFailed ? (S.PDiag(diag::err_typecheck_ambiguous_condition) << OnlyArg->getType() << DestType << Args[0]->getSourceRange()) : (S.PDiag(diag::err_ref_init_ambiguous) << DestType << OnlyArg->getType() << Args[0]->getSourceRange())), S, OCD_AmbiguousCandidates, Args);"}}, | | [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]={ |
| ["clang/test/SemaCXX/ref-init-ambiguous.cpp"]={"clang/test/SemaCXX/ref-init-ambiguous.cpp:17:13: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous","clang/test/SemaCXX/ref-init-ambiguous.cpp:23:9: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous","clang/test/SemaCXX/ref-init-ambiguous.cpp:25:12: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous"} | | [Bb]={"clang/test/Parser/MicrosoftExtensions.cpp:362:27: error: expected name of accessor method"} |
| } | | } |
| }, | | }, |
| ["err_ref_non_value"]={ | | ["err_ms_property_expected_comma_or_rparen"]={ |
| [i]="err_ref_non_value", | | [i]="err_ms_property_expected_comma_or_rparen", |
| [h]="%0 does not refer to a value", | | [h]="expected \',\' or \')\' at end of property accessor list", |
| [g]="A does not refer to a value", | | [g]="expected \',\' or \')\' at end of property accessor list", |
| [b]=k, | | [b]=k, |
| [e]="(.*?) does not refer to a value", | | [e]="expected \',\' or \'\\)\' at end of property accessor list", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=y, |
| [c]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a","Don\'t automatically assume that an id-expression refers to a\nValueDecl, because that isn\'t always the case in ill-formed\ncode. Diagnose a common mistake (forgetting to provide a template\nargument list for a class template, PR5655) and dyn_cast so that we\nhandle the general problem of referring to a non-value declaration\ngracefully.\n\nllvm-svn: 90239"}, | | [c]={Fb,1366097310,Mb,Jb}, |
| [j]={{n,3387,"/// Complete semantic analysis for a reference to the given declaration.\nExprResult Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, NamedDecl *D, NamedDecl *FoundD, const TemplateArgumentListInfo *TemplateArgs, bool AcceptInvalidDecl) {\n // ...\n // Make sure that we\'re referring to a value.\n if (!isa<ValueDecl, UnresolvedUsingIfExistsDecl>(D)) {\n Diag(Loc, diag::err_ref_non_value) << D << SS.getRange();"}}, | | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaHLSL/cb_error.hlsl"]={"clang/test/SemaHLSL/cb_error.hlsl:10:17: error: \'a\' does not refer to a value"} | | [Bb]={"clang/test/Parser/MicrosoftExtensions.cpp:364:31: error: expected \',\' or \')\' at end of property accessor list"} |
| } | | } |
| }, | | }, |
| ["err_ref_qualifier_comparison_operator"]={ | | ["err_ms_property_expected_equal"]={ |
| [i]="err_ref_qualifier_comparison_operator", | | [i]="err_ms_property_expected_equal", |
| [h]="ref-qualifier \'&&\' is not allowed on a defaulted comparison operator", | | [h]="expected \'=\' after \'%0\'", |
| [g]="ref-qualifier \'&&\' is not allowed on a defaulted comparison operator", | | [g]="expected \'=\' after \'A\'", |
| [b]=k, | | [b]=k, |
| [e]="ref\\-qualifier \'&&\' is not allowed on a defaulted comparison operator", | | [e]="expected \'\\=\' after \'(.*?)\'", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=y, |
| [c]={ab,1625925174,bb,cb}, | | [c]={Fb,1366097310,Mb,Jb}, |
| [j]={{H,8708,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n // ...\n if (IsMethod) {\n // ...\n if (MD->getRefQualifier() == RQ_RValue) {\n Diag(MD->getLocation(), diag::err_ref_qualifier_comparison_operator);"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/CXX/class/class.compare/class.compare.default/p1.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:18:8: error: ref-qualifier \'&&\' is not allowed on a defaulted comparison operator","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:202:10: error: ref-qualifier \'&&\' is not allowed on a defaulted comparison operator"} | | ["clang/test/Parser/attr-availability.c"]={"clang/test/Parser/attr-availability.c:36:68: error: expected \'=\' after \'message\'"} |
| } | | } |
| }, | | }, |
| ["err_ref_qualifier_constructor"]={ | | ["err_ms_property_has_set_accessor"]={ |
| [i]="err_ref_qualifier_constructor", | | [i]="err_ms_property_has_set_accessor", |
| [h]="ref-qualifier \'%select{&&|&}0\' is not allowed on a constructor", | | [h]="putter for property must be specified as \'put\', not \'set\'", |
| [g]={{nil,nil,{"ref-qualifier \'",{"&&","&"},"\' is not allowed on a constructor"}}}, | | [g]="putter for property must be specified as \'put\', not \'set\'", |
| [b]=k, | | [b]=k, |
| [e]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a constructor", | | [e]="putter for property must be specified as \'put\', not \'set\'", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=y, |
| [c]={"db9d66424425",1296018118,"Rvalue references for *this: ","Rvalue references for *this: \n\n - Add ref-qualifiers to the type system; they are part of the\n canonical type. Print & profile ref-qualifiers\n - Translate the ref-qualifier from the Declarator chunk for\n functions to the function type. \n - Diagnose mis-uses of ref-qualifiers w.r.t. static member\n functions, free functions, constructors, destructors, etc.\n - Add serialization and deserialization of ref-qualifiers.\n\nllvm-svn: 124281"}, | | [c]={Fb,1366097310,Mb,Jb}, |
| [j]={{H,10747,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the invalid bit to true. In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n // ...\n if (FTI.hasRefQualifier()) {\n Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}},
| | [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]={ |
| ["clang/test/CXX/special/class.ctor/p4-0x.cpp"]={"clang/test/CXX/special/class.ctor/p4-0x.cpp:5:7: error: ref-qualifier \'&\' is not allowed on a constructor","clang/test/CXX/special/class.ctor/p4-0x.cpp:6:10: error: ref-qualifier \'&&\' is not allowed on a constructor"} | | [Bb]={"clang/test/Parser/MicrosoftExtensions.cpp:357:23: error: putter for property must be specified as \'put\', not \'set\'"} |
| } | | } |
| }, | | }, |
| ["err_ref_qualifier_destructor"]={ | | ["err_ms_property_initializer"]={ |
| [i]="err_ref_qualifier_destructor", | | [i]="err_ms_property_initializer", |
| [h]="ref-qualifier \'%select{&&|&}0\' is not allowed on a destructor", | | [h]={{nil,C,"property declaration cannot have a default member initializer"},{"11.1",nil,"property declaration cannot have an in-class initializer"}}, |
| [g]={{nil,nil,{"ref-qualifier \'",{"&&","&"},"\' is not allowed on a destructor"}}}, | | [g]={{nil,C,"property declaration cannot have a default member initializer"},{"11.1",nil,"property declaration cannot have an in-class initializer"}}, |
| [b]=k, | | [b]=k, |
| [e]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a destructor", | | [e]="property declaration cannot have a default member initializer", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=y, |
| [c]={"db9d66424425",1296018118,"Rvalue references for *this: ","Rvalue references for *this: \n\n - Add ref-qualifiers to the type system; they are part of the\n canonical type. Print & profile ref-qualifiers\n - Translate the ref-qualifier from the Declarator chunk for\n functions to the function type. \n - Diagnose mis-uses of ref-qualifiers w.r.t. static member\n functions, free functions, constructors, destructors, etc.\n - Add serialization and deserialization of ref-qualifiers.\n\nllvm-svn: 124281"}, | | [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"}, |
| [j]={{H,10924,"/// CheckDestructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formednes of the destructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the declarator to invalid. Even if this happens,\n/// will be updated to reflect a well-formed type for the destructor and\n/// returned.\nQualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n // ...\n if (FTI.hasRefQualifier()) {\n Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}}, | | [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]={ |
| ["clang/test/CXX/special/class.dtor/p2-0x.cpp"]={"clang/test/CXX/special/class.dtor/p2-0x.cpp:5:8: error: ref-qualifier \'&\' is not allowed on a destructor","clang/test/CXX/special/class.dtor/p2-0x.cpp:9:8: error: ref-qualifier \'&&\' is not allowed on a destructor"} | | [Bb]={"clang/test/Parser/MicrosoftExtensions.cpp:368:44: error: property declaration cannot have a default member initializer"} |
| } | | } |
| }, | | }, |
| ["err_ref_qualifier_overload"]={ | | ["err_ms_property_missing_accessor_kind"]={ |
| [i]="err_ref_qualifier_overload", | | [i]="err_ms_property_missing_accessor_kind", |
| [h]="cannot overload a member function %select{without a ref-qualifier|with ref-qualifier \'&\'|with ref-qualifier \'&&\'}0 with a member function %select{without a ref-qualifier|with ref-qualifier \'&\'|with ref-qualifier \'&&\'}1", | | [h]="missing \'get=\' or \'put=\'", |
| [g]={{nil,nil,{"cannot overload a member function ",{"without a ref-qualifier","with ref-qualifier \'&\'","with ref-qualifier \'&&\'"}," with a member function ",{"without a ref-qualifier","with ref-qualifier \'&\'","with ref-qualifier \'&&\'"}}}}, | | [g]="missing \'get=\' or \'put=\'", |
| [b]=k, | | [b]=k, |
| [e]="cannot overload a member function (?:without a ref\\-qualifier|with ref\\-qualifier \'&\'|with ref\\-qualifier \'&&\') with a member function (?:without a ref\\-qualifier|with ref\\-qualifier \'&\'|with ref\\-qualifier \'&&\')", | | [e]="missing \'get\\=\' or \'put\\=\'", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=y, |
| [c]={"c83f9865a0da",1296076837,"Implement the restriction that a function with a ref-qualifier cannot","Implement the restriction that a function with a ref-qualifier cannot\noverload a function without a ref-qualifier (C++0x\n[over.load]p2). This, apparently, completes the implementation of\nrvalue references for *this.\n\nllvm-svn: 124321"}, | | [c]={Fb,1366097310,Mb,Jb}, |
| [j]={{Pb,1356,"bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old, bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs, bool ConsiderRequiresClauses) {\n // ...\n if (OldMethod && NewMethod && !OldMethod->isStatic() && !NewMethod->isStatic()) {\n if (OldMethod->getRefQualifier() != NewMethod->getRefQualifier()) {\n if (!UseMemberUsingDeclRules && (OldMethod->getRefQualifier() == RQ_None || NewMethod->getRefQualifier() == RQ_None)) {\n // ...\n Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload) << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();"}}, | | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/CXX/over/over.load/p2-0x.cpp"]={"clang/test/CXX/over/over.load/p2-0x.cpp:15:8: error: cannot overload a member function without a ref-qualifier with a member function with ref-qualifier \'&\'","clang/test/CXX/over/over.load/p2-0x.cpp:21:29: error: cannot overload a member function without a ref-qualifier with a member function with ref-qualifier \'&\'","clang/test/CXX/over/over.load/p2-0x.cpp:24:8: error: cannot overload a member function with ref-qualifier \'&&\' with a member function without a ref-qualifier"} | | [Bb]={"clang/test/Parser/MicrosoftExtensions.cpp:358:23: error: missing \'get=\' or \'put=\'"} |
| } | | } |
| }, | | }, |
| ["err_ref_vm_type"]={ | | ["err_ms_property_no_getter_or_putter"]={ |
| [i]="err_ref_vm_type", | | [i]="err_ms_property_no_getter_or_putter", |
| [h]="cannot refer to declaration with a variably modified type inside block", | | [h]="property does not specify a getter or a putter", |
| [g]="cannot refer to declaration with a variably modified type inside block", | | [g]="property does not specify a getter or a putter", |
| [b]=k, | | [b]=k, |
| [e]="cannot refer to declaration with a variably modified type inside block", | | [e]="property does not specify a getter or a putter", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=y, |
| [c]={"7dafa0d04810",1262660195,"Disallow capturing vlas inside blocks.","Disallow capturing vlas inside blocks.\n\nllvm-svn: 92676"}, | | [c]={Fb,1366097310,Mb,Jb}, |
| [j]={{n,19165,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n // ...\n // Prohibit variably-modified types in blocks; they\'re difficult to deal with.\n if (Var->getType()->isVariablyModifiedType() && IsBlock) {\n if (Diagnose) {\n S.Diag(Loc, diag::err_ref_vm_type);"}}, | | [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]={ |
| ["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:209:11: error: cannot refer to declaration with a variably modified type inside block","clang/test/Sema/block-misc.c:210:12: error: cannot refer to declaration with a variably modified type inside block"} | | [Bb]={"clang/test/Parser/MicrosoftExtensions.cpp:356:14: error: property does not specify a getter or a putter"} |
| } | | } |
| }, | | }, |
| ["err_refactor_code_outside_of_function"]={ | | ["err_ms_property_unknown_accessor"]={ |
| [i]={{nil,A,"err_refactor_code_outside_of_function"}}, | | [i]="err_ms_property_unknown_accessor", |
| [h]={{nil,A,"the selected code is not a part of a function\'s / method\'s body"}}, | | [h]="expected \'get\' or \'put\' in property declaration", |
| [g]={{nil,A,"the selected code is not a part of a function\'s / method\'s body"}}, | | [g]="expected \'get\' or \'put\' in property declaration", |
| [b]=k, | | [b]=k, |
| [e]="the selected code is not a part of a function\'s \\/ method\'s body", | | [e]="expected \'get\' or \'put\' in property declaration", |
| [f]=a, | | [d]=a, |
| [d]={{nil,A,Hc}}, | | [f]=y, |
| [c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring","[refactor] Initial outline of implementation of \"extract function\" refactoring\n\nThis commit adds an initial, skeleton outline of the \"extract function\"\nrefactoring. The extracted function doesn\'t capture variables / rewrite code\nyet, it just basically does a simple copy-paste.\nThe following initiation rules are specified:\n\n- extraction can only be done for executable code in a function/method/block.\n This means that you can\'t extract a global variable initialize into a function\n right now.\n- simple literals and references are not extractable.\n\nThis commit also adds support for full source ranges to clang-refactor\'s test\nmode.\n\nDifferential Revision: https://reviews.llvm.org/D38982\n\nllvm-svn: 316465"}, | | [c]={Fb,1366097310,Mb,Jb}, |
| [j]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",79,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n // We would like to extract code out of functions/methods/blocks.\n // Prohibit extraction from things like global variable / field\n // initializers and other top-level expressions.\n if (!Code.isInFunctionLikeBodyOfCode())\n return Context.createDiagnosticError(diag::err_refactor_code_outside_of_function);"}} | | [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]={ |
| | [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"} |
| | } |
| }, | | }, |
| ["err_refactor_extract_prohibited_expression"]={ | | ["err_ms_va_start_used_in_sysv_function"]={ |
| [i]={{nil,A,"err_refactor_extract_prohibited_expression"}}, | | [i]="err_ms_va_start_used_in_sysv_function", |
| [h]={{nil,A,"the selected expression can\'t be extracted"}}, | | [h]="\'__builtin_ms_va_start\' used in System V ABI function", |
| [g]={{nil,A,"the selected expression can\'t be extracted"}}, | | [g]="\'__builtin_ms_va_start\' used in System V ABI function", |
| [b]=k, | | [b]=k, |
| [e]="the selected expression can\'t be extracted", | | [e]="\'__builtin_ms_va_start\' used in System V ABI function", |
| [f]=a, | | [d]=a, |
| [d]={{nil,A,Hc}}, | | [f]=m, |
| [c]={"1e416fe23df4",1509495655,"[refactor][extract] prohibit extraction of ObjC property setters","[refactor][extract] prohibit extraction of ObjC property setters\n\nllvm-svn: 317056"}, | | [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]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",91,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n // ...\n if (Code.size() == 1) {\n // ...\n // Property setters can\'t be extracted.\n if (const auto *PRE = dyn_cast<ObjCPropertyRefExpr>(Code[0])) {\n if (!PRE->isMessagingGetter())\n return Context.createDiagnosticError(diag::err_refactor_extract_prohibited_expression);"}} | | [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]={ |
| | ["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"} |
| | } |
| }, | | }, |
| ["err_refactor_extract_simple_expression"]={ | | ["err_msasm_unable_to_create_target"]={ |
| [i]={{nil,A,"err_refactor_extract_simple_expression"}}, | | [i]="err_msasm_unable_to_create_target", |
| [h]={{nil,A,"the selected expression is too simple to extract"}}, | | [h]="MS-style inline assembly is not available: %0", |
| [g]={{nil,A,"the selected expression is too simple to extract"}}, | | [g]="MS-style inline assembly is not available: A", |
| [b]=k, | | [b]=k, |
| [e]="the selected expression is too simple to extract", | | [e]="MS\\-style inline assembly is not available\\: (.*?)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,A,Hc}}, | | [f]="Inline Assembly Issue", |
| [c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring","[refactor] Initial outline of implementation of \"extract function\" refactoring\n\nThis commit adds an initial, skeleton outline of the \"extract function\"\nrefactoring. The extracted function doesn\'t capture variables / rewrite code\nyet, it just basically does a simple copy-paste.\nThe following initiation rules are specified:\n\n- extraction can only be done for executable code in a function/method/block.\n This means that you can\'t extract a global variable initialize into a function\n right now.\n- simple literals and references are not extractable.\n\nThis commit also adds support for full source ranges to clang-refactor\'s test\nmode.\n\nDifferential Revision: https://reviews.llvm.org/D38982\n\nllvm-svn: 316465"}, | | [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"}, |
| [j]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",85,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n // ...\n if (Code.size() == 1) {\n // Avoid extraction of simple literals and references.\n if (isSimpleExpression(dyn_cast<Expr>(Code[0])))\n return Context.createDiagnosticError(diag::err_refactor_extract_simple_expression);"}}
| | [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\";"}} |
| }, | | }, |
| ["err_refactor_no_selection"]={ | | ["err_msasm_unsupported_arch"]={ |
| [i]={{nil,A,"err_refactor_no_selection"}}, | | [i]="err_msasm_unsupported_arch", |
| [h]={{nil,A,"refactoring action can\'t be initiated without a selection"}}, | | [h]={{nil,u,"unsupported architecture \'%0\' for MS-style inline assembly"},{C,nil,"Unsupported architecture \'%0\' for MS-style inline assembly"}}, |
| [g]={{nil,A,"refactoring action can\'t be initiated without a selection"}}, | | [g]={{nil,u,"unsupported architecture \'A\' for MS-style inline assembly"},{C,nil,"Unsupported architecture \'A\' for MS-style inline assembly"}}, |
| [b]=k, | | [b]=k, |
| [e]="refactoring action can\'t be initiated without a selection", | | [e]="unsupported architecture \'(.*?)\' for MS\\-style inline assembly", |
| [f]=a, | | [d]=a, |
| [d]={{nil,A,Hc}}, | | [f]="Inline Assembly Issue", |
| [c]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics","[refactor] allow the use of refactoring diagnostics\n\nThis commit allows the refactoring library to use its own set of\nrefactoring-specific diagnostics to reports things like initiation errors.\n\nDifferential Revision: https://reviews.llvm.org/D38772\n\nllvm-svn: 315924"}, | | [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"}, |
| [j]={{"clang/unittests/Tooling/RefactoringActionRulesTest.cpp",145,"TEST_F(RefactoringActionRulesTest, MyFirstRefactoringRule) {\n // ...\n // When one of the requirements is not satisfied, invoke should return a\n // valid error.\n {\n // ...\n EXPECT_EQ(DiagID, diag::err_refactor_no_selection);"}} | | [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();"}}, |
| | [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"} |
| | } |
| }, | | }, |
| ["err_refactor_selection_invalid_ast"]={ | | ["err_msvc_annotation_wide_str"]={ |
| [i]={{nil,A,"err_refactor_selection_invalid_ast"}}, | | [i]={{nil,t,"err_msvc_annotation_wide_str"}}, |
| [h]={{nil,A,"the provided selection does not overlap with the AST nodes of interest"}}, | | [h]={{nil,t,"arguments to __annotation must be wide string constants"}}, |
| [g]={{nil,A,"the provided selection does not overlap with the AST nodes of interest"}}, | | [g]={{nil,t,"arguments to __annotation must be wide string constants"}}, |
| [b]=k, | | [b]=k, |
| [e]="the provided selection does not overlap with the AST nodes of interest", | | [e]="arguments to __annotation must be wide string constants", |
| [f]=a, | | [d]=a, |
| [d]={{nil,A,Hc}}, | | [f]={{nil,t,m}}, |
| [c]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring","[refactor] Initial outline of implementation of \"extract function\" refactoring\n\nThis commit adds an initial, skeleton outline of the \"extract function\"\nrefactoring. The extracted function doesn\'t capture variables / rewrite code\nyet, it just basically does a simple copy-paste.\nThe following initiation rules are specified:\n\n- extraction can only be done for executable code in a function/method/block.\n This means that you can\'t extract a global variable initialize into a function\n right now.\n- simple literals and references are not extractable.\n\nThis commit also adds support for full source ranges to clang-refactor\'s test\nmode.\n\nDifferential Revision: https://reviews.llvm.org/D38982\n\nllvm-svn: 316465"}, | | [c]={"30701edf761c",1504643255,"[ms] Implement the __annotation intrinsic","[ms] Implement the __annotation intrinsic\n\nllvm-svn: 312572"}, |
| [j]={{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",29,"Expected<SelectedASTNode> ASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n // ...\n if (!Selection)\n return Context.createDiagnosticError(Range->getBegin(), diag::err_refactor_selection_invalid_ast);"},{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",48,"Expected<CodeRangeASTSelection> CodeRangeASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n // ...\n if (!CodeRange)\n return Context.createDiagnosticError(Context.getSelectionRange().getBegin(), diag::err_refactor_selection_invalid_ast);"}} | | [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();"}}, |
| | [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"} |
| | } |
| }, | | }, |
| ["err_refactor_selection_no_symbol"]={ | | ["err_mt_message"]={ |
| [i]={{nil,A,"err_refactor_selection_no_symbol"}}, | | [i]="err_mt_message", |
| [h]={{nil,A,"there is no symbol at the given location"}}, | | [h]="[rewriter] %0", |
| [g]={{nil,A,"there is no symbol at the given location"}}, | | [g]="[rewriter] A", |
| [b]=k, | | [b]=k, |
| [e]="there is no symbol at the given location", | | [e]="\\[rewriter\\] (.*?)", |
| | [d]=a, |
| [f]=a, | | [f]=a, |
| [d]={{nil,A,Hc}},
| | [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"}, |
| [c]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics","[refactor] allow the use of refactoring diagnostics\n\nThis commit allows the refactoring library to use its own set of\nrefactoring-specific diagnostics to reports things like initiation errors.\n\nDifferential Revision: https://reviews.llvm.org/D38772\n\nllvm-svn: 315924"}, | | [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/Tooling/Refactoring/Rename/RenamingAction.cpp",73,"Expected<RenameOccurrences> RenameOccurrences::initiate(RefactoringRuleContext &Context, SourceRange SelectionRange, std::string NewName) {\n // ...\n if (!ND)\n return Context.createDiagnosticError(SelectionRange.getBegin(), diag::err_refactor_selection_no_symbol);"}} | | [l]={ |
| | ["clang/test/ARCMT/nonobjc-to-objc-cast-2.m"]={"clang/test/ARCMT/nonobjc-to-objc-cast-2.m:53:10: error: [rewriter] it is not safe to cast to \'CFStringRef\' the result of \'autorelease\' message; a __bridge cast may result in a pointer to a destroyed object and a __bridge_retained may leak the object"} |
| | } |
| }, | | }, |
| ["err_reference_bind_drops_quals"]={ | | ["err_multichar_character_literal"]={ |
| [i]="err_reference_bind_drops_quals", | | [i]={{nil,S,"err_multichar_character_literal"}}, |
| [h]={{nil,p,"binding reference %diff{of type $ to value of type $|to value}0,1 %select{drops %3 qualifier%plural{1:|2:|4:|:s}4|changes address space|not permitted due to incompatible qualifiers}2"},{D,D,"binding reference %diff{of type $ to value of type $|to value}0,1 %select{drops %3 qualifier%plural{1:|2:|4:|:s}4|changes address space}2"},{E,nil,"binding value %diff{of type $ to reference to type $|to reference}0,1 drops %select{<<ERROR>>|\'const\'|\'restrict\'|\'const\' and \'restrict\'|\'volatile\'|\'const\' and \'volatile\'|\'restrict\' and \'volatile\'|\'const\', \'restrict\', and \'volatile\'}2 qualifier%plural{1:|2:|4:|:s}2"}}, | | [h]={{nil,S,"%select{wide|Unicode}0 character literals may not contain multiple characters"}}, |
| [g]={{nil,p,{"binding reference ",{"of type A to value of type B","to value"}," ",{{"drops D qualifier",{a,a,a,kc}},"changes address space","not permitted due to incompatible qualifiers"}}},{D,D,{"binding reference ",{"of type A to value of type B","to value"}," ",{{"drops D qualifier",{a,a,a,kc}},"changes address space"}}},{E,nil,{"binding value ",{"of type A to reference to type B","to reference"}," drops ",{"\'const\'","\'restrict\'","\'const\' and \'restrict\'","\'volatile\'","\'const\' and \'volatile\'","\'restrict\' and \'volatile\'","\'const\', \'restrict\', and \'volatile\'"}," qualifier",{a,a,a,kc}}}}, | | [g]={{nil,S,{{"wide","Unicode"}," character literals may not contain multiple characters"}}}, |
| [b]=k, | | [b]=k, |
| [e]="binding reference (?:of type (.*?) to value of type (.*?)|to value) (?:drops (.*?) qualifier(?:|||s)|changes address space|not permitted due to incompatible qualifiers)", | | [e]="(?:wide|Unicode) character literals may not contain multiple characters", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,S,z}}, |
| [c]={rd,1260399737,pd,ld}, | | [c]={Ac,1625925174,zc,sc}, |
| [j]={{Q,9756,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitDropsQualifiers: {\n // ...\n if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 1 /*addr space*/"},{Q,9760,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitDropsQualifiers: {\n // ...\n if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n // ...\n else if (DroppedQualifiers.hasQualifiers())\n S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 0 /*cv quals*/"},{Q,9767,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitDropsQualifiers: {\n // ...\n if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n // ...\n else if (DroppedQualifiers.hasQualifiers())\n // ...\n else\n // ...\n S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 2 /*incompatible quals*/"}}, | | [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]={ |
| ["clang/test/SemaCXX/builtins-arm.cpp"]={"clang/test/SemaCXX/builtins-arm.cpp:5:27: error: binding reference of type \'__builtin_va_list\' to value of type \'const __builtin_va_list\' drops \'const\' qualifier"} | | ["clang/test/Lexer/wchar.c"]={"clang/test/Lexer/wchar.c:6:9: error: wide character literals may not contain multiple characters","clang/test/Lexer/wchar.c:8:9: error: wide character literals may not contain multiple characters"} |
| } | | } |
| }, | | }, |
| ["err_reference_bind_failed"]={ | | ["err_multiple_base_initialization"]={ |
| [i]="err_reference_bind_failed", | | [i]="err_multiple_base_initialization", |
| [h]={{nil,D,"reference %diff{to %select{type|incomplete type}1 $ could not bind to an %select{rvalue|lvalue}2 of type $|could not bind to %select{rvalue|lvalue}2 of incompatible type}0,3"},{E,nil,"reference %diff{to type $ could not bind to an %select{rvalue|lvalue}1 of type $|could not bind to %select{rvalue|lvalue}1 of incompatible type}0,2"}}, | | [h]="multiple initializations given for base %0", |
| [g]={{nil,D,{"reference ",{{"to ",{"type","incomplete type"}," A could not bind to an ",{"rvalue",id}," of type D"},{"could not bind to ",{"rvalue",id}," of incompatible type"}}}},{E,nil,{"reference ",{{"to type A could not bind to an ",{"rvalue",id}," of type C"},{"could not bind to ",{"rvalue",id}," of incompatible type"}}}}}, | | [g]="multiple initializations given for base A", |
| [b]=k, | | [b]=k, |
| [e]="reference (?:to (?:type|incomplete type) (.*?) could not bind to an (?:rvalue|lvalue) of type (.*?)|could not bind to (?:rvalue|lvalue) of incompatible type)", | | [e]="multiple initializations given for base (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={rd,1260399737,pd,ld}, | | [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]={{Q,9774,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitFailed:\n S.Diag(Kind.getLocation(), diag::err_reference_bind_failed) << DestType.getNonReferenceType() << DestType.getNonReferenceType()->isIncompleteType() << OnlyArg->isLValue() << OnlyArg->getType() << Args[0]->getSourceRange();"}}, | | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:28:12: error: reference to type \'const A\' (aka \'void (*const)() noexcept\') could not bind to an rvalue of type \'void (*)()\'"} | | ["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\')"} |
| } | | } |
| }, | | }, |
| ["err_reference_bind_init_list"]={ | | ["err_multiple_def_index"]={ |
| [i]="err_reference_bind_init_list", | | [i]={{nil,t,"err_multiple_def_index"}}, |
| [h]="reference to type %0 cannot bind to an initializer list", | | [h]={{nil,t,"multiple definitions are found for the same key in index "}}, |
| [g]="reference to type A cannot bind to an initializer list", | | [g]={{nil,t,"multiple definitions are found for the same key in index "}}, |
| | [b]=k, |
| | [e]="multiple definitions are found for the same key in index ", |
| | [d]=a, |
| | [f]={{nil,t,a}}, |
| | [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"}, |
| | [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"]={ |
| | [i]="err_multiple_default_labels_defined", |
| | [h]="multiple default labels in one switch", |
| | [g]="multiple default labels in one switch", |
| [b]=k, | | [b]=k, |
| [e]="reference to type (.*?) cannot bind to an initializer list", | | [e]="multiple default labels in one switch", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"51e77d5ab0a0",1260467815,"Move initialization via initializer list over to InitializationSequences.","Move initialization via initializer list over to InitializationSequences.\n\nllvm-svn: 91050"}, | | [c]={hb,1237025389,gb,fb}, |
| [j]={{Q,9828,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceBindingToInitList:\n S.Diag(Kind.getLocation(), diag::err_reference_bind_init_list) << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}}, | | [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/SemaCXX/cxx0x-initializer-references.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-references.cpp:141:16: error: reference to type \'const int\' cannot bind to an initializer list"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_reference_bind_temporary_addrspace"]={ | | ["err_multiple_final_overriders"]={ |
| [i]={{nil,D,"err_reference_bind_temporary_addrspace"}}, | | [i]="err_multiple_final_overriders", |
| [h]={{nil,D,"reference of type %0 cannot bind to a temporary object because of address space mismatch"}}, | | [h]="virtual function %q0 has more than one final overrider in %1", |
| [g]={{nil,D,"reference of type A cannot bind to a temporary object because of address space mismatch"}}, | | [g]="virtual function A has more than one final overrider in B", |
| [b]=k, | | [b]=k, |
| [e]="reference of type (.*?) cannot bind to a temporary object because of address space mismatch", | | [e]="virtual function (.*?) has more than one final overrider in (.*?)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,D,m}}, | | [f]=m, |
| [c]={"5145b1e4421a",1559743414,"[Sema] Prevent binding incompatible addr space ref to temporaries","[Sema] Prevent binding incompatible addr space ref to temporaries\n\nReferences to arbitrary address spaces can\'t always be bound to\ntemporaries. This change extends the reference binding logic to\ncheck that the address space of a temporary can be implicitly\nconverted to the address space in a reference when temporary\nmaterialization is performed.\n\nDifferential Revision: https://reviews.llvm.org/D61318\n\nllvm-svn: 362604"}, | | [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"}, |
| [j]={{Q,9744,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceAddrspaceMismatchTemporary:\n S.Diag(Kind.getLocation(), diag::err_reference_bind_temporary_addrspace) << DestType << Args[0]->getSourceRange();"}}, | | [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]={ |
| ["clang/test/SemaOpenCLCXX/address-space-references.clcpp"]={"clang/test/SemaOpenCLCXX/address-space-references.clcpp:4:10: error: reference of type \'const __global int &\' cannot bind to a temporary object because of address space mismatch"} | | ["clang/test/CXX/class.derived/class.virtual/p2.cpp"]={"clang/test/CXX/class.derived/class.virtual/p2.cpp:18:8: error: virtual function \'A::f\' has more than one final overrider in \'D\'","clang/test/CXX/class.derived/class.virtual/p2.cpp:22:8: error: virtual function \'A::f\' has more than one final overrider in \'E\'"} |
| } | | } |
| }, | | }, |
| ["err_reference_bind_to_bitfield"]={ | | ["err_multiple_mem_initialization"]={ |
| [i]="err_reference_bind_to_bitfield", | | [i]="err_multiple_mem_initialization", |
| [h]="%select{non-const|volatile}0 reference cannot bind to bit-field%select{| %1}2", | | [h]="multiple initializations given for non-static member %0", |
| [g]={{nil,nil,{{"non-const",Wc}," reference cannot bind to bit-field",{a,Ob}}}}, | | [g]="multiple initializations given for non-static member A", |
| [b]=k, | | [b]=k, |
| [e]="(?:non\\-const|volatile) reference cannot bind to bit\\-field(?:| (.*?))", | | [e]="multiple initializations given for non\\-static member (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={rd,1260399737,pd,ld}, | | [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]={{Q,9716,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_NonConstLValueReferenceBindingToBitfield: {\n // ...\n S.Diag(Kind.getLocation(), diag::err_reference_bind_to_bitfield) << DestType.isVolatileQualified() << (BitField ? BitField->getDeclName() : DeclarationName()) << (BitField != nullptr) << Args[0]->getSourceRange();"}}, | | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaObjCXX/references.mm"]={"clang/test/SemaObjCXX/references.mm:74:13: error: non-const reference cannot bind to bit-field \'bf\'"} | | ["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\'"} |
| } | | } |
| }, | | }, |
| ["err_reference_bind_to_matrix_element"]={ | | ["err_multiple_mem_union_initialization"]={ |
| [i]={{nil,q,"err_reference_bind_to_matrix_element"}}, | | [i]="err_multiple_mem_union_initialization", |
| [h]={{nil,q,"%select{non-const|volatile}0 reference cannot bind to matrix element"}}, | | [h]="initializing multiple members of union", |
| [g]={{nil,q,{{"non-const",Wc}," reference cannot bind to matrix element"}}}, | | [g]="initializing multiple members of union", |
| [b]=k, | | [b]=k, |
| [e]="(?:non\\-const|volatile) reference cannot bind to matrix element", | | [e]="initializing multiple members of union", |
| [f]=a, | | [d]=a, |
| [d]={{nil,q,m}}, | | [f]=m, |
| [c]={U,1576908663,T,S}, | | [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]={{Q,9733,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_NonConstLValueReferenceBindingToMatrixElement:\n S.Diag(Kind.getLocation(), diag::err_reference_bind_to_matrix_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}}, | | [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/SemaCXX/matrix-type-operators.cpp"]={"clang/test/SemaCXX/matrix-type-operators.cpp:236:10: error: non-const reference cannot bind to matrix element"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_reference_bind_to_vector_element"]={ | | ["err_multiple_template_declarators"]={ |
| [i]="err_reference_bind_to_vector_element", | | [i]="err_multiple_template_declarators", |
| [h]="%select{non-const|volatile}0 reference cannot bind to vector element", | | [h]="%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,{{"non-const",Wc}," reference cannot bind to vector element"}}}, | | [g]={{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, | | [b]=k, |
| [e]="(?:non\\-const|volatile) reference cannot bind to vector element", | | [e]="(?:|a template declaration|an explicit template specialization|an explicit template instantiation) can only (?:|declare|declare|instantiate) a single entity", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=y, |
| [c]={"8abde4b447db",1264958329,"Diagnose binding a non-const reference to a vector element.","Diagnose binding a non-const reference to a vector element.\n\nllvm-svn: 94963"}, | | [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"}, |
| [j]={{Q,9727,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_NonConstLValueReferenceBindingToVectorElement:\n S.Diag(Kind.getLocation(), diag::err_reference_bind_to_vector_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}}, | | [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]={ |
| ["clang/test/SemaCXX/references.cpp"]={"clang/test/SemaCXX/references.cpp:149:8: error: non-const reference cannot bind to vector element","clang/test/SemaCXX/references.cpp:153:8: error: non-const reference cannot bind to vector element"} | | ["clang/test/CXX/temp/p3.cpp"]={"clang/test/CXX/temp/p3.cpp:7:33: error: a template declaration can only declare a single entity"} |
| } | | } |
| }, | | }, |
| ["err_reference_capture_with_reference_default"]={ | | ["err_multiversion_after_used"]={ |
| [i]="err_reference_capture_with_reference_default", | | [i]={{nil,q,"err_multiversion_after_used"}}, |
| [h]="\'&\' cannot precede a capture when the capture default is \'&\'", | | [h]={{nil,q,"function declaration cannot become a multiversioned function after first usage"}}, |
| [g]="\'&\' cannot precede a capture when the capture default is \'&\'", | | [g]={{nil,q,"function declaration cannot become a multiversioned function after first usage"}}, |
| [b]=k, | | [b]=k, |
| [e]="\'&\' cannot precede a capture when the capture default is \'&\'", | | [e]="function declaration cannot become a multiversioned function after first usage", |
| [f]=a, | | [d]=a, |
| [d]="Lambda Issue", | | [f]={{nil,q,a}}, |
| [c]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures.","Lambdas: semantic analysis of explicit captures.\n\nThis patch (and some of my other commits related to lambdas) is heavily based off of John Freeman\'s work-in-progress patches.\n\nllvm-svn: 147706"}, | | [c]={bc,1515447257,cc,ac}, |
| [j]={{kd,1117,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n // ...\n for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n // ...\n if (C->Init.isUsable()) {\n // ...\n } else {\n // ...\n // C++11 [expr.prim.lambda]p8:\n // If a lambda-capture includes a capture-default that is &, the\n // identifiers in the lambda-capture shall not be preceded by &.\n // If a lambda-capture includes a capture-default that is =, [...]\n // each identifier it contains shall be preceded by &.\n if (C->Kind == LCK_ByRef && Intro.Default == LCD_ByRef) {\n Diag(C->Loc, diag::err_reference_capture_with_reference_default) << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"}}, | | [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]={ |
| ["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:13:16: error: \'&\' cannot precede a capture when the capture default is \'&\'","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:25:14: error: \'&\' cannot precede a capture when the capture default is \'&\'"} | | ["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:82:62: error: function declaration cannot become a multiversioned function after first usage"} |
| } | | } |
| }, | | }, |
| ["err_reference_has_multiple_inits"]={ | | ["err_multiversion_diff"]={ |
| [i]="err_reference_has_multiple_inits", | | [i]={{nil,q,"err_multiversion_diff"}}, |
| [h]="reference cannot be initialized with multiple values", | | [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"}}, |
| [g]="reference cannot be initialized with multiple values", | | [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"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="reference cannot be initialized with multiple values", | | [e]="multiversioned function declaration has a different (?:calling convention|return type|constexpr specification|inline specification|linkage|language linkage)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,q,a}}, |
| [c]={rd,1260399737,pd,ld}, | | [c]={bc,1515447257,cc,ac}, |
| [j]={{Q,9569,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_TooManyInitsForReference:\n // FIXME: Customize for the initialized entity?\n if (Args.empty()) {\n // ...\n } else // FIXME: diagnostic below could be better!\n S.Diag(Kind.getLocation(), diag::err_reference_has_multiple_inits) << SourceRange(Args.front()->getBeginLoc(), Args.back()->getEndLoc());"}} | | [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)),"}}, |
| },
| |
| ["err_reference_pipe_type"]={
| |
| [i]="err_reference_pipe_type",
| |
| [h]="pipes packet types cannot be of reference type",
| |
| [g]="pipes packet types cannot be of reference type",
| |
| [b]=k,
| |
| [e]="pipes packet types cannot be of reference type",
| |
| [f]=a,
| |
| [d]=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]={{w,10746,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n for (const ParmVarDecl *Param : NewFD->parameters()) {\n // ...\n // OpenCL 2.0 pipe restrictions forbids pipe packet types to be non-value\n // types.\n if (getLangOpts().getOpenCLCompatibleVersion() >= 200) {\n if (const PipeType *PipeTy = PT->getAs<PipeType>()) {\n // ...\n if (ElemTy->isReferenceType() || ElemTy->isPointerType()) {\n Diag(Param->getTypeSpecStartLoc(), diag::err_reference_pipe_type);"}},
| |
| [l]={ | | [l]={ |
| ["clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl"]={"clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl:22:17: error: pipes packet types cannot be of reference type"} | | [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"} |
| } | | } |
| }, | | }, |
| ["err_reference_to_function_with_unsatisfied_constraints"]={ | | ["err_multiversion_disallowed_other_attr"]={ |
| [i]={{nil,p,"err_reference_to_function_with_unsatisfied_constraints"}}, | | [i]={{nil,C,"err_multiversion_disallowed_other_attr"}}, |
| [h]={{nil,p,"invalid reference to function %0: constraints not satisfied"}}, | | [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"}}, |
| [g]={{nil,p,"invalid reference to function A: constraints not satisfied"}}, | | [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"}}}, |
| [b]=k, | | [b]=k, |
| [e]="invalid reference to function (.*?)\\: constraints not satisfied", | | [e]="attribute \'(?:|target|cpu_specific|cpu_dispatch|target_clones|target_version)\' multiversioning cannot be combined with attribute (.*?)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,p,m}}, | | [f]={{nil,C,a}}, |
| [c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension.","Implement VectorType conditional operator GNU extension.\n\nGCC supports the conditional operator on VectorTypes that acts as a\n\'select\' in C++ mode. This patch implements the support. Types are\nconverted as closely to GCC\'s behavior as possible, though in a few\nplaces consistency with our existing vector type support was preferred.\n\nNote that this implementation is different from the OpenCL version in a\nnumber of ways, so it unfortunately required a different implementation.\n\nFirst, the SEMA rules and promotion rules are significantly different.\n\nSecondly, GCC implements COND[i] != 0 ? LHS[i] : RHS[i] (where i is in\nthe range 0- VectorSize, for each element). In OpenCL, the condition is\nCOND[i] < 0 ? LHS[i]: RHS[i].\n\nIn the process of implementing this, it was also required to make the\nexpression COND ? LHS : RHS type dependent if COND is type dependent,\nsince the type is now dependent on the condition. For example:\n\n T ? 1 : 2;\n\nIs not typically type dependent, since the result can be deduced from\nthe operands. HOWEVER, if T is a VectorType now, it could change this\nto a \'select\' (basically a swizzle with a non-constant mask) with the 1\nand 2 being promoted to vectors themselves.\n\nWhile this is a change, it is NOT a standards incompatible change. Based\non my (and D. Gregor\'s, at the time of writing the code) reading of the\nstandard, the expression is supposed to be type dependent if ANY\nsub-expression is type dependent.\n\nDifferential Revision: https://reviews.llvm.org/D71463"}, | | [c]={vc,1582847864,yc,xc}, |
| [j]={{n,297,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n // ...\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {\n // ...\n // [expr.prim.id]p4\n // A program that refers explicitly or implicitly to a function with a\n // trailing requires-clause whose constraint-expression is not satisfied,\n // other than to declare it, is ill-formed. [...]\n //\n // See if this is a function with constraints that need to be satisfied.\n // Check this before deducing the return type, as it might instantiate the\n // definition.\n if (!SkipTrailingRequiresClause && FD->getTrailingRequiresClause()) {\n // ...\n if (!Satisfaction.IsSatisfied) {\n Diag(Loc, diag::err_reference_to_function_with_unsatisfied_constraints) << D;"}}, | | [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]={ |
| ["clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp"]={"clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:10:11: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:11:29: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:12:31: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:13:20: error: invalid reference to function \'f\': constraints not satisfied"} | | [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\'"} |
| } | | } |
| }, | | }, |
| ["err_reference_to_local_in_enclosing_context"]={ | | ["err_multiversion_doesnt_support"]={ |
| [i]="err_reference_to_local_in_enclosing_context", | | [i]={{nil,q,"err_multiversion_doesnt_support"}}, |
| [h]="reference to local %select{variable|binding}1 %0 declared in enclosing %select{%3|block literal|lambda expression|context}2", | | [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"}}, |
| [g]={{nil,nil,{"reference to local ",{"variable","binding"}," A declared in enclosing ",{"D","block literal","lambda expression","context"}}}}, | | [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"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="reference to local (?:variable|binding) (.*?) declared in enclosing (?:(.*?)|block literal|lambda expression|context)", | | [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)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,q,a}}, |
| [c]={"1879f1069b60",1471228463,"Disable lambda-capture of decomposition declaration bindings for now, until CWG","Disable lambda-capture of decomposition declaration bindings for now, until CWG\nagrees on how they\'re supposed to work.\n\nllvm-svn: 278648"}, | | [c]={bc,1515447257,cc,ac}, |
| [j]={{n,19081,"void diagnoseUncapturableValueReferenceOrBinding(Sema &S, SourceLocation loc, ValueDecl *var) {\n // ...\n S.Diag(loc, diag::err_reference_to_local_in_enclosing_context) << var << ValueKind << ContextKind << VarDC;"}},
| | [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]={ |
| ["clang/test/CXX/class/class.local/p1.cpp"]={"clang/test/CXX/class/class.local/p1.cpp:11:22: error: reference to local variable \'x\' declared in enclosing function \'f\'"} | | ["clang/test/SemaCXX/attr-target-clones-aarch64.cpp"]={"clang/test/SemaCXX/attr-target-clones-aarch64.cpp:5:12: error: attribute \'target_clones\' multiversioned functions do not yet support lambdas","clang/test/SemaCXX/attr-target-clones-aarch64.cpp:8:12: error: attribute \'target_clones\' multiversioned functions do not yet support lambdas"} |
| } | | } |
| }, | | }, |
| ["err_reference_to_void"]={ | | ["err_multiversion_duplicate"]={ |
| [i]="err_reference_to_void", | | [i]={{nil,q,"err_multiversion_duplicate"}}, |
| [h]="cannot form a reference to \'void\'", | | [h]={{nil,q,"multiversioned function redeclarations require identical target attributes"}}, |
| [g]="cannot form a reference to \'void\'", | | [g]={{nil,q,"multiversioned function redeclarations require identical target attributes"}}, |
| [b]=k, | | [b]=k, |
| [e]="cannot form a reference to \'void\'", | | [e]="multiversioned function redeclarations require identical target attributes", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,q,a}}, |
| [c]={u,1237025389,s,t}, | | [c]={bc,1515447257,cc,ac}, |
| [j]={{R,2270,"/// Build a reference type.\n///\n/// \\param T The type to which we\'ll be building a reference.\n///\n/// \\param Loc The location of the entity whose type involves this\n/// reference type or, if there is no such entity, the location of the\n/// type that will have reference type.\n///\n/// \\param Entity The name of the entity that involves the reference\n/// type, if known.\n///\n/// \\returns A suitable reference type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildReferenceType(QualType T, bool SpelledAsLValue, SourceLocation Loc, DeclarationName Entity) {\n // ...\n // C++ [dcl.ref]p1:\n // A declarator that specifies the type \"reference to cv void\"\n // is ill-formed.\n if (T->isVoidType()) {\n Diag(Loc, diag::err_reference_to_void);"}}, | | [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]={ |
| ["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:13:14: error: cannot form a reference to \'void\'"} | | [wc]={"clang/test/Sema/attr-target-mv.c:75:57: error: multiversioned function redeclarations require identical target attributes"} |
| } | | } |
| }, | | }, |
| ["err_reference_var_requires_init"]={ | | ["err_multiversion_noproto"]={ |
| [i]="err_reference_var_requires_init", | | [i]={{nil,q,"err_multiversion_noproto"}}, |
| [h]="declaration of reference variable %0 requires an initializer", | | [h]={{nil,q,"multiversioned function must have a prototype"}}, |
| [g]="declaration of reference variable A requires an initializer", | | [g]={{nil,q,"multiversioned function must have a prototype"}}, |
| [b]=k, | | [b]=k, |
| [e]="declaration of reference variable (.*?) requires an initializer", | | [e]="multiversioned function must have a prototype", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,q,a}}, |
| [c]={K,1236199783,J,I}, | | [c]={bc,1515447257,cc,ac}, |
| [j]={{w,13842,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n // ...\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n // ...\n // Provide a specific diagnostic for uninitialized variable\n // definitions with reference type.\n if (Type->isReferenceType()) {\n Diag(Var->getLocation(), diag::err_reference_var_requires_init) << Var << SourceRange(Var->getLocation(), Var->getLocation());"}}, | | [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]={ |
| ["clang/test/SemaTemplate/instantiate-member-template.cpp"]={"clang/test/SemaTemplate/instantiate-member-template.cpp:72:21: error: declaration of reference variable \'value\' requires an initializer"} | | [wc]={"clang/test/Sema/attr-target-mv.c:20:39: error: multiversioned function must have a prototype"} |
| } | | } |
| }, | | }, |
| ["err_reference_without_init"]={ | | ["err_multiversion_not_allowed_on_main"]={ |
| [i]="err_reference_without_init", | | [i]={{nil,q,"err_multiversion_not_allowed_on_main"}}, |
| [h]="reference to type %0 requires an initializer", | | [h]={{nil,q,"\'main\' cannot be a multiversioned function"}}, |
| [g]="reference to type A requires an initializer", | | [g]={{nil,q,"\'main\' cannot be a multiversioned function"}}, |
| [b]=k, | | [b]=k, |
| [e]="reference to type (.*?) requires an initializer", | | [e]="\'main\' cannot be a multiversioned function", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,q,a}}, |
| [c]={"7ae2d7758f3f",1264929171,"Rework base and member initialization in constructors, with several","Rework base and member initialization in constructors, with several\n(necessarily simultaneous) changes:\n\n - CXXBaseOrMemberInitializer now contains only a single initializer\n rather than a set of initialiation arguments + a constructor. The\n single initializer covers all aspects of initialization, including\n constructor calls as necessary but also cleanup of temporaries\n created by the initializer (which we never handled\n before!).\n\n - Rework + simplify code generation for CXXBaseOrMemberInitializers,\n since we can now just emit the initializer as an initializer.\n\n - Switched base and member initialization over to the new\n initialization code (InitializationSequence), so that it\n\n - Improved diagnostics for the new initialization code when\n initializing bases and members, to match the diagnostics produced\n by the previous (special-purpose) code.\n\n - Simplify the representation of type-checked constructor initializers in\n templates; instead of keeping the fully-type-checked AST, which is\n rather hard to undo at template instantiation time, throw away the\n type-checked AST and store the raw expressions in the AST. This\n simplifies instantiation, but loses a little but of information in\n the AST.\n\n - When type-checking implicit base or member initializers within a\n dependent context, don\'t add the generated initializers into the\n AST, because they\'ll look like they were explicit.\n\n - Record in CXXConstructExpr when the constructor call is to\n initialize a base class, so that CodeGen does not have to infer it\n from context. This ensures that we call the right kind of\n constructor.\n\nThere are also a few \"opportunity\" fixes here that were needed to not\nregress, for example:\n\n - Diagnose default-initialization of a const-qualified class that\n does not have a user-declared default constructor. We had this\n diagnostic specifically for bases and members, but missed it for\n variables. That\'s fixed now.\n\n - When defining the implicit constructors, destructor, and\n copy-assignment operator, set the CurContext to that constructor\n when we\'re defining the body.\n\nllvm-svn: 94952"}, | | [c]={bc,1515447257,cc,ac}, |
| [j]={{Q,9431,"/// Somewhere within T there is an uninitialized reference subobject.\n/// Dig it out and diagnose it.\nstatic bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, QualType T) {\n if (T->isReferenceType()) {\n S.Diag(Loc, diag::err_reference_without_init) << T.getNonReferenceType();"}},
| | [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]={ |
| ["clang/test/SemaObjCXX/property-synthesis-error.mm"]={"clang/test/SemaObjCXX/property-synthesis-error.mm:94:47: error: reference to type \'int\' requires an initializer"} | | ["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:84:48: error: \'main\' cannot be a multiversioned function"} |
| } | | } |
| }, | | }, |
| ["err_regparm_mismatch"]={ | | ["err_multiversion_not_supported"]={ |
| [i]="err_regparm_mismatch", | | [i]={{nil,q,"err_multiversion_not_supported"}}, |
| [h]="function declared with regparm(%0) attribute was previously declared %plural{0:without the regparm|:with the regparm(%1)}1 attribute", | | [h]={{nil,q,"function multiversioning is not supported on the current target"}}, |
| [g]={{nil,nil,{"function declared with regparm(A) attribute was previously declared ",{"without the regparm","with the regparm(B)"}," attribute"}}}, | | [g]={{nil,q,"function multiversioning is not supported on the current target"}}, |
| [b]=k, | | [b]=k, |
| [e]="function declared with regparm\\((.*?)\\) attribute was previously declared (?:without the regparm|with the regparm\\((.*?)\\)) attribute", | | [e]="function multiversioning is not supported on the current target", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,q,a}}, |
| [c]={"77e274fbc67d",1276896625,"Merge the \"regparm\" attribute from a previous declaration of a","Merge the \"regparm\" attribute from a previous declaration of a\nfunction to redeclarations of that function. Fixes PR7025.\n\nllvm-svn: 106317"}, | | [c]={bc,1515447257,cc,ac}, |
| [j]={{w,3831,"/// 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 // Merge regparm attribute.\n if (OldTypeInfo.getHasRegParm() != NewTypeInfo.getHasRegParm() || OldTypeInfo.getRegParm() != NewTypeInfo.getRegParm()) {\n if (NewTypeInfo.getHasRegParm()) {\n Diag(New->getLocation(), diag::err_regparm_mismatch) << NewType->getRegParmType() << OldType->getRegParmType();"}}, | | [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]={ |
| ["clang/test/Sema/attr-regparm.c"]={"clang/test/Sema/attr-regparm.c:11:34: error: function declared with regparm(2) attribute was previously declared with the regparm(3) attribute","clang/test/Sema/attr-regparm.c:14:26: error: function declared with regparm(2) attribute was previously declared with the regparm(3) attribute"} | | ["clang/test/Sema/attr-target-mv-bad-target.c"]={"clang/test/Sema/attr-target-mv-bad-target.c:6:37: error: function multiversioning is not supported on the current target","clang/test/Sema/attr-target-mv-bad-target.c:9:40: error: function multiversioning is not supported on the current target"} |
| } | | } |
| }, | | }, |
| ["err_relocatable_without_isysroot"]={ | | ["err_multiversion_required_in_redecl"]={ |
| [i]="err_relocatable_without_isysroot", | | [i]={{nil,q,"err_multiversion_required_in_redecl"}}, |
| [h]="must specify system root with -isysroot when building a relocatable PCH file", | | [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"}}, |
| [g]="must specify system root with -isysroot when building a relocatable PCH file", | | [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"}}}, |
| [b]=k, | | [b]=k, |
| [e]="must specify system root with \\-isysroot when building a relocatable PCH file", | | [e]="function declaration is missing (?:\'target\'|\'cpu_specific\' or \'cpu_dispatch\'|\'target_version\') attribute in a multiversioned function", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={"ea68af43e80d",1282067738,"Fix a typo in a diag name.","Fix a typo in a diag name.\n\nllvm-svn: 111257"}, | | [f]={{nil,q,a}}, |
| [j]={{"clang/lib/Frontend/FrontendActions.cpp",156,"bool GeneratePCHAction::ComputeASTConsumerArguments(CompilerInstance &CI, std::string &Sysroot) {\n // ...\n if (CI.getFrontendOpts().RelocatablePCH && Sysroot.empty()) {\n CI.getDiagnostics().Report(diag::err_relocatable_without_isysroot);"}} | | [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"}, |
| },
| | [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);"}}, |
| ["err_repeat_attribute"]={
| |
| [i]="err_repeat_attribute",
| |
| [h]="%0 attribute cannot be repeated",
| |
| [g]="A attribute cannot be repeated",
| |
| [b]=k,
| |
| [e]="(.*?) attribute cannot be repeated",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"54a025488774",1259122827,"Parse C++ member check attributes - base_check, hiding, and override.","Parse C++ member check attributes - base_check, hiding, and override.\nThe attributes are currently ignored.\n\nllvm-svn: 89837"},
| |
| [j]={{db,2287,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (VecReturnAttr *A = D->getAttr<VecReturnAttr>()) {\n S.Diag(AL.getLoc(), diag::err_repeat_attribute) << A;"}},
| |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/cxx-altivec.cpp"]={"clang/test/SemaCXX/cxx-altivec.cpp:5:45: error: \'vecreturn\' attribute cannot be repeated"} | | [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"} |
| } | | } |
| }, | | }, |
| ["err_require_constant_init_failed"]={ | | ["err_multiversion_types_mixed"]={ |
| [i]="err_require_constant_init_failed", | | [i]={{nil,q,"err_multiversion_types_mixed"}}, |
| [h]="variable does not have a constant initializer", | | [h]={{nil,q,"multiversioning attributes cannot be combined"}}, |
| [g]="variable does not have a constant initializer", | | [g]={{nil,q,"multiversioning attributes cannot be combined"}}, |
| [b]=k, | | [b]=k, |
| [e]="variable does not have a constant initializer", | | [e]="multiversioning attributes cannot be combined", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,q,a}}, |
| [c]={"92f8935e63f0",1472840729,"Implement __attribute__((require_constant_initialization)) for safe static initialization.","Implement __attribute__((require_constant_initialization)) for safe static initialization.\n\nSummary:\nThis attribute specifies expectations about the initialization of static and\nthread local variables. Specifically that the variable has a\n[constant initializer](http://en.cppreference.com/w/cpp/language/constant_initialization)\naccording to the rules of [basic.start.static]. Failure to meet this expectation\nwill result in an error.\n\nStatic objects with constant initializers avoid hard-to-find bugs caused by\nthe indeterminate order of dynamic initialization. They can also be safely\nused by other static constructors across translation units.\n\nThis attribute acts as a compile time assertion that the requirements\nfor constant initialization have been met. Since these requirements change\nbetween dialects and have subtle pitfalls it\'s important to fail fast instead\nof silently falling back on dynamic initialization.\n\n```c++\n // -std=c++14\n #define SAFE_STATIC __attribute__((require_constant_initialization)) static\n struct T {\n constexpr T(int) {}\n ~T();\n };\n SAFE_STATIC T x = {42}; // OK.\n SAFE_STATIC T y = 42; // error: variable does not have a constant initializer\n // copy initialization is not a constant expression on a non-literal type.\n```\nThis attribute can only be applied to objects with static or thread-local storage\nduration.\n\nReviewers: majnemer, rsmith, aaron.ballman\n\nSubscribers: jroelofs, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D23385\n\nllvm-svn: 280516"}, | | [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"}, |
| [j]={{w,14227,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n // ...\n // Check whether the initializer is sufficiently constant.\n if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n // ...\n if (HasConstInit) {\n // ...\n } else if (var->isConstexpr()) {\n // ...\n } else if (GlobalStorage && var->hasAttr<ConstInitAttr>()) {\n // ...\n Diag(var->getLocation(), diag::err_require_constant_init_failed) << Init->getSourceRange();"}}, | | [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]={ |
| ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp:6:23: error: variable does not have a constant initializer"} | | ["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:32:57: error: multiversioning attributes cannot be combined"} |
| } | | } |
| }, | | }, |
| ["err_requires_clause_inside_parens"]={ | | ["err_musttail_callconv_mismatch"]={ |
| [i]={{nil,p,"err_requires_clause_inside_parens"}}, | | [i]={{nil,u,"err_musttail_callconv_mismatch"}}, |
| [h]={{nil,p,"trailing requires clause should be placed outside parentheses"}}, | | [h]={{nil,u,"cannot perform a tail call to function%select{| %1}0 because it uses an incompatible calling convention"}}, |
| [g]={{nil,p,"trailing requires clause should be placed outside parentheses"}}, | | [g]={{nil,u,{"cannot perform a tail call to function",{a," B"}," because it uses an incompatible calling convention"}}}, |
| [b]=k, | | [b]=k, |
| [e]="trailing requires clause should be placed outside parentheses", | | [e]="cannot perform a tail call to function(?:| (.*?)) because it uses an incompatible calling convention", |
| [f]=a, | | [d]=a, |
| [d]={{nil,p,x}}, | | [f]={{nil,u,m}}, |
| [c]={hc,1570627358,nc,oc}, | | [c]={vb,1607502387,rb,nb}, |
| [j]={{jb,6714,"PastIdentifier:\n // ...\n while (true) {\n if (Tok.is(tok::l_paren)) {\n // ...\n } else if (Tok.is(tok::l_square)) {\n // ...\n } else if (Tok.isRegularKeywordAttribute()) {\n // ...\n } else if (Tok.is(tok::kw_requires) && D.hasGroupingParens()) {\n // ...\n Diag(Tok, diag::err_requires_clause_inside_parens);"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:18:21: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:43:12: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:44:12: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:49:30: error: trailing requires clause should be placed outside parentheses"} | | [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"} |
| } | | } |
| }, | | }, |
| ["err_requires_clause_must_appear_after_trailing_return"]={ | | ["err_musttail_forbidden_from_this_context"]={ |
| [i]={{nil,p,"err_requires_clause_must_appear_after_trailing_return"}}, | | [i]={{nil,u,"err_musttail_forbidden_from_this_context"}}, |
| [h]={{nil,p,"trailing return type must appear before trailing requires clause"}}, | | [h]={{nil,u,"%0 attribute cannot be used from %select{a block|an Objective-C function|this context}1"}}, |
| [g]={{nil,p,"trailing return type must appear before trailing requires clause"}}, | | [g]={{nil,u,{"A attribute cannot be used from ",{"a block","an Objective-C function","this context"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="trailing return type must appear before trailing requires clause", | | [e]="(.*?) attribute cannot be used from (?:a block|an Objective\\-C function|this context)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,p,x}}, | | [f]={{nil,u,m}}, |
| [c]={hc,1570627358,nc,oc}, | | [c]={vb,1607502387,rb,nb}, |
| [j]={{Qb,4142,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n // ...\n // Did the user swap the trailing return type and requires clause?\n if (D.isFunctionDeclarator() && Tok.is(tok::arrow) && D.getDeclSpec().getTypeSpecType() == TST_auto) {\n // ...\n if (!TrailingReturnType.isInvalid()) {\n Diag(ArrowLoc, diag::err_requires_clause_must_appear_after_trailing_return) << Range;"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:15:40: error: trailing return type must appear before trailing requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:37:30: error: trailing return type must appear before trailing requires clause"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_requires_clause_on_declarator_not_declaring_a_function"]={ | | ["err_musttail_member_mismatch"]={ |
| [i]={{nil,p,"err_requires_clause_on_declarator_not_declaring_a_function"}}, | | [i]={{nil,u,"err_musttail_member_mismatch"}}, |
| [h]={{nil,p,"trailing requires clause can only be used when declaring a function"}}, | | [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"}}, |
| [g]={{nil,p,"trailing requires clause can only be used when declaring a function"}}, | | [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"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="trailing requires clause can only be used when declaring a function", | | [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(?:| (.*?))", |
| [f]=a, | | [d]=a, |
| [d]={{nil,p,x}}, | | [f]={{nil,u,m}}, |
| [c]={hc,1570627358,nc,oc}, | | [c]={vb,1607502387,rb,nb}, |
| [j]={{jb,7375,"/// 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 (Tok.is(tok::kw_requires)) {\n // ...\n Diag(Tok, diag::err_requires_clause_on_declarator_not_declaring_a_function);"},{Qb,4122,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n // ...\n if (!D.isDeclarationOfFunction()) {\n Diag(RequiresKWLoc, diag::err_requires_clause_on_declarator_not_declaring_a_function);"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:46:14: error: trailing requires clause can only be used when declaring a function","clang/test/CXX/dcl/dcl.decl/p3.cpp:47:25: error: trailing requires clause can only be used when declaring a function","clang/test/CXX/dcl/dcl.decl/p3.cpp:48:30: error: trailing requires clause can only be used when declaring a function"} | | [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"} |
| } | | } |
| }, | | }, |
| ["err_requires_expr_expected_type_constraint"]={ | | ["err_musttail_mismatch"]={ |
| [i]={{nil,p,"err_requires_expr_expected_type_constraint"}}, | | [i]={{nil,u,"err_musttail_mismatch"}}, |
| [h]={{nil,p,"expected concept name with optional arguments"}}, | | [h]={{nil,u,"cannot perform a tail call to function%select{| %1}0 because its signature is incompatible with the calling function"}}, |
| [g]={{nil,p,"expected concept name with optional arguments"}}, | | [g]={{nil,u,{"cannot perform a tail call to function",{a," B"}," because its signature is incompatible with the calling function"}}}, |
| [b]=k, | | [b]=k, |
| [e]="expected concept name with optional arguments", | | [e]="cannot perform a tail call to function(?:| (.*?)) because its signature is incompatible with the calling function", |
| [f]=a, | | [d]=a, |
| [d]={{nil,p,x}}, | | [f]={{nil,u,m}}, |
| [c]={hc,1570627358,nc,oc}, | | [c]={vb,1607502387,rb,nb}, |
| [j]={{Vb,3591,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n/// A requires-expression provides a concise way to express requirements on\n/// template arguments. A requirement is one that can be checked by name\n/// lookup (6.4) or by checking properties of types and expressions.\n///\n/// requires-expression:\n/// \'requires\' requirement-parameter-list[opt] requirement-body\n///\n/// requirement-parameter-list:\n/// \'(\' parameter-declaration-clause[opt] \')\'\n///\n/// requirement-body:\n/// \'{\' requirement-seq \'}\'\n///\n/// requirement-seq:\n/// requirement\n/// requirement-seq requirement\n///\n/// requirement:\n/// simple-requirement\n/// type-requirement\n/// compound-requirement\n/// nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n // ...\n if (Tok.is(tok::r_brace)) {\n // ...\n } else {\n while (!Tok.is(tok::r_brace)) {\n // ...\n case tok::l_brace: {\n // ...\n if (!isTypeConstraintAnnotation()) {\n Diag(Tok, diag::err_requires_expr_expected_type_constraint);"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| [Mc]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:97:38: error: expected concept name with optional arguments"} | | [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"} |
| } | | } |
| }, | | }, |
| ["err_requires_expr_in_simple_requirement"]={ | | ["err_musttail_needs_call"]={ |
| [i]={{nil,C,"err_requires_expr_in_simple_requirement"}}, | | [i]={{nil,u,"err_musttail_needs_call"}}, |
| [h]={{nil,C,"requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)"}}, | | [h]={{nil,u,"%0 attribute requires that the return value is the result of a function call"}}, |
| [g]={{nil,C,"requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)"}}, | | [g]={{nil,u,"A attribute requires that the return value is the result of a function call"}}, |
| [b]=k, | | [b]=k, |
| [e]="requires expression in requirement body; did you intend to place it in a nested requirement\\? \\(add another \'requires\' before the expression\\)", | | [e]="(.*?) attribute requires that the return value is the result of a function call", |
| [f]=a, | | [d]=a, |
| [d]={{nil,C,x}}, | | [f]={{nil,u,m}}, |
| [c]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions.","[C++20][Modules][3/8] Initial handling for module partitions.\n\nThis implements the parsing and recognition of module partition CMIs\nand removes the FIXMEs in the parser.\n\nModule partitions are recognised in the base computation of visibility,\nhowever additional amendments to visibility follow in subsequent patches.\n\nDifferential Revision: https://reviews.llvm.org/D118586"}, | | [c]={vb,1607502387,rb,nb}, |
| [j]={{Vb,3736,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n/// A requires-expression provides a concise way to express requirements on\n/// template arguments. A requirement is one that can be checked by name\n/// lookup (6.4) or by checking properties of types and expressions.\n///\n/// requires-expression:\n/// \'requires\' requirement-parameter-list[opt] requirement-body\n///\n/// requirement-parameter-list:\n/// \'(\' parameter-declaration-clause[opt] \')\'\n///\n/// requirement-body:\n/// \'{\' requirement-seq \'}\'\n///\n/// requirement-seq:\n/// requirement\n/// requirement-seq requirement\n///\n/// requirement:\n/// simple-requirement\n/// type-requirement\n/// compound-requirement\n/// nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n // ...\n if (Tok.is(tok::r_brace)) {\n // ...\n } else {\n while (!Tok.is(tok::r_brace)) {\n // ...\n default: {\n // ...\n if (!Expression.isInvalid() && PossibleRequiresExprInSimpleRequirement)\n Diag(StartLoc, diag::err_requires_expr_in_simple_requirement) << FixItHint::CreateInsertion(StartLoc, \"requires\");"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| [Mc]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:137:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:140:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:143:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)"} | | [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"} |
| } | | } |
| }, | | }, |
| ["err_requires_expr_local_parameter_default_argument"]={ | | ["err_musttail_needs_prototype"]={ |
| [i]={{nil,p,"err_requires_expr_local_parameter_default_argument"}}, | | [i]={{nil,u,"err_musttail_needs_prototype"}}, |
| [h]={{nil,p,"default arguments not allowed for parameters of a requires expression"}}, | | [h]={{nil,u,"%0 attribute requires that both caller and callee functions have a prototype"}}, |
| [g]={{nil,p,"default arguments not allowed for parameters of a requires expression"}}, | | [g]={{nil,u,"A attribute requires that both caller and callee functions have a prototype"}}, |
| [b]=k, | | [b]=k, |
| [e]="default arguments not allowed for parameters of a requires expression", | | [e]="(.*?) attribute requires that both caller and callee functions have a prototype", |
| [f]=a, | | [d]=a, |
| [d]={{nil,p,m}}, | | [f]={{nil,u,m}}, |
| [c]={vc,1576172311,wc,xc}, | | [c]={vb,1607502387,rb,nb}, |
| [j]={{P,9162,"RequiresExprBodyDecl *Sema::ActOnStartRequiresExpr(SourceLocation RequiresKWLoc, ArrayRef<ParmVarDecl *> LocalParameters, Scope *BodyScope) {\n // ...\n for (ParmVarDecl *Param : LocalParameters) {\n if (Param->hasDefaultArg())\n // ...\n Diag(Param->getDefaultArgRange().getBegin(), diag::err_requires_expr_local_parameter_default_argument);"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| [Mc]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:37:30: error: default arguments not allowed for parameters of a requires expression"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_requires_expr_missing_arrow"]={ | | ["err_musttail_needs_trivial_args"]={ |
| [i]={{nil,p,"err_requires_expr_missing_arrow"}}, | | [i]={{nil,u,"err_musttail_needs_trivial_args"}}, |
| [h]={{nil,p,"expected \'->\' before expression type requirement"}}, | | [h]={{nil,u,"tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible"}}, |
| [g]={{nil,p,"expected \'->\' before expression type requirement"}}, | | [g]={{nil,u,"tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible"}}, |
| [b]=k, | | [b]=k, |
| [e]="expected \'\\-\\>\' before expression type requirement", | | [e]="tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible", |
| [f]=a, | | [d]=a, |
| [d]={{nil,p,x}}, | | [f]={{nil,u,m}}, |
| [c]={hc,1570627358,nc,oc}, | | [c]={vb,1607502387,rb,nb}, |
| [j]={{Vb,3583,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n/// A requires-expression provides a concise way to express requirements on\n/// template arguments. A requirement is one that can be checked by name\n/// lookup (6.4) or by checking properties of types and expressions.\n///\n/// requires-expression:\n/// \'requires\' requirement-parameter-list[opt] requirement-body\n///\n/// requirement-parameter-list:\n/// \'(\' parameter-declaration-clause[opt] \')\'\n///\n/// requirement-body:\n/// \'{\' requirement-seq \'}\'\n///\n/// requirement-seq:\n/// requirement\n/// requirement-seq requirement\n///\n/// requirement:\n/// simple-requirement\n/// type-requirement\n/// compound-requirement\n/// nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n // ...\n if (Tok.is(tok::r_brace)) {\n // ...\n } else {\n while (!Tok.is(tok::r_brace)) {\n // ...\n case tok::l_brace: {\n // ...\n if (!TryConsumeToken(tok::arrow))\n // ...\n Diag(Tok, diag::err_requires_expr_missing_arrow) << FixItHint::CreateInsertion(Tok.getLocation(), \"->\");"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| [Mc]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:97:38: error: expected \'->\' before expression type requirement","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:107:38: error: expected \'->\' before expression type requirement"} | | [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"} |
| } | | } |
| }, | | }, |
| ["err_requires_expr_parameter_list_ellipsis"]={ | | ["err_musttail_no_variadic"]={ |
| [i]={{nil,p,"err_requires_expr_parameter_list_ellipsis"}}, | | [i]={{nil,u,"err_musttail_no_variadic"}}, |
| [h]={{nil,p,"varargs not allowed in requires expression"}}, | | [h]={{nil,u,"%0 attribute may not be used with variadic functions"}}, |
| [g]={{nil,p,"varargs not allowed in requires expression"}}, | | [g]={{nil,u,"A attribute may not be used with variadic functions"}}, |
| [b]=k, | | [b]=k, |
| [e]="varargs not allowed in requires expression", | | [e]="(.*?) attribute may not be used with variadic functions", |
| [f]=a, | | [d]=a, |
| [d]={{nil,p,x}}, | | [f]={{nil,u,m}}, |
| [c]={hc,1570627358,nc,oc}, | | [c]={vb,1607502387,rb,nb}, |
| [j]={{Vb,3511,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n/// A requires-expression provides a concise way to express requirements on\n/// template arguments. A requirement is one that can be checked by name\n/// lookup (6.4) or by checking properties of types and expressions.\n///\n/// requires-expression:\n/// \'requires\' requirement-parameter-list[opt] requirement-body\n///\n/// requirement-parameter-list:\n/// \'(\' parameter-declaration-clause[opt] \')\'\n///\n/// requirement-body:\n/// \'{\' requirement-seq \'}\'\n///\n/// requirement-seq:\n/// requirement\n/// requirement-seq requirement\n///\n/// requirement:\n/// simple-requirement\n/// type-requirement\n/// compound-requirement\n/// nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n // ...\n if (Tok.is(tok::l_paren)) {\n // ...\n if (!Tok.is(tok::r_paren)) {\n // ...\n if (EllipsisLoc.isValid())\n Diag(EllipsisLoc, diag::err_requires_expr_parameter_list_ellipsis);"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| [Mc]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:8:28: error: varargs not allowed in requires expression"} | | [Ub]={"clang/test/SemaCXX/attr-musttail.cpp:129:23: error: \'musttail\' attribute may not be used with variadic functions"} |
| } | | } |
| }, | | }, |
| ["err_requires_expr_parameter_referenced_in_evaluated_context"]={ | | ["err_musttail_scope"]={ |
| [i]={{nil,p,"err_requires_expr_parameter_referenced_in_evaluated_context"}}, | | [i]={{nil,u,"err_musttail_scope"}}, |
| [h]={{nil,p,"constraint variable %0 cannot be used in an evaluated context"}}, | | [h]={{nil,u,"cannot perform a tail call from this return statement"}}, |
| [g]={{nil,p,"constraint variable A cannot be used in an evaluated context"}}, | | [g]={{nil,u,"cannot perform a tail call from this return statement"}}, |
| [b]=k, | | [b]=k, |
| [e]="constraint variable (.*?) cannot be used in an evaluated context", | | [e]="cannot perform a tail call from this return statement", |
| [f]=a, | | [d]=a, |
| [d]={{nil,p,m}}, | | [f]={{nil,u,m}}, |
| [c]={vc,1576172311,wc,xc}, | | [c]={vb,1607502387,rb,nb}, |
| [j]={{n,404,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n // ...\n if (isa<ParmVarDecl>(D) && isa<RequiresExprBodyDecl>(D->getDeclContext()) && !isUnevaluatedContext()) {\n // ...\n Diag(Loc, diag::err_requires_expr_parameter_referenced_in_evaluated_context) << D;"}}, | | [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]={ |
| ["clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp:104:65: error: constraint variable \'x\' cannot be used in an evaluated context"} | | ["clang/test/Sema/attr-musttail.m"]={"clang/test/Sema/attr-musttail.m:13:3: error: cannot perform a tail call from this return statement"} |
| } | | } |
| }, | | }, |
| ["err_requires_expr_simple_requirement_noexcept"]={ | | ["err_musttail_structors_forbidden"]={ |
| [i]={{nil,p,"err_requires_expr_simple_requirement_noexcept"}}, | | [i]={{nil,u,"err_musttail_structors_forbidden"}}, |
| [h]={{nil,p,"\'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)"}}, | | [h]={{nil,u,"cannot perform a tail call %select{from|to}0 a %select{constructor|destructor}1"}}, |
| [g]={{nil,p,"\'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)"}}, | | [g]={{nil,u,{"cannot perform a tail call ",{"from","to"}," a ",{B,A}}}}, |
| [b]=k, | | [b]=k, |
| [e]="\'noexcept\' can only be used in a compound requirement \\(with \'\\{\' \'\\}\' around the expression\\)", | | [e]="cannot perform a tail call (?:from|to) a (?:constructor|destructor)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,p,x}}, | | [f]={{nil,u,m}}, |
| [c]={hc,1570627358,nc,oc}, | | [c]={vb,1607502387,rb,nb}, |
| [j]={{Vb,3746,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n/// A requires-expression provides a concise way to express requirements on\n/// template arguments. A requirement is one that can be checked by name\n/// lookup (6.4) or by checking properties of types and expressions.\n///\n/// requires-expression:\n/// \'requires\' requirement-parameter-list[opt] requirement-body\n///\n/// requirement-parameter-list:\n/// \'(\' parameter-declaration-clause[opt] \')\'\n///\n/// requirement-body:\n/// \'{\' requirement-seq \'}\'\n///\n/// requirement-seq:\n/// requirement\n/// requirement-seq requirement\n///\n/// requirement:\n/// simple-requirement\n/// type-requirement\n/// compound-requirement\n/// nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n // ...\n if (Tok.is(tok::r_brace)) {\n // ...\n } else {\n while (!Tok.is(tok::r_brace)) {\n // ...\n default: {\n // ...\n // User may have tried to put some compound requirement stuff here\n if (Tok.is(tok::kw_noexcept)) {\n Diag(Tok, diag::err_requires_expr_simple_requirement_noexcept) << FixItHint::CreateInsertion(StartLoc, \"{\") << FixItHint::CreateInsertion(Tok.getLocation(), \"}\");"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| [Mc]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:122:25: error: \'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)"} | | [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"} |
| } | | } |
| }, | | }, |
| ["err_restricted_superclass_mismatch"]={ | | ["err_mutable_const"]={ |
| [i]="err_restricted_superclass_mismatch", | | [i]="err_mutable_const", |
| [h]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute", | | [h]="\'mutable\' and \'const\' cannot be mixed", |
| [g]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute", | | [g]="\'mutable\' and \'const\' cannot be mixed", |
| [b]=k, | | [b]=k, |
| [e]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute", | | [e]="\'mutable\' and \'const\' cannot be mixed", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"a8c44ba2c01e",1477650310,"[Objective-C] Add objc_subclassing_restricted attribute","[Objective-C] Add objc_subclassing_restricted attribute\n\nThis patch adds an objc_subclassing_restricted attribute into clang. This\nattribute acts similarly to \'final\' - Objective-C classes with this attribute\ncan\'t be subclassed. However, @interface declarations that have\nobjc_subclassing_restricted but don\'t have @implementation are allowed to\ninherit other @interface declarations with objc_subclassing_restricted. This is\nneeded to describe the Swift class hierarchy in clang while making sure that\nthe Objective-C classes cannot subclass the Swift classes.\n\nThis attribute is already implemented in a fork of clang that\'s used for Swift\n(https://github.com/apple/swift-clang) and this patch moves that code to the\nupstream clang repository.\n\nrdar://28937548\n\nDifferential Revision: https://reviews.llvm.org/D25993\n\nllvm-svn: 285391"}, | | [c]={H,1236199783,I,G}, |
| [j]={{Kb,4165,"// 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 (const ObjCInterfaceDecl *Super = IDecl->getSuperClass()) {\n // An interface can subclass another interface with a\n // objc_subclassing_restricted attribute when it has that attribute as\n // well (because of interfaces imported from Swift). Therefore we have\n // to check if we can subclass in the implementation as well.\n if (IDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n Diag(IC->getLocation(), diag::err_restricted_superclass_mismatch);"},{Kb,4197,"// 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 } else if (ObjCCategoryImplDecl *CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassDecl)) {\n // ...\n } else if (const auto *IntfDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) {\n if (const ObjCInterfaceDecl *Super = IntfDecl->getSuperClass()) {\n if (!IntfDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n Diag(IntfDecl->getLocation(), diag::err_restricted_superclass_mismatch);"}}, | | [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]={ |
| ["clang/test/SemaObjC/subclassing-restricted-attr.m"]={"clang/test/SemaObjC/subclassing-restricted-attr.m:14:12: error: cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute","clang/test/SemaObjC/subclassing-restricted-attr.m:35:17: error: cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute"} | | ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:7:3: error: \'mutable\' and \'const\' cannot be mixed","clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:8:3: error: \'mutable\' and \'const\' cannot be mixed"} |
| } | | } |
| }, | | }, |
| ["err_ret_local_block"]={ | | ["err_mutable_function"]={ |
| [i]="err_ret_local_block", | | [i]="err_mutable_function", |
| [h]="returning block that lives on the local stack", | | [h]="\'mutable\' cannot be applied to functions", |
| [g]="returning block that lives on the local stack", | | [g]="\'mutable\' cannot be applied to functions", |
| [b]=k, | | [b]=k, |
| [e]="returning block that lives on the local stack", | | [e]="\'mutable\' cannot be applied to functions", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={u,1237025389,s,t}, | | [c]={H,1236199783,I,G}, |
| [j]={{Q,8262,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n // ...\n auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n // ...\n case LK_Return:\n case LK_StmtExprResult:\n if (auto *DRE = dyn_cast<DeclRefExpr>(L)) {\n // ...\n } else if (isa<BlockExpr>(L)) {\n Diag(DiagLoc, diag::err_ret_local_block) << DiagRange;"}}, | | [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/Analysis/stack-block-returned.cpp"]={"clang/test/Analysis/stack-block-returned.cpp:8:10: error: returning block that lives on the local stack"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_rethrow_used_outside_catch"]={ | | ["err_mutable_nonmember"]={ |
| [i]="err_rethrow_used_outside_catch", | | [i]="err_mutable_nonmember", |
| [h]="@throw (rethrow) used outside of a @catch block", | | [h]="\'mutable\' can only be applied to member variables", |
| [g]="@throw (rethrow) used outside of a @catch block", | | [g]="\'mutable\' can only be applied to member variables", |
| [b]=k, | | [b]=k, |
| [e]="@throw \\(rethrow\\) used outside of a @catch block", | | [e]="\'mutable\' can only be applied to member variables", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={wb,1480718311,vb,tb}, | | [c]={H,1236199783,I,G}, |
| [j]={{Z,4292,"StmtResult Sema::ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw, Scope *CurScope) {\n // ...\n if (!Throw) {\n // ...\n if (!AtCatchParent)\n return StmtError(Diag(AtLoc, diag::err_rethrow_used_outside_catch));"}}, | | [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]={ |
| ["clang/test/SemaObjC/try-catch.m"]={"clang/test/SemaObjC/try-catch.m:51:3: error: @throw (rethrow) used outside of a @catch block"} | | ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:11:3: error: \'mutable\' can only be applied to member variables"} |
| } | | } |
| }, | | }, |
| ["err_return_block_has_expr"]={ | | ["err_mutable_reference"]={ |
| [i]="err_return_block_has_expr", | | [i]="err_mutable_reference", |
| [h]="void block should not return a value", | | [h]="\'mutable\' cannot be applied to references", |
| [g]="void block should not return a value", | | [g]="\'mutable\' cannot be applied to references", |
| [b]=k, | | [b]=k, |
| [e]="void block should not return a value", | | [e]="\'mutable\' cannot be applied to references", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={u,1237025389,s,t}, | | [c]={H,1236199783,I,G}, |
| [j]={{Z,3688,"/// 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 // Otherwise, verify that this result type matches the previous one. We are\n // pickier with blocks than for normal functions because we don\'t have GCC\n // compatibility to worry about here.\n if (FnRetType->isDependentType()) {\n // ...\n } else if (FnRetType->isVoidType()) {\n if (RetValExp && !isa<InitListExpr>(RetValExp) && !(getLangOpts().CPlusPlus && (RetValExp->isTypeDependent() || RetValExp->getType()->isVoidType()))) {\n if (!getLangOpts().CPlusPlus && RetValExp->getType()->isVoidType())\n // ...\n else {\n Diag(ReturnLoc, diag::err_return_block_has_expr);"}} | | [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]={ |
| | ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:9:3: error: \'mutable\' cannot be applied to references","clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:10:3: error: \'mutable\' cannot be applied to references"} |
| | } |
| }, | | }, |
| ["err_return_in_captured_stmt"]={ | | ["err_namespace_nonnamespace_scope"]={ |
| [i]="err_return_in_captured_stmt", | | [i]="err_namespace_nonnamespace_scope", |
| [h]="cannot return from %0", | | [h]="namespaces can only be defined in global or namespace scope", |
| [g]="cannot return from A", | | [g]="namespaces can only be defined in global or namespace scope", |
| [b]=k, | | [b]=k, |
| [e]="cannot return from (.*?)", | | [e]="namespaces can only be defined in global or namespace scope", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=y, |
| [c]={"6dfa25a19f3f",1366141058,"Sema for Captured Statements","Sema for Captured Statements\n\nAdd CapturedDecl to be the DeclContext for CapturedStmt, and perform semantic\nanalysis. Currently captures all variables by reference.\n\nTODO: templates\n\nAuthor: Ben Langmuir <ben.langmuir@intel.com>\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D433\n\nllvm-svn: 179618"}, | | [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]={{Z,3661,"/// 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 Diag(ReturnLoc, diag::err_return_in_captured_stmt) << CurRegion->getRegionName();"}},
| | [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]={ |
| ["clang/test/Sema/captured-statements.c"]={"clang/test/Sema/captured-statements.c:30:7: error: cannot return from default captured statement"} | | ["clang/test/Parser/namespaces.cpp"]={"clang/test/Parser/namespaces.cpp:7:15: error: namespaces can only be defined in global or namespace scope"} |
| } | | } |
| }, | | }, |
| ["err_return_in_constructor_handler"]={ | | ["err_need_header_before_placement_new"]={ |
| [i]="err_return_in_constructor_handler", | | [i]={{nil,u,"err_need_header_before_placement_new"}}, |
| [h]="return in the catch of a function try block of a constructor is illegal", | | [h]={{nil,u,"no matching %0 function for non-allocating placement new expression; include <new>"}}, |
| [g]="return in the catch of a function try block of a constructor is illegal", | | [g]={{nil,u,"no matching A function for non-allocating placement new expression; include <new>"}}, |
| [b]=k, | | [b]=k, |
| [e]="return in the catch of a function try block of a constructor is illegal", | | [e]="no matching (.*?) function for non\\-allocating placement new expression; include \\<new\\>", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,u,m}}, |
| [c]={"4c018663b22c",1240868004,"Track down return statements in the handlers of a function-try-block of constructors. Meh ...","Track down return statements in the handlers of a function-try-block of constructors. Meh ...\n\nllvm-svn: 70256"}, | | [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"}, |
| [j]={{H,17943,"static void SearchForReturnInStmt(Sema &Self, Stmt *S) {\n for (Stmt *SubStmt : S->children()) {\n // ...\n if (isa<ReturnStmt>(SubStmt))\n Self.Diag(SubStmt->getBeginLoc(), diag::err_return_in_constructor_handler);"}}, | | [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]={ |
| [ed]={"clang/test/SemaCXX/exceptions.cpp:86:11: error: return in the catch of a function try block of a constructor is illegal","clang/test/SemaCXX/exceptions.cpp:98:5: error: return in the catch of a function try block of a constructor is illegal","clang/test/SemaCXX/exceptions.cpp:102:9: error: return in the catch of a function try block of a constructor is illegal"} | | ["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:136:9: error: no matching \'operator new\' function for non-allocating placement new expression; include <new>","clang/test/SemaCXX/new-delete.cpp:152:9: error: no matching \'operator new\' function for non-allocating placement new expression; include <new>","clang/test/SemaCXX/new-delete.cpp:153:9: error: no matching \'operator new\' function for non-allocating placement new expression; include <new>","clang/test/SemaCXX/new-delete.cpp:154:9: error: no matching \'operator new\' function for non-allocating placement new expression; include <new>"} |
| } | | } |
| }, | | }, |
| ["err_return_in_coroutine"]={ | | ["err_need_header_before_typeid"]={ |
| [i]="err_return_in_coroutine", | | [i]="err_need_header_before_typeid", |
| [h]="return statement not allowed in coroutine; did you mean \'co_return\'?", | | [h]="you need to include <typeinfo> before using the \'typeid\' operator", |
| [g]="return statement not allowed in coroutine; did you mean \'co_return\'?", | | [g]="you need to include <typeinfo> before using the \'typeid\' operator", |
| [b]=k, | | [b]=k, |
| [e]="return statement not allowed in coroutine; did you mean \'co_return\'\\?", | | [e]="you need to include \\<typeinfo\\> before using the \'typeid\' operator", |
| [f]=a, | | [d]=a, |
| [d]="Coroutines Issue", | | [f]=m, |
| [c]={"cfd53b4e9993",1445494430,"[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return.","[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return.\n\nllvm-svn: 250993"}, | | [c]={hb,1237025389,gb,fb}, |
| [j]={{"clang/lib/Sema/SemaCoroutine.cpp",1123,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n // ...\n // [stmt.return.coroutine]p1:\n // A coroutine shall not enclose a return statement ([stmt.return]).\n if (Fn->FirstReturnLoc.isValid()) {\n // ...\n Diag(Fn->FirstReturnLoc, diag::err_return_in_coroutine);"}}, | | [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]={ |
| ["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:200:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:206:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:213:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:220:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:227:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:232:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:238:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:245:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:252:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:264:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:272:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:281:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:291:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?"} | | ["clang/test/SemaCXX/cxx1z-copy-omission.cpp"]={"clang/test/SemaCXX/cxx1z-copy-omission.cpp:109:3: error: you need to include <typeinfo> before using the \'typeid\' operator","clang/test/SemaCXX/cxx1z-copy-omission.cpp:110:3: error: you need to include <typeinfo> before using the \'typeid\' operator","clang/test/SemaCXX/cxx1z-copy-omission.cpp:112:3: error: you need to include <typeinfo> before using the \'typeid\' operator"} |
| } | | } |
| }, | | }, |
| ["err_return_init_list"]={ | | ["err_nested_name_member_ref_lookup_ambiguous"]={ |
| [i]="err_return_init_list", | | [i]="err_nested_name_member_ref_lookup_ambiguous", |
| [h]="%select{void function|void method|constructor|destructor}1 %0 must not return a value", | | [h]="lookup of %0 in member access expression is ambiguous", |
| [g]={{nil,nil,{{"void function","void method","constructor","destructor"}," A must not return a value"}}}, | | [g]="lookup of A in member access expression is ambiguous", |
| [b]=k, | | [b]=k, |
| [e]="(?:void function|void method|constructor|destructor) (.*?) must not return a value", | | [e]="lookup of (.*?) in member access expression is ambiguous", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"eef474ce1bc8",1329907808,"Fix parsing and processing initializer lists in return statements and as direct member initializers.","Fix parsing and processing initializer lists in return statements and as direct member initializers.\n\nllvm-svn: 151155"}, | | [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"}, |
| [j]={{Z,4063,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n // ...\n if (FnRetType->isVoidType()) {\n if (RetValExp) {\n if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n // ...\n Diag(ReturnLoc, diag::err_return_init_list) << CurDecl << FunctionKind << RetValExp->getSourceRange();"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/return-void.cpp"]={"clang/test/SemaCXX/return-void.cpp:3:13: error: void function \'f1\' must not return a value","clang/test/SemaCXX/return-void.cpp:5:35: error: void function \'f2\' must not return a value","clang/test/SemaCXX/return-void.cpp:7:32: error: void function \'f2<float>\' must not return a value","clang/test/SemaCXX/return-void.cpp:15:15: error: void function \'f3\' must not return a value","clang/test/SemaCXX/return-void.cpp:16:9: error: constructor \'S\' must not return a value","clang/test/SemaCXX/return-void.cpp:17:10: error: destructor \'~S\' must not return a value","clang/test/SemaCXX/return-void.cpp:21:15: error: void function \'f4\' must not return a value","clang/test/SemaCXX/return-void.cpp:22:10: error: constructor \'ST<T>\' must not return a value","clang/test/SemaCXX/return-void.cpp:23:11: error: destructor \'~ST<T>\' must not return a value"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_return_value_with_address_space"]={ | | ["err_nested_name_spec_is_not_class"]={ |
| [i]={{nil,M,"err_return_value_with_address_space"}}, | | [i]="err_nested_name_spec_is_not_class", |
| [h]={{nil,M,"return type cannot be qualified with address space"}}, | | [h]="%0 cannot appear before \'::\' because it is not a class%select{ or namespace|, namespace, or enumeration}1; did you mean \':\'?", |
| [g]={{nil,M,"return type cannot be qualified with address space"}}, | | [g]={{nil,nil,{"A cannot appear before \'::\' because it is not a class",{" or namespace",", namespace, or enumeration"},"; did you mean \':\'?"}}}, |
| [b]=k, | | [b]=k, |
| [e]="return type cannot be qualified with address space", | | [e]="(.*?) cannot appear before \'\\:\\:\' because it is not a class(?: or namespace|, namespace, or enumeration); did you mean \'\\:\'\\?", |
| [f]=a, | | [d]=a, |
| [d]={{nil,M,m}}, | | [f]=m, |
| [c]={ab,1625925174,bb,cb}, | | [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"}, |
| [j]={{w,10253,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (getLangOpts().OpenCL) {\n // ...\n if (AddressSpace != LangAS::Default) {\n Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{w,10287,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (getLangOpts().HLSL) {\n // ...\n if (AddressSpace != LangAS::Default) {\n Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{kd,876,"static TypeSourceInfo *getLambdaType(Sema &S, LambdaIntroducer &Intro, Declarator &ParamInfo, Scope *CurScope, SourceLocation Loc, bool &ExplicitResultType) {\n // ...\n if (ParamInfo.getNumTypeObjects() == 0) {\n // ...\n } else {\n // ...\n if (ExplicitResultType && S.getLangOpts().HLSL) {\n // ...\n if (!RetTy.isNull()) {\n // ...\n if (AddressSpace != LangAS::Default)\n S.Diag(FTI.getTrailingReturnTypeLoc(), diag::err_return_value_with_address_space);"}}, | | [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, \":\");"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaHLSL/group_shared.hlsl"]={"clang/test/SemaHLSL/group_shared.hlsl:14:20: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:20:20: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:25:21: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:32:24: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:35:24: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:38:31: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:41:31: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:80:18: error: return type cannot be qualified with address space"} | | ["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 \':\'?"} |
| } | | } |
| }, | | }, |
| ["err_right_angle_bracket_equal_needs_space"]={ | | ["err_nested_name_spec_non_tag"]={ |
| [i]="err_right_angle_bracket_equal_needs_space", | | [i]="err_nested_name_spec_non_tag", |
| [h]="a space is required between a right angle bracket and an equals sign (use \'> =\')", | | [h]="type %0 cannot be used prior to \'::\' because it has no members", |
| [g]="a space is required between a right angle bracket and an equals sign (use \'> =\')", | | [g]="type A cannot be used prior to \'::\' because it has no members", |
| [b]=k, | | [b]=k, |
| [e]="a space is required between a right angle bracket and an equals sign \\(use \'\\> \\=\'\\)", | | [e]="type (.*?) cannot be used prior to \'\\:\\:\' because it has no members", |
| [f]=a, | | [d]=a, |
| [d]=x, | | [f]=m, |
| [c]={"7b3f322517c2",1339999864,"Extend the error recovery for a template-argument-list terminated by \'>>\' to","Extend the error recovery for a template-argument-list terminated by \'>>\' to\nalso deal with \'>>>\' (in CUDA), \'>=\', and \'>>=\'. Fix the FixItHints logic to\ndeal with cases where the token is followed by an adjacent \'=\', \'==\', \'>=\',\n\'>>=\', or \'>>>\' token, where a naive fix-it would result in a differing token\nstream on a re-lex.\n\nllvm-svn: 158652"}, | | [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"}, |
| [j]={{xd,1209,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n // ...\n // Diagnose this situation as appropriate.\n if (!ObjCGenericList) {\n // ...\n if (getLangOpts().CPlusPlus11 && (Tok.is(tok::greatergreater) || Tok.is(tok::greatergreatergreater)))\n // ...\n else if (Tok.is(tok::greaterequal))\n DiagId = diag::err_right_angle_bracket_equal_needs_space;"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Parser/cxx-template-argument.cpp"]={"clang/test/Parser/cxx-template-argument.cpp:22:15: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:23:18: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:30:18: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:36:21: error: a space is required between a right angle bracket and an equals sign (use \'> =\')"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_riscv_builtin_invalid_lmul"]={ | | ["err_nested_non_static_member_use"]={ |
| [i]={{nil,F,"err_riscv_builtin_invalid_lmul"}}, | | [i]="err_nested_non_static_member_use", |
| [h]={{nil,F,"LMUL argument must be in the range [0,3] or [5,7]"}}, | | [h]="%select{call to non-static member function|use of non-static data member}0 %2 of %1 from nested type %3", |
| [g]={{nil,F,"LMUL argument must be in the range [0,3] or [5,7]"}}, | | [g]={{nil,nil,{{"call to non-static member function","use of non-static data member"}," C of B from nested type D"}}}, |
| [b]=k, | | [b]=k, |
| [e]="LMUL argument must be in the range \\[0,3\\] or \\[5,7\\]", | | [e]="(?:call to non\\-static member function|use of non\\-static data member) (.*?) of (.*?) from nested type (.*?)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,F,a}}, | | [f]=m, |
| [c]={Vc,1615397021,Zc,ad}, | | [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"}, |
| [j]={{z,4493,"bool Sema::CheckRISCVLMUL(CallExpr *TheCall, unsigned ArgNum) {\n // ...\n return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_invalid_lmul) << Arg->getSourceRange();"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c"]={"clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:6:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:7:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:8:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:9:3: error: LMUL argument must be in the range [0,3] or [5,7]"} | | ["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\'"} |
| } | | } |
| }, | | }, |
| ["err_riscv_builtin_requires_extension"]={ | | ["err_nested_pointer_qualifier_mismatch"]={ |
| [i]={{nil,F,"err_riscv_builtin_requires_extension"}}, | | [i]={{nil,w,"err_nested_pointer_qualifier_mismatch"}}, |
| [h]={{nil,M,"builtin requires%select{| at least one of the following extensions to be enabled}0: %1"},{y,C,"builtin requires at least one of the following extensions support to be enabled : %0"},{F,F,"builtin requires \'%0\' extension support to be enabled"}}, | | [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"}}, |
| [g]={{nil,M,{"builtin requires",{a," at least one of the following extensions to be enabled"},": B"}},{y,C,"builtin requires at least one of the following extensions support to be enabled : A"},{F,F,"builtin requires \'A\' extension support to be enabled"}}, | | [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"}}}, |
| | [b]=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", |
| | [d]=a, |
| | [f]={{nil,w,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"}, |
| | [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;"}} |
| | }, |
| | ["err_nested_redefinition"]={ |
| | [i]="err_nested_redefinition", |
| | [h]="nested redefinition of %0", |
| | [g]="nested redefinition of A", |
| [b]=k, | | [b]=k, |
| [e]="builtin requires(?:| at least one of the following extensions to be enabled)\\: (.*?)", | | [e]="nested redefinition of (.*?)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,F,a}}, | | [f]=m, |
| [c]={Jb,1590001902,Lb,Mb}, | | [c]={hb,1237025389,gb,fb}, |
| [j]={{z,4542,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n // Check if each required feature is included\n for (StringRef F : ReqFeatures) {\n // ...\n if (llvm::none_of(ReqOpFeatures, [&TI](StringRef OF) { return TI.hasFeature(OF); })) {\n // ...\n Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << IsExtension << TheCall->getSourceRange() << StringRef(FeatureStrs);"},{z,4611,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n case RISCVVector::BI__builtin_rvv_vmulhsu_vv:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vx:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tu:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tu:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vv_m:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vx_m:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vv_mu:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vx_mu:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tum:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tum:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tumu:\n case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tumu:\n case RISCVVector::BI__builtin_rvv_vmulhu_vv:\n case RISCVVector::BI__builtin_rvv_vmulhu_vx:\n case RISCVVector::BI__builtin_rvv_vmulhu_vv_tu:\n case RISCVVector::BI__builtin_rvv_vmulhu_vx_tu:\n case RISCVVector::BI__builtin_rvv_vmulhu_vv_m:\n case RISCVVector::BI__builtin_rvv_vmulhu_vx_m:\n case RISCVVector::BI__builtin_rvv_vmulhu_vv_mu:\n case RISCVVector::BI__builtin_rvv_vmulhu_vx_mu:\n case RISCVVector::BI__builtin_rvv_vmulhu_vv_tum:\n case RISCVVector::BI__builtin_rvv_vmulhu_vx_tum:\n case RISCVVector::BI__builtin_rvv_vmulhu_vv_tumu:\n case RISCVVector::BI__builtin_rvv_vmulhu_vx_tumu:\n case RISCVVector::BI__builtin_rvv_vmulh_vv:\n case RISCVVector::BI__builtin_rvv_vmulh_vx:\n case RISCVVector::BI__builtin_rvv_vmulh_vv_tu:\n case RISCVVector::BI__builtin_rvv_vmulh_vx_tu:\n case RISCVVector::BI__builtin_rvv_vmulh_vv_m:\n case RISCVVector::BI__builtin_rvv_vmulh_vx_m:\n case RISCVVector::BI__builtin_rvv_vmulh_vv_mu:\n case RISCVVector::BI__builtin_rvv_vmulh_vx_mu:\n case RISCVVector::BI__builtin_rvv_vmulh_vv_tum:\n case RISCVVector::BI__builtin_rvv_vmulh_vx_tum:\n case RISCVVector::BI__builtin_rvv_vmulh_vv_tumu:\n case RISCVVector::BI__builtin_rvv_vmulh_vx_tumu:\n case RISCVVector::BI__builtin_rvv_vsmul_vv:\n case RISCVVector::BI__builtin_rvv_vsmul_vx:\n case RISCVVector::BI__builtin_rvv_vsmul_vv_tu:\n case RISCVVector::BI__builtin_rvv_vsmul_vx_tu:\n case RISCVVector::BI__builtin_rvv_vsmul_vv_m:\n case RISCVVector::BI__builtin_rvv_vsmul_vx_m:\n case RISCVVector::BI__builtin_rvv_vsmul_vv_mu:\n case RISCVVector::BI__builtin_rvv_vsmul_vx_mu:\n case RISCVVector::BI__builtin_rvv_vsmul_vv_tum:\n case RISCVVector::BI__builtin_rvv_vsmul_vx_tum:\n case RISCVVector::BI__builtin_rvv_vsmul_vv_tumu:\n case RISCVVector::BI__builtin_rvv_vsmul_vx_tumu: {\n // ...\n if (RequireV && !TI.hasFeature(\"v\"))\n return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << /* IsExtension */ false << TheCall->getSourceRange() << \"v\";"}}, | | [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]={ |
| ["clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbb-error.c"]={"clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbb-error.c:5:10: error: builtin requires: \'RV64\'"} | | ["clang/test/Sema/nested-redef.c"]={"clang/test/Sema/nested-redef.c:3:10: error: nested redefinition of \'X\'"} |
| } | | } |
| }, | | }, |
| ["err_riscv_type_requires_extension"]={ | | ["err_new_abi_tag_on_redeclaration"]={ |
| [i]="err_riscv_type_requires_extension", | | [i]="err_new_abi_tag_on_redeclaration", |
| [h]="RISC-V type %0 requires the \'%1\' extension", | | [h]="\'abi_tag\' %0 missing in original declaration", |
| [g]="RISC-V type A requires the \'B\' extension", | | [g]="\'abi_tag\' A missing in original declaration", |
| [b]=k, | | [b]=k, |
| [e]="RISC\\-V type (.*?) requires the \'(.*?)\' extension", | | [e]="\'abi_tag\' (.*?) missing in original declaration", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={ab,1625925174,bb,cb}, | | [f]=m, |
| [j]={{z,5427,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n // (ELEN, LMUL) pairs of (8, mf8), (16, mf4), (32, mf2), (64, m1) requires at\n // least zve64x\n if ((Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ false) || Ty->isRVVType(/* ElementCount */ 1)) && !TI.hasFeature(\"zve64x\"))\n Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64x\";"},{z,5430,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n if (Ty->isRVVType(/* Bitwidth */ 16, /* IsFloat */ true) && !TI.hasFeature(\"zvfh\"))\n Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zvfh\";"},{z,5433,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n if (Ty->isRVVType(/* Bitwidth */ 32, /* IsFloat */ true) && !TI.hasFeature(\"zve32f\"))\n Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32f\";"},{z,5436,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n if (Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ true) && !TI.hasFeature(\"zve64d\"))\n Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64d\";"},{z,5440,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n // Given that caller already checked isRVVType() before calling this function,\n // if we don\'t have at least zve32x supported, then we need to emit error.\n if (!TI.hasFeature(\"zve32x\"))\n Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32x\";"}}, | | [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"}, |
| | [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]={ |
| ["clang/test/Sema/riscv-vector-zve64x-check.c"]={"clang/test/Sema/riscv-vector-zve64x-check.c:10:19: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:12:9: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:14:10: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:9:17: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:18:20: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:20:9: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:22:10: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:17:18: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:26:20: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:28:9: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:30:10: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:25:18: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:34:19: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:36:9: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:38:10: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:33:17: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension"} | | ["clang/test/SemaCXX/attr-abi-tag-syntax.cpp"]={"clang/test/SemaCXX/attr-abi-tag-syntax.cpp:27:16: error: \'abi_tag\' C missing in original declaration"} |
| } | | } |
| }, | | }, |
| ["err_root_class_cannot_use_super"]={ | | ["err_new_array_init_args"]={ |
| [i]="err_root_class_cannot_use_super", | | [i]="err_new_array_init_args", |
| [h]="%0 cannot use \'super\' because it is a root class", | | [h]="array \'new\' cannot have initialization arguments", |
| [g]="A cannot use \'super\' because it is a root class", | | [g]="array \'new\' cannot have initialization arguments", |
| [b]=k, | | [b]=k, |
| [e]="(.*?) cannot use \'super\' because it is a root class", | | [e]="array \'new\' cannot have initialization arguments", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={wb,1480718311,vb,tb}, | | [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]={{ac,2178,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n // ...\n if (!IFace) {\n // If the \"receiver\" is \'super\' in a method, handle it as an expression-like\n // property reference.\n if (receiverNamePtr->isStr(\"super\")) {\n if (ObjCMethodDecl *CurMethod = tryCaptureObjCSelf(receiverNameLoc)) {\n if (auto classDecl = CurMethod->getClassInterface()) {\n // ...\n if (CurMethod->isInstanceMethod()) {\n if (SuperType.isNull()) {\n // ...\n Diag(receiverNameLoc, diag::err_root_class_cannot_use_super) << CurMethod->getClassInterface()->getIdentifier();"},{ac,2405,"ExprResult Sema::ActOnSuperMessage(Scope *S, SourceLocation SuperLoc, Selector Sel, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg Args) {\n // ...\n if (SuperTy.isNull()) {\n // ...\n Diag(SuperLoc, diag::err_root_class_cannot_use_super) << Class->getIdentifier();"}}, | | [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]={ |
| ["clang/test/SemaObjC/super-property-notation.m"]={"clang/test/SemaObjC/super-property-notation.m:38:3: error: \'ClassBase\' cannot use \'super\' because it is a root class","clang/test/SemaObjC/super-property-notation.m:39:4: error: \'ClassBase\' cannot use \'super\' because it is a root class"} | | ["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:343:9: error: array \'new\' cannot have initialization arguments","clang/test/SemaCXX/new-delete.cpp:346:9: error: array \'new\' cannot have initialization arguments","clang/test/SemaCXX/new-delete.cpp:351:9: error: array \'new\' cannot have initialization arguments","clang/test/SemaCXX/new-delete.cpp:356:9: error: array \'new\' cannot have initialization arguments","clang/test/SemaCXX/new-delete.cpp:561:22: error: array \'new\' cannot have initialization arguments"} |
| } | | } |
| }, | | }, |
| ["err_roptr_cannot_build_shared"]={ | | ["err_new_array_nonconst"]={ |
| [i]="err_roptr_cannot_build_shared", | | [i]="err_new_array_nonconst", |
| [h]="-mxcoff-roptr is not supported with -shared", | | [h]="only the first dimension of an allocated array may have dynamic size", |
| [g]="-mxcoff-roptr is not supported with -shared", | | [g]="only the first dimension of an allocated array may have dynamic size", |
| [b]=k, | | [b]=k, |
| [e]="\\-mxcoff\\-roptr is not supported with \\-shared", | | [e]="only the first dimension of an allocated array may have dynamic size", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers","[AIX][clang] Storage Locations for Constant Pointers\n\nThis patch adds clang options `-mxcoff-roptr` and `-mno-xcoff-roptr` to specify storage locations for constant pointers on AIX.\n\nWhen the `-mxcoff-roptr` option is in effect, constant pointers, virtual function tables, and virtual type tables are placed in read-only storage. When the `-mno-xcoff-roptr` option is in effect, pointers, virtual function tables, and virtual type tables are placed are placed in read/write storage.\n\nThis patch depends on https://reviews.llvm.org/D144189.\n\nReviewed By: hubert.reinterpretcast, stephenpeckham\n\nDifferential Revision: https://reviews.llvm.org/D144190"}, | | [f]=m, |
| [j]={{"clang/lib/Driver/ToolChains/AIX.cpp",141,"void aix::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n // ...\n if (Args.hasFlag(options::OPT_mxcoff_roptr, options::OPT_mno_xcoff_roptr, false)) {\n if (Args.hasArg(options::OPT_shared))\n D.Diag(diag::err_roptr_cannot_build_shared);"}}
| | [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();"}}, |
| | [l]={ |
| | ["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:99:20: error: only the first dimension of an allocated array may have dynamic size","clang/test/SemaCXX/new-delete.cpp:100:21: error: only the first dimension of an allocated array may have dynamic size"} |
| | } |
| }, | | }, |
| ["err_roptr_requires_data_sections"]={ | | ["err_new_array_of_auto"]={ |
| [i]="err_roptr_requires_data_sections", | | [i]="err_new_array_of_auto", |
| [h]="-mxcoff-roptr is supported only with -fdata-sections", | | [h]="cannot allocate array of \'auto\'", |
| [g]="-mxcoff-roptr is supported only with -fdata-sections", | | [g]="cannot allocate array of \'auto\'", |
| [b]=k, | | [b]=k, |
| [e]="\\-mxcoff\\-roptr is supported only with \\-fdata\\-sections", | | [e]="cannot allocate array of \'auto\'", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers","[AIX][clang] Storage Locations for Constant Pointers\n\nThis patch adds clang options `-mxcoff-roptr` and `-mno-xcoff-roptr` to specify storage locations for constant pointers on AIX.\n\nWhen the `-mxcoff-roptr` option is in effect, constant pointers, virtual function tables, and virtual type tables are placed in read-only storage. When the `-mno-xcoff-roptr` option is in effect, pointers, virtual function tables, and virtual type tables are placed are placed in read/write storage.\n\nThis patch depends on https://reviews.llvm.org/D144189.\n\nReviewed By: hubert.reinterpretcast, stephenpeckham\n\nDifferential Revision: https://reviews.llvm.org/D144190"}, | | [f]=m, |
| [j]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",766,"#endif\n // ...\n if (Args.hasArg(options::OPT_mxcoff_roptr) || Args.hasArg(options::OPT_mno_xcoff_roptr)) {\n // ...\n if (HasRoptr) {\n // The data sections option is on by default on AIX. We only need to error\n // out when -fno-data-sections is specified explicitly to turn off data\n // sections.\n if (DataSectionsTurnedOff)\n D.Diag(diag::err_roptr_requires_data_sections);"},{"clang/lib/Frontend/CompilerInvocation.cpp",1947,"#include \"clang/Driver/Options.inc\"\n // ...\n if (Arg *A = Args.getLastArg(OPT_mxcoff_roptr)) {\n // ...\n // Since the storage mapping class is specified per csect,\n // without using data sections, it is less effective to use read-only\n // pointers. Using read-only pointers may cause other RO variables in the\n // same csect to become RW when the linker acts upon `-bforceimprw`;\n // therefore, we require that separate data sections\n // are used when `-mxcoff-roptr` is in effect. We respect the setting of\n // data-sections since we have not found reasons to do otherwise that\n // overcome the user surprise of not respecting the setting.\n if (!Args.hasFlag(OPT_fdata_sections, OPT_fno_data_sections, false))\n Diags.Report(diag::err_roptr_requires_data_sections);"}} | | [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());"}} |
| }, | | }, |
| ["err_rotation_argument_to_cadd"]={ | | ["err_new_array_size_unknown_from_init"]={ |
| [i]={{nil,q,"err_rotation_argument_to_cadd"}}, | | [i]={{nil,x,"err_new_array_size_unknown_from_init"}}, |
| [h]={{nil,q,"argument should be the value 90 or 270"}}, | | [h]={{nil,x,"cannot determine allocated array size from initializer"}}, |
| [g]={{nil,q,"argument should be the value 90 or 270"}}, | | [g]={{nil,x,"cannot determine allocated array size from initializer"}}, |
| [b]=k, | | [b]=k, |
| [e]="argument should be the value 90 or 270", | | [e]="cannot determine allocated array size from initializer", |
| [f]=a, | | [d]=a, |
| [d]={{nil,q,m}}, | | [f]={{nil,x,m}}, |
| [c]={U,1576908663,T,S}, | | [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"}, |
| [j]={{z,2992,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n // ...\n for (auto &I : ImmChecks) {\n // ...\n case SVETypeFlags::ImmCheckComplexRot90_270:\n if (CheckImmediateInSet([](int64_t V) { return V == 90 || V == 270; }, diag::err_rotation_argument_to_cadd))"}}, | | [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]={ |
| ["clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp"]={"clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:18:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:20:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:22:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:24:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:26:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:28:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:30:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:32:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:34:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:36:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:38:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:40:17: error: argument should be the value 90 or 270"} | | ["clang/test/AST/issue53742.cpp"]={"clang/test/AST/issue53742.cpp:11:14: error: cannot determine allocated array size from initializer"} |
| } | | } |
| }, | | }, |
| ["err_rotation_argument_to_cmla"]={ | | ["err_new_incomplete_or_sizeless_type"]={ |
| [i]={{nil,q,"err_rotation_argument_to_cmla"}}, | | [i]={{nil,w,"err_new_incomplete_or_sizeless_type"}}, |
| [h]={{nil,q,"argument should be the value 0, 90, 180 or 270"}}, | | [h]={{nil,w,"allocation of %select{incomplete|sizeless}0 type %1"}}, |
| [g]={{nil,q,"argument should be the value 0, 90, 180 or 270"}}, | | [g]={{nil,w,{"allocation of ",{"incomplete","sizeless"}," type B"}}}, |
| [b]=k, | | [b]=k, |
| [e]="argument should be the value 0, 90, 180 or 270", | | [e]="allocation of (?:incomplete|sizeless) type (.*?)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,q,m}}, | | [f]={{nil,w,m}}, |
| [c]={U,1576908663,T,S}, | | [c]={Hb,1576908663,Eb,Kb}, |
| [j]={{z,3000,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n // ...\n for (auto &I : ImmChecks) {\n // ...\n case SVETypeFlags::ImmCheckComplexRotAll90:\n if (CheckImmediateInSet([](int64_t V) { return V == 0 || V == 90 || V == 180 || V == 270; }, diag::err_rotation_argument_to_cmla))"}}, | | [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]={ |
| ["clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp"]={"clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:46:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:48:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:50:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:52:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:54:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:56:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:58:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:60:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:62:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:64:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:66:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:68:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:70:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:72:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:74:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:76:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:78:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:80:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:82:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:84:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:86:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:88:17: error: argument should be the value 0, 90, 180 or 270"} | | ["clang/test/SemaCXX/auto-subst-failure.cpp"]={"clang/test/SemaCXX/auto-subst-failure.cpp:12:13: error: allocation of incomplete type \'void\'"} |
| } | | } |
| }, | | }, |
| ["err_rref_in_exception_spec"]={ | | ["err_no_accessor_for_property"]={ |
| [i]="err_rref_in_exception_spec", | | [i]="err_no_accessor_for_property", |
| [h]="rvalue reference type %0 is not allowed in exception specification", | | [h]="no %select{getter|setter}0 defined for property %1", |
| [g]="rvalue reference type A is not allowed in exception specification", | | [g]={{nil,nil,{xb,{"getter","setter"}," defined for property B"}}}, |
| [b]=k, | | [b]=k, |
| [e]="rvalue reference type (.*?) is not allowed in exception specification", | | [e]="no (?:getter|setter) defined for property (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"a118c6a8c0e9",1354143162,"Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications.","Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications.\n\nllvm-svn: 168824"}, | | [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"}, |
| [j]={{"clang/lib/Sema/SemaExceptionSpec.cpp",152,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T The exception type. This will be decayed to a pointer type\n/// when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n // ...\n if (const PointerType *PT = T->getAs<PointerType>()) {\n // ...\n } else if (const ReferenceType *RT = T->getAs<ReferenceType>()) {\n // ...\n if (RT->isRValueReferenceType()) {\n // ...\n Diag(Range.getBegin(), diag::err_rref_in_exception_spec) << T << Range;"}}, | | [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]={ |
| [ed]={"clang/test/SemaCXX/exceptions.cpp:164:24: error: rvalue reference type \'int &&\' is not allowed in exception specification"} | | ["clang/test/SemaCUDA/cuda-builtin-vars.cu"]={"clang/test/SemaCUDA/cuda-builtin-vars.cu:9:13: error: no setter defined for property \'x\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:11:13: error: no setter defined for property \'y\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:13:13: error: no setter defined for property \'z\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:16:12: error: no setter defined for property \'x\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:18:12: error: no setter defined for property \'y\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:20:12: error: no setter defined for property \'z\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:23:12: error: no setter defined for property \'x\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:25:12: error: no setter defined for property \'y\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:27:12: error: no setter defined for property \'z\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:30:11: error: no setter defined for property \'x\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:32:11: error: no setter defined for property \'y\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:34:11: error: no setter defined for property \'z\'"} |
| } | | } |
| }, | | }, |
| ["err_sampler_argument_required"]={ | | ["err_no_base_classes"]={ |
| [i]="err_sampler_argument_required", | | [i]="err_no_base_classes", |
| [h]="sampler_t variable required - got %0", | | [h]="invalid use of \'__super\', %0 has no base classes", |
| [g]="sampler_t variable required - got A", | | [g]="invalid use of \'__super\', A has no base classes", |
| [b]=k, | | [b]=k, |
| [e]="sampler_t variable required \\- got (.*?)", | | [e]="invalid use of \'__super\', (.*?) has no base classes", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"610541989a52",1360234547,"Add OpenCL samplers as Clang builtin types and check sampler related restrictions.","Add OpenCL samplers as Clang builtin types and check sampler related restrictions.\n\nllvm-svn: 174601"}, | | [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"}, |
| [j]={{Q,9310,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n // ...\n for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n // ...\n case SK_OCLSamplerInit: {\n // ...\n // Case 1\n if (Entity.isParameterKind()) {\n if (!SourceType->isSamplerT() && !SourceType->isIntegerType()) {\n S.Diag(Kind.getLocation(), diag::err_sampler_argument_required) << SourceType;"}}
| | [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();"}}, |
| },
| |
| ["err_sampler_initializer_not_integer"]={
| |
| [i]="err_sampler_initializer_not_integer",
| |
| [h]="sampler_t initialization requires 32-bit integer, not %0",
| |
| [g]="sampler_t initialization requires 32-bit integer, not A",
| |
| [b]=k,
| |
| [e]="sampler_t initialization requires 32\\-bit integer, not (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"0bc4b2d33731",1469733990,"[OpenCL] Generate opaque type for sampler_t and function call for the initializer","[OpenCL] Generate opaque type for sampler_t and function call for the initializer\n\nCurrently Clang use int32 to represent sampler_t, which have been a source of issue for some backends, because in some backends sampler_t cannot be represented by int32. They have to depend on kernel argument metadata and use IPA to find the sampler arguments and global variables and transform them to target specific sampler type.\n\nThis patch uses opaque pointer type opencl.sampler_t* for sampler_t. For each use of file-scope sampler variable, it generates a function call of __translate_sampler_initializer. For each initialization of function-scope sampler variable, it generates a function call of __translate_sampler_initializer.\n\nEach builtin library can implement its own __translate_sampler_initializer(). Since the real sampler type tends to be architecture dependent, allowing it to be initialized by a library function simplifies backend design. A typical implementation of __translate_sampler_initializer could be a table lookup of real sampler literal values. Since its argument is always a literal, the returned pointer is known at compile time and easily optimized to finally become some literal values directly put into image read instructions.\n\nThis patch is partially based on Alexey Sotkin\'s work in Khronos Clang (https://github.com/KhronosGroup/SPIR/commit/3d4eec61623502fc306e8c67c9868be2b136e42b).\n\nDifferential Revision: https://reviews.llvm.org/D21567\n\nllvm-svn: 277024"},
| |
| [j]={{Q,9345,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n // ...\n for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n // ...\n case SK_OCLSamplerInit: {\n // ...\n // Case 1\n if (Entity.isParameterKind()) {\n // ...\n } else {\n // ...\n if (!SourceType->isIntegerType() || 32 != S.Context.getIntWidth(SourceType)) {\n S.Diag(Kind.getLocation(), diag::err_sampler_initializer_not_integer) << SourceType;"}}, | |
| [l]={ | | [l]={ |
| ["clang/test/SemaOpenCL/sampler_t.cl"]={"clang/test/SemaOpenCL/sampler_t.cl:38:20: error: sampler_t initialization requires 32-bit integer, not \'long long\'","clang/test/SemaOpenCL/sampler_t.cl:58:19: error: sampler_t initialization requires 32-bit integer, not \'long long\'"} | | ["clang/test/SemaCXX/MicrosoftSuper.cpp"]={"clang/test/SemaCXX/MicrosoftSuper.cpp:5:3: error: invalid use of \'__super\', Errors has no base classes"} |
| } | | } |
| }, | | }, |
| ["err_scoped_enum_missing_identifier"]={ | | ["err_no_declarators"]={ |
| [i]="err_scoped_enum_missing_identifier", | | [i]={{nil,C,"err_no_declarators"}}, |
| [h]="scoped enumeration requires a name", | | [h]={{nil,C,"declaration does not declare anything"}}, |
| [g]="scoped enumeration requires a name", | | [g]={{nil,C,"declaration does not declare anything"}}, |
| [b]=k, | | [b]=k, |
| [e]="scoped enumeration requires a name", | | [e]="declaration does not declare anything", |
| [f]=a, | | [d]=a, |
| [d]=x, | | [f]={{nil,C,m}}, |
| [c]={"0bf3140424a0",1286581827,"Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked a","Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked a\nbit by me). \n\nllvm-svn: 116122"}, | | [c]={H,1236199783,I,G}, |
| [j]={{jb,4873,"/// ParseEnumSpecifier\n/// enum-specifier: [C99 6.7.2.2]\n/// \'enum\' identifier[opt] \'{\' enumerator-list \'}\'\n///[C99/C++]\'enum\' identifier[opt] \'{\' enumerator-list \',\' \'}\'\n/// [GNU] \'enum\' attributes[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n/// \'}\' attributes[opt]\n/// [MS] \'enum\' __declspec[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n/// \'}\'\n/// \'enum\' identifier\n/// [GNU] \'enum\' attributes[opt] identifier\n///\n/// [C++11] enum-head \'{\' enumerator-list[opt] \'}\'\n/// [C++11] enum-head \'{\' enumerator-list \',\' \'}\'\n///\n/// enum-head: [C++11]\n/// enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]\n/// enum-key attribute-specifier-seq[opt] nested-name-specifier\n/// identifier enum-base[opt]\n///\n/// enum-key: [C++11]\n/// \'enum\'\n/// \'enum\' \'class\'\n/// \'enum\' \'struct\'\n///\n/// enum-base: [C++11]\n/// \':\' type-specifier-seq\n///\n/// [C++] elaborated-type-specifier:\n/// [C++] \'enum\' nested-name-specifier[opt] identifier\n///\nvoid Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC) {\n // ...\n if (!Name && ScopedEnumKWLoc.isValid()) {\n // ...\n Diag(Tok, diag::err_scoped_enum_missing_identifier);"}}, | | [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]={ |
| ["clang/test/CXX/drs/dr6xx.cpp"]={"clang/test/CXX/drs/dr6xx.cpp:743:14: error: scoped enumeration requires a name","clang/test/CXX/drs/dr6xx.cpp:748:16: error: scoped enumeration requires a name"} | | ["clang/test/SemaCXX/PR16677.cpp"]={"clang/test/SemaCXX/PR16677.cpp:13:2: error: declaration does not declare anything"} |
| } | | } |
| }, | | }, |
| ["err_second_argument_to_cwsc_not_pointer"]={ | | ["err_no_dynamic_cast_with_fno_rtti"]={ |
| [i]="err_second_argument_to_cwsc_not_pointer", | | [i]="err_no_dynamic_cast_with_fno_rtti", |
| [h]="second argument to __builtin_call_with_static_chain must be of pointer type", | | [h]={{nil,q,"use of dynamic_cast requires -frtti"},{t,nil,"cannot use dynamic_cast with -fno-rtti"}}, |
| [g]="second argument to __builtin_call_with_static_chain must be of pointer type", | | [g]={{nil,q,"use of dynamic_cast requires -frtti"},{t,nil,"cannot use dynamic_cast with -fno-rtti"}}, |
| [b]=k, | | [b]=k, |
| [e]="second argument to __builtin_call_with_static_chain must be of pointer type", | | [e]="use of dynamic_cast requires \\-frtti", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"f770683f14f9",1418427685,"Implement the __builtin_call_with_static_chain GNU extension.","Implement the __builtin_call_with_static_chain GNU extension.\n\nThe extension has the following syntax:\n\n __builtin_call_with_static_chain(Call, Chain)\n where Call must be a function call expression and Chain must be of pointer type\n\nThis extension performs a function call Call with a static chain pointer\nChain passed to the callee in a designated register. This is useful for\ncalling foreign language functions whose ABI uses static chain pointers\n(e.g. to implement closures).\n\nDifferential Revision: http://reviews.llvm.org/D6332\n\nllvm-svn: 224167"}, | | [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"}, |
| [j]={{z,770,"static bool SemaBuiltinCallWithStaticChain(Sema &S, CallExpr *BuiltinCall) {\n // ...\n if (!ChainResult.get()->getType()->isPointerType()) {\n S.Diag(BuiltinLoc, diag::err_second_argument_to_cwsc_not_pointer) << Chain->getSourceRange();"}},
| | [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]={ |
| ["clang/test/Sema/call-with-static-chain.c"]={"clang/test/Sema/call-with-static-chain.c:10:3: error: second argument to __builtin_call_with_static_chain must be of pointer type"} | | ["clang/test/SemaCXX/no-rtti.cpp"]={"clang/test/SemaCXX/no-rtti.cpp:23:10: error: use of dynamic_cast requires -frtti"} |
| } | | } |
| }, | | }, |
| ["err_second_parameter_to_va_arg_abstract"]={ | | ["err_no_external_assembler"]={ |
| [i]="err_second_parameter_to_va_arg_abstract", | | [i]="err_no_external_assembler", |
| [h]="second argument to \'va_arg\' is of abstract type %0", | | [h]="there is no external assembler that can be used on this platform", |
| [g]="second argument to \'va_arg\' is of abstract type A", | | [g]="there is no external assembler that can be used on this platform", |
| [b]=k, | | [b]=k, |
| [e]="second argument to \'va_arg\' is of abstract type (.*?)", | | [e]="there is no external assembler that can be used on this platform", |
| | [d]=a, |
| [f]=a, | | [f]=a, |
| [d]=m,
| | [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"}, |
| [c]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg","Properly diagnose using abstract and incomplete types in va_arg\n\n- Move a test from test/SemaTemplate/instantiate-expr-3.cpp, it did not belong there\n- Incomplete and abstract types are considered hard errors\n\nllvm-svn: 132979"}, | | [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]={{n,17233,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n // ...\n if (!TInfo->getType()->isDependentType()) {\n // ...\n if (RequireNonAbstractType(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType(), diag::err_second_parameter_to_va_arg_abstract, TInfo->getTypeLoc()))"}}, | |
| [l]={
| |
| ["clang/test/SemaCXX/vararg-non-pod.cpp"]={"clang/test/SemaCXX/vararg-non-pod.cpp:188:32: error: second argument to \'va_arg\' is of abstract type \'Abstract\'"}
| |
| }
| |
| }, | | }, |
| ["err_second_parameter_to_va_arg_incomplete"]={ | | ["err_no_matching_local_friend"]={ |
| [i]="err_second_parameter_to_va_arg_incomplete", | | [i]="err_no_matching_local_friend", |
| [h]="second argument to \'va_arg\' is of incomplete type %0", | | [h]="no matching function found in local scope", |
| [g]="second argument to \'va_arg\' is of incomplete type A", | | [g]="no matching function found in local scope", |
| [b]=k, | | [b]=k, |
| [e]="second argument to \'va_arg\' is of incomplete type (.*?)", | | [e]="no matching function found in local scope", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg","Properly diagnose using abstract and incomplete types in va_arg\n\n- Move a test from test/SemaTemplate/instantiate-expr-3.cpp, it did not belong there\n- Incomplete and abstract types are considered hard errors\n\nllvm-svn: 132979"}, | | [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]={{n,17226,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n // ...\n if (!TInfo->getType()->isDependentType()) {\n if (RequireCompleteType(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType(), diag::err_second_parameter_to_va_arg_incomplete, TInfo->getTypeLoc()))"}}, | | [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]={ |
| ["clang/test/Sema/varargs-x86-64.c"]={"clang/test/Sema/varargs-x86-64.c:65:30: error: second argument to \'va_arg\' is of incomplete type \'void\'"} | | ["clang/test/CXX/class.access/class.friend/p11.cpp"]={"clang/test/CXX/class.access/class.friend/p11.cpp:16:19: error: no matching function found in local scope","clang/test/CXX/class.access/class.friend/p11.cpp:36:21: error: no matching function found in local scope","clang/test/CXX/class.access/class.friend/p11.cpp:89:23: error: no matching function found in local scope"} |
| } | | } |
| }, | | }, |
| ["err_section_conflict"]={ | | ["err_no_matching_local_friend_suggest"]={ |
| [i]="err_section_conflict", | | [i]="err_no_matching_local_friend_suggest", |
| [h]="%0 causes a section type conflict with %1", | | [h]="no matching function %0 found in local scope; did you mean %3?", |
| [g]="A causes a section type conflict with B", | | [g]="no matching function A found in local scope; did you mean D?", |
| [b]=k, | | [b]=k, |
| [e]="(.*?) causes a section type conflict with (.*?)", | | [e]="no matching function (.*?) found in local scope; did you mean (.*?)\\?", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"c3b18967ed07",1396996247,"[MS-ABI] Add support for #pragma section and related pragmas","[MS-ABI] Add support for #pragma section and related pragmas\nThis patch adds support for the msvc pragmas section, bss_seg, code_seg, \nconst_seg and data_seg as well as support for __declspec(allocate()).\n\nAdditionally it corrects semantics and adds diagnostics for \n__attribute__((section())) and the interaction between the attribute \nand the msvc pragmas and declspec. In general conflicts should now be \nwell diganosed within and among these features.\n\nIn supporting the pragmas new machinery for uniform lexing for \nmsvc pragmas was introduced. The new machinery always lexes the \nentire pragma and stores it on an annotation token. The parser \nis responsible for parsing the pragma when the handling the \nannotation token.\n\nThere is a known outstanding bug in this implementation in C mode. \nBecause these attributes and pragmas apply _only_ to definitions, we \nprocess them at the time we detect a definition. Due to tentative \ndefinitions in C, we end up processing the definition late. This means \nthat in C mode, everything that ends up in a BSS section will end up in \nthe _last_ BSS section rather than the one that was live at the time of \ntentative definition, even if that turns out to be the point of actual \ndefinition. This issue is not known to impact anything as of yet \nbecause we are not aware of a clear use or use case for #pragma bss_seg \nbut should be fixed at some point.\n\nDifferential Revision=http://reviews.llvm.org/D3065#inline-16241 \n\nllvm-svn: 205810"}, | | [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"}, |
| [j]={{L,700,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n // ...\n Diag(Decl->getLocation(), diag::err_section_conflict) << Decl << Section;"},{L,720,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, SourceLocation PragmaSectionLocation) {\n // ...\n if (SectionIt != Context.SectionInfos.end()) {\n // ...\n if (!(Section.SectionFlags & ASTContext::PSF_Implicit)) {\n Diag(PragmaSectionLocation, diag::err_section_conflict) << \"this\" << Section;"}},
| | [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]={ |
| ["clang/test/Sema/pragma-section.c"]={"clang/test/Sema/pragma-section.c:7:5: error: \'b\' causes a section type conflict with \'a\'","clang/test/Sema/pragma-section.c:10:39: error: \'d\' causes a section type conflict with \'a\'","clang/test/Sema/pragma-section.c:21:6: error: \'fn_bad_seg\' causes a section type conflict with \'int_bad_seg\'","clang/test/Sema/pragma-section.c:40:9: error: this causes a section type conflict with a prior #pragma section","clang/test/Sema/pragma-section.c:43:9: error: this causes a section type conflict with a prior #pragma section"} | | ["clang/test/SemaCXX/function-redecl.cpp"]={"clang/test/SemaCXX/function-redecl.cpp:49:19: error: no matching function \'bar\' found in local scope; did you mean \'Bar\'?"} |
| } | | } |
| }, | | }, |
| ["err_seh___except_block"]={ | | ["err_no_matching_param"]={ |
| [i]="err_seh___except_block", | | [i]="err_no_matching_param", |
| [h]="%0 only allowed in __except block or filter expression", | | [h]="parameter named %0 is missing", |
| [g]="A only allowed in __except block or filter expression", | | [g]="parameter named A is missing", |
| [b]=k, | | [b]=k, |
| [e]="(.*?) only allowed in __except block or filter expression", | | [e]="parameter named (.*?) is missing", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling","Parsing/AST support for Structured Exception Handling\n\nPatch authored by Sohail Somani.\n\nProvide parsing and AST support for Windows structured exception handling.\n\nllvm-svn: 130366"}, | | [f]=y, |
| [j]={{Nb,550,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident__exception_code, diag::err_seh___except_block);"},{Nb,551,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident___exception_code, diag::err_seh___except_block);"},{Nb,552,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident_GetExceptionCode, diag::err_seh___except_block);"},{z,2470,"#include \"clang/Basic/Builtins.def\"\n // ...\n case Builtin::BI__exception_code:\n case Builtin::BI_exception_code:\n if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHExceptScope, diag::err_seh___except_block))"}}, | | [c]={H,1236199783,I,G}, |
| [l]={
| | [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();"}} |
| ["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:23:3: error: \'_exception_code\' only allowed in __except block or filter expression","clang/test/SemaCXX/exceptions-seh.cpp:34:3: error: \'_exception_code\' only allowed in __except block or filter expression"}
| |
| }
| |
| }, | | }, |
| ["err_seh___except_filter"]={ | | ["err_no_member"]={ |
| [i]="err_seh___except_filter", | | [i]="err_no_member", |
| [h]="%0 only allowed in __except filter expression", | | [h]="no member named %0 in %1", |
| [g]="A only allowed in __except filter expression", | | [g]="no member named A in B", |
| [b]=k, | | [b]=k, |
| [e]="(.*?) only allowed in __except filter expression", | | [e]="no member named (.*?) in (.*?)", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling","Parsing/AST support for Structured Exception Handling\n\nPatch authored by Sohail Somani.\n\nProvide parsing and AST support for Windows structured exception handling.\n\nllvm-svn: 130366"}, | | [f]=m, |
| [j]={{Nb,553,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident__exception_info, diag::err_seh___except_filter);"},{Nb,554,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident___exception_info, diag::err_seh___except_filter);"},{Nb,555,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident_GetExceptionInfo, diag::err_seh___except_filter);"},{z,2476,"#include \"clang/Basic/Builtins.def\"\n // ...\n case Builtin::BI__exception_info:\n case Builtin::BI_exception_info:\n if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHFilterScope, diag::err_seh___except_filter))"}}, | | [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"}, |
| | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:24:3: error: \'_exception_info\' only allowed in __except filter expression","clang/test/SemaCXX/exceptions-seh.cpp:35:3: error: \'_exception_info\' only allowed in __except filter expression"} | | ["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>\'"} |
| } | | } |
| }, | | }, |
| ["err_seh___finally_block"]={ | | ["err_no_member_overloaded_arrow"]={ |
| [i]="err_seh___finally_block", | | [i]="err_no_member_overloaded_arrow", |
| [h]="%0 only allowed in __finally block", | | [h]="no member named %0 in %1; did you mean to use \'->\' instead of \'.\'?", |
| [g]="A only allowed in __finally block", | | [g]="no member named A in B; did you mean to use \'->\' instead of \'.\'?", |
| [b]=k, | | [b]=k, |
| [e]="(.*?) only allowed in __finally block", | | [e]="no member named (.*?) in (.*?); did you mean to use \'\\-\\>\' instead of \'\\.\'\\?", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling","Parsing/AST support for Structured Exception Handling\n\nPatch authored by Sohail Somani.\n\nProvide parsing and AST support for Windows structured exception handling.\n\nllvm-svn: 130366"}, | | [f]=m, |
| [j]={{Nb,556,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident__abnormal_termination, diag::err_seh___finally_block);"},{Nb,557,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident___abnormal_termination, diag::err_seh___finally_block);"},{Nb,558,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n // ...\n PP.SetPoisonReason(Ident_AbnormalTermination, diag::err_seh___finally_block);"}}, | | [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"}, |
| | [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, \"->\");"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Sema/__try.c"]={"clang/test/Sema/__try.c:151:9: error: \'__abnormal_termination\' only allowed in __finally block","clang/test/Sema/__try.c:152:9: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:155:11: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:156:11: error: \'__abnormal_termination\' only allowed in __finally block","clang/test/Sema/__try.c:159:11: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:160:11: error: \'__abnormal_termination\' only allowed in __finally block"} | | ["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 \'.\'?"} |
| } | | } |
| }, | | }, |
| ["err_seh_expected_handler"]={ | | ["err_no_member_suggest"]={ |
| [i]="err_seh_expected_handler", | | [i]="err_no_member_suggest", |
| [h]="expected \'__except\' or \'__finally\' block", | | [h]="no member named %0 in %1; did you mean %select{|simply }2%3?", |
| [g]="expected \'__except\' or \'__finally\' block", | | [g]={{nil,nil,{"no member named A in B; did you mean ",{a,"simply "},"D?"}}}, |
| [b]=k, | | [b]=k, |
| [e]="expected \'__except\' or \'__finally\' block", | | [e]="no member named (.*?) in (.*?); did you mean (?:|simply )(.*?)\\?", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling","Parsing/AST support for Structured Exception Handling\n\nPatch authored by Sohail Somani.\n\nProvide parsing and AST support for Windows structured exception handling.\n\nllvm-svn: 130366"}, | | [f]=m, |
| [j]={{Oc,602,"/// ParseSEHTryBlockCommon\n///\n/// seh-try-block:\n/// \'__try\' compound-statement seh-handler\n///\n/// seh-handler:\n/// seh-except-block\n/// seh-finally-block\n///\nStmtResult Parser::ParseSEHTryBlock() {\n // ...\n if (Tok.is(tok::identifier) && Tok.getIdentifierInfo() == getSEHExceptKeyword()) {\n // ...\n } else if (Tok.is(tok::kw___finally)) {\n // ...\n } else {\n return StmtError(Diag(Tok, diag::err_seh_expected_handler));"}}, | | [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"}, |
| | [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) {"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Parser/ms-seh.c"]={"clang/test/Parser/ms-seh.c:10:1: error: expected \'__except\' or \'__finally\' block"} | | ["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\'?"} |
| } | | } |
| }, | | }, |
| ["err_seh_in_a_coroutine_with_cxx_exceptions"]={ | | ["err_no_member_template"]={ |
| [i]={{nil,o,"err_seh_in_a_coroutine_with_cxx_exceptions"}}, | | [i]={{nil,r,"err_no_member_template"}}, |
| [h]={{nil,o,"cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled"}}, | | [h]={{nil,r,"no template named %0 in %1"}}, |
| [g]={{nil,o,"cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled"}}, | | [g]={{nil,r,"no template named A in B"}}, |
| | [b]=k, |
| | [e]="no template named (.*?) in (.*?)", |
| | [d]=a, |
| | [f]={{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"}, |
| | [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"]={ |
| | [i]="err_no_member_template_suggest", |
| | [h]="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?"}}}, |
| [b]=k, | | [b]=k, |
| [e]="cannot use SEH \'__try\' in a coroutine when C\\+\\+ exceptions are enabled", | | [e]="no template named (.*?) in (.*?); did you mean (?:|simply )(.*?)\\?", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,"Coroutines Issue"}}, | | [f]=m, |
| [c]={"5b050e4a1836",1495492397,"[coroutines] Wrap the body of the coroutine in try-catch","[coroutines] Wrap the body of the coroutine in try-catch\n\nSummary:\nIf unhandled_exception member function is present in the coroutine promise,\nwrap the body of the coroutine in:\n\n```\ntry {\n body\n} catch(...) { promise.unhandled_exception(); }\n```\n\nReviewers: EricWF, rnk, rsmith\n\nReviewed By: rsmith\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D31692\n\nllvm-svn: 303583"}, | | [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"}, |
| [j]={{"clang/lib/Sema/SemaCoroutine.cpp",1701,"bool CoroutineStmtBuilder::makeOnException() {\n // ...\n // Since the body of the coroutine will be wrapped in try-catch, it will\n // be incompatible with SEH __try if present in a function.\n if (!S.getLangOpts().Borland && Fn.FirstSEHTryLoc.isValid()) {\n S.Diag(Fn.FirstSEHTryLoc, diag::err_seh_in_a_coroutine_with_cxx_exceptions);"}},
| | [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]={ |
| ["clang/test/SemaCXX/coroutine-seh.cpp"]={"clang/test/SemaCXX/coroutine-seh.cpp:34:3: error: cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled"} | | ["clang/test/SemaTemplate/typo-dependent-name.cpp"]={"clang/test/SemaTemplate/typo-dependent-name.cpp:40:18: error: no template named \'inner\' in \'Y<T>\'; did you mean \'Inner\'?"} |
| } | | } |
| }, | | }, |
| ["err_seh_try_outside_functions"]={ | | ["err_no_nsconstant_string_class"]={ |
| [i]="err_seh_try_outside_functions", | | [i]="err_no_nsconstant_string_class", |
| [h]="cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls", | | [h]="cannot find interface declaration for %0", |
| [g]="cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls", | | [g]="cannot find interface declaration for A", |
| [b]=k, | | [b]=k, |
| [e]="cannot use SEH \'__try\' in blocks, captured regions, or Obj\\-C method decls", | | [e]="cannot find interface declaration for (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"11ca834bef95",1423003955,"SEH: Track users of __try so we can pick a per-func EH personality","SEH: Track users of __try so we can pick a per-func EH personality\n\nThere are four major kinds of declarations that cause code generation:\n- FunctionDecl (includes CXXMethodDecl etc)\n- ObjCMethodDecl\n- BlockDecl\n- CapturedDecl\n\nThis patch tracks __try usage on FunctionDecls and diagnoses __try usage\nin other decls. If someone wants to use __try from ObjC, they can use it\nfrom a free function, since the ObjC code will need an ObjC-style EH\npersonality.\n\nEventually we will want to look through CapturedDecls and track SEH\nusage on the parent FunctionDecl, if present.\n\nllvm-svn: 228058"}, | | [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"}, |
| [j]={{Z,4606,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n // ...\n if (FD)\n // ...\n else\n Diag(TryLoc, diag::err_seh_try_outside_functions);"}}, | | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:91:5: error: cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls","clang/test/SemaCXX/exceptions-seh.cpp:103:3: error: cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls"} | | ["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:34:17: error: cannot find interface declaration for \'Q\'"} |
| } | | } |
| }, | | }, |
| ["err_seh_try_unsupported"]={ | | ["err_no_submodule"]={ |
| [i]="err_seh_try_unsupported", | | [i]="err_no_submodule", |
| [h]="SEH \'__try\' is not supported on this target", | | [h]="no submodule named %0 in module \'%1\'", |
| [g]="SEH \'__try\' is not supported on this target", | | [g]="no submodule named A in module \'B\'", |
| [b]=k, | | [b]=k, |
| [e]="SEH \'__try\' is not supported on this target", | | [e]="no submodule named (.*?) in module \'(.*?)\'", |
| | [d]=a, |
| [f]=a, | | [f]=a, |
| [d]=m,
| | [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"}, |
| [c]={"ddd40964f077",1430259572,"[SEH] Add 32-bit lowering code for __try","[SEH] Add 32-bit lowering code for __try\n\nThis is just the clang-side of 32-bit SEH. LLVM still needs work, and it\nwill determinstically fail to compile until it\'s feature complete.\n\nOn x86, all outlined handlers have no parameters, but they do implicitly\ntake the EBP value passed in and use it to address locals of the parent\nframe. We model this with llvm.frameaddress(1).\n\nThis works (mostly), but __finally block inlining can break it. For now,\nwe apply the \'noinline\' attribute. If we really want to inline __finally\nblocks on 32-bit x86, we should teach the inliner how to untangle\nframeescape and framerecover.\n\nPromote the error diagnostic from codegen to sema. It now rejects SEH on\nnon-Windows platforms. LLVM doesn\'t implement SEH on non-x86 Windows\nplatforms, but there\'s nothing preventing it.\n\nllvm-svn: 236052"}, | | [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]={{Z,4610,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n // ...\n // Reject __try on unsupported targets.\n if (!Context.getTargetInfo().isSEHTrySupported())\n Diag(TryLoc, diag::err_seh_try_unsupported);"}} | | [l]={ |
| | ["clang/test/Modules/submodules.cpp"]={"clang/test/Modules/submodules.cpp:19:20: error: no submodule named \'compare\' in module \'std.vector\'"} |
| | } |
| }, | | }, |
| ["err_selected_explicit_constructor"]={ | | ["err_no_submodule_suggest"]={ |
| [i]="err_selected_explicit_constructor", | | [i]="err_no_submodule_suggest", |
| [h]="chosen constructor is explicit in copy-initialization", | | [h]="no submodule named %0 in module \'%1\'; did you mean \'%2\'?", |
| [g]="chosen constructor is explicit in copy-initialization", | | [g]="no submodule named A in module \'B\'; did you mean \'C\'?", |
| [b]=k, | | [b]=k, |
| [e]="chosen constructor is explicit in copy\\-initialization", | | [e]="no submodule named (.*?) in module \'(.*?)\'; did you mean \'(.*?)\'\\?", |
| | [d]=a, |
| [f]=a, | | [f]=a, |
| [d]=m,
| | [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"}, |
| [c]={"048a6d797690",1333310099,"Properly handle explicit constructors in list-initialization. Fixes PR12120.","Properly handle explicit constructors in list-initialization. Fixes PR12120.\n\nllvm-svn: 153849"}, | | [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]={{Q,9992,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ExplicitConstructor: {\n S.Diag(Kind.getLocation(), diag::err_selected_explicit_constructor) << Args[0]->getSourceRange();"}}, | |
| [l]={ | | [l]={ |
| ["clang/test/CXX/dcl.decl/dcl.init/p7.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/p7.cpp:14:3: error: chosen constructor is explicit in copy-initialization"} | | ["clang/test/Modules/submodules.cpp"]={"clang/test/Modules/submodules.cpp:14:13: error: no submodule named \'typetraits\' in module \'std\'; did you mean \'type_traits\'?"} |
| } | | } |
| }, | | }, |
| ["err_selector_element_const_type"]={ | | ["err_no_subobject_property_setting"]={ |
| [i]="err_selector_element_const_type", | | [i]="err_no_subobject_property_setting", |
| [h]={{nil,v,"selector element of type %0 cannot be a constant lvalue expression"},{ib,nil,"selector element of type %0 cannot be a constant l-value expression"}}, | | [h]="expression is not assignable", |
| [g]={{nil,v,"selector element of type A cannot be a constant lvalue expression"},{ib,nil,"selector element of type A cannot be a constant l-value expression"}}, | | [g]="expression is not assignable", |
| [b]=k, | | [b]=k, |
| [e]="selector element of type (.*?) cannot be a constant lvalue expression", | | [e]="expression is not assignable", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"8bcf182b9df6",1381442284,"ObjectiveC. ObjectiveC\'s collection selector expression in","ObjectiveC. ObjectiveC\'s collection selector expression in\nthe fereach loop must be a non-const lvalue expression as\nit will be assigned to at the beginning of the loop.\n// rdar://15123684\n\nllvm-svn: 192399"}, | | [c]={yb,1480718311,zb,Ab}, |
| [j]={{Z,2345,"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 } else {\n // ...\n if (FirstType.isConstQualified())\n Diag(ForLoc, diag::err_selector_element_const_type) << FirstType << First->getSourceRange();"}}, | | [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/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:794:5: error: selector element of type \'NSString *const __strong\' cannot be a constant lvalue expression"} | | ["clang/test/Sema/va_arg_x86_32.c"]={"clang/test/Sema/va_arg_x86_32.c:4:3: error: expression is not assignable"} |
| } | | } |
| }, | | }, |
| ["err_selector_element_not_lvalue"]={ | | ["err_no_suitable_delete_member_function_found"]={ |
| [i]="err_selector_element_not_lvalue", | | [i]="err_no_suitable_delete_member_function_found", |
| [h]="selector element is not a valid lvalue", | | [h]="no suitable member %0 in %1", |
| [g]="selector element is not a valid lvalue", | | [g]="no suitable member A in B", |
| [b]=k, | | [b]=k, |
| [e]="selector element is not a valid lvalue", | | [e]="no suitable member (.*?) in (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={u,1237025389,s,t}, | | [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"}, |
| [j]={{Z,2340,"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 } else {\n // ...\n if (!FirstE->isTypeDependent() && !FirstE->isLValue())\n return StmtError(Diag(First->getBeginLoc(), diag::err_selector_element_not_lvalue) << First->getSourceRange());"}}, | | [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]={ |
| ["clang/test/SemaObjC/foreach.m"]={"clang/test/SemaObjC/foreach.m:9:10: error: selector element is not a valid lvalue","clang/test/SemaObjC/foreach.m:10:10: error: selector element is not a valid lvalue","clang/test/SemaObjC/foreach.m:55:8: error: selector element is not a valid lvalue"} | | ["clang/test/SemaCXX/coroutine-no-valid-dealloc.cpp"]={"clang/test/SemaCXX/coroutine-no-valid-dealloc.cpp:24:6: error: no suitable member \'operator delete\' in \'promise_type\'","clang/test/SemaCXX/coroutine-no-valid-dealloc.cpp:24:6: error: no suitable member \'operator delete\' in \'promise_type\'"} |
| } | | } |
| }, | | }, |
| ["err_selector_element_type"]={ | | ["err_no_super_class_message"]={ |
| [i]="err_selector_element_type", | | [i]="err_no_super_class_message", |
| [h]="selector element type %0 is not a valid object", | | [h]="no @interface declaration found in class messaging of %0", |
| [g]="selector element type A is not a valid object", | | [g]="no @interface declaration found in class messaging of A", |
| [b]=k, | | [b]=k, |
| [e]="selector element type (.*?) is not a valid object", | | [e]="no @interface declaration found in class messaging of (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={u,1237025389,s,t}, | | [c]={yb,1480718311,zb,Ab}, |
| [j]={{Z,2351,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n // ...\n if (First) {\n // ...\n if (!FirstType->isDependentType() && !FirstType->isObjCObjectPointerType() && !FirstType->isBlockPointerType())\n return StmtError(Diag(ForLoc, diag::err_selector_element_type) << FirstType << First->getSourceRange());"}}, | | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Parser/objc-forcollection-neg-2.m"]={"clang/test/Parser/objc-forcollection-neg-2.m:33:9: error: selector element type \'MyList<P> ***\' is not a valid object"} | | ["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\'"} |
| } | | } |
| }, | | }, |
| ["err_setter_type_void"]={ | | ["err_no_template"]={ |
| [i]="err_setter_type_void", | | [i]={{nil,r,"err_no_template"}}, |
| [h]="type of setter must be void", | | [h]={{nil,r,"no template named %0"}}, |
| [g]="type of setter must be void", | | [g]={{nil,r,"no template named A"}}, |
| [b]=k, | | [b]=k, |
| [e]="type of setter must be void", | | [e]="no template named (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,r,m}}, |
| [c]={K,1236199783,J,I},
| | [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"}, |
| [j]={{hb,2446,"/// 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 (Context.getCanonicalType(SetterMethod->getReturnType()) != Context.VoidTy)\n Diag(SetterMethod->getLocation(), diag::err_setter_type_void);"}} | | [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]={ |
| | ["clang/test/FixIt/typo-crash.cpp"]={"clang/test/FixIt/typo-crash.cpp:5:3: error: no template named \'template_id2\'"} |
| | } |
| }, | | }, |
| ["err_setting_eval_method_used_in_unsafe_context"]={ | | ["err_no_template_suggest"]={ |
| [i]={{nil,y,"err_setting_eval_method_used_in_unsafe_context"}}, | | [i]="err_no_template_suggest", |
| [h]={{nil,y,"%select{\'#pragma clang fp eval_method\'|option \'ffp-eval-method\'}0 cannot be used with %select{option \'fapprox-func\'|option \'mreassociate\'|option \'freciprocal\'|option \'ffp-eval-method\'|\'#pragma clang fp reassociate\'}1"}}, | | [h]="no template named %0; did you mean %1?", |
| [g]={{nil,y,{{"\'#pragma clang fp eval_method\'","option \'ffp-eval-method\'"}," cannot be used with ",{"option \'fapprox-func\'","option \'mreassociate\'","option \'freciprocal\'","option \'ffp-eval-method\'","\'#pragma clang fp reassociate\'"}}}}, | | [g]="no template named A; did you mean B?", |
| [b]=k, | | [b]=k, |
| [e]="(?:\'\\#pragma clang fp eval_method\'|option \'ffp\\-eval\\-method\') cannot be used with (?:option \'fapprox\\-func\'|option \'mreassociate\'|option \'freciprocal\'|option \'ffp\\-eval\\-method\'|\'\\#pragma clang fp reassociate\')", | | [e]="no template named (.*?); did you mean (.*?)\\?", |
| [f]=a, | | [d]=a, |
| [d]={{nil,y,m}}, | | [f]=m, |
| [c]={md,1620118562,nd,od}, | | [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"}, |
| [j]={{L,540,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n // ...\n if (getLangOpts().ApproxFunc)\n Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 0;"},{L,542,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n // ...\n if (getLangOpts().AllowFPReassoc)\n Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 1;"},{L,544,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n // ...\n if (getLangOpts().AllowRecip)\n Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 2;"},{L,1336,"void Sema::ActOnPragmaFPReassociate(SourceLocation Loc, bool IsEnabled) {\n if (IsEnabled) {\n // ...\n if (Reason != -1)\n Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << Reason << 4;"}} | | [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());"}}, |
| },
| |
| ["err_shared_var_init"]={
| |
| [i]="err_shared_var_init",
| |
| [h]="initialization is not supported for __shared__ variables.",
| |
| [g]="initialization is not supported for __shared__ variables.",
| |
| [b]=k,
| |
| [e]="initialization is not supported for __shared__ variables\\.",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"97c01c35f8da",1454452188,"[CUDA] Do not allow dynamic initialization of global device side variables.","[CUDA] Do not allow dynamic initialization of global device side variables.\n\nIn general CUDA does not allow dynamic initialization of\nglobal device-side variables. One exception is that CUDA allows\nrecords with empty constructors as described in section E2.2.1 of\nCUDA 7.5 Programming guide.\n\nThis patch applies initializer checks for all device-side variables.\nEmpty constructors are accepted, but no code is generated for them.\n\nDifferential Revision: http://reviews.llvm.org/D15305\n\nllvm-svn: 259592"},
| |
| [j]={{"clang/lib/Sema/SemaCUDA.cpp",624,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n // ...\n if (IsDeviceOrConstantVar || IsSharedVar) {\n // ...\n Diag(VD->getLocation(), IsSharedVar ? diag::err_shared_var_init : diag::err_dynamic_var_init) << Init->getSourceRange();"}},
| |
| [l]={ | | [l]={ |
| ["clang/test/SemaCUDA/union-init.cu"]={"clang/test/SemaCUDA/union-init.cu:40:16: error: initialization is not supported for __shared__ variables.","clang/test/SemaCUDA/union-init.cu:42:16: error: initialization is not supported for __shared__ variables."} | | ["clang/test/SemaCXX/GH59446.cpp"]={"clang/test/SemaCXX/GH59446.cpp:9:10: error: no template named \'X\'; did you mean \'N::X\'?"} |
| } | | } |
| }, | | }, |
| ["err_shift_rhs_only_vector"]={ | | ["err_no_typeid_with_fno_rtti"]={ |
| [i]="err_shift_rhs_only_vector", | | [i]="err_no_typeid_with_fno_rtti", |
| [h]="requested shift is a vector of type %0 but the first operand is not a vector (%1)", | | [h]={{nil,q,"use of typeid requires -frtti"},{t,nil,"cannot use typeid with -fno-rtti"}}, |
| [g]="requested shift is a vector of type A but the first operand is not a vector (B)", | | [g]={{nil,q,"use of typeid requires -frtti"},{t,nil,"cannot use typeid with -fno-rtti"}}, |
| [b]=k, | | [b]=k, |
| [e]="requested shift is a vector of type (.*?) but the first operand is not a vector \\((.*?)\\)", | | [e]="use of typeid requires \\-frtti", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands","OpenCL: handle shift operator with vector operands\n\nIntroduce a number of checks:\n1. If LHS is a scalar, then RHS cannot be a vector.\n2. Operands must be of integer type.\n3. If both are vectors, then the number of elements must match.\n\nRelax the requirement for \"usual arithmetic conversions\":\nWhen LHS is a vector, a scalar RHS can simply be expanded into a\nvector; OpenCL does not require that its rank be lower than the LHS.\nFor example, the following code is not an error even if the implicit\ntype of the constant literal is \"int\".\n\n char2 foo(char2 v) { return v << 1; }\n\nConsolidate existing tests under CodeGenOpenCL, and add more tests\nunder SemaOpenCL.\n\nllvm-svn: 228382"}, | | [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"}, |
| [j]={{n,12103,"/// Return the resulting type when a vector is shifted\n/// by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // OpenCL v1.1 s6.3.j says RHS can be a vector only if LHS is a vector.\n if ((S.LangOpts.OpenCL || S.LangOpts.ZVector) && !LHS.get()->getType()->isVectorType()) {\n S.Diag(Loc, diag::err_shift_rhs_only_vector) << RHS.get()->getType() << LHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}, | | [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]={ |
| ["clang/test/Sema/zvector.c"]={"clang/test/Sema/zvector.c:732:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:733:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'unsigned char\')","clang/test/Sema/zvector.c:736:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:737:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'unsigned char\')","clang/test/Sema/zvector.c:832:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:833:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'unsigned char\')","clang/test/Sema/zvector.c:836:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:837:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'unsigned char\')"} | | ["clang/test/SemaCXX/no-rtti.cpp"]={"clang/test/SemaCXX/no-rtti.cpp:9:9: error: use of typeid requires -frtti"} |
| } | | } |
| }, | | }, |
| ["err_shufflevector_argument_too_large"]={ | | ["err_no_viable_destructor"]={ |
| [i]="err_shufflevector_argument_too_large", | | [i]={{nil,s,"err_no_viable_destructor"}}, |
| [h]="index for __builtin_shufflevector must be less than the total number of vector elements", | | [h]={{nil,s,"no viable destructor found for class %0"}}, |
| [g]="index for __builtin_shufflevector must be less than the total number of vector elements", | | [g]={{nil,s,"no viable destructor found for class A"}}, |
| [b]=k, | | [b]=k, |
| [e]="index for __builtin_shufflevector must be less than the total number of vector elements", | | [e]="no viable destructor found for class (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,s,m}}, |
| [c]={u,1237025389,s,t}, | | [c]={Ac,1625925174,zc,sc}, |
| [j]={{z,8508,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n // ...\n for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {\n // ...\n if (Result->getActiveBits() > 64 || Result->getZExtValue() >= numElements * 2)\n return ExprError(Diag(TheCall->getBeginLoc(), diag::err_shufflevector_argument_too_large) << TheCall->getArg(i)->getSourceRange());"}}, | | [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]={ |
| ["clang/test/SemaTemplate/instantiate-clang.cpp"]={"clang/test/SemaTemplate/instantiate-clang.cpp:34:11: error: index for __builtin_shufflevector must be less than the total number of vector elements","clang/test/SemaTemplate/instantiate-clang.cpp:35:11: error: index for __builtin_shufflevector must be less than the total number of vector elements"} | | ["clang/test/CXX/class/class.dtor/p4.cpp"]={"clang/test/CXX/class/class.dtor/p4.cpp:61:17: error: no viable destructor found for class \'D<0>\'"} |
| } | | } |
| }, | | }, |
| ["err_shufflevector_nonconstant_argument"]={ | | ["err_nogetter_property_compound_assignment"]={ |
| [i]="err_shufflevector_nonconstant_argument", | | [i]="err_nogetter_property_compound_assignment", |
| [h]="index for __builtin_shufflevector must be a constant integer", | | [h]="a getter method is needed to perform a compound assignment on a property", |
| [g]="index for __builtin_shufflevector must be a constant integer", | | [g]="a getter method is needed to perform a compound assignment on a property", |
| [b]=k, | | [b]=k, |
| [e]="index for __builtin_shufflevector must be a constant integer", | | [e]="a getter method is needed to perform a compound assignment on a property", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={u,1237025389,s,t}, | | [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]={{z,8498,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n // ...\n for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {\n // ...\n if (!(Result = TheCall->getArg(i)->getIntegerConstantExpr(Context)))\n return ExprError(Diag(TheCall->getBeginLoc(), diag::err_shufflevector_nonconstant_argument) << TheCall->getArg(i)->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_single_decl_assign_in_for_range"]={ | | ["err_nogetter_property_incdec"]={ |
| [i]="err_single_decl_assign_in_for_range", | | [i]="err_nogetter_property_incdec", |
| [h]="range-based \'for\' statement uses \':\', not \'=\'", | | [h]="no getter method %1 for %select{increment|decrement}0 of property", |
| [g]="range-based \'for\' statement uses \':\', not \'=\'", | | [g]={{nil,nil,{"no getter method B for ",{"increment","decrement"}," of property"}}}, |
| [b]=k, | | [b]=k, |
| [e]="range\\-based \'for\' statement uses \'\\:\', not \'\\=\'", | | [e]="no getter method (.*?) for (?:increment|decrement) of property", |
| [f]=a, | | [d]=a, |
| [d]=x, | | [f]=m, |
| [c]={"49ff754d4be5",1399548505,"Suggest fix-it \':\' when \'=\' used in for-range-declaration","Suggest fix-it \':\' when \'=\' used in for-range-declaration\n\nFix for PR19176. Clang will suggest a fix-it hint for cases like:\n int arr[] = {1, 2, 3, 4};\n for (auto i = arr)\n ^\n :\n\nllvm-svn: 208299"}, | | [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]={{jb,2532,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n // ...\n // Parse declarator \'=\' initializer.\n case InitKind::Equal: {\n // ...\n if (Tok.is(tok::kw_delete)) {\n // ...\n } else if (Tok.is(tok::kw_default)) {\n // ...\n } else {\n // ...\n // If this is the only decl in (possibly) range based for statement,\n // our best guess is that the user meant \':\' instead of \'=\'.\n if (Tok.is(tok::r_paren) && FRI && D.isFirstDeclarator()) {\n Diag(EqualLoc, diag::err_single_decl_assign_in_for_range) << FixItHint::CreateReplacement(EqualLoc, \":\");"}} | | [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]={ |
| | ["clang/test/SemaObjC/error-implicit-property.m"]={"clang/test/SemaObjC/error-implicit-property.m:18:8: error: no getter method \'P\' for increment of property","clang/test/SemaObjC/error-implicit-property.m:19:3: error: no getter method \'P\' for decrement of property"} |
| | } |
| }, | | }, |
| ["err_size_t_literal_too_large"]={ | | ["err_non_asm_stmt_in_naked_function"]={ |
| [i]={{nil,F,"err_size_t_literal_too_large"}}, | | [i]="err_non_asm_stmt_in_naked_function", |
| [h]={{nil,F,"%select{signed |}0\'size_t\' literal is out of range of possible %select{signed |}0\'size_t\' values"}}, | | [h]="non-ASM statement in naked function is not supported", |
| [g]={{nil,F,{{"signed ",a},"\'size_t\' literal is out of range of possible ",{"signed ",a},"\'size_t\' values"}}}, | | [g]="non-ASM statement in naked function is not supported", |
| [b]=k, | | [b]=k, |
| [e]="(?:signed |)\'size_t\' literal is out of range of possible (?:signed |)\'size_t\' values", | | [e]="non\\-ASM statement in naked function is not supported", |
| [f]=a, | | [d]=a, |
| [d]={{nil,F,a}}, | | [f]=m, |
| [c]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals","[C++2b] Support size_t literals\n\nThis adds support for C++2b\'s z/uz suffixes for size_t literals (P0330)."}, | | [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"}, |
| [j]={{n,4241,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n // ...\n if (Literal.isFixedPointLiteral()) {\n // ...\n } else if (Literal.isFloatingLiteral()) {\n // ...\n } else if (!Literal.isIntegerLiteral()) {\n // ...\n } else {\n // ...\n if (Literal.GetIntegerValue(ResultVal)) {\n // ...\n } else {\n // ...\n // If we still couldn\'t decide a type, we either have \'size_t\' literal\n // that is out of range, or a decimal literal that does not fit in a\n // signed long long and has no U suffix.\n if (Ty.isNull()) {\n if (Literal.isSizeT)\n Diag(Tok.getLocation(), diag::err_size_t_literal_too_large) << Literal.isUnsigned;"}}, | | [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]={ |
| ["clang/test/SemaCXX/size_t-literal.cpp"]={"clang/test/SemaCXX/size_t-literal.cpp:74:9: error: signed \'size_t\' literal is out of range of possible signed \'size_t\' values","clang/test/SemaCXX/size_t-literal.cpp:76:9: error: \'size_t\' literal is out of range of possible \'size_t\' values","clang/test/SemaCXX/size_t-literal.cpp:80:9: error: \'size_t\' literal is out of range of possible \'size_t\' values"} | | ["clang/test/Sema/attr-naked.c"]={"clang/test/Sema/attr-naked.c:14:3: error: non-ASM statement in naked function is not supported","clang/test/Sema/attr-naked.c:53:3: error: non-ASM statement in naked function is not supported","clang/test/Sema/attr-naked.c:57:3: error: non-ASM statement in naked function is not supported","clang/test/Sema/attr-naked.c:61:3: error: non-ASM statement in naked function is not supported"} |
| } | | } |
| }, | | }, |
| ["err_sizeless_in_exception_spec"]={ | | ["err_non_bool_atomic_constraint"]={ |
| [i]={{nil,q,"err_sizeless_in_exception_spec"}}, | | [i]={{nil,n,"err_non_bool_atomic_constraint"}}, |
| [h]={{nil,q,"%select{|reference to }0sizeless type %1 is not allowed in exception specification"}}, | | [h]={{nil,n,"atomic constraint must be of type \'bool\' (found %0)"}}, |
| [g]={{nil,q,{{a,"reference to "},"sizeless type B is not allowed in exception specification"}}}, | | [g]={{nil,n,"atomic constraint must be of type \'bool\' (found A)"}}, |
| [b]=k, | | [b]=k, |
| [e]="(?:|reference to )sizeless type (.*?) is not allowed in exception specification", | | [e]="atomic constraint must be of type \'bool\' \\(found (.*?)\\)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,q,m}}, | | [f]={{nil,n,m}}, |
| [c]={U,1576908663,T,S}, | | [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"}, |
| [j]={{"clang/lib/Sema/SemaExceptionSpec.cpp",185,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T The exception type. This will be decayed to a pointer type\n/// when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n // ...\n // The MSVC compatibility mode doesn\'t extend to sizeless types,\n // so diagnose them separately.\n if (PointeeT->isSizelessType() && Kind != 1) {\n Diag(Range.getBegin(), diag::err_sizeless_in_exception_spec) << (Kind == 2 ? 1 : 0) << PointeeT << Range;"}},
| | [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]={ |
| ["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:310:28: error: sizeless type \'svint8_t\' (aka \'__SVInt8_t\') is not allowed in exception specification","clang/test/SemaCXX/sizeless-1.cpp:312:38: error: reference to sizeless type \'svint8_t\' (aka \'__SVInt8_t\') is not allowed in exception specification"} | | ["clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:26:34: error: atomic constraint must be of type \'bool\' (found \'int\')","clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:75:34: error: atomic constraint must be of type \'bool\' (found \'int\')"} |
| } | | } |
| }, | | }, |
| ["err_sizeless_nonlocal"]={ | | ["err_non_c_like_anon_struct_in_typedef"]={ |
| [i]={{nil,q,"err_sizeless_nonlocal"}}, | | [i]={{nil,w,"err_non_c_like_anon_struct_in_typedef"}}, |
| [h]={{nil,q,"non-local variable with sizeless type %0"}}, | | [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"}}, |
| [g]={{nil,q,"non-local variable with sizeless type A"}}, | | [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"}}}, |
| [b]=k, | | [b]=k, |
| [e]="non\\-local variable with sizeless type (.*?)", | | [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", |
| [f]=a, | | [d]=a, |
| [d]={{nil,q,m}}, | | [f]={{nil,w,m}}, |
| [c]={U,1576908663,T,S}, | | [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"}, |
| [j]={{w,8749,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n if (!NewVD->hasLocalStorage() && T->isSizelessType() && !T.isWebAssemblyReferenceType()) {\n Diag(NewVD->getLocation(), diag::err_sizeless_nonlocal) << T;"}}, | | [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]={ |
| ["clang/test/Sema/sizeless-1.c"]={"clang/test/Sema/sizeless-1.c:8:10: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:9:17: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:10:17: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:11:19: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:57:19: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"} | | ["clang/test/SemaCXX/linkage2.cpp"]={"clang/test/SemaCXX/linkage2.cpp:250:17: error: anonymous non-C-compatible type given name for linkage purposes by typedef declaration after its linkage was computed; add a tag name here to establish linkage prior to definition"} |
| } | | } |
| }, | | }, |
| ["err_sizeof_alignof_function_type"]={ | | ["err_non_constant_constraint_expression"]={ |
| [i]="err_sizeof_alignof_function_type", | | [i]={{nil,n,"err_non_constant_constraint_expression"}}, |
| [h]={{nil,q,"invalid application of \'%0\' to a function type"},{p,E,"invalid application of \'%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align|__alignof}0\' to a function type"},{ic,nil,"invalid application of \'%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align}0\' to a function type"}}, | | [h]={{nil,n,"substitution into constraint expression resulted in a non-constant expression"}}, |
| [g]={{nil,q,"invalid application of \'A\' to a function type"},{p,E,{"invalid application of \'",{jd,qd,"vec_step","__builtin_omp_required_simd_align","__alignof"},"\' to a function type"}},{ic,nil,{"invalid application of \'",{jd,qd,"vec_step","__builtin_omp_required_simd_align"},"\' to a function type"}}}, | | [g]={{nil,n,"substitution into constraint expression resulted in a non-constant expression"}}, |
| [b]=k, | | [b]=k, |
| [e]="invalid application of \'(.*?)\' to a function type", | | [e]="substitution into constraint expression resulted in a non\\-constant expression", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,n,m}}, |
| [c]={"4e28b2658901",1376432802,"sizeof(void) etc. should be a hard error in C++.","sizeof(void) etc. should be a hard error in C++.\n\nPR16872.\n\nllvm-svn: 188324"}, | | [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"}, |
| [j]={{n,4441,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n // ...\n if (ExprTy->isFunctionType()) {\n Diag(E->getExprLoc(), diag::err_sizeof_alignof_function_type) << getTraitSpelling(ExprKind) << E->getSourceRange();"},{n,4700,"/// Check the constraints on operands to unary expression and type\n/// traits.\n///\n/// This will complete any types necessary, and validate the various constraints\n/// on those operands.\n///\n/// The UsualUnaryConversions() function is *not* called by this routine.\n/// C99 6.3.2.1p[2-4] all state:\n/// Except when it is the operand of the sizeof operator ...\n///\n/// C++ [expr.sizeof]p4\n/// The lvalue-to-rvalue, array-to-pointer, and function-to-pointer\n/// standard conversions are not applied to the operand of sizeof.\n///\n/// This policy is followed for all of the unary trait expressions.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, SourceRange ExprRange, UnaryExprOrTypeTrait ExprKind, StringRef KWName) {\n // ...\n if (ExprType->isFunctionType()) {\n Diag(OpLoc, diag::err_sizeof_alignof_function_type) << KWName << ExprRange;"}},
| | [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]={ |
| ["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:47:9: error: invalid application of \'sizeof\' to a function type"} | | ["clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp:29:14: error: substitution into constraint expression resulted in a non-constant expression"} |
| } | | } |
| }, | | }, |
| ["err_sizeof_alignof_incomplete_or_sizeless_type"]={ | | ["err_non_consteval_override"]={ |
| [i]={{nil,q,"err_sizeof_alignof_incomplete_or_sizeless_type"}}, | | [i]={{nil,w,"err_non_consteval_override"}}, |
| [h]={{nil,q,"invalid application of \'%0\' to %select{an incomplete|sizeless}1 type %2"}}, | | [h]={{nil,w,"non-consteval function %0 cannot override a consteval function"}}, |
| [g]={{nil,q,{"invalid application of \'A\' to ",{"an incomplete","sizeless"}," type C"}}}, | | [g]={{nil,w,"non-consteval function A cannot override a consteval function"}}, |
| [b]=k, | | [b]=k, |
| [e]="invalid application of \'(.*?)\' to (?:an incomplete|sizeless) type (.*?)", | | [e]="non\\-consteval function (.*?) cannot override a consteval function", |
| [f]=a, | | [d]=a, |
| [d]={{nil,q,m}}, | | [f]={{nil,w,m}}, |
| [c]={U,1576908663,T,S}, | | [c]={Hb,1576908663,Eb,Kb}, |
| [j]={{n,4416,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n // ...\n // \'alignof\' applied to an expression only requires the base element type of\n // the expression to be complete. \'sizeof\' requires the expression\'s type to\n // be complete (and will attempt to complete it if it\'s an array of unknown\n // bound).\n if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n if (RequireCompleteSizedType(E->getExprLoc(), Context.getBaseElementType(E->getType()), diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{n,4426,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n // ...\n // \'alignof\' applied to an expression only requires the base element type of\n // the expression to be complete. \'sizeof\' requires the expression\'s type to\n // be complete (and will attempt to complete it if it\'s an array of unknown\n // bound).\n if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n // ...\n } else {\n if (RequireCompleteSizedExprType(E, diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{n,4692,"/// Check the constraints on operands to unary expression and type\n/// traits.\n///\n/// This will complete any types necessary, and validate the various constraints\n/// on those operands.\n///\n/// The UsualUnaryConversions() function is *not* called by this routine.\n/// C99 6.3.2.1p[2-4] all state:\n/// Except when it is the operand of the sizeof operator ...\n///\n/// C++ [expr.sizeof]p4\n/// The lvalue-to-rvalue, array-to-pointer, and function-to-pointer\n/// standard conversions are not applied to the operand of sizeof.\n///\n/// This policy is followed for all of the unary trait expressions.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, SourceRange ExprRange, UnaryExprOrTypeTrait ExprKind, StringRef KWName) {\n // ...\n if (RequireCompleteSizedType(OpLoc, ExprType, diag::err_sizeof_alignof_incomplete_or_sizeless_type, KWName, ExprRange))"}}, | | [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(); })) {"}}, |
| [l]={ | | [l]={ |
| ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:11:22: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:13:22: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:21:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:28:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:35:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:45:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:61:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:73:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:86:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:88:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:114:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:201:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:206:28: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:126:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:140:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:141:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:150:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_sizeof_alignof_typeof_bitfield"]={ | | ["err_non_default_visibility_dllimport"]={ |
| [i]="err_sizeof_alignof_typeof_bitfield", | | [i]={{nil,p,"err_non_default_visibility_dllimport"}}, |
| [h]={{nil,M,"invalid application of \'%select{sizeof|alignof|typeof|typeof_unqual}0\' to bit-field"},{y,nil,"invalid application of \'%select{sizeof|alignof|typeof}0\' to bit-field"}}, | | [h]={{nil,p,"non-default visibility cannot be applied to \'dllimport\' declaration"}}, |
| [g]={{nil,M,{"invalid application of \'",{jd,qd,"typeof","typeof_unqual"},"\' to bit-field"}},{y,nil,{"invalid application of \'",{jd,qd,"typeof"},"\' to bit-field"}}}, | | [g]={{nil,p,"non-default visibility cannot be applied to \'dllimport\' declaration"}}, |
| | [b]=k, |
| | [e]="non\\-default visibility cannot be applied to \'dllimport\' declaration", |
| | [d]=a, |
| | [f]={{nil,p,a}}, |
| | [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"}, |
| | [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"]={ |
| | [i]="err_non_deleted_override", |
| | [h]="non-deleted function %0 cannot override a deleted function", |
| | [g]="non-deleted function A cannot override a deleted function", |
| [b]=k, | | [b]=k, |
| [e]="invalid application of \'(?:sizeof|alignof|typeof|typeof_unqual)\' to bit\\-field", | | [e]="non\\-deleted function (.*?) cannot override a deleted function", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:","Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:\nhttps://gcc.gnu.org/onlinedocs/gcc/Typeof.html\n\nDifferences from the GCC extension:\n * __auto_type is also permitted in C++ (but only in places where\n it could appear in C), allowing its use in headers that might\n be shared across C and C++, or used from C++98\n * __auto_type can be combined with a declarator, as with C++ auto\n (for instance, \"__auto_type *p\")\n * multiple variables can be declared in a single __auto_type\n declaration, with the C++ semantics (the deduced type must be\n the same in each case)\n\nThis patch also adds a missing restriction on applying typeof to\na bit-field, which GCC has historically rejected in C (due to\nlack of clarity as to whether the operand should be promoted).\nThe same restriction also applies to __auto_type in C (in both\nGCC and Clang).\n\nThis also fixes PR25449.\n\nPatch by Nicholas Allegra!\n\nllvm-svn: 252690"}, | | [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"}, |
| [j]={{n,4502,"static bool CheckAlignOfExpr(Sema &S, Expr *E, UnaryExprOrTypeTrait ExprKind) {\n // ...\n if (E->getObjectKind() == OK_BitField) {\n S.Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 1 << E->getSourceRange();"},{n,4878,"/// Build a sizeof or alignof expression given an expression\n/// operand.\nExprResult Sema::CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc, UnaryExprOrTypeTrait ExprKind) {\n // ...\n if (E->isTypeDependent()) {\n // ...\n } else if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n // ...\n } else if (ExprKind == UETT_VecStep) {\n // ...\n } else if (ExprKind == UETT_OpenMPRequiredSimdAlign) {\n // ...\n } else if (E->refersToBitField()) { // C99 6.5.3.4p1.\n Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 0;"},{R,9412,"QualType Sema::BuildTypeofExprType(Expr *E, TypeOfKind Kind) {\n // ...\n if (!getLangOpts().CPlusPlus && E->refersToBitField())\n Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << (Kind == TypeOfKind::Unqualified ? 3 : 2);"}}, | | [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(); })) {"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Sema/c2x-typeof.c"]={"clang/test/Sema/c2x-typeof.c:48:7: error: invalid application of \'typeof\' to bit-field","clang/test/Sema/c2x-typeof.c:49:14: error: invalid application of \'typeof_unqual\' to bit-field"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_sizeof_nonfragile_interface"]={ | | ["err_non_designated_init_used"]={ |
| [i]="err_sizeof_nonfragile_interface", | | [i]={{nil,s,"err_non_designated_init_used"}}, |
| [h]="application of \'%select{alignof|sizeof}1\' to interface %0 is not supported on this architecture and platform", | | [h]={{nil,s,"a randomized struct can only be initialized with a designated initializer"}}, |
| [g]={{nil,nil,{"application of \'",{qd,jd},"\' to interface A is not supported on this architecture and platform"}}}, | | [g]={{nil,s,"a randomized struct can only be initialized with a designated initializer"}}, |
| [b]=k, | | [b]=k, |
| [e]="application of \'(?:alignof|sizeof)\' to interface (.*?) is not supported on this architecture and platform", | | [e]="a randomized struct can only be initialized with a designated initializer", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,s,a}}, |
| [c]={"37920f53599e",1240343716,"reject sizeof(itf) when itf is a forward declared interface, or when","reject sizeof(itf) when itf is a forward declared interface, or when\nin non-fragile abi mode. rdar://6811884\n\nllvm-svn: 69701"}, | | [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"}, |
| [j]={{n,4348,"static bool CheckObjCTraitOperandConstraints(Sema &S, QualType T, SourceLocation Loc, SourceRange ArgRange, UnaryExprOrTypeTrait TraitKind) {\n // Reject sizeof(interface) and sizeof(interface<proto>) if the\n // runtime doesn\'t allow it.\n if (!S.LangOpts.ObjCRuntime.allowsSizeofAlignof() && T->isObjCObjectType()) {\n S.Diag(Loc, diag::err_sizeof_nonfragile_interface) << T << (TraitKind == UETT_SizeOf) << ArgRange;"}}, | | [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]={ |
| ["clang/test/SemaObjC/sizeof-interface.m"]={"clang/test/SemaObjC/sizeof-interface.m:26:9: error: application of \'sizeof\' to interface \'I0\' is not supported on this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:35:9: error: application of \'sizeof\' to interface \'I0\' is not supported on this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:67:40: error: application of \'sizeof\' to interface \'I\' is not supported on this architecture and platform"} | | ["clang/test/Sema/init-randomized-struct.c"]={"clang/test/Sema/init-randomized-struct.c:41:30: error: a randomized struct can only be initialized with a designated initializer","clang/test/Sema/init-randomized-struct.c:52:26: error: a randomized struct can only be initialized with a designated initializer","clang/test/Sema/init-randomized-struct.c:53:59: error: a randomized struct can only be initialized with a designated initializer"} |
| } | | } |
| }, | | }, |
| ["err_sizeof_pack_no_pack_name"]={ | | ["err_non_extern_extern"]={ |
| [i]="err_sizeof_pack_no_pack_name", | | [i]="err_non_extern_extern", |
| [h]="%0 does not refer to the name of a parameter pack", | | [h]="non-extern declaration of %0 follows extern declaration", |
| [g]="A does not refer to the name of a parameter pack", | | [g]="non-extern declaration of A follows extern declaration", |
| [b]=k, | | [b]=k, |
| [e]="(.*?) does not refer to the name of a parameter pack", | | [e]="non\\-extern declaration of (.*?) follows extern declaration", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a","Implement the sizeof...(pack) expression to compute the length of a\nparameter pack.\n\nNote that we\'re missing proper libclang support for the new\nSizeOfPackExpr expression node.\n\nllvm-svn: 122813"}, | | [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"}, |
| [j]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1047,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n/// static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n // ...\n if (!ParameterPack || !ParameterPack->isParameterPack()) {\n Diag(NameLoc, diag::err_sizeof_pack_no_pack_name) << &Name;"}}, | | [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]={ |
| ["clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp"]={"clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp:30:43: error: \'Value\' does not refer to the name of a parameter pack"} | | ["clang/test/Sema/private-extern.c"]={"clang/test/Sema/private-extern.c:34:7: error: non-extern declaration of \'g8\' follows extern declaration","clang/test/Sema/private-extern.c:39:7: error: non-extern declaration of \'g9\' follows extern declaration"} |
| } | | } |
| }, | | }, |
| ["err_sizeof_pack_no_pack_name_suggest"]={ | | ["err_non_first_default_compare_deletes"]={ |
| [i]="err_sizeof_pack_no_pack_name_suggest", | | [i]={{nil,n,"err_non_first_default_compare_deletes"}}, |
| [h]="%0 does not refer to the name of a parameter pack; did you mean %1?", | | [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"}}, |
| [g]="A does not refer to the name of a parameter pack; did you mean B?", | | [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"}}}, |
| [b]=k, | | [b]=k, |
| [e]="(.*?) does not refer to the name of a parameter pack; did you mean (.*?)\\?", | | [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", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,n,m}}, |
| [c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a","Implement the sizeof...(pack) expression to compute the length of a\nparameter pack.\n\nNote that we\'re missing proper libclang support for the new\nSizeOfPackExpr expression node.\n\nllvm-svn: 122813"}, | | [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."}, |
| [j]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1031,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n/// static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n // ...\n case LookupResult::NotFound:\n case LookupResult::NotFoundInCurrentInstantiation: {\n // ...\n if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery)) {\n diagnoseTypo(Corrected, PDiag(diag::err_sizeof_pack_no_pack_name_suggest) << &Name, PDiag(diag::note_parameter_pack_here));"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp"]={"clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp:35:43: error: \'Type\' does not refer to the name of a parameter pack; did you mean \'Types\'?"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_sizeof_parameter_pack"]={ | | ["err_non_first_default_compare_in_class"]={ |
| [i]="err_sizeof_parameter_pack", | | [i]={{nil,p,"err_non_first_default_compare_in_class"}}, |
| [h]="expected parenthesized parameter pack name in \'sizeof...\' expression", | | [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"}}, |
| [g]="expected parenthesized parameter pack name in \'sizeof...\' expression", | | [g]={{nil,p,{"defaulting this ",{"equality","three-way","equality","relational"}," comparison operator is not allowed because it was already declared outside the class"}}}, |
| [b]=k, | | [b]=k, |
| [e]="expected parenthesized parameter pack name in \'sizeof\\.\\.\\.\' expression", | | [e]="defaulting this (?:equality|three\\-way|equality|relational) comparison operator is not allowed because it was already declared outside the class", |
| [f]=a, | | [d]=a, |
| [d]=x, | | [f]={{nil,p,m}}, |
| [c]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a","Implement the sizeof...(pack) expression to compute the length of a\nparameter pack.\n\nNote that we\'re missing proper libclang support for the new\nSizeOfPackExpr expression node.\n\nllvm-svn: 122813"}, | | [c]={Ac,1625925174,zc,sc}, |
| [j]={{"clang/lib/Parse/ParseExpr.cpp",2477,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n/// unary-expression: [C99 6.5.3]\n/// \'sizeof\' unary-expression\n/// \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU] \'__alignof\' unary-expression\n/// [GNU] \'__alignof\' \'(\' type-name \')\'\n/// [C11] \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n // ...\n // [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n if (Tok.is(tok::ellipsis) && OpTok.is(tok::kw_sizeof)) {\n // ...\n if (Tok.is(tok::l_paren)) {\n // ...\n } else if (Tok.is(tok::identifier)) {\n // ...\n } else {\n Diag(Tok, diag::err_sizeof_parameter_pack);"}} | | [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;"}}, |
| | [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"} |
| | } |
| }, | | }, |
| ["err_sls_hardening_arm_not_supported"]={ | | ["err_non_local_variable_decl_in_for"]={ |
| [i]={{nil,v,"err_sls_hardening_arm_not_supported"}}, | | [i]="err_non_local_variable_decl_in_for", |
| [h]={{nil,v,"-mharden-sls is only supported on armv7-a or later"}}, | | [h]="declaration of non-local variable in \'for\' loop", |
| [g]={{nil,v,"-mharden-sls is only supported on armv7-a or later"}}, | | [g]="declaration of non-local variable in \'for\' loop", |
| [b]=k, | | [b]=k, |
| [e]="\\-mharden\\-sls is only supported on armv7\\-a or later", | | [e]="declaration of non\\-local variable in \'for\' loop", |
| [f]=a, | | [d]=a, |
| [d]={{nil,v,a}}, | | [f]=m, |
| [c]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating point opcodes that support exception\nflag gathering quiet and propagate signaling NaN inputs per IEEE754-2008, which is\nconveyed by a function attribute \"amdgpu-ieee\". \"amdgpu-ieee\"=\"false\" turns this off.\nWithout this function attribute backend assumes it is on for compute functions.\n\n-mamdgpu-ieee and -mno-amdgpu-ieee are added to Clang to control this function attribute.\nBy default it is on. -mno-amdgpu-ieee requires -fno-honor-nans or equivalent.\n\nReviewed by: Matt Arsenault\n\nDifferential Revision: https://reviews.llvm.org/D77013"}, | | [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"}, |
| [j]={{sd,954,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n // ...\n // Enable/disable straight line speculation hardening.\n if (Arg *A = Args.getLastArg(options::OPT_mharden_sls_EQ)) {\n // ...\n if (EnableRetBr || EnableBlr)\n if (!(isARMAProfile(Triple) && getARMSubArchVersionNumber(Triple) >= 7))\n D.Diag(diag::err_sls_hardening_arm_not_supported) << Scope << A->getAsString(Args);"}} | | [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));"}}, |
| },
| |
| ["err_spaceship_argument_narrowing"]={
| |
| [i]={{nil,O,"err_spaceship_argument_narrowing"}},
| |
| [h]={{nil,O,"argument to \'operator<=>\' %select{cannot be narrowed from type %1 to %2|evaluates to %1, which cannot be narrowed to type %2}0"}},
| |
| [g]={{nil,O,{"argument to \'operator<=>\' ",{"cannot be narrowed from type B to C","evaluates to B, which cannot be narrowed to type C"}}}},
| |
| [b]=k,
| |
| [e]="argument to \'operator\\<\\=\\>\' (?:cannot be narrowed from type (.*?) to (.*?)|evaluates to (.*?), which cannot be narrowed to type (.*?))",
| |
| [f]=a,
| |
| [d]={{nil,O,a}},
| |
| [c]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant","[C++2a] Implement operator<=> CodeGen and ExprConstant\n\nSummary:\nThis patch tackles long hanging fruit for the builtin operator<=> expressions. It is currently needs some cleanup before landing, but I want to get some initial feedback.\n\nThe main changes are:\n\n* Lookup, build, and store the required standard library types and expressions in `ASTContext`. By storing them in ASTContext we don\'t need to store (and duplicate) the required expressions in the BinaryOperator AST nodes. \n\n* Implement [expr.spaceship] checking, including diagnosing narrowing conversions. \n\n* Implement `ExprConstant` for builtin spaceship operators.\n\n* Implement builitin operator<=> support in `CodeGenAgg`. Initially I emitted the required comparisons using `ScalarExprEmitter::VisitBinaryOperator`, but this caused the operand expressions to be emitted once for every required cmp.\n\n* Implement [builtin.over] with modifications to support the intent of P0946R0. See the note on `BuiltinOperatorOverloadBuilder::addThreeWayArithmeticOverloads` for more information about the workaround.\n\n\n\n\nReviewers: rsmith, aaron.ballman, majnemer, rnk, compnerd, rjmccall\n\nReviewed By: rjmccall\n\nSubscribers: rjmccall, rsmith, aaron.ballman, junbuml, mgorny, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D45476\n\nllvm-svn: 331677"},
| |
| [j]={{n,12780,"static bool checkThreeWayNarrowingConversion(Sema &S, QualType ToType, Expr *E, QualType FromType, SourceLocation Loc) {\n // ...\n case NK_Constant_Narrowing:\n // ...\n S.Diag(E->getBeginLoc(), diag::err_spaceship_argument_narrowing) << /*Constant*/ 1 << PreNarrowingValue.getAsString(S.Context, PreNarrowingType) << ToType;"},{n,12908,"static bool checkThreeWayNarrowingConversion(Sema &S, QualType ToType, Expr *E, QualType FromType, SourceLocation Loc) {\n // ...\n case NK_Type_Narrowing:\n S.Diag(E->getBeginLoc(), diag::err_spaceship_argument_narrowing) << /*Constant*/ 0 << FromType << ToType;"}},
| |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/compare-cxx2a.cpp"]={"clang/test/SemaCXX/compare-cxx2a.cpp:36:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:40:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:41:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:42:10: error: argument to \'operator<=>\' cannot be narrowed from type \'short\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:43:10: error: argument to \'operator<=>\' cannot be narrowed from type \'signed char\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:44:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:45:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:64:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:72:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:73:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:92:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:100:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:101:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:120:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:128:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:129:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:161:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:162:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:163:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:164:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:167:35: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:237:11: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:251:10: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:252:26: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:257:16: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:261:10: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:331:28: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:338:12: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:339:12: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_spec_member_not_instantiated"]={ | | ["err_non_static_static"]={ |
| [i]="err_spec_member_not_instantiated", | | [i]="err_non_static_static", |
| [h]="specialization of member %q0 does not specialize an instantiated member", | | [h]="non-static declaration of %0 follows static declaration", |
| [g]="specialization of member A does not specialize an instantiated member", | | [g]="non-static declaration of A follows static declaration", |
| [b]=k, | | [b]=k, |
| [e]="specialization of member (.*?) does not specialize an instantiated member", | | [e]="non\\-static declaration of (.*?) follows static declaration", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"86d142a80113",1254986698,"For instantiations of static data members of class templates, keep","For instantiations of static data members of class templates, keep\ntrack of the kind of specialization or instantiation. Also, check the\nscope of the specialization and ensure that a specialization\ndeclaration without an initializer is not a definition.\n\nllvm-svn: 83533"}, | | [c]={hb,1237025389,gb,fb}, |
| [j]={{r,9715,"/// Perform semantic analysis for the given non-template member\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit member function specialization. On successful completion,\n/// the function declaration \\p FD will become a member function\n/// specialization.\n///\n/// \\param Member the member declaration, which will be updated to become a\n/// specialization.\n///\n/// \\param Previous the set of declarations, one of which may be specialized\n/// by this function specialization; the set will be modified to contain the\n/// redeclared member.\nbool Sema::CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous) {\n // ...\n // Make sure that this is a specialization of a member.\n if (!InstantiatedFrom) {\n Diag(Member->getLocation(), diag::err_spec_member_not_instantiated) << Member;"}}, | | [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]={ |
| ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp:70:21: error: specialization of member \'X<IntHolder, long>::X\' does not specialize an instantiated member"} | | ["clang/test/Sema/warn-shadow.c"]={"clang/test/Sema/warn-shadow.c:85:7: error: non-static declaration of \'i\' follows static declaration"} |
| } | | } |
| }, | | }, |
| ["err_specialization_after_instantiation"]={ | | ["err_non_template_in_member_template_id_suggest"]={ |
| [i]="err_specialization_after_instantiation", | | [i]={{nil,r,"err_non_template_in_member_template_id_suggest"}}, |
| [h]="explicit specialization of %0 after instantiation", | | [h]={{nil,r,"member %0 of %1 is not a template; did you mean %select{|simply }2%3?"}}, |
| [g]="explicit specialization of A after instantiation", | | [g]={{nil,r,{"member A of B is not a template; did you mean ",{a,"simply "},"D?"}}}, |
| [b]=k, | | [b]=k, |
| [e]="explicit specialization of (.*?) after instantiation", | | [e]="member (.*?) of (.*?) is not a template; did you mean (?:|simply )(.*?)\\?", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,r,m}}, |
| [c]={"06db9f50a2d6",1255378708,"Diagnose the declaration of explicit specializations after an implicit","Diagnose the declaration of explicit specializations after an implicit\ninstantiation has already been required. To do so, keep track of the\npoint of instantiation for anything that can be instantiated.\n\nllvm-svn: 83890"}, | | [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"}, |
| [j]={{r,4674,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n // ...\n // C++ [temp.expl.spec]p6:\n // If a template, a member template or the member of a class template is\n // explicitly specialized then that specialization shall be declared\n // before the first use of that specialization that would cause an implicit\n // instantiation to take place, in every translation unit in which such a\n // use occurs; no diagnostic is required.\n if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n // ...\n if (!Okay) {\n // ...\n Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Name << Range;"},{r,8879,"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 // C++ [temp.expl.spec]p6:\n // If a template, a member template or the member of a class template is\n // explicitly specialized then that specialization shall be declared\n // before the first use of that specialization that would cause an implicit\n // instantiation to take place, in every translation unit in which such a\n // use occurs; no diagnostic is required.\n if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n // ...\n if (!Okay) {\n // ...\n Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Context.getTypeDeclType(Specialization) << Range;"},{r,9200,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n // ...\n case TSK_ExplicitSpecialization:\n // ...\n case TSK_ExplicitInstantiationDeclaration:\n case TSK_ExplicitInstantiationDefinition:\n // ...\n Diag(NewLoc, diag::err_specialization_after_instantiation) << PrevDecl;"}},
| | [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]={ |
| ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:25:15: error: explicit specialization of \'f\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:29:15: error: explicit specialization of \'g<int>\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:33:17: error: explicit specialization of \'Nested\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:36:14: error: explicit specialization of \'member\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:39:8: error: explicit specialization of \'X0<int>\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:55:17: error: explicit specialization of \'sort<String>\' after instantiation"} | | ["clang/test/SemaTemplate/typo-template-name.cpp"]={"clang/test/SemaTemplate/typo-template-name.cpp:28:35: error: member \'goo\' of \'InExpr::Derived2\' is not a template; did you mean \'foo\'?"} |
| } | | } |
| }, | | }, |
| ["err_specialization_not_primary_template"]={ | | ["err_non_template_in_template_id"]={ |
| [i]={{nil,o,"err_specialization_not_primary_template"}}, | | [i]={{nil,r,"err_non_template_in_template_id"}}, |
| [h]={{nil,o,"cannot reference member of primary template because deduced class template specialization %0 is %select{instantiated from a partial|an explicit}1 specialization"}}, | | [h]={{nil,r,"%0 does not name a template but is followed by template arguments"}}, |
| [g]={{nil,o,{"cannot reference member of primary template because deduced class template specialization A is ",{"instantiated from a partial","an explicit"}," specialization"}}}, | | [g]={{nil,r,"A does not name a template but is followed by template arguments"}}, |
| [b]=k, | | [b]=k, |
| [e]="cannot reference member of primary template because deduced class template specialization (.*?) is (?:instantiated from a partial|an explicit) specialization", | | [e]="(.*?) does not name a template but is followed by template arguments", |
| [f]=a, | | [d]=a, |
| [d]={{nil,o,m}}, | | [f]={{nil,r,m}}, |
| [c]={"e6d4b773dea2",1496803347,"Fix a couple of class template argument deduction crashes with libc++\'s tuple.","Fix a couple of class template argument deduction crashes with libc++\'s tuple.\n\nRecursiveASTVisitor was not properly recursing through a\nSubstTemplateTypeParmTypes, resulting in crashes in pack expansion where we\ncouldn\'t always find an unexpanded pack within a pack expansion.\n\nWe also have an issue where substitution of deduced template arguments for an\nimplicit deduction guide creates the \"impossible\" case of naming a\nnon-dependent member of the current instantiation, but within a specialization\nthat is actually instantiated from a different (partial/explicit)\nspecialization of the template. We resolve this by declaring that constructors\nthat do so can only be used to deduce specializations of the primary template.\nI\'m running this past CWG to see if people agree this is the right thing to do.\n\nllvm-svn: 304862"}, | | [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"}, |
| [j]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",6233,"/// 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 (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n // ...\n while (!DC->isFileContext()) {\n // ...\n // Move to the outer template scope.\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(DC)) {\n // ...\n if (Guide && Guide->isImplicit()) {\n // ...\n // Check that this template-id names the primary template and not a\n // partial or explicit specialization. (In the latter cases, it\'s\n // meaningless to attempt to find an instantiation of D within the\n // specialization.)\n // FIXME: The standard doesn\'t say what should happen here.\n if (FindingInstantiatedContext && usesPartialOrExplicitSpecialization(Loc, cast<ClassTemplateSpecializationDecl>(SubstRecord))) {\n Diag(Loc, diag::err_specialization_not_primary_template) << T << (SubstRecord->getTemplateSpecializationKind() == TSK_ExplicitSpecialization);"}}
| | [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);"}}, |
| },
| |
| ["err_specialize_member_of_template"]={
| |
| [i]="err_specialize_member_of_template",
| |
| [h]="cannot specialize %select{|(with \'template<>\') }0a member of an unspecialized template",
| |
| [g]={{nil,nil,{"cannot specialize ",{a,"(with \'template<>\') "},"a member of an unspecialized template"}}},
| |
| [b]=k,
| |
| [e]="cannot specialize (?:|\\(with \'template\\<\\>\'\\) )a member of an unspecialized template",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"522d5eb7c3c2",1307373775,"Diagnose the condition in C++ [temp.expl.spec]p16 that prohibits","Diagnose the condition in C++ [temp.expl.spec]p16 that prohibits\nspecializing a member of an unspecialized template, and recover from\nsuch errors without crashing. Fixes PR10024 / <rdar://problem/9509761>.\n\nllvm-svn: 132677"},
| |
| [j]={{r,3370,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n // ...\n auto CheckExplicitSpecialization = [&](SourceRange Range, bool Recovery) {\n if (SawNonEmptyTemplateParameterList) {\n if (!SuppressDiagnostic)\n Diag(DeclLoc, diag::err_specialize_member_of_template) << !Recovery << Range;"}}, | |
| [l]={ | | [l]={ |
| ["clang/test/SemaTemplate/explicit-specialization-member.cpp"]={"clang/test/SemaTemplate/explicit-specialization-member.cpp:45:16: error: cannot specialize a member of an unspecialized template","clang/test/SemaTemplate/explicit-specialization-member.cpp:54:38: error: cannot specialize a member of an unspecialized template"} | | ["clang/test/SemaTemplate/typo-template-name.cpp"]={"clang/test/SemaTemplate/typo-template-name.cpp:23:33: error: \'foo\' does not name a template but is followed by template arguments"} |
| } | | } |
| }, | | }, |
| ["err_stack_tagging_requires_hardware_feature"]={ | | ["err_non_template_in_template_id_suggest"]={ |
| [i]={{nil,p,"err_stack_tagging_requires_hardware_feature"}}, | | [i]={{nil,r,"err_non_template_in_template_id_suggest"}}, |
| [h]={{nil,y,"\'-fsanitize=memtag-stack\' requires hardware support (+memtag). For Armv8 or Armv9, try compiling with -march=armv8a+memtag or -march=armv9a+memtag"},{C,p,"\'-fsanitize=memtag\' requires hardware support (+memtag)"}}, | | [h]={{nil,r,"%0 does not name a template but is followed by template arguments; did you mean %1?"}}, |
| [g]={{nil,y,"\'-fsanitize=memtag-stack\' requires hardware support (+memtag). For Armv8 or Armv9, try compiling with -march=armv8a+memtag or -march=armv9a+memtag"},{C,p,"\'-fsanitize=memtag\' requires hardware support (+memtag)"}}, | | [g]={{nil,r,"A does not name a template but is followed by template arguments; did you mean B?"}}, |
| [b]=k, | | [b]=k, |
| [e]="\'\\-fsanitize\\=memtag\\-stack\' requires hardware support \\(\\+memtag\\)\\. For Armv8 or Armv9, try compiling with \\-march\\=armv8a\\+memtag or \\-march\\=armv9a\\+memtag", | | [e]="(.*?) does not name a template but is followed by template arguments; did you mean (.*?)\\?", |
| [f]=a, | | [d]=a, |
| [d]={{nil,p,a}}, | | [f]={{nil,r,m}}, |
| [c]={"4593e4131aff",1534346725,"AMDGPU: Teach toolchain to link rocm device libs","AMDGPU: Teach toolchain to link rocm device libs\n\nCurrently the library is separately linked, but this isn\'t correct to\nimplement fast math flags correctly. Each module should get the\nversion of the library appropriate for its combination of fast math\nand related flags, with the attributes propagated into its functions\nand internalized.\n\nHIP already maintains the list of libraries, but this is not used for\nOpenCL. Unfortunately, HIP uses a separate --hip-device-lib argument,\ndespite both languages using the same bitcode library. Eventually\nthese two searches need to be merged.\n\nAn additional problem is there are 3 different locations the libraries\nare installed, depending on which build is used. This also needs to be\nconsolidated (or at least the search logic needs to deal with this\nunnecessary complexity)."}, | | [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"}, |
| [j]={{"clang/lib/Driver/SanitizerArgs.cpp",1386,"void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, types::ID InputType) const {\n // ...\n if (Sanitizers.has(SanitizerKind::MemtagStack) && !hasTargetFeatureMTE(CmdArgs))\n TC.getDriver().Diag(diag::err_stack_tagging_requires_hardware_feature);"}} | | [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);"}}, |
| },
| |
| ["err_standalone_class_nested_name_specifier"]={
| |
| [i]="err_standalone_class_nested_name_specifier",
| |
| [h]="forward declaration of %select{class|struct|interface|union|enum|enum class|enum struct}0 cannot have a nested name specifier",
| |
| [g]={{nil,nil,{"forward declaration of ",{mc,Gc,td,Nc,ud,"enum class","enum struct"}," cannot have a nested name specifier"}},{M,nil,{"forward declaration of ",{mc,Gc,td,Nc,ud}," cannot have a nested name specifier"}}},
| |
| [b]=k,
| |
| [e]="forward declaration of (?:class|struct|interface|union|enum|enum class|enum struct) cannot have a nested name specifier",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"b1402ae94eb7",1363647167,"Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some rel...","Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some related diagnostics from warning to extension in C++, since they\'re errors there. Add some missing checks for function specifiers on non-function declarations.\n\nllvm-svn: 177335"},
| |
| [j]={{w,5157,"/// 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 (Tag && SS.isNotEmpty() && !Tag->isCompleteDefinition() && !IsExplicitInstantiation && !IsExplicitSpecialization && !isa<ClassTemplatePartialSpecializationDecl>(Tag)) {\n // ...\n Diag(SS.getBeginLoc(), diag::err_standalone_class_nested_name_specifier) << GetDiagnosticTypeSpecifierID(DS) << SS.getRange();"}},
| |
| [l]={ | | [l]={ |
| ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:11:8: error: forward declaration of struct cannot have a nested name specifier","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:13:29: error: forward declaration of struct cannot have a nested name specifier","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:23:29: error: forward declaration of struct cannot have a nested name specifier"} | | ["clang/test/SemaTemplate/typo-template-name.cpp"]={"clang/test/SemaTemplate/typo-template-name.cpp:8:21: error: \'typo_first_a\' does not name a template but is followed by template arguments; did you mean \'typo_first_b\'?","clang/test/SemaTemplate/typo-template-name.cpp:13:18: error: \'typo_first_b\' does not name a template but is followed by template arguments; did you mean \'A::typo_first_b\'?","clang/test/SemaTemplate/typo-template-name.cpp:33:5: error: \'foo\' does not name a template but is followed by template arguments; did you mean \'Base::foo\'?","clang/test/SemaTemplate/typo-template-name.cpp:34:5: error: \'foo\' does not name a template but is followed by template arguments; did you mean \'Base::foo\'?","clang/test/SemaTemplate/typo-template-name.cpp:35:5: error: \'foo\' does not name a template but is followed by template arguments; did you mean \'Base::foo\'?"} |
| } | | } |
| }, | | }, |
| ["err_static_assert_expression_is_not_constant"]={ | | ["err_non_thread_thread"]={ |
| [i]="err_static_assert_expression_is_not_constant", | | [i]="err_non_thread_thread", |
| [h]={{nil,y,"static assertion expression is not an integral constant expression"},{C,nil,"static_assert expression is not an integral constant expression"}}, | | [h]="non-thread-local declaration of %0 follows thread-local declaration", |
| [g]={{nil,y,"static assertion expression is not an integral constant expression"},{C,nil,"static_assert expression is not an integral constant expression"}}, | | [g]="non-thread-local declaration of A follows thread-local declaration", |
| [b]=k, | | [b]=k, |
| [e]="static assertion expression is not an integral constant expression", | | [e]="non\\-thread\\-local declaration of (.*?) follows thread\\-local declaration", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={u,1237025389,s,t}, | | [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"}, |
| [j]={{H,17105,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n // ...\n if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n // ...\n if (!Failed && VerifyIntegerConstantExpression(BaseExpr, &Cond, diag::err_static_assert_expression_is_not_constant, FoldKind).isInvalid())"}}, | | [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]={ |
| ["clang/test/SemaCXX/crash-lambda-weak-attr.cpp"]={"clang/test/SemaCXX/crash-lambda-weak-attr.cpp:6:15: error: static assertion expression is not an integral constant expression"} | | ["clang/test/SemaCXX/cxx11-thread-local.cpp"]={"clang/test/SemaCXX/cxx11-thread-local.cpp:13:8: error: non-thread-local declaration of \'d\' follows thread-local declaration"} |
| } | | } |
| }, | | }, |
| ["err_static_assert_failed"]={ | | ["err_non_trivial_c_union_in_invalid_context"]={ |
| [i]="err_static_assert_failed", | | [i]={{nil,x,"err_non_trivial_c_union_in_invalid_context"}}, |
| [h]={{nil,y,"static assertion failed%select{: %1|}0"},{C,nil,"static_assert failed%select{ %1|}0"}}, | | [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"}}, |
| [g]={{nil,y,{"static assertion failed",{": B",a}}},{C,nil,{"static_assert failed",{Ob,a}}}}, | | [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"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="static assertion failed(?:\\: (.*?)|)", | | [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)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,x,m}}, |
| [c]={u,1237025389,s,t}, | | [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"}, |
| [j]={{H,17142,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n // ...\n if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n // ...\n if (!Failed && !Cond && !InTemplateDefinition) {\n // ...\n if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n // ...\n Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !HasMessage << Msg.str() << AssertExpr->getSourceRange();"},{H,17155,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n // ...\n if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n // ...\n if (!Failed && !Cond && !InTemplateDefinition) {\n // ...\n if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n // ...\n } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) && !isa<IntegerLiteral>(InnerCond)) {\n // ...\n } else {\n Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !HasMessage << Msg.str() << AssertExpr->getSourceRange();"}}, | | [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]={ |
| ["clang/test/SemaCXX/using-decl-templates.cpp"]={"clang/test/SemaCXX/using-decl-templates.cpp:98:17: error: static assertion failed: "} | | ["clang/test/SemaObjC/non-trivial-c-union.m"]={ |
| | [1]="clang/test/SemaObjC/non-trivial-c-union.m:16:4: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize", |
| | [2]="clang/test/SemaObjC/non-trivial-c-union.m:18:4: error: cannot default-initialize an object of type \'S0\' since it contains a union that is non-trivial to default-initialize", |
| | [3]="clang/test/SemaObjC/non-trivial-c-union.m:20:10: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize", |
| | [4]="clang/test/SemaObjC/non-trivial-c-union.m:22:11: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to destruct", |
| | [5]="clang/test/SemaObjC/non-trivial-c-union.m:22:11: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to copy", |
| | [6]="clang/test/SemaObjC/non-trivial-c-union.m:22:1: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to destruct", |
| | [7]="clang/test/SemaObjC/non-trivial-c-union.m:22:1: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to copy", |
| | [8]="clang/test/SemaObjC/non-trivial-c-union.m:23:11: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to destruct", |
| | [9]="clang/test/SemaObjC/non-trivial-c-union.m:23:11: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to copy", |
| | [10]="clang/test/SemaObjC/non-trivial-c-union.m:23:1: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to destruct", |
| | [11]="clang/test/SemaObjC/non-trivial-c-union.m:23:1: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to copy", |
| | [12]="clang/test/SemaObjC/non-trivial-c-union.m:26:1: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to destruct", |
| | [13]="clang/test/SemaObjC/non-trivial-c-union.m:26:1: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to copy", |
| | [14]="clang/test/SemaObjC/non-trivial-c-union.m:26:13: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to destruct", |
| | [15]="clang/test/SemaObjC/non-trivial-c-union.m:26:13: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to copy", |
| | [16]="clang/test/SemaObjC/non-trivial-c-union.m:27:1: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to destruct", |
| | [17]="clang/test/SemaObjC/non-trivial-c-union.m:27:1: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to copy", |
| | [18]="clang/test/SemaObjC/non-trivial-c-union.m:27:13: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to destruct", |
| | [19]="clang/test/SemaObjC/non-trivial-c-union.m:27:13: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to copy", |
| | [20]="clang/test/SemaObjC/non-trivial-c-union.m:31:14: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to destruct", |
| | [21]="clang/test/SemaObjC/non-trivial-c-union.m:31:14: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to copy", |
| | [22]="clang/test/SemaObjC/non-trivial-c-union.m:31:9: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to destruct", |
| | [23]="clang/test/SemaObjC/non-trivial-c-union.m:31:9: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to copy", |
| | [24]="clang/test/SemaObjC/non-trivial-c-union.m:32:14: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to destruct", |
| | [25]="clang/test/SemaObjC/non-trivial-c-union.m:32:14: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to copy", |
| | [26]="clang/test/SemaObjC/non-trivial-c-union.m:32:9: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to destruct", |
| | [27]="clang/test/SemaObjC/non-trivial-c-union.m:32:9: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to copy", |
| | [28]="clang/test/SemaObjC/non-trivial-c-union.m:35:6: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct", |
| | [29]="clang/test/SemaObjC/non-trivial-c-union.m:35:6: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize", |
| | [30]="clang/test/SemaObjC/non-trivial-c-union.m:36:6: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct", |
| | [31]="clang/test/SemaObjC/non-trivial-c-union.m:36:11: error: cannot copy-initialize an object of type \'U0\' since it is a union that is non-trivial to copy", |
| | [32]="clang/test/SemaObjC/non-trivial-c-union.m:37:6: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct", |
| | [33]="clang/test/SemaObjC/non-trivial-c-union.m:38:6: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct", |
| | [34]="clang/test/SemaObjC/non-trivial-c-union.m:39:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct", |
| | [35]="clang/test/SemaObjC/non-trivial-c-union.m:39:6: error: cannot default-initialize an object of type \'S0\' since it contains a union that is non-trivial to default-initialize", |
| | [36]="clang/test/SemaObjC/non-trivial-c-union.m:40:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct", |
| | [37]="clang/test/SemaObjC/non-trivial-c-union.m:40:11: error: cannot copy-initialize an object of type \'S0\' since it contains a union that is non-trivial to copy", |
| | [38]="clang/test/SemaObjC/non-trivial-c-union.m:41:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct", |
| | [39]="clang/test/SemaObjC/non-trivial-c-union.m:41:13: error: cannot copy-initialize an object of type \'U0\' since it is a union that is non-trivial to copy", |
| | [40]="clang/test/SemaObjC/non-trivial-c-union.m:42:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct", |
| | [41]="clang/test/SemaObjC/non-trivial-c-union.m:42:19: error: cannot copy-initialize an object of type \'U0\' since it is a union that is non-trivial to copy", |
| | [42]="clang/test/SemaObjC/non-trivial-c-union.m:43:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct", |
| | [43]="clang/test/SemaObjC/non-trivial-c-union.m:43:11: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize", |
| | [44]="clang/test/SemaObjC/non-trivial-c-union.m:47:3: error: cannot assign to a variable of type \'U0\' since it is a union that is non-trivial to copy", |
| | [45]="clang/test/SemaObjC/non-trivial-c-union.m:48:3: error: cannot assign to a variable of type \'S0\' since it contains a union that is non-trivial to copy", |
| | [46]="clang/test/SemaObjC/non-trivial-c-union.m:51:10: error: cannot copy-initialize an object of type \'U0\' since it is a union that is non-trivial to copy", |
| | [47]="clang/test/SemaObjC/non-trivial-c-union.m:52:10: error: cannot copy-initialize an object of type \'S0\' since it contains a union that is non-trivial to copy", |
| | [48]="clang/test/SemaObjC/non-trivial-c-union.m:53:16: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize", |
| | [49]="clang/test/SemaObjC/non-trivial-c-union.m:56:19: error: cannot construct an automatic compound literal of type \'U0\' since it is a union that is non-trivial to destruct", |
| | [50]="clang/test/SemaObjC/non-trivial-c-union.m:57:19: error: cannot construct an automatic compound literal of type \'U0\' since it is a union that is non-trivial to destruct", |
| | [51]="clang/test/SemaObjC/non-trivial-c-union.m:58:19: error: cannot construct an automatic compound literal of type \'S0\' since it contains a union that is non-trivial to destruct", |
| | [52]="clang/test/SemaObjC/non-trivial-c-union.m:58:31: error: cannot copy-initialize an object of type \'U0\' since it is a union that is non-trivial to copy", |
| | [53]="clang/test/SemaObjC/non-trivial-c-union.m:59:19: error: cannot construct an automatic compound literal of type \'S0\' since it contains a union that is non-trivial to destruct", |
| | [54]="clang/test/SemaObjC/non-trivial-c-union.m:59:23: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize", |
| | [55]="clang/test/SemaObjC/non-trivial-c-union.m:67:6: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct", |
| | [56]="clang/test/SemaObjC/non-trivial-c-union.m:67:6: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize", |
| | [57]="clang/test/SemaObjC/non-trivial-c-union.m:68:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct", |
| | [58]="clang/test/SemaObjC/non-trivial-c-union.m:68:6: error: cannot default-initialize an object of type \'S0\' since it contains a union that is non-trivial to default-initialize", |
| | [59]="clang/test/SemaObjC/non-trivial-c-union.m:69:14: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct", |
| | [60]="clang/test/SemaObjC/non-trivial-c-union.m:69:14: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize", |
| | [61]="clang/test/SemaObjC/non-trivial-c-union.m:70:14: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct", |
| | [62]="clang/test/SemaObjC/non-trivial-c-union.m:70:14: error: cannot default-initialize an object of type \'S0\' since it contains a union that is non-trivial to default-initialize", |
| | [63]="clang/test/SemaObjC/non-trivial-c-union.m:72:16: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to destruct", |
| | [64]="clang/test/SemaObjC/non-trivial-c-union.m:72:16: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to copy", |
| | [65]="clang/test/SemaObjC/non-trivial-c-union.m:77:18: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to destruct", |
| | [66]="clang/test/SemaObjC/non-trivial-c-union.m:77:18: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to copy", |
| | [67]="clang/test/SemaObjC/non-trivial-c-union.m:76:18: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to destruct", |
| | [68]="clang/test/SemaObjC/non-trivial-c-union.m:76:18: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to copy", |
| | [69]="clang/test/SemaObjC/non-trivial-c-union.m:75:16: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to destruct", |
| | [70]="clang/test/SemaObjC/non-trivial-c-union.m:75:16: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to copy", |
| | [71]="clang/test/SemaObjC/non-trivial-c-union.m:74:16: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to destruct", |
| | [72]="clang/test/SemaObjC/non-trivial-c-union.m:74:16: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to copy", |
| | [73]="clang/test/SemaObjC/non-trivial-c-union.m:73:16: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to destruct", |
| | [74]="clang/test/SemaObjC/non-trivial-c-union.m:73:16: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to copy", |
| | [75]="clang/test/SemaObjC/non-trivial-c-union.m:83:9: error: cannot cannot use volatile type \'volatile U0\' where it causes an lvalue-to-rvalue conversion since it is a union that is non-trivial to destruct", |
| | [76]="clang/test/SemaObjC/non-trivial-c-union.m:83:9: error: cannot cannot use volatile type \'volatile U0\' where it causes an lvalue-to-rvalue conversion since it is a union that is non-trivial to copy", |
| | [77]="clang/test/SemaObjC/non-trivial-c-union.m:88:42: error: cannot use type \'U1_SystemHeader\' for a function/method parameter since it is a union that is non-trivial to destruct", |
| | [78]="clang/test/SemaObjC/non-trivial-c-union.m:88:42: error: cannot use type \'U1_SystemHeader\' for a function/method parameter since it is a union that is non-trivial to copy" |
| | } |
| } | | } |
| }, | | }, |
| ["err_static_assert_invalid_mem_fn_ret_ty"]={ | | ["err_non_type_template_arg_addr_label_diff"]={ |
| [i]="err_static_assert_invalid_mem_fn_ret_ty", | | [i]="err_non_type_template_arg_addr_label_diff", |
| [h]="the message in a static assertion must have a \'%select{size|data}0()\' member function returning an object convertible to \'%select{std::size_t|const char *}0\'", | | [h]="template argument / label address difference / what did you expect?", |
| [g]={{nil,nil,{"the message in a static assertion must have a \'",{"size","data"},"()\' member function returning an object convertible to \'",{"std::size_t","const char *"},uc}}}, | | [g]="template argument / label address difference / what did you expect?", |
| [b]=k, | | [b]=k, |
| [e]="the message in a static assertion must have a \'(?:size|data)\\(\\)\' member function returning an object convertible to \'(?:std\\:\\:size_t|const char \\*)\'", | | [e]="template argument \\/ label address difference \\/ what did you expect\\?", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages","[Clang] Implement P2741R3 - user-generated static_assert messages\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D154290"}, | | [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"}, |
| [j]={{H,16981,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n // ...\n auto FindMember = [&](StringRef Member, bool &Empty, bool Diag = false) -> std::optional<LookupResult> {\n // ...\n default:\n if (Diag)\n Candidates.NoteCandidates(PartialDiagnosticAt(Loc, PDiag(diag::err_static_assert_invalid_mem_fn_ret_ty) << (Member == \"data\")), *this, OCD_AllCandidates, /*Args=*/{});"},{H,17034,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n // ...\n if (EvaluatedSize.isInvalid()) {\n Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*size*/ 0;"},{H,17044,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n // ...\n if (EvaluatedData.isInvalid()) {\n Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*data*/ 1;"}}, | | [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]={ |
| ["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:20:21: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:26:21: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'","clang/test/SemaCXX/static-assert-cxx26.cpp:181:22: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:183:22: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'","clang/test/SemaCXX/static-assert-cxx26.cpp:225:22: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:225:22: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'"} | | ["clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:58:18: error: template argument / label address difference / what did you expect?"} |
| } | | } |
| }, | | }, |
| ["err_static_assert_invalid_message"]={ | | ["err_non_type_template_arg_subobject"]={ |
| [i]="err_static_assert_invalid_message", | | [i]="err_non_type_template_arg_subobject", |
| [h]="the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions", | | [h]="non-type template argument refers to subobject \'%0\'", |
| [g]="the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions", | | [g]="non-type template argument refers to subobject \'A\'", |
| [b]=k, | | [b]=k, |
| [e]="the message in a static assertion must be a string literal or an object with \'data\\(\\)\' and \'size\\(\\)\' member functions", | | [e]="non\\-type template argument refers to subobject \'(.*?)\'", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages","[Clang] Implement P2741R3 - user-generated static_assert messages\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D154290"}, | | [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"}, |
| [j]={{H,16953,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n // ...\n if (!RD) {\n Diag(Loc, diag::err_static_assert_invalid_message);"}}, | | [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]={ |
| ["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:4:21: error: the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions","clang/test/SemaCXX/static-assert-cxx26.cpp:279:24: error: the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions"} | | ["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:20:20: error: non-type template argument refers to subobject \'&n + 1\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:21:20: error: non-type template argument refers to subobject \'&n + 1\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:23:20: error: non-type template argument refers to subobject \'&s.n[2]\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:24:20: error: non-type template argument refers to subobject \'&s.n[2]\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:26:20: error: non-type template argument refers to subobject \'&s.n[3]\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:27:20: error: non-type template argument refers to subobject \'&s.n[3]\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:33:20: error: non-type template argument refers to subobject \'s.n[2]\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:34:20: error: non-type template argument refers to subobject \'s.n[2]\'"} |
| } | | } |
| }, | | }, |
| ["err_static_assert_message_constexpr"]={ | | ["err_non_type_template_arg_unsupported"]={ |
| [i]="err_static_assert_message_constexpr", | | [i]={{nil,C,"err_non_type_template_arg_unsupported"}}, |
| [h]="the message in a static assertion must be produced by a constant expression", | | [h]={{nil,C,"sorry, non-type template argument of type %0 is not yet supported"}}, |
| [g]="the message in a static assertion must be produced by a constant expression", | | [g]={{nil,C,"sorry, non-type template argument of type A is not yet supported"}}, |
| [b]=k, | | [b]=k, |
| [e]="the message in a static assertion must be produced by a constant expression", | | [e]="sorry, non\\-type template argument of type (.*?) is not yet supported", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,C,m}}, |
| [c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages","[Clang] Implement P2741R3 - user-generated static_assert messages\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D154290"}, | | [c]={vc,1582847864,yc,xc}, |
| [j]={{H,17059,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n // ...\n if (!Message->EvaluateCharRangeAsString(Result, EvaluatedSize.get(), EvaluatedData.get(), Ctx, Status) || !Notes.empty()) {\n Diag(Message->getBeginLoc(), ErrorOnInvalidMessage ? diag::err_static_assert_message_constexpr : diag::warn_static_assert_message_constexpr);"}},
| | [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]={ |
| ["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:37:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:51:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:85:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:125:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:267:22: error: the message in a static assertion must be produced by a constant expression"} | | ["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:11:18: error: sorry, non-type template argument of type \'float\' is not yet supported","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:12:18: error: sorry, non-type template argument of type \'float\' is not yet supported","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:51:23: error: sorry, non-type template argument of type \'_Complex int\' is not yet supported","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:52:23: error: sorry, non-type template argument of type \'_Complex int\' is not yet supported","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:55:25: error: sorry, non-type template argument of type \'_Complex float\' is not yet supported","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:56:25: error: sorry, non-type template argument of type \'_Complex float\' is not yet supported"} |
| } | | } |
| }, | | }, |
| ["err_static_assert_missing_member_function"]={ | | ["err_non_type_template_in_nested_name_specifier"]={ |
| [i]="err_static_assert_missing_member_function", | | [i]="err_non_type_template_in_nested_name_specifier", |
| [h]="the message object in this static assertion is missing %select{a \'size()\' member function|a \'data()\' member function|\'data()\' and \'size()\' member functions}0", | | [h]="qualified name refers into a specialization of %select{function|variable}0 template %1", |
| [g]={{nil,nil,{"the message object in this static assertion is missing ",{"a \'size()\' member function","a \'data()\' member function","\'data()\' and \'size()\' member functions"}}}}, | | [g]={{nil,nil,{"qualified name refers into a specialization of ",{"function","variable"}," template B"}}}, |
| [b]=k, | | [b]=k, |
| [e]="the message object in this static assertion is missing (?:a \'size\\(\\)\' member function|a \'data\\(\\)\' member function|\'data\\(\\)\' and \'size\\(\\)\' member functions)", | | [e]="qualified name refers into a specialization of (?:function|variable) template (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages","[Clang] Implement P2741R3 - user-generated static_assert messages\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D154290"}, | | [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"}, |
| [j]={{H,16992,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n // ...\n if (SizeNotFound || DataNotFound) {\n Diag(Loc, diag::err_static_assert_missing_member_function) << ((SizeNotFound && DataNotFound) ? 2 : SizeNotFound ? 0 : 1);"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:6:21: error: the message object in this static assertion is missing \'data()\' and \'size()\' member functions","clang/test/SemaCXX/static-assert-cxx26.cpp:13:21: error: the message object in this static assertion is missing a \'data()\' member function","clang/test/SemaCXX/static-assert-cxx26.cpp:14:21: error: the message object in this static assertion is missing a \'size()\' member function"} | | ["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\'"} |
| } | | } |
| }, | | }, |
| ["err_static_assert_requirement_failed"]={ | | ["err_non_type_template_parm_type_deduction_failure"]={ |
| [i]="err_static_assert_requirement_failed", | | [i]="err_non_type_template_parm_type_deduction_failure", |
| [h]={{nil,y,"static assertion failed due to requirement \'%0\'%select{: %2|}1"},{C,A,"static_assert failed due to requirement \'%0\'%select{ %2|}1"}}, | | [h]="non-type template parameter %0 with type %1 has incompatible initializer of type %2", |
| [g]={{nil,y,{"static assertion failed due to requirement \'A\'",{": C",a}}},{C,A,{"static_assert failed due to requirement \'A\'",{" C",a}}}}, | | [g]="non-type template parameter A with type B has incompatible initializer of type C", |
| [b]=k, | | [b]=k, |
| [e]="static assertion failed due to requirement \'(.*?)\'(?:\\: (.*?)|)", | | [e]="non\\-type template parameter (.*?) with type (.*?) has incompatible initializer of type (.*?)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,A,m}}, | | [f]=m, |
| [c]={"672281a5116d",1505432322,"Diagnostic specific failed condition in a static_assert.","Diagnostic specific failed condition in a static_assert.\n\nWhen a static_assert fails, dig out a specific condition to diagnose,\nusing the same logic that we use to find the enable_if condition to\ndiagnose.\n\nllvm-svn: 313315"}, | | [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"}, |
| [j]={{H,17150,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n // ...\n if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n // ...\n if (!Failed && !Cond && !InTemplateDefinition) {\n // ...\n if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n // ...\n } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) && !isa<IntegerLiteral>(InnerCond)) {\n Diag(InnerCond->getBeginLoc(), diag::err_static_assert_requirement_failed) << InnerCondDescription << !HasMessage << Msg.str() << InnerCond->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]={ |
| ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:101:19: error: static assertion failed due to requirement \'sizeof (arr2) == 13\': "} | | ["clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:465:5: error: non-type template parameter \'f\' with type \'auto (*)() -> auto\' has incompatible initializer of type \'std::nullptr_t\'"} |
| } | | } |
| }, | | }, |
| ["err_static_block_func"]={ | | ["err_non_variable_decl_in_for"]={ |
| [i]="err_static_block_func", | | [i]="err_non_variable_decl_in_for", |
| [h]="function declared in block scope cannot have \'static\' storage class", | | [h]="non-variable declaration in \'for\' loop", |
| [g]="function declared in block scope cannot have \'static\' storage class", | | [g]="non-variable declaration in \'for\' loop", |
| [b]=k, | | [b]=k, |
| [e]="function declared in block scope cannot have \'static\' storage class", | | [e]="non\\-variable declaration in \'for\' loop", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={u,1237025389,s,t}, | | [c]={hb,1237025389,gb,fb}, |
| [j]={{w,9121,"static StorageClass getFunctionStorageClass(Sema &SemaRef, Declarator &D) {\n // ...\n case DeclSpec::SCS_static: {\n if (SemaRef.CurContext->getRedeclContext()->isFunctionOrMethod()) {\n // ...\n SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_static_block_func);"}}, | | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:58:3: error: function declared in block scope cannot have \'static\' storage class"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_static_data_member_not_allowed_in_anon_struct"]={ | | ["err_non_virtual_pure"]={ |
| [i]="err_static_data_member_not_allowed_in_anon_struct", | | [i]="err_non_virtual_pure", |
| [h]={{nil,q,"static data member %0 not allowed in anonymous %select{struct|interface|union|class|enum}1"},{p,nil,"static data member %0 not allowed in anonymous struct"}}, | | [h]="%0 is not virtual and cannot be declared pure", |
| [g]={{nil,q,{"static data member A not allowed in anonymous ",{Gc,td,Nc,mc,ud}}},{p,nil,"static data member A not allowed in anonymous struct"}}, | | [g]="A is not virtual and cannot be declared pure", |
| [b]=k, | | [b]=k, |
| [e]="static data member (.*?) not allowed in anonymous (?:struct|interface|union|class|enum)", | | [e]="(.*?) is not virtual and cannot be declared pure", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding","C++11 allows unions to have static data members. Remove the corresponding\nrestriction and add some tests.\n\nllvm-svn: 150721"}, | | [c]={H,1236199783,I,G}, |
| [j]={{w,7598,"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 if (SC == SC_Static && CurContext->isRecord()) {\n if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n // ...\n if (FunctionOrMethod) {\n // ...\n } else if (AnonStruct) {\n // ...\n Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_anon_struct) << Name << AnonStruct->getTagKind();"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/CXX/class/class.union/p2-0x.cpp"]={"clang/test/CXX/class/class.union/p2-0x.cpp:40:22: error: static data member \'n\' not allowed in anonymous union","clang/test/CXX/class/class.union/p2-0x.cpp:46:20: error: static data member \'k\' not allowed in anonymous union"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_static_data_member_not_allowed_in_local_class"]={ | | ["err_nonfunction_block_type"]={ |
| [i]="err_static_data_member_not_allowed_in_local_class", | | [i]="err_nonfunction_block_type", |
| [h]={{nil,q,"static data member %0 not allowed in local %select{struct|interface|union|class|enum}2 %1"},{p,nil,"static data member %0 not allowed in local class %1"}}, | | [h]="block pointer to non-function type is invalid", |
| [g]={{nil,q,{"static data member A not allowed in local ",{Gc,td,Nc,mc,ud},Ob}},{p,nil,"static data member A not allowed in local class B"}}, | | [g]="block pointer to non-function type is invalid", |
| [b]=k, | | [b]=k, |
| [e]="static data member (.*?) not allowed in local (?:struct|interface|union|class|enum) (.*?)", | | [e]="block pointer to non\\-function type is invalid", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"d2e8adfc7599",1245803333,"Support for [class.local]p4.","Support for [class.local]p4.\n\nllvm-svn: 74030"}, | | [c]={hb,1237025389,gb,fb}, |
| [j]={{w,7591,"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 if (SC == SC_Static && CurContext->isRecord()) {\n if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n // ...\n if (FunctionOrMethod) {\n // ...\n Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_local_class) << Name << RD->getDeclName() << RD->getTagKind();"}}, | | [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]={ |
| ["clang/test/SemaCXX/blocks.cpp"]={"clang/test/SemaCXX/blocks.cpp:160:18: error: static data member \'x\' not allowed in local class \'X\'","clang/test/SemaCXX/blocks.cpp:164:20: error: static data member \'z\' not allowed in local struct \'Z\'"} | | ["clang/test/Sema/static-array.c"]={"clang/test/Sema/static-array.c:61:14: error: block pointer to non-function type is invalid"} |
| } | | } |
| }, | | }, |
| ["err_static_data_member_reinitialization"]={ | | ["err_nonstatic_member_out_of_line"]={ |
| [i]="err_static_data_member_reinitialization", | | [i]="err_nonstatic_member_out_of_line", |
| [h]="static data member %0 already has an initializer", | | [h]="non-static data member defined out-of-line", |
| [g]="static data member A already has an initializer", | | [g]="non-static data member defined out-of-line", |
| [b]=k, | | [b]=k, |
| [e]="static data member (.*?) already has an initializer", | | [e]="non\\-static data member defined out\\-of\\-line", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"84fe12d1e954",1385003864,"Provide better diagnostic wording for initializers on static","Provide better diagnostic wording for initializers on static\ndata member definitions when the variable has an initializer\nin its declaration.\n\nFor the following code:\n\n struct S {\n static const int x = 42;\n };\n const int S::x = 42;\n\nThis patch changes the diagnostic from:\n\n a.cc:4:14: error: redefinition of \'x\'\n const int S::x = 42;\n ^\n a.cc:2:20: note: previous definition is here\n static const int x = 42;\n ^\nto:\n\n a.cc:4:18: error: static data member \'x\' already has an initializer\n const int S::x = 42;\n ^\n a.cc:2:24: note: previous initialization is here\n static const int x = 42;\n ^\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2235\n\nllvm-svn: 195306"}, | | [c]={hb,1237025389,gb,fb}, |
| [j]={{w,13249,"/// 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 (getLangOpts().CPlusPlus) {\n // C++ [class.static.data]p4\n // If a static data member is of const integral or const\n // enumeration type, its declaration in the class definition can\n // specify a constant-initializer which shall be an integral\n // constant expression (5.19). In that case, the member can appear\n // in integral constant expressions. The member shall still be\n // defined in a namespace scope if it is used in the program and the\n // namespace scope definition shall not contain an initializer.\n //\n // We already performed a redefinition check above, but for static\n // data members we also need to check whether there was an in-class\n // declaration with an initializer.\n if (VDecl->isStaticDataMember() && VDecl->getCanonicalDecl()->hasInit()) {\n Diag(Init->getExprLoc(), diag::err_static_data_member_reinitialization) << VDecl->getDeclName();"}}, | | [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]={ |
| ["clang/test/CXX/class/class.static/class.static.data/p4.cpp"]={"clang/test/CXX/class/class.static/class.static.data/p4.cpp:15:63: error: static data member \'i\' already has an initializer","clang/test/CXX/class/class.static/class.static.data/p4.cpp:20:62: error: static data member \'i\' already has an initializer"} | | ["clang/test/SemaCXX/cxx11-thread-local.cpp"]={"clang/test/SemaCXX/cxx11-thread-local.cpp:12:21: error: non-static data member defined out-of-line"} |
| } | | } |
| }, | | }, |
| ["err_static_downcast_via_virtual"]={ | | ["err_nontemporal_builtin_must_be_pointer"]={ |
| [i]="err_static_downcast_via_virtual", | | [i]="err_nontemporal_builtin_must_be_pointer", |
| [h]="cannot cast %0 to %1 via virtual base %2", | | [h]="address argument to nontemporal builtin must be a pointer (%0 invalid)", |
| [g]="cannot cast A to B via virtual base C", | | [g]="address argument to nontemporal builtin must be a pointer (A invalid)", |
| | [b]=k, |
| | [e]="address argument to nontemporal builtin must be a pointer \\((.*?) invalid\\)", |
| | [d]=a, |
| | [f]=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"}, |
| | [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();"}} |
| | }, |
| | ["err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector"]={ |
| | [i]="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)", |
| | [g]="address argument to nontemporal builtin must be a pointer to integer, float, pointer, or a vector of such types (A invalid)", |
| [b]=k, | | [b]=k, |
| [e]="cannot cast (.*?) to (.*?) via virtual base (.*?)", | | [e]="address argument to nontemporal builtin must be a pointer to integer, float, pointer, or a vector of such types \\((.*?) invalid\\)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={u,1237025389,s,t}, | | [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"}, |
| [j]={{jc,1724,"/// TryStaticDowncast - Common functionality of TryStaticReferenceDowncast and\n/// TryStaticPointerDowncast. Tests whether a static downcast from SrcType to\n/// DestType is possible and allowed.\nTryCastResult TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType, bool CStyle, SourceRange OpRange, QualType OrigSrcType, QualType OrigDestType, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n // ...\n if (Paths.getDetectedVirtual() != nullptr) {\n // ...\n Self.Diag(OpRange.getBegin(), diag::err_static_downcast_via_virtual) << OrigSrcType << OrigDestType << VirtualBase << OpRange;"}},
| | [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();"}} |
| [l]={
| |
| ["clang/test/SemaCXX/cstyle-cast.cpp"]={"clang/test/SemaCXX/cstyle-cast.cpp:126:9: error: cannot cast \'A *\' to \'C1 *\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:127:9: error: cannot cast \'A\' to \'C1 &\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:128:9: error: cannot cast \'A *\' to \'D *\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:129:9: error: cannot cast \'A\' to \'D &\' via virtual base \'B\'"}
| |
| }
| |
| }, | | }, |
| ["err_static_function_scope"]={ | | ["err_noreturn_block_has_return_expr"]={ |
| [i]="err_static_function_scope", | | [i]="err_noreturn_block_has_return_expr", |
| [h]="variables in function scope cannot be declared static", | | [h]="block declared \'noreturn\' should not return", |
| [g]="variables in function scope cannot be declared static", | | [g]="block declared \'noreturn\' should not return", |
| [b]=k, | | [b]=k, |
| [e]="variables in function scope cannot be declared static", | | [e]="block declared \'noreturn\' should not return", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2.","Extend the support for cl-std to include 1.2.\nAdd error checking for the static qualifier which is now allowed in certain situations for OpenCL 1.2. Use the CL version to turn on this feature.\nAdded test case for 1.2 static storage class feature.\n\nllvm-svn: 158759"}, | | [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]={{w,8548,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n // OpenCL v1.2 s6.8 - The static qualifier is valid only in program\n // scope.\n if (getLangOpts().OpenCLVersion == 120 && !getOpenCLOptions().isAvailableOption(\"cl_clang_storage_class_specifiers\", getLangOpts()) && NewVD->isStaticLocal()) {\n Diag(NewVD->getLocation(), diag::err_static_function_scope);"}}, | | [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/SemaOpenCL/storageclass.cl"]={"clang/test/SemaOpenCL/storageclass.cl:117:14: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:124:23: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:170:16: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:177:25: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:182:23: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:189:22: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:198:24: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:207:24: error: variables in function scope cannot be declared static"} | | ["clang/test/Sema/block-return-2.c"]={"clang/test/Sema/block-return-2.c:4:40: error: block declared \'noreturn\' should not return"} |
| } | | } |
| }, | | }, |
| ["err_static_illegal_in_new"]={ | | ["err_noreturn_lambda_has_return_expr"]={ |
| [i]="err_static_illegal_in_new", | | [i]="err_noreturn_lambda_has_return_expr", |
| [h]="the \'static\' modifier for the array size is not legal in new expressions", | | [h]="lambda declared \'noreturn\' should not return", |
| [g]="the \'static\' modifier for the array size is not legal in new expressions", | | [g]="lambda declared \'noreturn\' should not return", |
| [b]=k, | | [b]=k, |
| [e]="the \'static\' modifier for the array size is not legal in new expressions", | | [e]="lambda declared \'noreturn\' should not return", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]="Lambda Issue", |
| [c]={u,1237025389,s,t}, | | [c]={"cf11eb76ed8d",1329322815,"Specialize noreturn diagnostics for lambda expressions.","Specialize noreturn diagnostics for lambda expressions.\n\nllvm-svn: 150586"}, |
| [j]={{P,1866,"/// 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 (Chunk.Arr.hasStatic)\n return ExprError(Diag(Chunk.Loc, diag::err_static_illegal_in_new) << D.getSourceRange());"}} | | [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_static_kernel"]={ | | ["err_noreturn_non_function"]={ |
| [i]="err_static_kernel", | | [i]="err_noreturn_non_function", |
| [h]="kernel functions cannot be declared static", | | [h]="\'_Noreturn\' can only appear on functions", |
| [g]="kernel functions cannot be declared static", | | [g]="\'_Noreturn\' can only appear on functions", |
| [b]=k, | | [b]=k, |
| [e]="kernel functions cannot be declared static", | | [e]="\'_Noreturn\' can only appear on functions", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2.","Extend the support for cl-std to include 1.2.\nAdd error checking for the static qualifier which is now allowed in certain situations for OpenCL 1.2. Use the CL version to turn on this feature.\nAdded test case for 1.2 static storage class feature.\n\nllvm-svn: 158759"}, | | [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]={{w,10691,"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 // OpenCL v1.2 s6.8 static is invalid for kernel functions.\n if (SC == SC_Static) {\n Diag(D.getIdentifierLoc(), diag::err_static_kernel);"}}, | | [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]={ |
| ["clang/test/SemaOpenCL/storageclass-cl20.cl"]={"clang/test/SemaOpenCL/storageclass-cl20.cl:22:20: error: kernel functions cannot be declared static"} | | ["clang/test/Parser/c11-noreturn.c"]={"clang/test/Parser/c11-noreturn.c:9:1: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:10:6: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:12:9: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:14:1: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:15:1: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:16:1: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:22:1: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:23:11: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:24:8: error: \'_Noreturn\' can only appear on functions"} |
| } | | } |
| }, | | }, |
| ["err_static_lambda"]={ | | ["err_nosetter_property_assignment"]={ |
| ["groups"]={"c++23-extensions","c++2b-extensions"}, | | [i]="err_nosetter_property_assignment", |
| ["maingroup"]="c++23-extensions", | | [h]="%select{assignment to readonly property|no setter method %1 for assignment to property}0", |
| [i]={{nil,M,"err_static_lambda"}}, | | [g]={{nil,nil,{{"assignment to readonly property","no setter method B for assignment to property"}}}}, |
| [h]="static lambdas are a C++23 extension",
| | [b]=k, |
| [g]="static lambdas are a C++23 extension", | | [e]="(?:assignment to readonly property|no setter method (.*?) for assignment to property)", |
| [b]="(?:warning|error|fatal error)\\: ", | | [d]=a, |
| [e]="static lambdas are a C\\+\\+23 extension", | | [f]=m, |
| [f]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+23\\-extensions[^\\]]*\\]", | | [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"}, |
| [d]={{nil,M,x}},
| | [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();"}}, |
| [c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()","[Clang] P1169R4: static operator()\n\nImplements \'P1169R4: static operator()\' from C++2b.\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D133659"}, | |
| [j]={{Vb,1210,"static void addStaticToLambdaDeclSpecifier(Parser &P, SourceLocation StaticLoc, DeclSpec &DS) {\n if (StaticLoc.isValid()) {\n P.Diag(StaticLoc, !P.getLangOpts().CPlusPlus23 ? diag::err_static_lambda : diag::warn_cxx20_compat_static_lambda);"}}, | |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:1043:33: warning: static lambdas are a C++23 extension [-Wc++23-extensions]"} | | ["clang/test/SemaObjC/property-category-1.m"]={"clang/test/SemaObjC/property-category-1.m:51:11: error: assignment to readonly property"} |
| } | | } |
| }, | | }, |
| ["err_static_lambda_captures"]={ | | ["err_nosetter_property_incdec"]={ |
| [i]={{nil,M,"err_static_lambda_captures"}}, | | [i]="err_nosetter_property_incdec", |
| [h]={{nil,M,"a static lambda cannot have any captures"}}, | | [h]="%select{%select{increment|decrement}1 of readonly property|no setter method %2 for %select{increment|decrement}1 of property}0", |
| [g]={{nil,M,"a static lambda cannot have any captures"}}, | | [g]={{nil,nil,{{{{"increment","decrement"}," of readonly property"},{"no setter method C for ",{"increment","decrement"}," of property"}}}}}, |
| [b]=k, | | [b]=k, |
| [e]="a static lambda cannot have any captures", | | [e]="(?:(?:increment|decrement) of readonly property|no setter method (.*?) for (?:increment|decrement) of property)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,M,x}}, | | [f]=m, |
| [c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()","[Clang] P1169R4: static operator()\n\nImplements \'P1169R4: static operator()\' from C++2b.\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D133659"}, | | [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]={{Vb,1266,"static void DiagnoseStaticSpecifierRestrictions(Parser &P, SourceLocation StaticLoc, SourceLocation MutableLoc, const LambdaIntroducer &Intro) {\n // ...\n if (Intro.hasLambdaCapture()) {\n P.Diag(StaticLoc, diag::err_static_lambda_captures);"}}, | | [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]={ |
| ["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:55:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:56:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:57:21: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:58:22: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:59:25: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:60:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:64:16: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:65:17: error: a static lambda cannot have any captures"} | | ["clang/test/SemaObjC/error-implicit-property.m"]={"clang/test/SemaObjC/error-implicit-property.m:22:8: error: no setter method \'setP:\' for increment of property","clang/test/SemaObjC/error-implicit-property.m:23:8: error: no setter method \'setP:\' for decrement of property"} |
| } | | } |
| }, | | }, |
| ["err_static_main"]={ | | ["err_not_class_template_specialization"]={ |
| [i]="err_static_main", | | [i]="err_not_class_template_specialization", |
| [h]="\'main\' is not allowed to be declared static", | | [h]="cannot specialize a %select{dependent template|template template parameter}0", |
| [g]="\'main\' is not allowed to be declared static", | | [g]={{nil,nil,{"cannot specialize a ",{"dependent template","template template parameter"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="\'main\' is not allowed to be declared static", | | [e]="cannot specialize a (?:dependent template|template template parameter)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics.","Adding FixIts to static/inline main declaration diagnostics.\n\nllvm-svn: 139282"}, | | [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"}, |
| [j]={{w,12077,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n // C++11 [basic.start.main]p3:\n // A program that [...] declares main to be inline, static or\n // constexpr is ill-formed.\n // C11 6.7.4p4: In a hosted environment, no function specifier(s) shall\n // appear in a declaration of main.\n // static main is not an error under C99, but we should warn about it.\n // We accept _Noreturn main as an extension.\n if (FD->getStorageClass() == SC_Static)\n Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus ? diag::err_static_main : diag::warn_static_main) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}}, | | [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]={ |
| ["clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp"]={"clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp:10:1: error: \'main\' is not allowed to be declared static"} | | ["clang/test/CXX/temp/temp.spec/part.spec.cpp"]={"clang/test/CXX/temp/temp.spec/part.spec.cpp:339:96: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:345:96: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:371:99: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:374:99: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:399:97: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:402:97: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:449:98: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:472:73: error: cannot specialize a dependent template"} |
| } | | } |
| }, | | }, |
| ["err_static_mutable_lambda"]={ | | ["err_not_direct_base_or_virtual"]={ |
| [i]={{nil,M,"err_static_mutable_lambda"}}, | | [i]="err_not_direct_base_or_virtual", |
| [h]={{nil,M,"lambda cannot be both mutable and static"}}, | | [h]="type %0 is not a direct or virtual base of %1", |
| [g]={{nil,M,"lambda cannot be both mutable and static"}}, | | [g]="type A is not a direct or virtual base of B", |
| [b]=k, | | [b]=k, |
| [e]="lambda cannot be both mutable and static", | | [e]="type (.*?) is not a direct or virtual base of (.*?)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,M,x}}, | | [f]=m, |
| [c]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()","[Clang] P1169R4: static operator()\n\nImplements \'P1169R4: static operator()\' from C++2b.\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D133659"}, | | [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"}, |
| [j]={{Vb,1264,"static void DiagnoseStaticSpecifierRestrictions(Parser &P, SourceLocation StaticLoc, SourceLocation MutableLoc, const LambdaIntroducer &Intro) {\n // ...\n // [expr.prim.lambda.general] p4\n // The lambda-specifier-seq shall not contain both mutable and static.\n // If the lambda-specifier-seq contains static, there shall be no\n // lambda-capture.\n if (MutableLoc.isValid())\n P.Diag(StaticLoc, diag::err_static_mutable_lambda);"}}, | | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:43:17: error: lambda cannot be both mutable and static"} | | ["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\'"} |
| } | | } |
| }, | | }, |
| ["err_static_non_static"]={ | | ["err_not_found_by_two_phase_lookup"]={ |
| [i]="err_static_non_static", | | [i]="err_not_found_by_two_phase_lookup", |
| [h]="static declaration of %0 follows non-static declaration", | | [h]="call to function %0 that is neither visible in the template definition nor found by argument-dependent lookup", |
| [g]="static declaration of A follows non-static declaration", | | [g]="call to function A that is neither visible in the template definition nor found by argument-dependent lookup", |
| [b]=k, | | [b]=k, |
| [e]="static declaration of (.*?) follows non\\-static declaration", | | [e]="call to function (.*?) that is neither visible in the template definition nor found by argument\\-dependent lookup", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={u,1237025389,s,t}, | | [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"}, |
| [j]={{w,3702,"/// 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 // Don\'t complain about this if we\'re in GNU89 mode and the old function\n // is an extern inline function.\n // Don\'t complain about specializations. They are not supposed to have\n // storage classes.\n if (!isa<CXXMethodDecl>(New) && !isa<CXXMethodDecl>(Old) && New->getStorageClass() == SC_Static && Old->hasExternalFormalLinkage() && !New->getTemplateSpecializationInfo() && !canRedefineFunction(Old, getLangOpts())) {\n if (getLangOpts().MicrosoftExt) {\n // ...\n } else {\n Diag(New->getLocation(), diag::err_static_non_static) << New;"},{w,4633,"/// 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 // [dcl.stc]p8: Check if we have a non-static decl followed by a static.\n if (New->getStorageClass() == SC_Static && !New->isStaticDataMember() && Old->hasExternalFormalLinkage()) {\n if (getLangOpts().MicrosoftExt) {\n // ...\n } else {\n Diag(New->getLocation(), diag::err_static_non_static) << New->getDeclName();"}}, | | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp"]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp:11:13: error: static declaration of \'operator delete\' follows non-static declaration"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_static_not_bitfield"]={ | | ["err_not_integral_type_anon_bitfield"]={ |
| [i]="err_static_not_bitfield", | | [i]="err_not_integral_type_anon_bitfield", |
| [h]="static member %0 cannot be a bit-field", | | [h]="anonymous bit-field has non-integral type %0", |
| [g]="static member A cannot be a bit-field", | | [g]="anonymous bit-field has non-integral type A", |
| [b]=k, | | [b]=k, |
| [e]="static member (.*?) cannot be a bit\\-field", | | [e]="anonymous bit\\-field has non\\-integral type (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={K,1236199783,J,I}, | | [c]={"f9b00eb7dc88",1240248578,"clean up anonymous bitfield diagnostics, PR4017","clean up anonymous bitfield diagnostics, PR4017\n\nllvm-svn: 69608"}, |
| [j]={{H,3626,"/// 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 Diag(Loc, diag::err_static_not_bitfield) << Name << 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]={ |
| ["clang/test/SemaCXX/class.cpp"]={"clang/test/SemaCXX/class.cpp:34:14: error: static member \'sb\' cannot be a bit-field"} | | ["clang/test/Sema/bitfield.c"]={"clang/test/Sema/bitfield.c:27:3: error: anonymous bit-field has non-integral type \'float\'","clang/test/Sema/bitfield.c:44:3: error: anonymous bit-field has non-integral type \'double\'"} |
| } | | } |
| }, | | }, |
| ["err_static_out_of_line"]={ | | ["err_not_integral_type_bitfield"]={ |
| [i]="err_static_out_of_line", | | [i]="err_not_integral_type_bitfield", |
| [h]="\'static\' can only be specified inside the class definition", | | [h]="bit-field %0 has non-integral type %1", |
| [g]="\'static\' can only be specified inside the class definition", | | [g]="bit-field A has non-integral type B", |
| [b]=k, | | [b]=k, |
| [e]="\'static\' can only be specified inside the class definition", | | [e]="bit\\-field (.*?) has non\\-integral type (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={u,1237025389,s,t}, | | [c]={H,1236199783,I,G}, |
| [j]={{w,7550,"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 if (DC->isRecord() && !CurContext->isRecord()) {\n // ...\n case SC_Static:\n Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"},{w,10052,"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 (SC == SC_Static && isa<CXXMethodDecl>(NewFD) && !CurContext->isRecord()) {\n // ...\n Diag(D.getDeclSpec().getStorageClassSpecLoc(), ((!getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015) && cast<CXXRecordDecl>(DC)->getDescribedClassTemplate()) || (getLangOpts().MSVCCompat && NewFD->getDescribedFunctionTemplate())) ? diag::ext_static_out_of_line : diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}}, | | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p1.cpp:32:12: error: \'static\' can only be specified inside the class definition"} | | ["clang/test/SemaTemplate/instantiate-field.cpp"]={"clang/test/SemaTemplate/instantiate-field.cpp:8:5: error: bit-field \'bitfield\' has non-integral type \'float\'"} |
| } | | } |
| }, | | }, |
| ["err_static_overrides_virtual"]={ | | ["err_not_tag_in_scope"]={ |
| [i]="err_static_overrides_virtual", | | [i]="err_not_tag_in_scope", |
| [h]="\'static\' member function %0 overrides a virtual function in a base class", | | [h]="no %select{struct|interface|union|class|enum}0 named %1 in %2", |
| [g]="\'static\' member function A overrides a virtual function in a base class", | | [g]={{nil,nil,{xb,{"struct","interface","union",ib,"enum"}," named B in C"}}}, |
| [b]=k, | | [b]=k, |
| [e]="\'static\' member function (.*?) overrides a virtual function in a base class", | | [e]="no (?:struct|interface|union|class|enum) named (.*?) in (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"5a2bb5ba9810",1287010532,"Diagnose when a \'static\' member function overrides a virtual function","Diagnose when a \'static\' member function overrides a virtual function\nin a base class. Fixes PR8168.\n\nllvm-svn: 116448"}, | | [c]={hb,1237025389,gb,fb}, |
| [j]={{H,7018,"/// 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 // A static function cannot override anything.\n if (MD->getStorageClass() == SC_Static) {\n if (ReportOverrides(*this, diag::err_static_overrides_virtual, MD, [](const CXXMethodDecl *) { return true; }))"}}, | | [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]={ |
| ["clang/test/SemaCXX/virtual-override.cpp"]={"clang/test/SemaCXX/virtual-override.cpp:289:17: error: \'static\' member function \'foo\' overrides a virtual function in a base class"} | | ["clang/test/Parser/recovery.cpp"]={"clang/test/Parser/recovery.cpp:215:10: error: no struct named \'foo\' in the global namespace"} |
| } | | } |
| }, | | }, |
| ["err_statically_allocated_object"]={ | | ["err_ns_attribute_wrong_parameter_type"]={ |
| [i]="err_statically_allocated_object", | | [i]="err_ns_attribute_wrong_parameter_type", |
| [h]="interface type cannot be statically allocated", | | [h]="%0 attribute only applies to %select{Objective-C object|pointer|pointer-to-CF-pointer}1 parameters", |
| [g]="interface type cannot be statically allocated", | | [g]={{nil,nil,{"A attribute only applies to ",{"Objective-C object","pointer","pointer-to-CF-pointer"}," parameters"}}}, |
| | [b]=k, |
| | [e]="(.*?) attribute only applies to (?:Objective\\-C object|pointer|pointer\\-to\\-CF\\-pointer) parameters", |
| | [d]=a, |
| | [f]=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"}, |
| | [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"]={ |
| | [i]="err_nsconsumed_attribute_mismatch", |
| | [h]="overriding method has mismatched ns_consumed attribute on its parameter", |
| | [g]="overriding method has mismatched ns_consumed attribute on its parameter", |
| [b]=k, | | [b]=k, |
| [e]="interface type cannot be statically allocated", | | [e]="overriding method has mismatched ns_consumed attribute on its parameter", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={K,1236199783,J,I}, | | [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]={{w,8525,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n if (T->isObjCObjectType()) {\n Diag(NewVD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(NewVD->getLocation(), \"*\");"},{w,18887,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n // ...\n for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n // ...\n if (FDTy->isFunctionType()) {\n // ...\n } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n // ...\n } else if (!FDTy->isDependentType() && RequireCompleteSizedType(FD->getLocation(), FD->getType(), diag::err_field_incomplete_or_sizeless)) {\n // ...\n } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {\n // ...\n } else if (FDTy->isObjCObjectType()) {\n // ...\n Diag(FD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(FD->getLocation(), \"*\");"},{hb,608,"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 (T->isObjCObjectType()) {\n // ...\n Diag(FD.D.getIdentifierLoc(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(StarLoc, \"*\");"}},
| | [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/invalid-objc-decls-1.m"]={"clang/test/SemaObjC/invalid-objc-decls-1.m:4:7: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:6:14: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:9:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:16:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:21:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:26:13: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:32:8: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:39:36: error: interface type cannot be statically allocated"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_std_compare_type_not_supported"]={ | | ["err_nserrordomain_invalid_decl"]={ |
| [i]={{nil,O,"err_std_compare_type_not_supported"}}, | | [i]={{nil,C,"err_nserrordomain_invalid_decl"}}, |
| [h]={{nil,O,"standard library implementation of %0 is not supported; %select{member \'%2\' does not have expected form|member \'%2\' is missing|the type is not trivially copyable|the type does not have the expected form}1"}}, | | [h]={{nil,C,"domain argument %select{|%1 }0does not refer to global constant"}}, |
| [g]={{nil,O,{"standard library implementation of A is not supported; ",{"member \'C\' does not have expected form","member \'C\' is missing","the type is not trivially copyable","the type does not have the expected form"}}}}, | | [g]={{nil,C,{"domain argument ",{a,"B "},"does not refer to global constant"}}}, |
| [b]=k, | | [b]=k, |
| [e]="standard library implementation of (.*?) is not supported; (?:member \'(.*?)\' does not have expected form|member \'(.*?)\' is missing|the type is not trivially copyable|the type does not have the expected form)", | | [e]="domain argument (?:|(.*?) )does not refer to global constant", |
| [f]=a, | | [d]=a, |
| [d]={{nil,O,a}}, | | [f]={{nil,C,m}}, |
| [c]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant","[C++2a] Implement operator<=> CodeGen and ExprConstant\n\nSummary:\nThis patch tackles long hanging fruit for the builtin operator<=> expressions. It is currently needs some cleanup before landing, but I want to get some initial feedback.\n\nThe main changes are:\n\n* Lookup, build, and store the required standard library types and expressions in `ASTContext`. By storing them in ASTContext we don\'t need to store (and duplicate) the required expressions in the BinaryOperator AST nodes. \n\n* Implement [expr.spaceship] checking, including diagnosing narrowing conversions. \n\n* Implement `ExprConstant` for builtin spaceship operators.\n\n* Implement builitin operator<=> support in `CodeGenAgg`. Initially I emitted the required comparisons using `ScalarExprEmitter::VisitBinaryOperator`, but this caused the operand expressions to be emitted once for every required cmp.\n\n* Implement [builtin.over] with modifications to support the intent of P0946R0. See the note on `BuiltinOperatorOverloadBuilder::addThreeWayArithmeticOverloads` for more information about the workaround.\n\n\n\n\nReviewers: rsmith, aaron.ballman, majnemer, rnk, compnerd, rjmccall\n\nReviewed By: rjmccall\n\nSubscribers: rjmccall, rsmith, aaron.ballman, junbuml, mgorny, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D45476\n\nllvm-svn: 331677"}, | | [c]={vc,1582847864,yc,xc}, |
| [j]={{H,11591,"struct InvalidSTLDiagnoser {\n // ...\n QualType operator()(UnsupportedSTLSelect Sel = USS_Other, StringRef Name = \"\", const VarDecl *VD = nullptr) {\n {\n auto D = S.Diag(Loc, diag::err_std_compare_type_not_supported) << TyForDiags << ((int)Sel);"}},
| | [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]={ |
| ["clang/test/SemaCXX/std-compare-cxx2a.cpp"]={"clang/test/SemaCXX/std-compare-cxx2a.cpp:79:14: error: standard library implementation of \'std::strong_ordering\' is not supported; the type is not trivially copyable"} | | ["clang/test/Sema/ns_error_enum.m"]={"clang/test/Sema/ns_error_enum.m:76:58: error: domain argument does not refer to global constant","clang/test/Sema/ns_error_enum.m:80:66: error: domain argument \'foo\' does not refer to global constant"} |
| } | | } |
| }, | | }, |
| ["err_std_source_location_impl_malformed"]={ | | ["err_nserrordomain_wrong_type"]={ |
| [i]={{nil,y,"err_std_source_location_impl_malformed"}}, | | [i]={{nil,C,"err_nserrordomain_wrong_type"}}, |
| [h]={{nil,y,"\'std::source_location::__impl\' must be standard-layout and have only two \'const char *\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'"}}, | | [h]={{nil,C,"domain argument %0 does not point to an NSString or CFString constant"}}, |
| [g]={{nil,y,"\'std::source_location::__impl\' must be standard-layout and have only two \'const char *\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'"}}, | | [g]={{nil,C,"domain argument A does not point to an NSString or CFString constant"}}, |
| [b]=k, | | [b]=k, |
| [e]="\'std\\:\\:source_location\\:\\:__impl\' must be standard\\-layout and have only two \'const char \\*\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'", | | [e]="domain argument (.*?) does not point to an NSString or CFString constant", |
| [f]=a, | | [d]=a, |
| [d]={{nil,y,a}}, | | [f]={{nil,C,m}}, |
| [c]={md,1620118562,nd,od}, | | [c]={vc,1582847864,yc,xc}, |
| [j]={{n,17377,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n // ...\n // Verify that __impl is a trivial struct type, with no base classes, and with\n // only the four expected fields.\n if (ImplDecl->isUnion() || !ImplDecl->isStandardLayout() || ImplDecl->getNumBases() != 0) {\n S.Diag(Loc, diag::err_std_source_location_impl_malformed);"},{n,17452,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n // ...\n if (Count != 4) {\n S.Diag(Loc, diag::err_std_source_location_impl_malformed);"}}, | | [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]={ |
| ["clang/test/SemaCXX/source_location_err.cpp"]={"clang/test/SemaCXX/source_location_err.cpp:65:14: error: \'std::source_location::__impl\' must be standard-layout and have only two \'const char *\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'"} | | ["clang/test/Sema/ns_error_enum.m"]={"clang/test/Sema/ns_error_enum.m:55:37: error: domain argument \'WrongErrorDomainType\' does not point to an NSString or CFString constant"} |
| } | | } |
| }, | | }, |
| ["err_std_source_location_impl_not_found"]={ | | ["err_nsnumber_nonliteral_unary"]={ |
| [i]={{nil,y,"err_std_source_location_impl_not_found"}}, | | [i]="err_nsnumber_nonliteral_unary", |
| [h]={{nil,y,"\'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called"}}, | | [h]="@%0 must be followed by a number to form an NSNumber object", |
| [g]={{nil,y,"\'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called"}}, | | [g]="@A must be followed by a number to form an NSNumber object", |
| [b]=k, | | [b]=k, |
| [e]="\'std\\:\\:source_location\\:\\:__impl\' was not found; it must be defined before \'__builtin_source_location\' is called", | | [e]="@(.*?) must be followed by a number to form an NSNumber object", |
| [f]=a, | | [d]=a, |
| [d]={{nil,y,a}}, | | [f]=y, |
| [c]={md,1620118562,nd,od}, | | [c]={jb,1331064356,lb,kb}, |
| [j]={{n,17345,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n // ...\n if (!ImplDecl || !ImplDecl->isCompleteDefinition()) {\n S.Diag(Loc, diag::err_std_source_location_impl_not_found);"}}, | | [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]={ |
| ["clang/test/SemaCXX/source_location_err.cpp"]={"clang/test/SemaCXX/source_location_err.cpp:28:15: error: \'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called"} | | ["clang/test/SemaObjC/objc-literal-nsnumber.m"]={"clang/test/SemaObjC/objc-literal-nsnumber.m:66:5: error: @- must be followed by a number to form an NSNumber object","clang/test/SemaObjC/objc-literal-nsnumber.m:67:5: error: @+ must be followed by a number to form an NSNumber object"} |
| } | | } |
| }, | | }, |
| ["err_std_type_trait_not_class_template"]={ | | ["err_nsobject_attribute"]={ |
| [i]="err_std_type_trait_not_class_template", | | [i]="err_nsobject_attribute", |
| [h]="unsupported standard library implementation: \'std::%0\' is not a class template", | | [h]="\'NSObject\' attribute is for pointer types only", |
| [g]="unsupported standard library implementation: \'std::A\' is not a class template", | | [g]="\'NSObject\' attribute is for pointer types only", |
| [b]=k, | | [b]=k, |
| [e]="unsupported standard library implementation\\: \'std\\:\\:(.*?)\' is not a class template", | | [e]="\'NSObject\' attribute is for pointer types only", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"7873de0cf65f",1470954346,"P0217R3: Perform semantic checks and initialization for the bindings in a","P0217R3: Perform semantic checks and initialization for the bindings in a\ndecomposition declaration for arrays, aggregate-like structs, tuple-like\ntypes, and (as an extension) for complex and vector types.\n\nllvm-svn: 278435"}, | | [c]={H,1236199783,I,G}, |
| [j]={{H,1065,"static bool lookupStdTypeTraitMember(Sema &S, LookupResult &TraitMemberLookup, SourceLocation Loc, StringRef Trait, TemplateArgumentListInfo &Args, unsigned DiagID) {\n // ...\n if (!TraitTD) {\n // ...\n S.Diag(Loc, diag::err_std_type_trait_not_class_template) << Trait;"}}
| | [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]={ |
| | ["clang/test/SemaObjC/nsobject-attribute.m"]={"clang/test/SemaObjC/nsobject-attribute.m:9:47: error: \'NSObject\' attribute is for pointer types only","clang/test/SemaObjC/nsobject-attribute.m:64:49: error: \'NSObject\' attribute is for pointer types only"} |
| | } |
| }, | | }, |
| ["err_stmt_expr_in_default_arg"]={ | | ["err_nsreturns_retained_attribute_mismatch"]={ |
| [i]={{nil,y,"err_stmt_expr_in_default_arg"}}, | | [i]="err_nsreturns_retained_attribute_mismatch", |
| [h]={{nil,y,"default %select{argument|non-type template argument}0 may not use a GNU statement expression"}}, | | [h]="overriding method has mismatched ns_returns_%select{not_retained|retained}0 attributes", |
| [g]={{nil,y,{"default ",{"argument","non-type template argument"}," may not use a GNU statement expression"}}}, | | [g]={{nil,nil,{"overriding method has mismatched ns_returns_",{"not_retained","retained"}," attributes"}}}, |
| [b]=k, | | [b]=k, |
| [e]="default (?:argument|non\\-type template argument) may not use a GNU statement expression", | | [e]="overriding method has mismatched ns_returns_(?:not_retained|retained) attributes", |
| [f]=a, | | [d]=a, |
| [d]={{nil,y,m}}, | | [f]=m, |
| [c]={md,1620118562,nd,od}, | | [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]={{jb,7470,"/// 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 } else {\n // ...\n // Parse the default argument, if any. We parse the default\n // arguments in all dialects; the semantic analysis in\n // ActOnParamDefaultArgument will reject the default argument in\n // C.\n if (Tok.is(tok::equal)) {\n // ...\n // Parse the default argument\n if (DeclaratorCtx == DeclaratorContext::Member) {\n // ...\n } else {\n // ...\n if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n // ...\n } else {\n if (Tok.is(tok::l_paren) && NextToken().is(tok::l_brace)) {\n Diag(Tok, diag::err_stmt_expr_in_default_arg) << 0;"},{xd,1043,"/// ParseNonTypeTemplateParameter - Handle the parsing of non-type\n/// template parameters (e.g., in \"template<int Size> class array;\").\n///\n/// template-parameter:\n/// ...\n/// parameter-declaration\nNamedDecl *Parser::ParseNonTypeTemplateParameter(unsigned Depth, unsigned Position) {\n // ...\n if (TryConsumeToken(tok::equal, EqualLoc)) {\n if (Tok.is(tok::l_paren) && NextToken().is(tok::l_brace)) {\n Diag(Tok.getLocation(), diag::err_stmt_expr_in_default_arg) << 1;"}},
| | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Sema/stmt-expr-in-default-arg.cpp"]={"clang/test/Sema/stmt-expr-in-default-arg.cpp:4:24: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:6:21: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:8:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:10:26: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:13:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:16:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:25:23: error: default argument may not use a GNU statement expression"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_stmtexpr_file_scope"]={ | | ["err_nullability_conflicting"]={ |
| [i]="err_stmtexpr_file_scope", | | [i]="err_nullability_conflicting", |
| [h]="statement expression not allowed at file scope", | | [h]="nullability specifier %0 conflicts with existing specifier %1", |
| [g]="statement expression not allowed at file scope", | | [g]="nullability specifier A conflicts with existing specifier B", |
| [b]=k, | | [b]=k, |
| [e]="statement expression not allowed at file scope", | | [e]="nullability specifier (.*?) conflicts with existing specifier (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=x, | | [f]="Nullability Issue", |
| [c]={u,1237025389,s,t}, | | [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"}, |
| [j]={{"clang/lib/Parse/ParseExpr.cpp",2938,"/// ParseParenExpression - This parses the unit that starts with a \'(\' token,\n/// based on what is allowed by ExprType. The actual thing parsed is returned\n/// in ExprType. If stopIfCastExpr is true, it will only return the parsed type,\n/// not the parsed cast-expression.\n///\n/// \\verbatim\n/// primary-expression: [C99 6.5.1]\n/// \'(\' expression \')\'\n/// [GNU] \'(\' compound-statement \')\' (if !ParenExprOnly)\n/// postfix-expression: [C99 6.5.2]\n/// \'(\' type-name \')\' \'{\' initializer-list \'}\'\n/// \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n/// cast-expression: [C99 6.5.4]\n/// \'(\' type-name \')\' cast-expression\n/// [ARC] bridged-cast-expression\n/// [ARC] bridged-cast-expression:\n/// (__bridge type-name) cast-expression\n/// (__bridge_transfer type-name) cast-expression\n/// (__bridge_retained type-name) cast-expression\n/// fold-expression: [C++1z]\n/// \'(\' cast-expression fold-operator \'...\' \')\'\n/// \'(\' \'...\' fold-operator cast-expression \')\'\n/// \'(\' cast-expression fold-operator \'...\'\n/// fold-operator cast-expression \')\'\n/// [OPENMP] Array shaping operation\n/// \'(\' \'[\' expression \']\' { \'[\' expression \']\' } cast-expression\n/// \\endverbatim\nExprResult Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr, bool isTypeCast, ParsedType &CastTy, SourceLocation &RParenLoc) {\n // ...\n // None of these cases should fall through with an invalid Result\n // unless they\'ve already reported an error.\n if (ExprType >= CompoundStmt && Tok.is(tok::l_brace)) {\n // ...\n if (!getCurScope()->getFnParent() && !getCurScope()->getBlockParent()) {\n Result = ExprError(Diag(OpenLoc, diag::err_stmtexpr_file_scope));"}},
| | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Sema/statements.c"]={"clang/test/Sema/statements.c:24:11: error: statement expression not allowed at file scope"} | | ["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\'"} |
| } | | } |
| }, | | }, |
| ["err_storage_class_for_static_member"]={ | | ["err_nullability_cs_multilevel"]={ |
| [i]="err_storage_class_for_static_member", | | [i]="err_nullability_cs_multilevel", |
| [h]="static data member definition cannot specify a storage class", | | [h]="nullability keyword %0 cannot be applied to multi-level pointer type %1", |
| [g]="static data member definition cannot specify a storage class", | | [g]="nullability keyword A cannot be applied to multi-level pointer type B", |
| [b]=k, | | [b]=k, |
| [e]="static data member definition cannot specify a storage class", | | [e]="nullability keyword (.*?) cannot be applied to multi\\-level pointer type (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]="Nullability Issue", |
| [c]={"45f96f87c3cf",1371649314,"Fix pr16354.","Fix pr16354.\n\nWe now reject things like\n\nstruct ABC {\n static double a;\n};\nregister double ABC::a = 1.0;\n\nllvm-svn: 184300"}, | | [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"}, |
| [j]={{w,7562,"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 if (DC->isRecord() && !CurContext->isRecord()) {\n // ...\n case SC_Auto:\n case SC_Register:\n case SC_Extern:\n // ...\n Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_storage_class_for_static_member) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}}, | | [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]={ |
| ["clang/test/SemaCXX/static-data-member.cpp"]={"clang/test/SemaCXX/static-data-member.cpp:13:1: error: static data member definition cannot specify a storage class","clang/test/SemaCXX/static-data-member.cpp:15:1: error: static data member definition cannot specify a storage class","clang/test/SemaCXX/static-data-member.cpp:16:1: error: static data member definition cannot specify a storage class"} | | ["clang/test/SemaObjC/nullability.m"]={"clang/test/SemaObjC/nullability.m:37:4: error: nullability keyword \'nonnull\' cannot be applied to multi-level pointer type \'NSFoo **\'","clang/test/SemaObjC/nullability.m:43:19: error: nullability keyword \'nullable\' cannot be applied to multi-level pointer type \'NSFoo **\'","clang/test/SemaObjC/nullability.m:54:19: error: nullability keyword \'nullable\' cannot be applied to multi-level pointer type \'NSFoo **\'","clang/test/SemaObjC/nullability.m:283:22: error: nullability keyword \'nonnull\' cannot be applied to multi-level pointer type \'void * _Nullable[2]\'"} |
| } | | } |
| }, | | }, |
| ["err_storage_spec_on_catch_parm"]={ | | ["err_nullability_nonpointer"]={ |
| [i]="err_storage_spec_on_catch_parm", | | [i]="err_nullability_nonpointer", |
| [h]="@catch parameter cannot have storage specifier \'%0\'", | | [h]="nullability specifier %0 cannot be applied to non-pointer type %1", |
| [g]="@catch parameter cannot have storage specifier \'A\'", | | [g]="nullability specifier A cannot be applied to non-pointer type B", |
| [b]=k, | | [b]=k, |
| [e]="@catch parameter cannot have storage specifier \'(.*?)\'", | | [e]="nullability specifier (.*?) cannot be applied to non\\-pointer type (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]="Nullability Issue", |
| [c]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from","Refactor Objective-C @catch parameter checking by detangling it from\nfunction-parameter checking and splitting it into the normal\nActOn*/Build* pair in Sema. We now use VarDecl to represent the @catch\nparameter rather than the ill-fitting ParmVarDecl.\n\nllvm-svn: 102347"}, | | [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"}, |
| [j]={{Kb,5196,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n // ...\n // We allow the \"register\" storage class on exception variables because\n // GCC did, but we drop it completely. Any other storage class is an error.\n if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {\n // ...\n } else if (DeclSpec::SCS SCS = DS.getStorageClassSpec()) {\n Diag(DS.getStorageClassSpecLoc(), diag::err_storage_spec_on_catch_parm) << DeclSpec::getSpecifierName(SCS);"}}, | | [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]={ |
| ["clang/test/SemaObjC/stmts.m"]={"clang/test/SemaObjC/stmts.m:14:13: error: @catch parameter cannot have storage specifier \'static\'"} | | ["clang/test/SemaObjC/block-omitted-return-type.m"]={"clang/test/SemaObjC/block-omitted-return-type.m:16:34: error: nullability specifier \'_Nonnull\' cannot be applied to non-pointer type \'void\'"} |
| } | | } |
| }, | | }, |
| ["err_storageclass_invalid_for_member"]={ | | ["err_nullptr_cast"]={ |
| [i]="err_storageclass_invalid_for_member", | | [i]={{nil,p,"err_nullptr_cast"}}, |
| [h]="storage class specified for a member declaration", | | [h]={{nil,p,"cannot cast an object of type %select{\'nullptr_t\' to %1|%1 to \'nullptr_t\'}0"}}, |
| [g]="storage class specified for a member declaration", | | [g]={{nil,p,{"cannot cast an object of type ",{"\'nullptr_t\' to B","B to \'nullptr_t\'"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="storage class specified for a member declaration", | | [e]="cannot cast an object of type (?:\'nullptr_t\' to (.*?)|(.*?) to \'nullptr_t\')", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,p,m}}, |
| [c]={K,1236199783,J,I}, | | [c]={Ac,1625925174,zc,sc}, |
| [j]={{H,3495,"/// 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 default:\n Diag(DS.getStorageClassSpecLoc(), diag::err_storageclass_invalid_for_member);"}}, | | [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]={ |
| ["clang/test/CXX/temp/temp.deduct.guide/p1.cpp"]={"clang/test/CXX/temp/temp.deduct.guide/p1.cpp:66:1: error: storage class specified for a member declaration"} | | ["clang/test/C/C2x/n3042.c"]={"clang/test/C/C2x/n3042.c:80:14: error: cannot cast an object of type \'int\' to \'nullptr_t\'","clang/test/C/C2x/n3042.c:81:10: error: cannot cast an object of type \'nullptr_t\' to \'float\'","clang/test/C/C2x/n3042.c:82:10: error: cannot cast an object of type \'nullptr_t\' to \'float\'","clang/test/C/C2x/n3042.c:83:14: error: cannot cast an object of type \'int\' to \'nullptr_t\'","clang/test/C/C2x/n3042.c:84:14: error: cannot cast an object of type \'void *\' to \'nullptr_t\'","clang/test/C/C2x/n3042.c:85:14: error: cannot cast an object of type \'int *\' to \'nullptr_t\'"} |
| } | | } |
| }, | | }, |
| ["err_store_value_to_reg"]={ | | ["err_objc_array_of_interfaces"]={ |
| [i]={{nil,y,"err_store_value_to_reg"}}, | | [i]="err_objc_array_of_interfaces", |
| [h]={{nil,y,"impossible constraint in asm: can\'t store value into a register"}}, | | [h]="array of interface %0 is invalid (probably should be an array of pointers)", |
| [g]={{nil,y,"impossible constraint in asm: can\'t store value into a register"}}, | | [g]="array of interface A is invalid (probably should be an array of pointers)", |
| [b]=k, | | [b]=k, |
| [e]="impossible constraint in asm\\: can\'t store value into a register", | | [e]="array of interface (.*?) is invalid \\(probably should be an array of pointers\\)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,y,"Inline Assembly Issue"}}, | | [f]=m, |
| [c]={md,1620118562,nd,od}, | | [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"}, |
| [j]={{"clang/lib/CodeGen/CGStmt.cpp",2413,"static void EmitAsmStores(CodeGenFunction &CGF, const AsmStmt &S, const llvm::ArrayRef<llvm::Value *> RegResults, const llvm::ArrayRef<llvm::Type *> ResultRegTypes, const llvm::ArrayRef<llvm::Type *> ResultTruncRegTypes, const llvm::ArrayRef<LValue> ResultRegDests, const llvm::ArrayRef<QualType> ResultRegQualTys, const llvm::BitVector &ResultTypeRequiresCast, const llvm::BitVector &ResultRegIsFlagReg) {\n // ...\n for (unsigned i = 0, e = RegResults.size(); i != e; ++i) {\n // ...\n // ResultTypeRequiresCast elements correspond to the first\n // ResultTypeRequiresCast.size() elements of RegResults.\n if ((i < ResultTypeRequiresCast.size()) && ResultTypeRequiresCast[i]) {\n // ...\n if (Ty.isNull()) {\n // ...\n CGM.getDiags().Report(OutExpr->getExprLoc(), diag::err_store_value_to_reg);"},{"clang/lib/Sema/SemaStmtAsm.cpp",683,"StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, MultiExprArg constraints, MultiExprArg Exprs, Expr *asmString, MultiExprArg clobbers, unsigned NumLabels, SourceLocation RParenLoc) {\n // ...\n for (unsigned i = 0, e = InputConstraintInfos.size(); i != e; ++i) {\n // ...\n // If the smaller value wasn\'t mentioned in the asm string, and if the\n // output was a register, just extend the shorter one to the size of the\n // larger one.\n if (!SmallerValueMentioned && InputDomain != AD_Other && OutputConstraintInfos[TiedTo].allowsRegister()) {\n // FIXME: GCC supports the OutSize to be 128 at maximum. Currently codegen\n // crash when the size larger than the register size. So we limit it here.\n if (OutTy->isStructureType() && Context.getIntTypeForBitwidth(OutSize, /*Signed*/ false).isNull()) {\n targetDiag(OutputExpr->getExprLoc(), diag::err_store_value_to_reg);"}}, | | [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]={ |
| ["clang/test/Sema/asm.c"]={"clang/test/Sema/asm.c:362:20: error: impossible constraint in asm: can\'t store value into a register"} | | ["clang/test/SemaObjC/interface-1.m"]={"clang/test/SemaObjC/interface-1.m:24:11: error: array of interface \'INT1\' is invalid (probably should be an array of pointers)"} |
| } | | } |
| }, | | }, |
| ["err_string_concat_mixed_suffix"]={ | | ["err_objc_attr_not_id"]={ |
| [i]="err_string_concat_mixed_suffix", | | [i]="err_objc_attr_not_id", |
| [h]="differing user-defined suffixes (\'%0\' and \'%1\') in string literal concatenation", | | [h]="parameter of %0 attribute must be a single name of an Objective-C %select{class|protocol}1", |
| [g]="differing user-defined suffixes (\'A\' and \'B\') in string literal concatenation", | | [g]={{nil,nil,{"parameter of A attribute must be a single name of an Objective-C ",{ib,"protocol"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="differing user\\-defined suffixes \\(\'(.*?)\' and \'(.*?)\'\\) in string literal concatenation", | | [e]="parameter of (.*?) attribute must be a single name of an Objective\\-C (?:class|protocol)", |
| [f]=a, | | [d]=a, |
| [d]=G, | | [f]=m, |
| [c]={"e18f0faff242",1330920135,"Lexing support for user-defined literals. Currently these lex as the same token","Lexing support for user-defined literals. Currently these lex as the same token\nkinds as the underlying string literals, and we silently drop the ud-suffix;\nthose issues will be fixed by subsequent patches.\n\nllvm-svn: 152012"}, | | [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"}, |
| [j]={{"clang/lib/Lex/LiteralSupport.cpp",2050,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n // ...\n for (unsigned i = 0, e = StringToks.size(); i != e; ++i) {\n // ...\n // Remove an optional ud-suffix.\n if (ThisTokEnd[-1] != \'\"\') {\n // ...\n if (UDSuffixBuf.empty()) {\n // ...\n } else {\n // ...\n if (UDSuffixBuf != UDSuffix || UnevaluatedStringHasUDL) {\n if (Diags) {\n // ...\n if (UnevaluatedStringHasUDL) {\n // ...\n } else {\n Diags->Report(TokLoc, diag::err_string_concat_mixed_suffix) << UDSuffixBuf << UDSuffix << SourceRange(UDSuffixTokLoc, UDSuffixTokLoc);"}}, | | [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]={ |
| ["clang/test/CXX/lex/lex.literal/lex.ext/p9.cpp"]={"clang/test/CXX/lex/lex.literal/lex.ext/p9.cpp:10:13: error: differing user-defined suffixes (\'_x\' and \'_y\') in string literal concatenation"} | | ["clang/test/SemaObjCXX/objcbridge-static-cast.mm"]={"clang/test/SemaObjCXX/objcbridge-static-cast.mm:8:9: error: parameter of \'objc_bridge\' attribute must be a single name of an Objective-C class"} |
| } | | } |
| }, | | }, |
| ["err_strong_property"]={ | | ["err_objc_attr_protocol_requires_definition"]={ |
| [i]="err_strong_property", | | [i]="err_objc_attr_protocol_requires_definition", |
| [h]="existing instance variable %1 for strong property %0 may not be __weak", | | [h]="attribute %0 can only be applied to @protocol definitions, not forward declarations", |
| [g]="existing instance variable B for strong property A may not be __weak", | | [g]="attribute A can only be applied to @protocol definitions, not forward declarations", |
| [b]=k, | | [b]=k, |
| [e]="existing instance variable (.*?) for strong property (.*?) may not be __weak", | | [e]="attribute (.*?) can only be applied to @protocol definitions, not forward declarations", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={wb,1480718311,vb,tb}, | | [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"}, |
| [j]={{hb,1410,"/// 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 // Check that type of property and its ivar are type compatible.\n if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n // ...\n // Fall thru - see previous comment\n if ((property->getType()->isObjCObjectPointerType() || PropType.isObjCGCStrong()) && IvarType.isObjCGCWeak() && getLangOpts().getGC() != LangOptions::NonGC) {\n Diag(PropertyDiagLoc, diag::err_strong_property) << property->getDeclName() << Ivar->getDeclName();"}}, | | [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]={ |
| ["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:27:13: error: existing instance variable \'_sb\' for strong property \'sb\' may not be __weak"} | | ["clang/test/SemaObjC/protocols-suppress-conformance.m"]={"clang/test/SemaObjC/protocols-suppress-conformance.m:170:16: error: attribute \'objc_protocol_requires_explicit_implementation\' can only be applied to @protocol definitions, not forward declarations"} |
| } | | } |
| }, | | }, |
| ["err_subscript_function_type"]={ | | ["err_objc_attr_typedef_not_id"]={ |
| [i]="err_subscript_function_type", | | [i]="err_objc_attr_typedef_not_id", |
| [h]="subscript of pointer to function type %0", | | [h]="parameter of %0 attribute must be \'id\' when used on a typedef", |
| [g]="subscript of pointer to function type A", | | [g]="parameter of A attribute must be \'id\' when used on a typedef", |
| [b]=k, | | [b]=k, |
| [e]="subscript of pointer to function type (.*?)", | | [e]="parameter of (.*?) attribute must be \'id\' when used on a typedef", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"ac1fb65d0cb6",1237924374,"Make sure to use RequireCompleteType rather than testing for","Make sure to use RequireCompleteType rather than testing for\nincomplete types. RequireCompleteType is needed when the type may be\ncompleted by instantiating a template.\n\nllvm-svn: 67643"}, | | [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"}, |
| [j]={{n,5970,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // ...\n // C99 6.5.2.1p1: \"shall have type \"pointer to *object* type\". Similarly,\n // C++ [expr.sub]p1: The type \"T\" shall be a completely-defined object\n // type. Note that Functions are not objects, and that (in C99 parlance)\n // incomplete types are not object types.\n if (ResultType->isFunctionType()) {\n Diag(BaseExpr->getBeginLoc(), diag::err_subscript_function_type) << ResultType << BaseExpr->getSourceRange();"}} | | [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]={ |
| | ["clang/test/SemaObjC/objcbridge-attribute.m"]={"clang/test/SemaObjC/objcbridge-attribute.m:12:33: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef","clang/test/SemaObjC/objcbridge-attribute.m:14:44: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef","clang/test/SemaObjC/objcbridge-attribute.m:18:40: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef","clang/test/SemaObjC/objcbridge-attribute.m:22:53: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef","clang/test/SemaObjC/objcbridge-attribute.m:24:41: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef","clang/test/SemaObjC/objcbridge-attribute.m:26:41: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef"} |
| | } |
| }, | | }, |
| ["err_subscript_incomplete_or_sizeless_type"]={ | | ["err_objc_attr_typedef_not_void_pointer"]={ |
| [i]={{nil,q,"err_subscript_incomplete_or_sizeless_type"}}, | | [i]="err_objc_attr_typedef_not_void_pointer", |
| [h]={{nil,q,"subscript of pointer to %select{incomplete|sizeless}0 type %1"}}, | | [h]="\'objc_bridge(id)\' is only allowed on structs and typedefs of void pointers", |
| [g]={{nil,q,{"subscript of pointer to ",{"incomplete","sizeless"}," type B"}}}, | | [g]="\'objc_bridge(id)\' is only allowed on structs and typedefs of void pointers", |
| [b]=k, | | [b]=k, |
| [e]="subscript of pointer to (?:incomplete|sizeless) type (.*?)", | | [e]="\'objc_bridge\\(id\\)\' is only allowed on structs and typedefs of void pointers", |
| [f]=a, | | [d]=a, |
| [d]={{nil,q,m}}, | | [f]=m, |
| [c]={U,1576908663,T,S}, | | [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"}, |
| [j]={{n,6026,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // ...\n } else if (!ResultType->isDependentType() && !ResultType.isWebAssemblyReferenceType() && RequireCompleteSizedType(LLoc, ResultType, diag::err_subscript_incomplete_or_sizeless_type, BaseExpr))"}}, | | [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]={ |
| ["clang/test/Sema/crash-invalid-array.c"]={"clang/test/Sema/crash-invalid-array.c:13:9: error: subscript of pointer to incomplete type \'int[]\'"} | | ["clang/test/SemaObjC/objcbridge-attribute.m"]={"clang/test/SemaObjC/objcbridge-attribute.m:33:49: error: \'objc_bridge(id)\' is only allowed on structs and typedefs of void pointers"} |
| } | | } |
| }, | | }, |
| ["err_subscript_nonfragile_interface"]={ | | ["err_objc_bridged_related_invalid_class"]={ |
| [i]="err_subscript_nonfragile_interface", | | [i]="err_objc_bridged_related_invalid_class", |
| [h]="subscript requires size of interface %0, which is not constant for this architecture and platform", | | [h]="could not find Objective-C class %0 to convert %1 to %2", |
| [g]="subscript requires size of interface A, which is not constant for this architecture and platform", | | [g]="could not find Objective-C class A to convert B to C", |
| [b]=k, | | [b]=k, |
| [e]="subscript requires size of interface (.*?), which is not constant for this architecture and platform", | | [e]="could not find Objective\\-C class (.*?) to convert (.*?) to (.*?)", |
| [f]=a,
| | [d]=a, |
| [d]=m,
| | [f]=m, |
| [c]={"62975a788e75",1240533045,"Fix rdar://6821047 - clang crashes on subscript of interface in 64-bit mode","Fix rdar://6821047 - clang crashes on subscript of interface in 64-bit mode\n\nSeveral changes here:\n1. We change Type::isIncompleteType to realize that forward declared \n interfaces are incomplete. This eliminate special case code for this\n from the sizeof path, and starts us rejecting P[4] when P is a pointer\n to an incomplete interface.\n2. Explicitly reject P[4] when P points to an interface in non-fragile ABI\n mode.\n3. Switch the sizeof(interface) diagnostic back to an error instead of a \n warning in non-fragile abi mode.\n\nllvm-svn: 69943"},
| | [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"}, |
| [j]={{n,5895,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // ...\n if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n // ...\n } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n // ...\n } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n // ...\n } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n // ...\n } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n // ...\n if (!LangOpts.isSubscriptPointerArithmetic()) {\n Diag(LLoc, diag::err_subscript_nonfragile_interface) << ResultType << BaseExpr->getSourceRange();"}}
| | [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;"}}, |
| },
| |
| ["err_subscript_svbool_t"]={
| |
| [i]={{nil,y,"err_subscript_svbool_t"}}, | |
| [h]={{nil,y,"subscript of svbool_t is not allowed"}},
| |
| [g]={{nil,y,"subscript of svbool_t is not allowed"}},
| |
| [b]=k,
| |
| [e]="subscript of svbool_t is not allowed",
| |
| [f]=a, | |
| [d]={{nil,y,m}},
| |
| [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"}, | |
| [j]={{n,5924,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // ...\n if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n // ...\n } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n // ...\n } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n // ...\n } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n // ...\n } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n // ...\n } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n // ...\n } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n // ...\n if (BTy->isSVEBool())\n return ExprError(Diag(LLoc, diag::err_subscript_svbool_t) << LHSExp->getSourceRange() << RHSExp->getSourceRange());"}}, | |
| [l]={ | | [l]={ |
| ["clang/test/Sema/aarch64-sve-vector-subscript-ops.c"]={"clang/test/Sema/aarch64-sve-vector-subscript-ops.c:11:10: error: subscript of svbool_t is not allowed","clang/test/Sema/aarch64-sve-vector-subscript-ops.c:12:10: error: subscript of svbool_t is not allowed","clang/test/Sema/aarch64-sve-vector-subscript-ops.c:13:10: error: subscript of svbool_t is not allowed"} | | ["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 *\')"} |
| } | | } |
| }, | | }, |
| ["err_super_in_lambda_unsupported"]={ | | ["err_objc_bridged_related_invalid_class_name"]={ |
| [i]="err_super_in_lambda_unsupported", | | [i]="err_objc_bridged_related_invalid_class_name", |
| [h]="use of \'__super\' inside a lambda is unsupported", | | [h]="%0 must be name of an Objective-C class to be able to convert %1 to %2", |
| [g]="use of \'__super\' inside a lambda is unsupported", | | [g]="A must be name of an Objective-C class to be able to convert B to C", |
| [b]=k, | | [b]=k, |
| [e]="use of \'__super\' inside a lambda is unsupported", | | [e]="(.*?) must be name of an Objective\\-C class to be able to convert (.*?) to (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=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"}, | | [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"}, |
| [j]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",316,"bool Sema::ActOnSuperScopeSpecifier(SourceLocation SuperLoc, SourceLocation ColonColonLoc, CXXScopeSpec &SS) {\n if (getCurLambda()) {\n Diag(SuperLoc, diag::err_super_in_lambda_unsupported);"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/MicrosoftSuper.cpp"]={"clang/test/SemaCXX/MicrosoftSuper.cpp:12:23: error: use of \'__super\' inside a lambda is unsupported"} | | ["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 *\')"} |
| } | | } |
| }, | | }, |
| ["err_super_in_using_declaration"]={ | | ["err_objc_bridged_related_known_method"]={ |
| [i]="err_super_in_using_declaration", | | [i]="err_objc_bridged_related_known_method", |
| [h]="\'__super\' cannot be used with a using declaration", | | [h]="%0 must be explicitly converted to %1; use %select{%objcclass2|%objcinstance2}3 method for this conversion", |
| [g]="\'__super\' cannot be used with a using declaration", | | [g]={{nil,nil,{"A must be explicitly converted to B; use ",{"C","C"}," method for this conversion"}}}, |
| [b]=k, | | [b]=k, |
| [e]="\'__super\' cannot be used with a using declaration", | | [e]="(.*?) must be explicitly converted to (.*?); use (?:(.*?)|(.*?)) method for this conversion", |
| [f]=a, | | [d]=a, |
| [d]=x, | | [f]=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"}, | | [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"}, |
| [j]={{Qb,606,"/// Parse a using-declarator (or the identifier in a C++11 alias-declaration).\n///\n/// using-declarator:\n/// \'typename\'[opt] nested-name-specifier unqualified-id\n///\nbool Parser::ParseUsingDeclarator(DeclaratorContext Context, UsingDeclarator &D) {\n // ...\n if (Tok.is(tok::kw___super)) {\n Diag(Tok.getLocation(), diag::err_super_in_using_declaration);"}}, | | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/MicrosoftSuper.cpp"]={"clang/test/SemaCXX/MicrosoftSuper.cpp:4:9: error: \'__super\' cannot be used with a using declaration"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_sve_vector_in_non_sve_target"]={ | | ["err_objc_cf_bridged_not_interface"]={ |
| [i]={{nil,M,"err_sve_vector_in_non_sve_target"}}, | | [i]="err_objc_cf_bridged_not_interface", |
| [h]={{nil,M,"SVE vector type %0 cannot be used in a target without sve"}}, | | [h]="CF object of type %0 is bridged to %1, which is not an Objective-C class", |
| [g]={{nil,M,"SVE vector type A cannot be used in a target without sve"}}, | | [g]="CF object of type A is bridged to B, which is not an Objective-C class", |
| [b]=k, | | [b]=k, |
| [e]="SVE vector type (.*?) cannot be used in a target without sve", | | [e]="CF object of type (.*?) is bridged to (.*?), which is not an Objective\\-C class", |
| [f]=a, | | [d]=a, |
| [d]={{nil,M,m}}, | | [f]=m, |
| [c]={ab,1625925174,bb,cb}, | | [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"}, |
| [j]={{qc,2063,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n // ...\n // Don\'t allow SVE types in functions without a SVE target.\n if (Ty->isSVESizelessBuiltinType() && FD && FD->hasBody()) {\n // ...\n if (!Builtin::evaluateRequiredTargetFeatures(\"sve\", CallerFeatureMap))\n Diag(D->getLocation(), diag::err_sve_vector_in_non_sve_target) << Ty;"},{w,8782,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n // Check that SVE types are only used in functions with SVE available.\n if (T->isSVESizelessBuiltinType() && isa<FunctionDecl>(CurContext)) {\n // ...\n if (!Builtin::evaluateRequiredTargetFeatures(\"sve\", CallerFeatureMap)) {\n Diag(NewVD->getLocation(), diag::err_sve_vector_in_non_sve_target) << T;"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Sema/arm-sve-target.cpp"]={"clang/test/Sema/arm-sve-target.cpp:6:17: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:25:15: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:34:6: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:42:23: error: SVE vector type \'__clang_svint32x4_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:41:21: error: SVE vector type \'__clang_svint32x4_t\' cannot be used in a target without sve"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_swift_abi_parameter_wrong_type"]={ | | ["err_objc_concat_string"]={ |
| [i]="err_swift_abi_parameter_wrong_type", | | [i]="err_objc_concat_string", |
| [h]="\'%0\' parameter must have pointer%select{| to unqualified pointer}1 type; type here is %2", | | [h]="unexpected token after Objective-C string", |
| [g]={{nil,nil,{"\'A\' parameter must have pointer",{a," to unqualified pointer"}," type; type here is C"}}}, | | [g]="unexpected token after Objective-C string", |
| [b]=k, | | [b]=k, |
| [e]="\'(.*?)\' parameter must have pointer(?:| to unqualified pointer) type; type here is (.*?)", | | [e]="unexpected token after Objective\\-C string", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=y, |
| [c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention.","Semantic analysis for the swiftcall calling convention.\n\nI\'ve tried to keep the infrastructure behind parameter ABI\ntreatments fairly general.\n\nllvm-svn: 262587"}, | | [c]={H,1236199783,I,G}, |
| [j]={{db,5527,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n // ...\n case ParameterABI::SwiftContext:\n if (!isValidSwiftContextType(type)) {\n Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 0 << type;"},{db,5535,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n // ...\n case ParameterABI::SwiftAsyncContext:\n if (!isValidSwiftContextType(type)) {\n Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 0 << type;"},{db,5543,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n // ...\n case ParameterABI::SwiftErrorResult:\n if (!isValidSwiftErrorResultType(type)) {\n Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 1 << type;"},{db,5551,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n // ...\n case ParameterABI::SwiftIndirectResult:\n if (!isValidSwiftIndirectResultType(type)) {\n Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer*/ 0 << type;"}}, | | [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]={ |
| ["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:21:31: error: \'swift_indirect_result\' parameter must have pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:29:51: error: \'swift_error_result\' parameter must have pointer to unqualified pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:30:52: error: \'swift_error_result\' parameter must have pointer to unqualified pointer type; type here is \'int *\'","clang/test/SemaCXX/attr-swiftcall.cpp:35:23: error: \'swift_context\' parameter must have pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:42:29: error: \'swift_async_context\' parameter must have pointer type; type here is \'int\'"} | | ["clang/test/SemaObjC/string.m"]={"clang/test/SemaObjC/string.m:14:17: error: unexpected token after Objective-C string"} |
| } | | } |
| }, | | }, |
| ["err_swift_async_bad_block_type"]={ | | ["err_objc_decls_may_only_appear_in_global_scope"]={ |
| [i]={{nil,v,"err_swift_async_bad_block_type"}}, | | [i]="err_objc_decls_may_only_appear_in_global_scope", |
| [h]={{nil,v,"\'swift_async\' completion handler parameter must have block type returning \'void\', type here is %0"}}, | | [h]="Objective-C declarations may only appear in global scope", |
| [g]={{nil,v,"\'swift_async\' completion handler parameter must have block type returning \'void\', type here is A"}}, | | [g]="Objective-C declarations may only appear in global scope", |
| [b]=k, | | [b]=k, |
| [e]="\'swift_async\' completion handler parameter must have block type returning \'void\', type here is (.*?)", | | [e]="Objective\\-C declarations may only appear in global scope", |
| [f]=a, | | [d]=a, |
| [d]={{nil,v,m}}, | | [f]=m, |
| [c]={Jb,1590001902,Lb,Mb}, | | [c]={H,1236199783,I,G}, |
| [j]={{db,6946,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (Kind == SwiftAsyncAttr::None) {\n // ...\n } else {\n // ...\n if (!CompletionBlockType->isBlockPointerType()) {\n S.Diag(CompletionBlock->getLocation(), diag::err_swift_async_bad_block_type) << CompletionBlock->getType();"},{db,6954,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (Kind == SwiftAsyncAttr::None) {\n // ...\n } else {\n // ...\n if (!BlockTy->castAs<FunctionType>()->getReturnType()->isVoidType()) {\n S.Diag(CompletionBlock->getLocation(), diag::err_swift_async_bad_block_type) << CompletionBlock->getType();"}}, | | [j]={{Q,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/attr-swift-async.m"]={"clang/test/SemaObjC/attr-swift-async.m:12:32: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int\'","clang/test/SemaObjC/attr-swift-async.m:13:39: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'","clang/test/SemaObjC/attr-swift-async.m:23:26: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'","clang/test/SemaObjC/attr-swift-async.m:36:43: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'"} | | ["clang/test/SemaObjC/invalid-code.m"]={"clang/test/SemaObjC/invalid-code.m:53:41: error: Objective-C declarations may only appear in global scope"} |
| } | | } |
| }, | | }, |
| ["err_swift_async_error_no_error_parameter"]={ | | ["err_objc_direct_duplicate_decl"]={ |
| [i]={{nil,F,"err_swift_async_error_no_error_parameter"}}, | | [i]={{nil,n,"err_objc_direct_duplicate_decl"}}, |
| [h]={{nil,F,"%0 attribute with \'nonnull_error\' convention can only be applied to a %select{function|method}1 with a completion handler with an error parameter"}}, | | [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"}}, |
| [g]={{nil,F,{"A attribute with \'nonnull_error\' convention can only be applied to a ",{W,kb}," with a completion handler with an error parameter"}}}, | | [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"}}}, |
| [b]=k, | | [b]=k, |
| [e]="(.*?) attribute with \'nonnull_error\' convention can only be applied to a (?:function|method) with a completion handler with an error parameter", | | [e]="(?:|direct )(?:method|property) declaration conflicts with previous (?:|direct )declaration of (?:method|property) (.*?)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,F,m}}, | | [f]={{nil,n,m}}, |
| [c]={Jb,1590001902,Lb,Mb}, | | [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"}, |
| [j]={{db,6527,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n // ...\n case SwiftAsyncErrorAttr::NonNullError: {\n // ...\n if (!AnyErrorParams) {\n S.Diag(ErrorAttr->getLocation(), diag::err_swift_async_error_no_error_parameter) << ErrorAttr << isa<ObjCMethodDecl>(D);"}}, | | [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 */"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaObjC/attr-swift-async-error.m"]={"clang/test/SemaObjC/attr-swift-async-error.m:37:1: error: \'swift_async_error\' attribute with \'nonnull_error\' convention can only be applied to a function with a completion handler with an error parameter","clang/test/SemaObjC/attr-swift-async-error.m:89:3: error: \'swift_async_error\' attribute with \'nonnull_error\' convention can only be applied to a method with a completion handler with an error parameter"} | | ["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\'"} |
| } | | } |
| }, | | }, |
| ["err_swift_async_error_non_integral"]={ | | ["err_objc_direct_dynamic_property"]={ |
| [i]={{nil,F,"err_swift_async_error_non_integral"}}, | | [i]={{nil,w,"err_objc_direct_dynamic_property"}}, |
| [h]={{nil,F,"%0 attribute with \'%1\' convention must have an integral-typed parameter in completion handler at index %2, type here is %3"}}, | | [h]={{nil,w,"direct property cannot be @dynamic"}}, |
| [g]={{nil,F,"A attribute with \'B\' convention must have an integral-typed parameter in completion handler at index C, type here is D"}}, | | [g]={{nil,w,"direct property cannot be @dynamic"}}, |
| [b]=k, | | [b]=k, |
| [e]="(.*?) attribute with \'(.*?)\' convention must have an integral\\-typed parameter in completion handler at index (.*?), type here is (.*?)", | | [e]="direct property cannot be @dynamic", |
| [f]=a, | | [d]=a, |
| [d]={{nil,F,m}}, | | [f]={{nil,w,m}}, |
| [c]={Jb,1590001902,Lb,Mb}, | | [c]={Hb,1576908663,Eb,Kb}, |
| [j]={{db,6496,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n // ...\n case SwiftAsyncErrorAttr::ZeroArgument:\n case SwiftAsyncErrorAttr::NonZeroArgument: {\n // ...\n if (!ErrorParam->isIntegralType(S.Context)) {\n // ...\n S.Diag(ErrorAttr->getLocation(), diag::err_swift_async_error_non_integral) << ErrorAttr << ConvStr << ParamIdx << ErrorParam;"}}, | | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaObjC/attr-swift-async-error.m"]={"clang/test/SemaObjC/attr-swift-async-error.m:41:1: error: \'swift_async_error\' attribute with \'zero_argument\' convention must have an integral-typed parameter in completion handler at index 1, type here is \'double\'","clang/test/SemaObjC/attr-swift-async-error.m:81:3: error: \'swift_async_error\' attribute with \'nonzero_argument\' convention must have an integral-typed parameter in completion handler at index 1, type here is \'double\'"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_swift_async_error_without_swift_async"]={ | | ["err_objc_direct_impl_decl_mismatch"]={ |
| [i]={{nil,F,"err_swift_async_error_without_swift_async"}}, | | [i]={{nil,n,"err_objc_direct_impl_decl_mismatch"}}, |
| [h]={{nil,F,"%0 attribute must be applied to a %select{function|method}1 annotated with non-\'none\' attribute \'swift_async\'"}}, | | [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"}}, |
| [g]={{nil,F,{"A attribute must be applied to a ",{W,kb}," annotated with non-\'none\' attribute \'swift_async\'"}}}, | | [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"}}}}, |
| [b]=k, | | [b]=k, |
| [e]="(.*?) attribute must be applied to a (?:function|method) annotated with non\\-\'none\' attribute \'swift_async\'", | | [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)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,F,m}}, | | [f]={{nil,n,m}}, |
| [c]={Jb,1590001902,Lb,Mb}, | | [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"}, |
| [j]={{db,6463,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n if (AsyncAttr->getKind() == SwiftAsyncAttr::None) {\n if (ErrorAttr->getConvention() != SwiftAsyncErrorAttr::None) {\n S.Diag(AsyncAttr->getLocation(), diag::err_swift_async_error_without_swift_async) << AsyncAttr << isa<ObjCMethodDecl>(D);"}} | | [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;"}}, |
| },
| |
| ["err_swift_async_no_access"]={
| |
| [i]={{nil,v,"err_swift_async_no_access"}},
| |
| [h]={{nil,v,"first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'"}},
| |
| [g]={{nil,v,"first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'"}},
| |
| [b]=k,
| |
| [e]="first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'",
| |
| [f]=a,
| |
| [d]={{nil,v,m}},
| |
| [c]={Jb,1590001902,Lb,Mb},
| |
| [j]={{db,6923,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (!SwiftAsyncAttr::ConvertStrToKind(II->getName(), Kind)) {\n S.Diag(AL.getLoc(), diag::err_swift_async_no_access) << AL << II;"}},
| |
| [l]={ | | [l]={ |
| ["clang/test/SemaObjC/attr-swift-async.m"]={"clang/test/SemaObjC/attr-swift-async.m:20:1: error: first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_swift_error_result_not_after_swift_context"]={ | | ["err_objc_direct_missing_on_decl"]={ |
| [i]="err_swift_error_result_not_after_swift_context", | | [i]={{nil,n,"err_objc_direct_missing_on_decl"}}, |
| [h]="\'swift_error_result\' parameter must follow \'swift_context\' parameter", | | [h]={{nil,n,"direct method implementation was previously declared not direct"}}, |
| [g]="\'swift_error_result\' parameter must follow \'swift_context\' parameter", | | [g]={{nil,n,"direct method implementation was previously declared not direct"}}, |
| [b]=k, | | [b]=k, |
| [e]="\'swift_error_result\' parameter must follow \'swift_context\' parameter", | | [e]="direct method implementation was previously declared not direct", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,n,m}}, |
| [c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention.","Semantic analysis for the swiftcall calling convention.\n\nI\'ve tried to keep the infrastructure behind parameter ABI\ntreatments fairly general.\n\nllvm-svn: 262587"}, | | [c]={ub,1573050950,sb,qb}, |
| [j]={{R,3005,"/// Check the extended parameter information. Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n // ...\n for (size_t paramIndex = 0, numParams = paramTypes.size(); paramIndex != numParams; ++paramIndex) {\n // ...\n // swift_error parameters must be preceded by a swift_context parameter.\n case ParameterABI::SwiftErrorResult:\n // ...\n if (paramIndex == 0 || EPI.ExtParameterInfos[paramIndex - 1].getABI() != ParameterABI::SwiftContext) {\n S.Diag(getParamLoc(paramIndex), diag::err_swift_error_result_not_after_swift_context);"}}, | | [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);"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:27:48: error: \'swift_error_result\' parameter must follow \'swift_context\' parameter","clang/test/SemaCXX/attr-swiftcall.cpp:28:64: error: \'swift_error_result\' parameter must follow \'swift_context\' parameter"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_swift_indirect_result_not_first"]={ | | ["err_objc_direct_on_override"]={ |
| [i]="err_swift_indirect_result_not_first", | | [i]={{nil,n,"err_objc_direct_on_override"}}, |
| [h]="\'swift_indirect_result\' parameters must be first parameters of function", | | [h]={{nil,n,"methods that %select{override superclass methods|implement protocol requirements}0 cannot be direct"}}, |
| [g]="\'swift_indirect_result\' parameters must be first parameters of function", | | [g]={{nil,n,{"methods that ",{"override superclass methods","implement protocol requirements"}," cannot be direct"}}}, |
| [b]=k, | | [b]=k, |
| [e]="\'swift_indirect_result\' parameters must be first parameters of function", | | [e]="methods that (?:override superclass methods|implement protocol requirements) cannot be direct", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,n,m}}, |
| [c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention.","Semantic analysis for the swiftcall calling convention.\n\nI\'ve tried to keep the infrastructure behind parameter ABI\ntreatments fairly general.\n\nllvm-svn: 262587"}, | | [c]={ub,1573050950,sb,qb}, |
| [j]={{R,2986,"/// Check the extended parameter information. Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n // ...\n for (size_t paramIndex = 0, numParams = paramTypes.size(); paramIndex != numParams; ++paramIndex) {\n // ...\n // swift_indirect_result parameters must be a prefix of the function\n // arguments.\n case ParameterABI::SwiftIndirectResult:\n // ...\n if (paramIndex != 0 && EPI.ExtParameterInfos[paramIndex - 1].getABI() != ParameterABI::SwiftIndirectResult) {\n S.Diag(getParamLoc(paramIndex), diag::err_swift_indirect_result_not_first);"}}, | | [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());"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:20:68: error: \'swift_indirect_result\' parameters must be first parameters of function"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_swift_param_attr_not_swiftcall"]={ | | ["err_objc_direct_on_protocol"]={ |
| [i]="err_swift_param_attr_not_swiftcall", | | [i]={{nil,n,"err_objc_direct_on_protocol"}}, |
| [h]={{nil,F,"\'%0\' parameter can only be used with swiftcall%select{ or swiftasynccall|}1 calling convention%select{|s}1"},{v,nil,"\'%0\' parameter can only be used with swiftcall calling convention"}}, | | [h]={{nil,n,"\'objc_direct\' attribute cannot be applied to %select{methods|properties}0 declared in an Objective-C protocol"}}, |
| [g]={{nil,F,{"\'A\' parameter can only be used with swiftcall",{" or swiftasynccall",a}," calling convention",{a,kc}}},{v,nil,"\'A\' parameter can only be used with swiftcall calling convention"}}, | | [g]={{nil,n,{"\'objc_direct\' attribute cannot be applied to ",{"methods","properties"}," declared in an Objective-C protocol"}}}, |
| [b]=k, | | [b]=k, |
| [e]="\'(.*?)\' parameter can only be used with swiftcall(?: or swiftasynccall|) calling convention(?:|s)", | | [e]="\'objc_direct\' attribute cannot be applied to (?:methods|properties) declared in an Objective\\-C protocol", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,n,m}}, |
| [c]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention.","Semantic analysis for the swiftcall calling convention.\n\nI\'ve tried to keep the infrastructure behind parameter ABI\ntreatments fairly general.\n\nllvm-svn: 262587"}, | | [c]={ub,1573050950,sb,qb}, |
| [j]={{R,2966,"/// Check the extended parameter information. Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n // ...\n auto checkCompatible = [&](unsigned paramIndex, RequiredCC required) {\n // ...\n S.Diag(getParamLoc(paramIndex), diag::err_swift_param_attr_not_swiftcall) << getParameterABISpelling(EPI.ExtParameterInfos[paramIndex].getABI()) << (required == RequiredCC::OnlySwift);"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:19:53: error: \'swift_indirect_result\' parameter can only be used with swiftcall or swiftasynccall calling convention","clang/test/SemaCXX/attr-swiftcall.cpp:27:48: error: \'swift_error_result\' parameter can only be used with swiftcall calling conventions","clang/test/SemaCXX/attr-swiftcall.cpp:34:37: error: \'swift_context\' parameter can only be used with swiftcall or swiftasynccall calling convention"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_switch_explicit_conversion"]={ | | ["err_objc_direct_protocol_conformance"]={ |
| [i]="err_switch_explicit_conversion", | | [i]={{nil,C,"err_objc_direct_protocol_conformance"}}, |
| [h]="switch condition type %0 requires explicit conversion to %1", | | [h]={{nil,C,"%select{category %1|class extension}0 cannot conform to protocol %2 because of direct members declared in interface %3"}}, |
| [g]="switch condition type A requires explicit conversion to B", | | [g]={{nil,C,{{"category B","class extension"}," cannot conform to protocol C because of direct members declared in interface D"}}}, |
| [b]=k, | | [b]=k, |
| [e]="switch condition type (.*?) requires explicit conversion to (.*?)", | | [e]="(?:category (.*?)|class extension) cannot conform to protocol (.*?) because of direct members declared in interface (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,C,m}}, |
| [c]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an","Implement conversion from a switch condition with class type to an\nintegral or enumeration type (vi user-defined conversions). Fixes PR5518.\n\nllvm-svn: 89655"}, | | [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"}, |
| [j]={{Z,1051,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n // ...\n SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, diag::err_switch_explicit_conversion) << T << ConvTy; }"}}, | | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/switch-0x.cpp"]={"clang/test/SemaCXX/switch-0x.cpp:9:3: error: switch condition type \'A\' requires explicit conversion to \'int\'"} | | ["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\'"} |
| } | | } |
| }, | | }, |
| ["err_switch_incomplete_class_type"]={ | | ["err_objc_directive_only_in_protocol"]={ |
| [i]="err_switch_incomplete_class_type", | | [i]="err_objc_directive_only_in_protocol", |
| [h]="switch condition has incomplete class type %0", | | [h]="directive may only be specified in protocols only", |
| [g]="switch condition has incomplete class type A", | | [g]="directive may only be specified in protocols only", |
| [b]=k, | | [b]=k, |
| [e]="switch condition has incomplete class type (.*?)", | | [e]="directive may only be specified in protocols only", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=y, |
| [c]={"378e1923b6a5",1258984401,"Require a class type to be complete before probing its conversion","Require a class type to be complete before probing its conversion\nfunctions for a switch condition\'s conversion to integral or\nenumeration type. \n\nllvm-svn: 89656"}, | | [c]={H,1236199783,I,G}, |
| [j]={{Z,1045,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n // ...\n SemaDiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_switch_incomplete_class_type) << T << Cond->getSourceRange(); }"}}, | | [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]={ |
| ["clang/test/SemaCXX/switch.cpp"]={"clang/test/SemaCXX/switch.cpp:40:3: error: switch condition has incomplete class type \'C\'"} | | ["clang/test/SemaObjC/protocols.m"]={"clang/test/SemaObjC/protocols.m:4:1: error: directive may only be specified in protocols only","clang/test/SemaObjC/protocols.m:8:1: error: directive may only be specified in protocols only"} |
| } | | } |
| }, | | }, |
| ["err_switch_into_protected_scope"]={ | | ["err_objc_exceptions_disabled"]={ |
| [i]="err_switch_into_protected_scope", | | [i]="err_objc_exceptions_disabled", |
| [h]="cannot jump from switch statement to this case label", | | [h]="cannot use \'%0\' with Objective-C exceptions disabled", |
| [g]="cannot jump from switch statement to this case label", | | [g]="cannot use \'A\' with Objective-C exceptions disabled", |
| [b]=k, | | [b]=k, |
| [e]="cannot jump from switch statement to this case label", | | [e]="cannot use \'(.*?)\' with Objective\\-C exceptions disabled", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"7535f41c6673",1240083757,"first step to getting switches giving \"jump into vla scope\" errors.","first step to getting switches giving \"jump into vla scope\" errors.\n\nllvm-svn: 69461"}, | | [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"}, |
| [j]={{"clang/lib/ARCMigrate/TransProtectedScope.cpp",121,"class ProtectedScopeFixer {\n // ...\n ProtectedScopeFixer(BodyContext &BodyCtx) : Pass(BodyCtx.getMigrationContext().Pass), SM(Pass.Ctx.getSourceManager()) {\n // ...\n while (I != E) {\n if (I->getID() == diag::err_switch_into_protected_scope && isInRange(I->getLocation(), BodyRange)) {"},{"clang/lib/ARCMigrate/TransProtectedScope.cpp",134,"class ProtectedScopeFixer {\n // ...\n void handleProtectedScopeError(SmallVectorImpl<StoredDiagnostic>::iterator &DiagI, SmallVectorImpl<StoredDiagnostic>::iterator DiagE) {\n // ...\n assert(DiagI->getID() == diag::err_switch_into_protected_scope);"},{"clang/lib/ARCMigrate/TransProtectedScope.cpp",145,"class ProtectedScopeFixer {\n // ...\n void handleProtectedScopeError(SmallVectorImpl<StoredDiagnostic>::iterator &DiagI, SmallVectorImpl<StoredDiagnostic>::iterator DiagE) {\n // ...\n if (handledAllNotes)\n Pass.TA.clearDiagnostic(diag::err_switch_into_protected_scope, ErrLoc);"},{"clang/lib/Sema/JumpDiagnostics.cpp",712,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n while (!Jumps.empty()) {\n // ...\n for (SwitchCase *SC = SS->getSwitchCaseList(); SC; SC = SC->getNextSwitchCase()) {\n // ...\n CheckJump(SS, SC, Loc, diag::err_switch_into_protected_scope, 0, diag::warn_cxx98_compat_switch_into_protected_scope);"}}, | | [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\";"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaObjC/strong-in-c-struct.m"]={"clang/test/SemaObjC/strong-in-c-struct.m:20:3: error: cannot jump from switch statement to this case label","clang/test/SemaObjC/strong-in-c-struct.m:44:3: error: cannot jump from switch statement to this case label","clang/test/SemaObjC/strong-in-c-struct.m:63:3: error: cannot jump from switch statement to this case label"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_switch_multiple_conversions"]={ | | ["err_objc_expected_equal_for_getter"]={ |
| [i]="err_switch_multiple_conversions", | | [i]="err_objc_expected_equal_for_getter", |
| [h]="multiple conversions from switch condition type %0 to an integral or enumeration type", | | [h]="expected \'=\' for Objective-C getter", |
| [g]="multiple conversions from switch condition type A to an integral or enumeration type", | | [g]="expected \'=\' for Objective-C getter", |
| [b]=k, | | [b]=k, |
| [e]="multiple conversions from switch condition type (.*?) to an integral or enumeration type", | | [e]="expected \'\\=\' for Objective\\-C getter", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=y, |
| [c]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an","Implement conversion from a switch condition with class type to an\nintegral or enumeration type (vi user-defined conversions). Fixes PR5518.\n\nllvm-svn: 89655"}, | | [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"}, |
| [j]={{Z,1062,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n // ...\n SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_switch_multiple_conversions) << T; }"}}, | | [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"]={ |
| | [i]="err_objc_expected_equal_for_setter", |
| | [h]="expected \'=\' for Objective-C setter", |
| | [g]="expected \'=\' for Objective-C setter", |
| | [b]=k, |
| | [e]="expected \'\\=\' for Objective\\-C setter", |
| | [d]=a, |
| | [f]=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"}, |
| | [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"]={ |
| | [i]="err_objc_expected_property_attr", |
| | [h]="unknown property attribute %0", |
| | [g]="unknown property attribute A", |
| | [b]=k, |
| | [e]="unknown property attribute (.*?)", |
| | [d]=a, |
| | [f]=y, |
| | [c]={H,1236199783,I,G}, |
| | [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]={ |
| ["clang/test/SemaCXX/switch.cpp"]={"clang/test/SemaCXX/switch.cpp:33:3: error: multiple conversions from switch condition type \'B\' to an integral or enumeration type"} | | ["clang/test/SemaObjC/property-9.m"]={"clang/test/SemaObjC/property-9.m:56:12: error: unknown property attribute \'readonlyx\'"} |
| } | | } |
| }, | | }, |
| ["err_sycl_special_type_num_init_method"]={ | | ["err_objc_expected_selector_for_getter_setter"]={ |
| [i]={{nil,C,"err_sycl_special_type_num_init_method"}}, | | [i]="err_objc_expected_selector_for_getter_setter", |
| [h]={{nil,C,"types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined"}}, | | [h]="expected selector for Objective-C %select{setter|getter}0", |
| [g]={{nil,C,"types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined"}}, | | [g]={{nil,nil,{"expected selector for Objective-C ",{"setter","getter"}}}}, |
| | [b]=k, |
| | [e]="expected selector for Objective\\-C (?:setter|getter)", |
| | [d]=a, |
| | [f]=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"}, |
| | [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"]={ |
| | [i]="err_objc_expected_type_parameter", |
| | [h]="expected type parameter name", |
| | [g]="expected type parameter name", |
| [b]=k, | | [b]=k, |
| [e]="types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined", | | [e]="expected type parameter name", |
| [f]=a, | | [d]=a, |
| [d]={{nil,C,a}}, | | [f]=mc, |
| [c]={hd,1616787805,gd,fd}, | | [c]={oc,1436241435,lc,tc}, |
| [j]={{w,17816,"void Sema::ActOnTagFinishDefinition(Scope *S, Decl *TagD, SourceRange BraceRange) {\n // ...\n if (auto *RD = dyn_cast<CXXRecordDecl>(Tag)) {\n // ...\n if (RD->hasAttr<SYCLSpecialClassAttr>()) {\n // ...\n if (NumInitMethods > 1 || !Def->hasInitMethod())\n Diag(RD->getLocation(), diag::err_sycl_special_type_num_init_method);"}}, | | [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]={ |
| ["clang/test/SemaSYCL/special-class-attribute.cpp"]={"clang/test/SemaSYCL/special-class-attribute.cpp:42:43: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:45:37: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:49:37: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:56:8: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:59:44: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:78:37: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:83:43: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:88:38: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:93:44: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined"} | | ["clang/test/SemaObjC/kindof.m"]={"clang/test/SemaObjC/kindof.m:465:19: error: expected type parameter name","clang/test/SemaObjC/kindof.m:471:25: error: expected type parameter name"} |
| } | | } |
| }, | | }, |
| ["err_synthesize_category_decl"]={ | | ["err_objc_for_range_init_stmt"]={ |
| [i]="err_synthesize_category_decl", | | [i]={{nil,db,"err_objc_for_range_init_stmt"}}, |
| [h]="@synthesize not allowed in a category\'s implementation", | | [h]={{nil,db,"initialization statement is not supported when iterating over Objective-C collection"}}, |
| [g]="@synthesize not allowed in a category\'s implementation", | | [g]={{nil,db,"initialization statement is not supported when iterating over Objective-C collection"}}, |
| [b]=k, | | [b]=k, |
| [e]="@synthesize not allowed in a category\'s implementation", | | [e]="initialization statement is not supported when iterating over Objective\\-C collection", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,db,m}}, |
| [c]={wb,1480718311,vb,tb}, | | [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"}, |
| [j]={{hb,1176,"/// 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 if (Synthesize) {\n Diag(AtLoc, diag::err_synthesize_category_decl);"}}, | | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:26:1: error: @synthesize not allowed in a category\'s implementation"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_synthesize_on_class_property"]={ | | ["err_objc_illegal_boxed_expression_type"]={ |
| [i]="err_synthesize_on_class_property", | | [i]="err_objc_illegal_boxed_expression_type", |
| [h]="@synthesize not allowed on a class property %0", | | [h]="illegal type %0 used in a boxed expression", |
| [g]="@synthesize not allowed on a class property A", | | [g]="illegal type A used in a boxed expression", |
| [b]=k, | | [b]=k, |
| [e]="@synthesize not allowed on a class property (.*?)", | | [e]="illegal type (.*?) used in a boxed expression", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={wb,1480718311,vb,tb}, | | [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"}, |
| [j]={{hb,1118,"/// 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 if (property->isClassProperty() && Synthesize) {\n Diag(PropertyLoc, diag::err_synthesize_on_class_property) << PropertyId;"}}, | | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaObjC/objc-class-property.m"]={"clang/test/SemaObjC/objc-class-property.m:32:16: error: @synthesize not allowed on a class property \'c2\'"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_synthesize_variable_sized_ivar"]={ | | ["err_objc_illegal_interface_qual"]={ |
| [i]={{nil,A,"err_synthesize_variable_sized_ivar"}}, | | [i]="err_objc_illegal_interface_qual", |
| [h]={{nil,A,"synthesized property with variable size type %0 requires an existing instance variable"}}, | | [h]="illegal interface qualifier", |
| [g]={{nil,A,"synthesized property with variable size type A requires an existing instance variable"}}, | | [g]="illegal interface qualifier", |
| [b]=k, | | [b]=k, |
| [e]="synthesized property with variable size type (.*?) requires an existing instance variable", | | [e]="illegal interface qualifier", |
| [f]=a, | | [d]=a, |
| [d]={{nil,A,m}}, | | [f]=y, |
| [c]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C.","[Sema] Add support for flexible array members in Obj-C.\n\nAllow Obj-C ivars with incomplete array type but only as the last ivar.\nAlso add a requirement for ivars that contain a flexible array member to\nbe at the end of class too. It is possible to add in a subclass another\nivar at the end but we\'ll emit a warning in this case. Also we\'ll emit a\nwarning if a variable sized ivar is declared in class extension or in\nimplementation because subclasses won\'t know they should avoid adding\nnew ivars.\n\nIn ARC incomplete array objects are treated as __unsafe_unretained so\nrequire them to be marked as such.\n\nProhibit synthesizing ivars with flexible array members because order of\nsynthesized ivars is not obvious and tricky to control. Spelling out\nivar explicitly gives control to developers and helps to avoid surprises\nwith unexpected ivar ordering.\n\nFor C and C++ changed diagnostic to tell explicitly a field is not the\nlast one and point to the next field. It is not as useful as in Obj-C\nbut it is an improvement and it is consistent with Obj-C. For C for\nunions emit more specific err_flexible_array_union instead of generic\nerr_field_incomplete.\n\nrdar://problem/21054495\n\nReviewers: rjmccall, theraven\n\nReviewed By: rjmccall\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D38773\n\nllvm-svn: 316381"}, | | [c]={H,1236199783,I,G}, |
| [j]={{hb,1335,"/// 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 (!CompleteTypeErr) {\n // ...\n if (RecordTy && RecordTy->getDecl()->hasFlexibleArrayMember()) {\n Diag(PropertyIvarLoc, diag::err_synthesize_variable_sized_ivar) << PropertyIvarType;"}},
| | [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]={ |
| ["clang/test/SemaObjC/flexible-array.m"]={"clang/test/SemaObjC/flexible-array.m:214:25: error: synthesized property with variable size type \'struct Packet\' requires an existing instance variable","clang/test/SemaObjC/flexible-array.m:220:25: error: synthesized property with variable size type \'struct Packet\' requires an existing instance variable"} | | ["clang/test/Parser/missing-end-4.m"]={"clang/test/Parser/missing-end-4.m:41:1: error: illegal interface qualifier","clang/test/Parser/missing-end-4.m:42:1: error: illegal interface qualifier"} |
| } | | } |
| }, | | }, |
| ["err_synthesized_property_name"]={ | | ["err_objc_illegal_visibility_spec"]={ |
| [i]="err_synthesized_property_name", | | [i]="err_objc_illegal_visibility_spec", |
| [h]="expected a property name in @synthesize", | | [h]="illegal visibility specification", |
| [g]="expected a property name in @synthesize", | | [g]="illegal visibility specification", |
| [b]=k, | | [b]=k, |
| [e]="expected a property name in @synthesize", | | [e]="illegal visibility specification", |
| [f]=a, | | [d]=a, |
| [d]=x, | | [f]=y, |
| [c]={"88e72a0bf662",1258573545,"Improve diagnostics and recovery when parsing @synthesized definitions","Improve diagnostics and recovery when parsing @synthesized definitions\n\nllvm-svn: 89227"}, | | [c]={H,1236199783,I,G}, |
| [j]={{"clang/lib/Parse/ParseObjc.cpp",2385,"/// property-synthesis:\n/// @synthesize property-ivar-list \';\'\n///\n/// property-ivar-list:\n/// property-ivar\n/// property-ivar-list \',\' property-ivar\n///\n/// property-ivar:\n/// identifier\n/// identifier \'=\' identifier\n///\nDecl *Parser::ParseObjCPropertySynthesize(SourceLocation atLoc) {\n // ...\n while (true) {\n // ...\n if (Tok.isNot(tok::identifier)) {\n Diag(Tok, diag::err_synthesized_property_name);"}}, | | [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);"}} |
| [l]={
| |
| ["clang/test/Parser/objc-synthesized-recover.m"]={"clang/test/Parser/objc-synthesized-recover.m:13:20: error: expected a property name in @synthesize"}
| |
| }
| |
| }, | | }, |
| ["err_synthesizing_arc_weak_property_disabled"]={ | | ["err_objc_incomplete_boxed_expression_type"]={ |
| [i]="err_synthesizing_arc_weak_property_disabled", | | [i]="err_objc_incomplete_boxed_expression_type", |
| [h]="cannot synthesize weak property in file using manual reference counting", | | [h]="incomplete type %0 used in a boxed expression", |
| [g]="cannot synthesize weak property in file using manual reference counting", | | [g]="incomplete type A used in a boxed expression", |
| [b]=k, | | [b]=k, |
| [e]="cannot synthesize weak property in file using manual reference counting", | | [e]="incomplete type (.*?) used in a boxed expression", |
| [f]=a, | | [d]=a, |
| [d]="ARC Weak References", | | [f]=m, |
| [c]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:","Be more conservative about diagnosing \"incorrect\" uses of __weak:\nallow them to be written in certain kinds of user declaration and\ndiagnose on the use-site instead.\n\nAlso, improve and fix some diagnostics relating to __weak and\nproperties.\n\nrdar://23228631\n\nllvm-svn: 251384"}, | | [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"}, |
| [j]={{hb,1253,"/// 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 (kind & ObjCPropertyAttribute::kind_weak) {\n // Add GC __weak to the ivar type if the property is weak.\n if (getLangOpts().getGC() != LangOptions::NonGC) {\n // ...\n } else {\n if (!getLangOpts().ObjCWeak) {\n // Only complain here when synthesizing an ivar.\n if (!Ivar) {\n Diag(PropertyDiagLoc, getLangOpts().ObjCWeakRuntime ? diag::err_synthesizing_arc_weak_property_disabled : diag::err_synthesizing_arc_weak_property_no_runtime);"}}, | | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaObjC/mrc-no-weak.m"]={"clang/test/SemaObjC/mrc-no-weak.m:28:13: error: cannot synthesize weak property in file using manual reference counting","clang/test/SemaObjC/mrc-no-weak.m:34:1: error: cannot synthesize weak property in file using manual reference counting"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_synthesizing_arc_weak_property_no_runtime"]={ | | ["err_objc_index_incomplete_class_type"]={ |
| [i]="err_synthesizing_arc_weak_property_no_runtime", | | [i]="err_objc_index_incomplete_class_type", |
| [h]="cannot synthesize weak property because the current deployment target does not support weak references", | | [h]="Objective-C index expression has incomplete class type %0", |
| [g]="cannot synthesize weak property because the current deployment target does not support weak references", | | [g]="Objective-C index expression has incomplete class type A", |
| [b]=k, | | [b]=k, |
| [e]="cannot synthesize weak property because the current deployment target does not support weak references", | | [e]="Objective\\-C index expression has incomplete class type (.*?)", |
| [f]=a, | | [d]=a, |
| [d]="ARC Weak References", | | [f]=m, |
| [c]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:","Be more conservative about diagnosing \"incorrect\" uses of __weak:\nallow them to be written in certain kinds of user declaration and\ndiagnose on the use-site instead.\n\nAlso, improve and fix some diagnostics relating to __weak and\nproperties.\n\nrdar://23228631\n\nllvm-svn: 251384"}, | | [c]={jb,1331064356,lb,kb}, |
| [j]={{hb,1254,"/// 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 (kind & ObjCPropertyAttribute::kind_weak) {\n // Add GC __weak to the ivar type if the property is weak.\n if (getLangOpts().getGC() != LangOptions::NonGC) {\n // ...\n } else {\n if (!getLangOpts().ObjCWeak) {\n // Only complain here when synthesizing an ivar.\n if (!Ivar) {\n Diag(PropertyDiagLoc, getLangOpts().ObjCWeakRuntime ? diag::err_synthesizing_arc_weak_property_disabled : diag::err_synthesizing_arc_weak_property_no_runtime);"}}, | | [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))"}} |
| [l]={
| |
| ["clang/test/SemaObjC/synthesized-ivar.m"]={"clang/test/SemaObjC/synthesized-ivar.m:60:13: error: cannot synthesize weak property because the current deployment target does not support weak references"}
| |
| }
| |
| }, | | }, |
| ["err_systemz_invalid_tabort_code"]={ | | ["err_objc_indexing_method_result_type"]={ |
| [i]="err_systemz_invalid_tabort_code", | | [i]="err_objc_indexing_method_result_type", |
| [h]="invalid transaction abort code", | | [h]="method for accessing %select{dictionary|array}1 element must have Objective-C object return type instead of %0", |
| [g]="invalid transaction abort code", | | [g]={{nil,nil,{"method for accessing ",{"dictionary","array"}," element must have Objective-C object return type instead of A"}}}, |
| [b]=k, | | [b]=k, |
| [e]="invalid transaction abort code", | | [e]="method for accessing (?:dictionary|array) element must have Objective\\-C object return type instead of (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"3a610ebf1e7c",1427892865,"[SystemZ] Support transactional execution on zEC12","[SystemZ] Support transactional execution on zEC12\n\nThe zEC12 provides the transactional-execution facility. This is exposed\nto users via a set of builtin routines on other compilers. This patch\nadds clang support to enable those builtins. In partciular, the patch:\n\n- enables the transactional-execution feature by default on zEC12\n- allows to override presence of that feature via the -mhtm/-mno-htm options\n- adds a predefined macro __HTM__ if the feature is enabled\n- adds support for the transactional-execution GCC builtins\n- adds Sema checking to verify the __builtin_tabort abort code\n- adds the s390intrin.h header file (for GCC compatibility)\n- adds s390 sections to the htmintrin.h and htmxlintrin.h header files\n\nSince this is first use of target-specific intrinsics on the platform,\nthe patch creates the include/clang/Basic/BuiltinsSystemZ.def file and\nhooks it up in TargetBuiltins.h and lib/Basic/Targets.cpp.\n\nAn associated LLVM patch adds the required LLVM IR intrinsics.\n\nFor reference, the transactional-execution instructions are documented\nin the z/Architecture Principles of Operation for the zEC12:\nhttp://publibfp.boulder.ibm.com/cgi-bin/bookmgr/download/DZ9ZR009.pdf\nThe associated builtins are documented in the GCC manual:\nhttp://gcc.gnu.org/onlinedocs/gcc/S_002f390-System-z-Built-in-Functions.html\nThe htmxlintrin.h intrinsics provided for compatibility with the IBM XL\ncompiler are documented in the \"z/OS XL C/C++ Programming Guide\".\n\nllvm-svn: 233804"}, | | [c]={jb,1331064356,lb,kb}, |
| [j]={{z,5332,"bool Sema::CheckSystemZBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n if (BuiltinID == SystemZ::BI__builtin_tabort) {\n // ...\n if (std::optional<llvm::APSInt> AbortCode = Arg->getIntegerConstantExpr(Context))\n if (AbortCode->getSExtValue() >= 0 && AbortCode->getSExtValue() < 256)\n return Diag(Arg->getBeginLoc(), diag::err_systemz_invalid_tabort_code) << Arg->getSourceRange();"}}, | | [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]={ |
| ["clang/test/CodeGen/SystemZ/builtins-systemz-error.c"]={"clang/test/CodeGen/SystemZ/builtins-systemz-error.c:6:21: error: invalid transaction abort code","clang/test/CodeGen/SystemZ/builtins-systemz-error.c:7:21: error: invalid transaction abort code"} | | ["clang/test/SemaObjC/objc-container-subscripting-3.m"]={"clang/test/SemaObjC/objc-container-subscripting-3.m:16:18: error: method for accessing array element must have Objective-C object return type instead of \'int\'","clang/test/SemaObjC/objc-container-subscripting-3.m:21:15: error: method for accessing dictionary element must have Objective-C object return type instead of \'int\'"} |
| } | | } |
| }, | | }, |
| ["err_tag_definition_of_typedef"]={ | | ["err_objc_kindof_nonobject"]={ |
| [i]="err_tag_definition_of_typedef", | | [i]="err_objc_kindof_nonobject", |
| [h]="definition of type %0 conflicts with %select{typedef|type alias}1 of the same name", | | [h]="\'__kindof\' specifier cannot be applied to non-object type %0", |
| [g]={{nil,nil,{"definition of type A conflicts with ",{Rc,Ic}," of the same name"}}}, | | [g]="\'__kindof\' specifier cannot be applied to non-object type A", |
| [b]=k, | | [b]=k, |
| [e]="definition of type (.*?) conflicts with (?:typedef|type alias) of the same name", | | [e]="\'__kindof\' specifier cannot be applied to non\\-object type (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={u,1237025389,s,t}, | | [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]={{w,17451,"/// 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 // ...\n } else {\n // Use a better diagnostic if an elaborated-type-specifier\n // found the wrong kind of type on the first\n // (non-redeclaration) lookup.\n if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n // ...\n } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n // ...\n } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n // ...\n } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n // ...\n Diag(NameLoc, diag::err_tag_definition_of_typedef) << Name << Kind << TND->getUnderlyingType();"}},
| | [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]={ |
| ["clang/test/SemaCXX/typedef-redecl.cpp"]={"clang/test/SemaCXX/typedef-redecl.cpp:17:8: error: definition of type \'Y2\' conflicts with typedef of the same name"} | | ["clang/test/SemaObjC/kindof.m"]={"clang/test/SemaObjC/kindof.m:64:9: error: \'__kindof\' specifier cannot be applied to non-object type \'int\'","clang/test/SemaObjC/kindof.m:66:9: error: \'__kindof\' specifier cannot be applied to non-object type \'NSObject_ptr_ptr\' (aka \'NSObject **\')"} |
| } | | } |
| }, | | }, |
| ["err_tag_index_out_of_range"]={ | | ["err_objc_kindof_wrong_position"]={ |
| [i]={{nil,A,"err_tag_index_out_of_range"}}, | | [i]="err_objc_kindof_wrong_position", |
| [h]={{nil,A,"%select{type tag|argument}0 index %1 is greater than the number of arguments specified"}}, | | [h]="\'__kindof\' type specifier must precede the declarator", |
| [g]={{nil,A,{{"type tag","argument"}," index B is greater than the number of arguments specified"}}}, | | [g]="\'__kindof\' type specifier must precede the declarator", |
| [b]=k, | | [b]=k, |
| [e]="(?:type tag|argument) index (.*?) is greater than the number of arguments specified", | | [e]="\'__kindof\' type specifier must precede the declarator", |
| [f]=a, | | [d]=a, |
| [d]={{nil,A,m}}, | | [f]=m, |
| [c]={"d1f6dcd1f548",1511997014,"Perform a bounds check on a function\'s argument list before accessing any index value specified by a...","Perform a bounds check on a function\'s argument list before accessing any index value specified by an \'argument_with_type_tag\' attribute. Fixes PR28520.\n\nPatch by Matt Davis.\n\nllvm-svn: 319383"}, | | [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]={{z,18384,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n // ...\n if (TypeTagIdxAST >= ExprArgs.size()) {\n Diag(CallSiteLoc, diag::err_tag_index_out_of_range) << 0 << Attr->getTypeTagIdx().getSourceIndex();"},{z,18404,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n // ...\n if (ArgumentIdxAST >= ExprArgs.size()) {\n Diag(CallSiteLoc, diag::err_tag_index_out_of_range) << 1 << Attr->getArgumentIdx().getSourceIndex();"}}, | | [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]={ |
| ["clang/test/Sema/error-type-safety.cpp"]={"clang/test/Sema/error-type-safety.cpp:45:22: error: type tag index 2 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:46:24: error: type tag index 3 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:47:26: error: type tag index 2 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:48:28: error: type tag index 3 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:50:35: error: argument index 3 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:51:37: error: argument index 4 is greater than the number of arguments specified"} | | ["clang/test/SemaObjC/kindof.m"]={"clang/test/SemaObjC/kindof.m:69:20: error: \'__kindof\' type specifier must precede the declarator"} |
| } | | } |
| }, | | }, |
| ["err_tag_reference_conflict"]={ | | ["err_objc_literal_method_sig"]={ |
| [i]="err_tag_reference_conflict", | | [i]="err_objc_literal_method_sig", |
| [h]="implicit declaration introduced by elaborated type conflicts with a %select{non-struct type|non-class type|non-union type|non-enum type|typedef|type alias|template|type alias template|template template argument}0 of the same name", | | [h]="literal construction method %0 has incompatible signature", |
| [g]={{nil,nil,{"implicit declaration introduced by elaborated type conflicts with a ",{"non-struct type","non-class type","non-union type","non-enum type",Rc,Ic,Lc,"type alias template","template template argument"}," of the same name"}}}, | | [g]="literal construction method A has incompatible signature", |
| [b]=k, | | [b]=k, |
| [e]="implicit declaration introduced by elaborated type conflicts with a (?:non\\-struct type|non\\-class type|non\\-union type|non\\-enum type|typedef|type alias|template|type alias template|template template argument) of the same name", | | [e]="literal construction method (.*?) has incompatible signature", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same","C++ doesn\'t really use \"namespaces\" for different kinds of names the same\nway that C does. Among other differences, elaborated type specifiers\nare defined to skip \"non-types\", which, as you might imagine, does not\ninclude typedefs. Rework our use of IDNS masks to capture the semantics\nof different kinds of declarations better, and remove most current lookup\nfilters. Removing the last remaining filter is more complicated and will\nhappen in a separate patch.\n\nFixes PR 6885 as well some spectrum of unfiled bugs.\n\nllvm-svn: 102164"}, | | [c]={jb,1331064356,lb,kb}, |
| [j]={{w,17442,"/// 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 // ...\n } else {\n // Use a better diagnostic if an elaborated-type-specifier\n // found the wrong kind of type on the first\n // (non-redeclaration) lookup.\n if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n // ...\n } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n // ...\n } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n // ...\n Diag(NameLoc, diag::err_tag_reference_conflict) << NTK;"}},
| | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/elaborated-type-specifier.cpp"]={"clang/test/SemaCXX/elaborated-type-specifier.cpp:61:10: error: implicit declaration introduced by elaborated type conflicts with a template of the same name"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_tag_reference_non_tag"]={ | | ["err_objc_method_unsupported_param_ret_type"]={ |
| [i]="err_tag_reference_non_tag", | | [i]={{nil,r,"err_objc_method_unsupported_param_ret_type"}}, |
| [h]="%select{non-struct type|non-class type|non-union type|non-enum type|typedef|type alias|template|type alias template|template template argument}1 %0 cannot be referenced with a %select{struct|interface|union|class|enum}2 specifier", | | [h]={{nil,r,"%0 %select{parameter|return}1 type is unsupported; support for vector types for this target is introduced in %2"}}, |
| [g]={{nil,nil,{{"non-struct type","non-class type","non-union type","non-enum type",Rc,Ic,Lc,"type alias template","template template argument"}," A cannot be referenced with a ",{Gc,td,Nc,mc,ud}," specifier"}}}, | | [g]={{nil,r,{"A ",{"parameter","return"}," type is unsupported; support for vector types for this target is introduced in C"}}}, |
| [b]=k, | | [b]=k, |
| [e]="(?:non\\-struct type|non\\-class type|non\\-union type|non\\-enum type|typedef|type alias|template|type alias template|template template argument) (.*?) cannot be referenced with a (?:struct|interface|union|class|enum) specifier", | | [e]="(.*?) (?:parameter|return) type is unsupported; support for vector types for this target is introduced in (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]={{nil,r,m}}, |
| [c]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same","C++ doesn\'t really use \"namespaces\" for different kinds of names the same\nway that C does. Among other differences, elaborated type specifiers\nare defined to skip \"non-types\", which, as you might imagine, does not\ninclude typedefs. Rework our use of IDNS masks to capture the semantics\nof different kinds of declarations better, and remove most current lookup\nfilters. Removing the last remaining filter is more complicated and will\nhappen in a separate patch.\n\nFixes PR 6885 as well some spectrum of unfiled bugs.\n\nllvm-svn: 102164"}, | | [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"}, |
| [j]={{w,17429,"/// 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 // ...\n } else {\n // Use a better diagnostic if an elaborated-type-specifier\n // found the wrong kind of type on the first\n // (non-redeclaration) lookup.\n if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n // ...\n Diag(NameLoc, diag::err_tag_reference_non_tag) << PrevDecl << NTK << Kind;"},{r,4284,"TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n // ...\n if (TypeAliasTemplateDecl *TAT = dyn_cast_or_null<TypeAliasTemplateDecl>(Template.getAsTemplateDecl())) {\n // ...\n Diag(TemplateLoc, diag::err_tag_reference_non_tag) << TAT << NTK_TypeAliasTemplate << TagKind;"},{r,9963,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n // ...\n if (!ClassTemplate) {\n // ...\n Diag(TemplateNameLoc, diag::err_tag_reference_non_tag) << TD << NTK << Kind;"}}, | | [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\");"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/PR8755.cpp"]={"clang/test/SemaCXX/PR8755.cpp:10:17: error: typedef \'iterator\' cannot be referenced with a class specifier"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_tagless_friend_type_template"]={ | | ["err_objc_missing_end"]={ |
| [i]="err_tagless_friend_type_template", | | [i]="err_objc_missing_end", |
| [h]="friend type templates must use an elaborated type", | | [h]="missing \'@end\'", |
| [g]="friend type templates must use an elaborated type", | | [g]="missing \'@end\'", |
| [b]=k, | | [b]=k, |
| [e]="friend type templates must use an elaborated type", | | [e]="missing \'@end\'", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=y, |
| [c]={"11083da4d0aa",1253141228,"Improved representation and support for friend class templates. Angst about same.","Improved representation and support for friend class templates. Angst about same.\n\nllvm-svn: 82088"}, | | [c]={H,1236199783,I,G}, |
| [j]={{H,17444,"/// Handle a friend type declaration. This works in tandem with\n/// ActOnTag.\n///\n/// Notes on friend class templates:\n///\n/// We generally treat friend class declarations as if they were\n/// declaring a class. So, for example, the elaborated type specifier\n/// in a friend declaration is required to obey the restrictions of a\n/// class-head (i.e. no typedefs in the scope chain), template\n/// parameters are required to match up with simple template-ids, &c.\n/// However, unlike when declaring a template specialization, it\'s\n/// okay to refer to a template specialization without an empty\n/// template parameter declaration, e.g.\n/// friend class A<T>::B<unsigned>;\n/// We permit this as a special case; if there are any template\n/// parameters present at all, require proper matching, i.e.\n/// template <> template \\<class T> friend class A<int>::B;\nDecl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS, MultiTemplateParamsArg TempParams) {\n // ...\n // This is definitely an error in C++98. It\'s probably meant to\n // be forbidden in C++0x, too, but the specification is just\n // poorly written.\n //\n // The problem is with declarations like the following:\n // template <T> friend A<T>::foo;\n // where deciding whether a class C is a friend or not now hinges\n // on whether there exists an instantiation of A that causes\n // \'foo\' to equal C. There are restrictions on class-heads\n // (which we declare (by fiat) elaborated friend declarations to\n // be) that makes this tractable.\n //\n // FIXME: handle \"template <> friend class A<T>;\", which\n // is possibly well-formed? Who even knows?\n if (TempParams.size() && !T->isElaboratedTypeSpecifier()) {\n Diag(Loc, diag::err_tagless_friend_type_template) << DS.getSourceRange();"}}, | | [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]={ |
| ["clang/test/CXX/temp/temp.decls/temp.friend/p3.cpp"]={"clang/test/CXX/temp/temp.decls/temp.friend/p3.cpp:11:22: error: friend type templates must use an elaborated type"} | | ["clang/test/SemaObjC/missing-atend-metadata.m"]={"clang/test/SemaObjC/missing-atend-metadata.m:9:1: error: missing \'@end\'","clang/test/SemaObjC/missing-atend-metadata.m:15:1: error: missing \'@end\'","clang/test/SemaObjC/missing-atend-metadata.m:22:1: error: missing \'@end\'","clang/test/SemaObjC/missing-atend-metadata.m:22:110: error: missing \'@end\'"} |
| } | | } |
| }, | | }, |
| ["err_target_clone_doesnt_match"]={ | | ["err_objc_multiple_subscript_type_conversion"]={ |
| [i]={{nil,C,"err_target_clone_doesnt_match"}}, | | [i]="err_objc_multiple_subscript_type_conversion", |
| [h]={{nil,C,"\'target_clones\' attribute does not match previous declaration"}}, | | [h]="indexing expression is invalid because subscript type %0 has multiple type conversion functions", |
| [g]={{nil,C,"\'target_clones\' attribute does not match previous declaration"}}, | | [g]="indexing expression is invalid because subscript type A has multiple type conversion functions", |
| [b]=k, | | [b]=k, |
| [e]="\'target_clones\' attribute does not match previous declaration", | | [e]="indexing expression is invalid because subscript type (.*?) has multiple type conversion functions", |
| [f]=a, | | [d]=a, |
| [d]={{nil,C,a}}, | | [f]=m, |
| [c]={hd,1616787805,gd,fd}, | | [c]={jb,1331064356,lb,kb}, |
| [j]={{w,11477,"/// 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::TargetClones: {\n // ...\n if (CurClones && NewClones && (CurClones->featuresStrs_size() != NewClones->featuresStrs_size() || !std::equal(CurClones->featuresStrs_begin(), CurClones->featuresStrs_end(), NewClones->featuresStrs_begin()))) {\n S.Diag(NewFD->getLocation(), diag::err_target_clone_doesnt_match);"}}, | | [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]={ |
| ["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:27:92: error: \'target_clones\' attribute does not match previous declaration","clang/test/Sema/attr-target-clones-aarch64.c:37:65: error: \'target_clones\' attribute does not match previous declaration"} | | ["clang/test/SemaObjCXX/objc-container-subscripting.mm"]={"clang/test/SemaObjCXX/objc-container-subscripting.mm:136:16: error: indexing expression is invalid because subscript type \'WeirdIndex\' has multiple type conversion functions"} |
| } | | } |
| }, | | }, |
| ["err_target_clone_must_have_default"]={ | | ["err_objc_non_runtime_protocol_in_protocol_expr"]={ |
| [i]={{nil,C,"err_target_clone_must_have_default"}}, | | [i]={{nil,C,"err_objc_non_runtime_protocol_in_protocol_expr"}}, |
| [h]={{nil,C,"\'target_clones\' multiversioning requires a default target"}}, | | [h]={{nil,C,"cannot use a protocol declared \'objc_non_runtime_protocol\' in a @protocol expression"}}, |
| [g]={{nil,C,"\'target_clones\' multiversioning requires a default target"}}, | | [g]={{nil,C,"cannot use a protocol declared \'objc_non_runtime_protocol\' in a @protocol expression"}}, |
| | [b]=k, |
| | [e]="cannot use a protocol declared \'objc_non_runtime_protocol\' in a @protocol expression", |
| | [d]=a, |
| | [f]={{nil,C,m}}, |
| | [c]={vc,1582847864,yc,xc}, |
| | [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;"}} |
| | }, |
| | ["err_objc_non_trivially_copyable_boxed_expression_type"]={ |
| | [i]="err_objc_non_trivially_copyable_boxed_expression_type", |
| | [h]="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", |
| [b]=k, | | [b]=k, |
| [e]="\'target_clones\' multiversioning requires a default target", | | [e]="non\\-trivially copyable type (.*?) cannot be used in a boxed expression", |
| [f]=a, | | [d]=a, |
| [d]={{nil,C,a}}, | | [f]=m, |
| [c]={hd,1616787805,gd,fd}, | | [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"}, |
| [j]={{db,3654,"static void handleTargetClonesAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (!HasDefault) {\n S.Diag(AL.getLoc(), diag::err_target_clone_must_have_default);"}}, | | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Sema/attr-target-clones.c"]={"clang/test/Sema/attr-target-clones.c:4:21: error: \'target_clones\' multiversioning requires a default target"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_target_unknown_abi"]={ | | ["err_objc_ns_bridged_invalid_cfobject"]={ |
| [i]="err_target_unknown_abi", | | [i]="err_objc_ns_bridged_invalid_cfobject", |
| [h]="unknown target ABI \'%0\'", | | [h]="ObjectiveC object of type %0 is bridged to %1, which is not valid CF object", |
| [g]="unknown target ABI \'A\'", | | [g]="ObjectiveC object of type A is bridged to B, which is not valid CF object", |
| [b]=k, | | [b]=k, |
| [e]="unknown target ABI \'(.*?)\'", | | [e]="ObjectiveC object of type (.*?) is bridged to (.*?), which is not valid CF object", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets.","Add TargetOptions and use it when constructing targets.\n - This ended up being hard to factor, sorry for the large diff.\n\n - Some post-commit cleanup to come.\n\nllvm-svn: 88833"}, | | [f]=m, |
| [j]={{bd,809,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n // ...\n // Set the target ABI if specified.\n if (!Opts->ABI.empty() && !Target->setABI(Opts->ABI)) {\n Diags.Report(diag::err_target_unknown_abi) << Opts->ABI;"}} | | [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"}, |
| | [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;"}} |
| }, | | }, |
| ["err_target_unknown_cpu"]={ | | ["err_objc_object_assignment"]={ |
| [i]="err_target_unknown_cpu", | | [i]="err_objc_object_assignment", |
| [h]="unknown target CPU \'%0\'", | | [h]="cannot assign to class object (%0 invalid)", |
| [g]="unknown target CPU \'A\'", | | [g]="cannot assign to class object (A invalid)", |
| [b]=k, | | [b]=k, |
| [e]="unknown target CPU \'(.*?)\'", | | [e]="cannot assign to class object \\((.*?) invalid\\)", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={"acde99ea522d",1261161757,"ARM: Fix predefines (__ARM_ARCH_..., __REGISTER_PREFIX).","ARM: Fix predefines (__ARM_ARCH_..., __REGISTER_PREFIX).\n - This should be done leveraging the backend, but I\'m a little refactored\n out. I\'ll fix it one day, I promise.\n\nllvm-svn: 91700"}, | | [f]=m, |
| [j]={{bd,788,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n // ...\n // Set the target CPU if specified.\n if (!Opts->CPU.empty() && !Target->setCPU(Opts->CPU)) {\n Diags.Report(diag::err_target_unknown_cpu) << Opts->CPU;"},{bd,799,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n // ...\n // Check the TuneCPU name if specified.\n if (!Opts->TuneCPU.empty() && !Target->isValidTuneCPUName(Opts->TuneCPU)) {\n Diags.Report(diag::err_target_unknown_cpu) << Opts->TuneCPU;"}}, | | [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"}, |
| | [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;"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Preprocessor/predefined-arch-macros.c"]={"error: unknown target CPU \'amdgcn\'"} | | ["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)"} |
| } | | } |
| }, | | }, |
| ["err_target_unknown_fpmath"]={ | | ["err_objc_object_catch"]={ |
| [i]="err_target_unknown_fpmath", | | [i]="err_objc_object_catch", |
| [h]="unknown FP unit \'%0\'", | | [h]="cannot catch an Objective-C object by value", |
| [g]="unknown FP unit \'A\'", | | [g]="cannot catch an Objective-C object by value", |
| [b]=k, | | [b]=k, |
| [e]="unknown FP unit \'(.*?)\'", | | [e]="cannot catch an Objective\\-C object by value", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86.","Move -mfpmath handling to -cc1 and implement it for x86.\n\nThe original idea was to implement it all on the driver, but to do that the\ndriver needs to know the sse level and to do that it has to know the default\nfeatures of a cpu.\n\nBenjamin Kramer pointed out that if one day we decide to implement support for\n\' __attribute__ ((__target__ (\"arch=core2\")))\', then the frontend needs to\nkeep its knowledge of default features of a cpu.\n\nTo avoid duplicating which part of clang handles default cpu features,\nit is probably better to handle -mfpmath in the frontend.\n\nFor ARM this patch is just a small improvement. Instead of a cpu list, we\ncheck if neon is enabled, which allows us to reject things like\n\n-mcpu=cortex-a9 -mfpu=vfp -mfpmath=neon\n\nFor X86, since LLVM doesn\'t support an independent ssefp feature, we just\nmake sure the selected -mfpmath matches the sse level.\n\nllvm-svn: 188939"}, | | [f]=m, |
| [j]={{bd,815,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n // ...\n // Set the fp math unit.\n if (!Opts->FPMath.empty() && !Target->setFPMath(Opts->FPMath)) {\n Diags.Report(diag::err_target_unknown_fpmath) << Opts->FPMath;"}} | | [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"}, |
| | [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);"}}, |
| | [l]={ |
| | ["clang/test/SemaObjCXX/exceptions.mm"]={"clang/test/SemaObjCXX/exceptions.mm:8:26: error: cannot catch an Objective-C object by value"} |
| | } |
| }, | | }, |
| ["err_target_unknown_triple"]={ | | ["err_objc_override_direct_method"]={ |
| [i]="err_target_unknown_triple", | | [i]={{nil,n,"err_objc_override_direct_method"}}, |
| [h]="unknown target triple \'%0\'", | | [h]={{nil,n,"cannot override a method that is declared direct by a superclass"}}, |
| [g]="unknown target triple \'A\'", | | [g]={{nil,n,"cannot override a method that is declared direct by a superclass"}}, |
| [b]=k, | | [b]=k, |
| [e]="unknown target triple \'(.*?)\'", | | [e]="cannot override a method that is declared direct by a superclass", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets.","Add TargetOptions and use it when constructing targets.\n - This ended up being hard to factor, sorry for the large diff.\n\n - Some post-commit cleanup to come.\n\nllvm-svn: 88833"}, | | [f]={{nil,n,m}}, |
| [j]={{bd,781,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n // ...\n if (!Target) {\n Diags.Report(diag::err_target_unknown_triple) << Triple.str();"},{"clang/lib/Driver/ToolChains/CrossWindows.cpp",98,"void tools::CrossWindows::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n // ...\n default:\n D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str();"},{"clang/lib/Driver/ToolChains/Gnu.cpp",453,"void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n // ...\n if (const char *LDMOption = getLDMOption(ToolChain.getTriple(), Args)) {\n // ...\n } else {\n D.Diag(diag::err_target_unknown_triple) << Triple.str();"},{"clang/lib/Driver/ToolChains/MinGW.cpp",139,"void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n // ...\n default:\n D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str();"},{"clang/tools/driver/cc1as_main.cpp",390,"static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, DiagnosticsEngine &Diags) {\n // ...\n if (!TheTarget)\n return Diags.Report(diag::err_target_unknown_triple) << Opts.Triple;"},{"clang/tools/driver/cc1as_main.cpp",574,"static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, DiagnosticsEngine &Diags) {\n // ...\n if (!TAP)\n Failed = Diags.Report(diag::err_target_unknown_triple) << Opts.Triple;"},{"clang/unittests/Basic/DiagnosticTest.cpp",42,"// Check that DiagnosticErrorTrap works with SuppressAllDiagnostics.\nTEST(DiagnosticTest, suppressAndTrap) {\n // ...\n {\n // ...\n Diags.Report(diag::err_target_unknown_triple) << \"unknown\";"}} | | [c]={ub,1573050950,sb,qb}, |
| | [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);"}}, |
| | [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"} |
| | } |
| }, | | }, |
| ["err_target_unsupported_abi"]={ | | ["err_objc_parameterized_category_nonclass"]={ |
| [i]="err_target_unsupported_abi", | | [i]="err_objc_parameterized_category_nonclass", |
| [h]="ABI \'%0\' is not supported on CPU \'%1\'", | | [h]="%select{extension|category}0 of non-parameterized class %1 cannot have type parameters", |
| [g]="ABI \'A\' is not supported on CPU \'B\'", | | [g]={{nil,nil,{{"extension","category"}," of non-parameterized class B cannot have type parameters"}}}, |
| [b]=k, | | [b]=k, |
| [e]="ABI \'(.*?)\' is not supported on CPU \'(.*?)\'", | | [e]="(?:extension|category) of non\\-parameterized class (.*?) cannot have type parameters", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={"32b2d6b1602b",1465894730,"[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases.","[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases.\n\nSummary:\nThe validity of ABI/CPU pairs is no longer checked on the fly but is\ninstead checked after initialization. As a result, invalid CPU/ABI pairs\ncan be reported as being known but invalid instead of being unknown. For\nexample, we now emit:\n error: ABI \'n32\' is not supported on CPU \'mips32r2\'\ninstead of:\n error: unknown target ABI \'n64\'\n\nReviewers: atanasyan\n\nSubscribers: sdardis, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D21023\n\nllvm-svn: 272645"}, | | [f]=mc, |
| [j]={{"clang/lib/Basic/Targets/Mips.cpp",245,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n // ...\n // 64-bit ABI\'s require 64-bit CPU\'s.\n if (!processorSupportsGPR64() && (ABI == \"n32\" || ABI == \"n64\")) {\n Diags.Report(diag::err_target_unsupported_abi) << ABI << CPU;"}} | | [c]={oc,1436241435,lc,tc}, |
| | [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();"}}, |
| | [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"} |
| | } |
| }, | | }, |
| ["err_target_unsupported_abi_for_triple"]={ | | ["err_objc_parameterized_forward_class"]={ |
| [i]="err_target_unsupported_abi_for_triple", | | [i]="err_objc_parameterized_forward_class", |
| [h]="ABI \'%0\' is not supported for \'%1\'", | | [h]="forward declaration of non-parameterized class %0 cannot have type parameters", |
| [g]="ABI \'A\' is not supported for \'B\'", | | [g]="forward declaration of non-parameterized class A cannot have type parameters", |
| [b]=k, | | [b]=k, |
| [e]="ABI \'(.*?)\' is not supported for \'(.*?)\'", | | [e]="forward declaration of non\\-parameterized class (.*?) cannot have type parameters", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={"32b2d6b1602b",1465894730,"[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases.","[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases.\n\nSummary:\nThe validity of ABI/CPU pairs is no longer checked on the fly but is\ninstead checked after initialization. As a result, invalid CPU/ABI pairs\ncan be reported as being known but invalid instead of being unknown. For\nexample, we now emit:\n error: ABI \'n32\' is not supported on CPU \'mips32r2\'\ninstead of:\n error: unknown target ABI \'n64\'\n\nReviewers: atanasyan\n\nSubscribers: sdardis, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D21023\n\nllvm-svn: 272645"} | | [f]=mc, |
| | [c]={oc,1436241435,lc,tc}, |
| | [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();"}}, |
| | [l]={ |
| | [pc]={"clang/test/SemaObjC/parameterized_classes.m:106:8: error: forward declaration of non-parameterized class \'NSObject\' cannot have type parameters"} |
| | } |
| }, | | }, |
| ["err_target_unsupported_arch"]={ | | ["err_objc_parameterized_forward_class_first"]={ |
| [i]="err_target_unsupported_arch", | | [i]="err_objc_parameterized_forward_class_first", |
| [h]="the target architecture \'%0\' is not supported by the target \'%1\'", | | [h]="class %0 previously declared with type parameters", |
| [g]="the target architecture \'A\' is not supported by the target \'B\'", | | [g]="class A previously declared with type parameters", |
| [b]=k, | | [b]=k, |
| [e]="the target architecture \'(.*?)\' is not supported by the target \'(.*?)\'", | | [e]="class (.*?) previously declared with type parameters", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={"f4c9e49f9449",1396643479,"Driver: add target definition for Windows on ARM","Driver: add target definition for Windows on ARM\n\nThis introduces the definitions needed for the Windows on ARM target. Add\ntarget definitions for both the MSVC environment and the MSVC + Itanium C++ ABI\nenvironment. The Visual Studio definitions correspond to the definitions\nprovided by Visual Studio 2012.\n\nllvm-svn: 205650"}, | | [f]=mc, |
| [j]={{"clang/lib/Driver/ToolChains/Clang.cpp",4778,"void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n // ...\n if (Triple.isOSWindows() && (Triple.getArch() == llvm::Triple::arm || Triple.getArch() == llvm::Triple::thumb)) {\n // ...\n if (Failure || Version < 7)\n D.Diag(diag::err_target_unsupported_arch) << Triple.getArchName() << TripleStr;"},{"clang/lib/Driver/ToolChains/Myriad.cpp",220,"MyriadToolChain::MyriadToolChain(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) : Generic_ELF(D, Triple, Args) {\n // ...\n default:\n D.Diag(clang::diag::err_target_unsupported_arch) << Triple.getArchName() << \"myriad\";"},{"clang/lib/Driver/ToolChains/NaCl.cpp",99,"// This is quite similar to gnutools::Linker::ConstructJob with changes that\n// we use static by default, do not yet support sanitizers or LTO, and a few\n// others. Eventually we can support more of that and hopefully migrate back\n// to gnutools::Linker.\nvoid nacltools::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n // ...\n if (Arch == llvm::Triple::x86)\n // ...\n else if (Arch == llvm::Triple::arm)\n // ...\n else if (Arch == llvm::Triple::x86_64)\n // ...\n else if (Arch == llvm::Triple::mipsel)\n // ...\n else\n D.Diag(diag::err_target_unsupported_arch) << ToolChain.getArchName() << \"Native Client\";"}} | | [c]={oc,1436241435,lc,tc}, |
| | [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;"}}, |
| | [l]={ |
| | [pc]={"clang/test/SemaObjC/parameterized_classes.m:112:12: error: class \'NSNumber\' previously declared with type parameters"} |
| | } |
| }, | | }, |
| ["err_target_unsupported_cpu_for_micromips"]={ | | ["err_objc_parameterized_implementation"]={ |
| [i]={{nil,A,"err_target_unsupported_cpu_for_micromips"}}, | | [i]="err_objc_parameterized_implementation", |
| [h]={{nil,A,"micromips is not supported for target CPU \'%0\'"}}, | | [h]="@implementation cannot have type parameters", |
| [g]={{nil,A,"micromips is not supported for target CPU \'A\'"}}, | | [g]="@implementation cannot have type parameters", |
| [b]=k, | | [b]=k, |
| [e]="micromips is not supported for target CPU \'(.*?)\'", | | [e]="@implementation cannot have type parameters", |
| [f]=a, | | [d]=a, |
| [d]={{nil,A,a}}, | | [f]=mc, |
| [c]={"8ee529615210",1512991757,"[mips] Removal of microMIPS64R6","[mips] Removal of microMIPS64R6\n\nmicroMIPS64R6 is removed from backend, and therefore frontend\nwill show an error when target is microMIPS64R6.\n\nThis is Clang part of patch.\n\nDifferential Revision: https://reviews.llvm.org/D35624\n\nllvm-svn: 320351"}, | | [c]={oc,1436241435,lc,tc}, |
| [j]={{"clang/lib/Basic/Targets/Mips.cpp",239,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n // microMIPS64R6 backend was removed.\n if (getTriple().isMIPS64() && IsMicromips && (ABI == \"n32\" || ABI == \"n64\")) {\n Diags.Report(diag::err_target_unsupported_cpu_for_micromips) << CPU;"}}
| | [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]={ |
| | [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"} |
| | } |
| }, | | }, |
| ["err_target_unsupported_execute_only"]={ | | ["err_objc_postfix_attribute"]={ |
| [i]="err_target_unsupported_execute_only", | | [i]="err_objc_postfix_attribute", |
| [h]="execute only is not supported for the %0 sub-architecture", | | [h]="postfix attributes are not allowed on Objective-C directives", |
| [g]="execute only is not supported for the A sub-architecture", | | [g]="postfix attributes are not allowed on Objective-C directives", |
| [b]=k, | | [b]=k, |
| [e]="execute only is not supported for the (.*?) sub\\-architecture", | | [e]="postfix attributes are not allowed on Objective\\-C directives", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={"61ef150d53e4",1481788764,"[ARM] Implement execute-only support in CodeGen","[ARM] Implement execute-only support in CodeGen\n\nSummary:\nThis implements execute-only support for ARM code generation, which\nprevents the compiler from generating data accesses to code sections.\nThe following changes are involved:\n\n* Add the CodeGen option \"-arm-execute-only\" to the ARM code generator.\n* Add the clang flag \"-mexecute-only\" as well as the GCC-compatible\n alias \"-mpure-code\" to enable this option.\n* When enabled, literal pools are replaced with MOVW/MOVT instructions,\n with VMOV used in addition for floating-point literals. As the MOVT\n instruction is required, execute-only support is only available in\n Thumb mode for targets supporting ARMv8-M baseline or Thumb2.\n* Jump tables are placed in data sections when in execute-only mode.\n* The execute-only text section is assigned section ID 0, and is\n marked as unreadable with the SHF_ARM_PURECODE flag with symbol \'y\'.\n This also overrides selection of ELF sections for globals.\n\nReviewers: t.p.northover, rengolin\n\nSubscribers: llvm-commits, aemerson\n\nDifferential Revision: https://reviews.llvm.org/D27450\n\nllvm-svn: 289786"}, | | [f]=y, |
| [j]={{sd,849,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n // ...\n // Generate execute-only output (no data access to code sections).\n // This only makes sense for the compiler, not for the assembler.\n // It\'s not needed for multilib selection and may hide an unused\n // argument diagnostic if the code is always run.\n if (!ForAS && !ForMultilib) {\n // Supported only on ARMv6T2 and ARMv7 and above.\n // Cannot be combined with -mno-movt.\n if (Arg *A = Args.getLastArg(options::OPT_mexecute_only, options::OPT_mno_execute_only)) {\n if (A->getOption().matches(options::OPT_mexecute_only)) {\n if (getARMSubArchVersionNumber(Triple) < 7 && llvm::ARM::parseArch(Triple.getArchName()) != llvm::ARM::ArchKind::ARMV6T2)\n D.Diag(diag::err_target_unsupported_execute_only) << Triple.getArchName();"}} | | [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"}, |
| | [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]={ |
| | ["clang/test/Parser/attributes.mm"]={"clang/test/Parser/attributes.mm:19:17: error: postfix attributes are not allowed on Objective-C directives","clang/test/Parser/attributes.mm:22:8: error: postfix attributes are not allowed on Objective-C directives"} |
| | } |
| }, | | }, |
| ["err_target_unsupported_fpmath"]={ | | ["err_objc_postfix_attribute_hint"]={ |
| [i]="err_target_unsupported_fpmath", | | [i]="err_objc_postfix_attribute_hint", |
| [h]="the \'%0\' unit is not supported with this instruction set", | | [h]="postfix attributes are not allowed on Objective-C directives, place them in front of \'%select{@interface|@protocol}0\'", |
| [g]="the \'A\' unit is not supported with this instruction set", | | [g]={{nil,nil,{"postfix attributes are not allowed on Objective-C directives, place them in front of \'",{"@interface","@protocol"},"\'"}}}, |
| [b]=k, | | [b]=k, |
| [e]="the \'(.*?)\' unit is not supported with this instruction set", | | [e]="postfix attributes are not allowed on Objective\\-C directives, place them in front of \'(?:@interface|@protocol)\'", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86.","Move -mfpmath handling to -cc1 and implement it for x86.\n\nThe original idea was to implement it all on the driver, but to do that the\ndriver needs to know the sse level and to do that it has to know the default\nfeatures of a cpu.\n\nBenjamin Kramer pointed out that if one day we decide to implement support for\n\' __attribute__ ((__target__ (\"arch=core2\")))\', then the frontend needs to\nkeep its knowledge of default features of a cpu.\n\nTo avoid duplicating which part of clang handles default cpu features,\nit is probably better to handle -mfpmath in the frontend.\n\nFor ARM this patch is just a small improvement. Instead of a cpu list, we\ncheck if neon is enabled, which allows us to reject things like\n\n-mcpu=cortex-a9 -mfpu=vfp -mfpmath=neon\n\nFor X86, since LLVM doesn\'t support an independent ssefp feature, we just\nmake sure the selected -mfpmath matches the sse level.\n\nllvm-svn: 188939"}, | | [f]=y, |
| [j]={{"clang/lib/Basic/Targets/ARM.cpp",629,"bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n // ...\n if (!(FPU & NeonFPU) && FPMath == FP_Neon) {\n Diags.Report(diag::err_target_unsupported_fpmath) << \"neon\";"},{"clang/lib/Basic/Targets/X86.cpp",420,"/// handleTargetFeatures - Perform initialization based on the user\n/// configured set of features.\nbool X86TargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n // ...\n // LLVM doesn\'t have a separate switch for fpmath, so only accept it if it\n // matches the selected sse level.\n if ((FPMath == FP_SSE && SSELevel < SSE1) || (FPMath == FP_387 && SSELevel >= SSE1)) {\n Diags.Report(diag::err_target_unsupported_fpmath) << (FPMath == FP_SSE ? \"sse\" : \"387\");"}} | | [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"}, |
| | [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]={ |
| | ["clang/test/Parser/attributes.mm"]={"clang/test/Parser/attributes.mm:16:12: error: postfix attributes are not allowed on Objective-C directives, place them in front of \'@interface\'","clang/test/Parser/attributes.mm:25:11: error: postfix attributes are not allowed on Objective-C directives, place them in front of \'@protocol\'"} |
| | } |
| }, | | }, |
| ["err_target_unsupported_mcmse"]={ | | ["err_objc_precise_lifetime_bad_type"]={ |
| [i]={{nil,D,"err_target_unsupported_mcmse"}}, | | [i]="err_objc_precise_lifetime_bad_type", |
| [h]={{nil,D,"-mcmse is not supported for %0"}}, | | [h]="objc_precise_lifetime only applies to retainable types; type here is %0", |
| [g]={{nil,D,"-mcmse is not supported for A"}}, | | [g]="objc_precise_lifetime only applies to retainable types; type here is A", |
| [b]=k, | | [b]=k, |
| [e]="\\-mcmse is not supported for (.*?)", | | [e]="objc_precise_lifetime only applies to retainable types; type here is (.*?)", |
| [f]=a, | | [d]=a, |
| [d]={{nil,D,a}}, | | [f]=m, |
| [c]={"603a2bac05a8",1558448486,"[ARM][CMSE] Add commandline option and feature macro","[ARM][CMSE] Add commandline option and feature macro\n\nDefines macro ARM_FEATURE_CMSE to 1 for v8-M targets and introduces\n-mcmse option which for v8-M targets sets ARM_FEATURE_CMSE to 3.\nA diagnostic is produced when the option is given on architectures\nwithout support for Security Extensions.\nReviewed By: dmgreen, snidertm\nDifferential Revision: https://reviews.llvm.org/D59879\n\nllvm-svn: 361261"}, | | [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"}, |
| [j]={{"clang/lib/Basic/Targets/ARM.cpp",570,"bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n // ...\n // This does not diagnose illegal cases like having both\n // \"+vfpv2\" and \"+vfpv3\" or having \"+neon\" and \"-fp64\".\n for (const auto &Feature : Features) {\n if (Feature == \"+soft-float\") {\n // ...\n } else if (Feature == \"+vfp2sp\" || Feature == \"+vfp2\") {\n // ...\n } else if (Feature == \"+vfp3sp\" || Feature == \"+vfp3d16sp\" || Feature == \"+vfp3\" || Feature == \"+vfp3d16\") {\n // ...\n } else if (Feature == \"+vfp4sp\" || Feature == \"+vfp4d16sp\" || Feature == \"+vfp4\" || Feature == \"+vfp4d16\") {\n // ...\n } else if (Feature == \"+fp-armv8sp\" || Feature == \"+fp-armv8d16sp\" || Feature == \"+fp-armv8\" || Feature == \"+fp-armv8d16\") {\n // ...\n } else if (Feature == \"+neon\") {\n // ...\n } else if (Feature == \"+hwdiv\") {\n // ...\n } else if (Feature == \"+hwdiv-arm\") {\n // ...\n } else if (Feature == \"+crc\") {\n // ...\n } else if (Feature == \"+crypto\") {\n // ...\n } else if (Feature == \"+sha2\") {\n // ...\n } else if (Feature == \"+aes\") {\n // ...\n } else if (Feature == \"+dsp\") {\n // ...\n } else if (Feature == \"+fp64\") {\n // ...\n } else if (Feature == \"+8msecext\") {\n if (CPUProfile != \"M\" || ArchVersion != 8) {\n Diags.Report(diag::err_target_unsupported_mcmse) << CPU;"}} | | [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_target_unsupported_tp_hard"]={ | | ["err_objc_property_attr_mutually_exclusive"]={ |
| [i]={{nil,C,"err_target_unsupported_tp_hard"}}, | | [i]="err_objc_property_attr_mutually_exclusive", |
| [h]={{nil,C,"hardware TLS register is not supported for the %0 sub-architecture"}}, | | [h]="property attributes \'%0\' and \'%1\' are mutually exclusive", |
| [g]={{nil,C,"hardware TLS register is not supported for the A sub-architecture"}}, | | [g]="property attributes \'A\' and \'B\' are mutually exclusive", |
| [b]=k, | | [b]=k, |
| [e]="hardware TLS register is not supported for the (.*?) sub\\-architecture", | | [e]="property attributes \'(.*?)\' and \'(.*?)\' are mutually exclusive", |
| [f]=a, | | [d]=a, |
| [d]={{nil,C,a}}, | | [f]=m, |
| [c]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for","Add support for floating-point option `ffp-eval-method` and for\n`pragma clang fp eval_method`."}, | | [c]={H,1236199783,I,G}, |
| [j]={{sd,212,"// Select mode for reading thread pointer (-mtp=soft/cp15).\narm::ReadTPMode arm::getReadTPMode(const Driver &D, const ArgList &Args, const llvm::Triple &Triple, bool ForAS) {\n if (Arg *A = Args.getLastArg(options::OPT_mtp_mode_EQ)) {\n // ...\n if ((ThreadPointer == ReadTPMode::TPIDRURW || ThreadPointer == ReadTPMode::TPIDRURO || ThreadPointer == ReadTPMode::TPIDRPRW) && !isHardTPSupported(Triple) && !ForAS) {\n D.Diag(diag::err_target_unsupported_tp_hard) << Triple.getArchName();"},{"clang/lib/Driver/ToolChains/Clang.cpp",3397,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n // ...\n if (Arg *A = Args.getLastArg(options::OPT_mstack_protector_guard_EQ)) {\n // ...\n if ((EffectiveTriple.isARM() || EffectiveTriple.isThumb()) && Value == \"tls\") {\n // ...\n // Check whether the target subarch supports the hardware TLS register\n if (!arm::isHardTPSupported(EffectiveTriple)) {\n D.Diag(diag::err_target_unsupported_tp_hard) << EffectiveTriple.getArchName();"}}
| | [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\""}}, |
| | [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"} |
| | } |
| }, | | }, |
| ["err_target_unsupported_type"]={ | | ["err_objc_property_bitfield"]={ |
| [i]={{nil,C,"err_target_unsupported_type"}}, | | [i]="err_objc_property_bitfield", |
| [h]={{nil,C,"%0 requires %select{|%2 bit size}1 %3 %select{|return }4type support, but target \'%5\' does not support it"}}, | | [h]="property name cannot be a bit-field", |
| [g]={{nil,C,{"A requires ",{a,"C bit size"}," D ",{a,"return "},"type support, but target \'F\' does not support it"}}}, | | [g]="property name cannot be a bit-field", |
| [b]=k, | | [b]=k, |
| [e]="(.*?) requires (?:|(.*?) bit size) (.*?) (?:|return )type support, but target \'(.*?)\' does not support it", | | [e]="property name cannot be a bit\\-field", |
| [f]=a, | | [d]=a, |
| [d]={{nil,C,"OpenMP Issue"}}, | | [f]=y, |
| [c]={Vc,1615397021,Zc,ad}, | | [c]={H,1236199783,I,G}, |
| [j]={{qc,1960,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n auto CheckDeviceType = [&](QualType Ty) {\n // ...\n if (Ty->isBitIntType()) {\n if (!Context.getTargetInfo().hasBitIntType()) {\n PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{qc,1992,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n auto CheckDeviceType = [&](QualType Ty) {\n // ...\n if ((Ty->isFloat16Type() && !Context.getTargetInfo().hasFloat16Type()) || (Ty->isFloat128Type() && !Context.getTargetInfo().hasFloat128Type()) || (Ty->isIbm128Type() && !Context.getTargetInfo().hasIbm128Type()) || (Ty->isIntegerType() && Context.getTypeSize(Ty) == 128 && !Context.getTargetInfo().hasInt128Type()) || (Ty->isBFloat16Type() && !Context.getTargetInfo().hasBFloat16Type() && !LangOpts.CUDAIsDevice) || LongDoubleMismatched) {\n PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{qc,2019,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n // ...\n if (!TI.hasLongDoubleType() && UnqualTy == Context.LongDoubleTy) {\n PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{qc,2038,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n // ...\n if (IsRetTy && !TI.hasFPReturn() && (IsDouble || IsFloat)) {\n PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{z,4373,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n case PPC::BI__builtin_ppc_maxfe:\n case PPC::BI__builtin_ppc_minfe:\n case PPC::BI__builtin_ppc_maxfl:\n case PPC::BI__builtin_ppc_minfl:\n case PPC::BI__builtin_ppc_maxfs:\n case PPC::BI__builtin_ppc_minfs: {\n if (Context.getTargetInfo().getTriple().isOSAIX() && (BuiltinID == PPC::BI__builtin_ppc_maxfe || BuiltinID == PPC::BI__builtin_ppc_minfe))\n return Diag(TheCall->getBeginLoc(), diag::err_target_unsupported_type) << \"builtin\" << true << 128 << QualType(Context.LongDoubleTy) << false << Context.getTargetInfo().getTriple().str();"}}, | | [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]={ |
| ["clang/test/SemaCUDA/spirv-int128.cu"]={"clang/test/SemaCUDA/spirv-int128.cu:15:10: error: \'d_glb\' requires 128 bit size \'__int128\' type support, but target \'spirv64\' does not support it"} | | ["clang/test/Parser/objc-property-syntax.m"]={"clang/test/Parser/objc-property-syntax.m:7:1: error: property name cannot be a bit-field"} |
| } | | } |
| }, | | }, |
| ["err_target_unsupported_unaligned"]={ | | ["err_objc_property_requires_field_name"]={ |
| [i]="err_target_unsupported_unaligned", | | [i]="err_objc_property_requires_field_name", |
| [h]="the %0 sub-architecture does not support unaligned accesses", | | [h]="property requires fields to be named", |
| [g]="the A sub-architecture does not support unaligned accesses", | | [g]="property requires fields to be named", |
| [b]=k, | | [b]=k, |
| [e]="the (.*?) sub\\-architecture does not support unaligned accesses", | | [e]="property requires fields to be named", |
| [f]=a,
| |
| [d]=a, | | [d]=a, |
| [c]={"76244be6d4f8",1407921492,"Emit diagnostic for -munaligned-access on v6m targets","Emit diagnostic for -munaligned-access on v6m targets\n\nRather than silently disabling unaligned accesses for v6m targets as\nin the previous patch to llvm, instead produce a warning saying that\nthis architecture doesn\'t support unaligned accesses.\n\nPatch by Ben Foster\n\nllvm-svn: 215531"}, | | [f]=y, |
| [j]={{sd,866,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n // ...\n // Kernel code has more strict alignment requirements.\n if (KernelOrKext) {\n // ...\n } else if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access, options::OPT_munaligned_access)) {\n if (A->getOption().matches(options::OPT_munaligned_access)) {\n // No v6M core supports unaligned memory access (v6M ARM ARM A3.2).\n if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m)\n D.Diag(diag::err_target_unsupported_unaligned) << \"v6m\";"},{sd,870,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n // ...\n // Kernel code has more strict alignment requirements.\n if (KernelOrKext) {\n // ...\n } else if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access, options::OPT_munaligned_access)) {\n if (A->getOption().matches(options::OPT_munaligned_access)) {\n // No v6M core supports unaligned memory access (v6M ARM ARM A3.2).\n if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m)\n // ...\n // v8M Baseline follows on from v6M, so doesn\'t support unaligned memory\n // access either.\n else if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v8m_baseline)\n D.Diag(diag::err_target_unsupported_unaligned) << \"v8m.base\";"}} | | [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();"}}, |
| | [l]={ |
| | ["clang/test/SemaObjC/property-9.m"]={"clang/test/SemaObjC/property-9.m:48:1: error: property requires fields to be named"} |
| | } |
| }, | | }, |
| ["err_tcb_conflicting_attributes"]={ | | ["err_objc_property_requires_object"]={ |
| [i]={{nil,v,"err_tcb_conflicting_attributes"}}, | | [i]="err_objc_property_requires_object", |
| [h]={{nil,v,"attributes \'%0(\"%2\")\' and \'%1(\"%2\")\' are mutually exclusive"}}, | | [h]="property with \'%0\' attribute must be of object type", |
| [g]={{nil,v,"attributes \'A(\"C\")\' and \'B(\"C\")\' are mutually exclusive"}}, | | [g]="property with \'A\' attribute must be of object type", |
| [b]=k, | | [b]=k, |
| [e]="attributes \'(.*?)\\(\"(.*?)\"\\)\' and \'(.*?)\\(\"(.*?)\"\\)\' are mutually exclusive", | | [e]="property with \'(.*?)\' attribute must be of object type", |
| [f]=a, | | [d]=a, |
| [d]={{nil,v,a}}, | | [f]=m, |
| [c]={Jb,1590001902,Lb,Mb}, | | [c]={H,1236199783,I,G}, |
| [j]={{db,8629,"template <typename AttrTy, typename ConflictingAttrTy> static void handleEnforceTCBAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n // A function cannot be have both regular and leaf membership in the same TCB.\n if (const ConflictingAttrTy *ConflictingAttr = findEnforceTCBAttrByName<ConflictingAttrTy>(D, Argument)) {\n // ...\n S.Diag(AL.getLoc(), diag::err_tcb_conflicting_attributes) << AL.getAttrName()->getName() << ConflictingAttr->getAttrName()->getName() << Argument;"},{db,8649,"template <typename AttrTy, typename ConflictingAttrTy> static AttrTy *mergeEnforceTCBAttrImpl(Sema &S, Decl *D, const AttrTy &AL) {\n // ...\n if (const ConflictingAttrTy *ConflictingAttr = findEnforceTCBAttrByName<ConflictingAttrTy>(D, TCBName)) {\n S.Diag(ConflictingAttr->getLoc(), diag::err_tcb_conflicting_attributes) << ConflictingAttr->getAttrName()->getName() << AL.getAttrName()->getName() << TCBName;"}}, | | [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)\");"}}, |
| [l]={ | | [l]={ |
| ["clang/test/Sema/attr-enforce-tcb-errors.cpp"]={"clang/test/Sema/attr-enforce-tcb-errors.cpp:21:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:28:16: error: attributes \'enforce_tcb(\"x\")\' and \'enforce_tcb_leaf(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:36:16: error: attributes \'enforce_tcb(\"x\")\' and \'enforce_tcb_leaf(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:43:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:75:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_temp_copy_ambiguous"]={ | | ["err_objc_root_class_subclass"]={ |
| [i]="err_temp_copy_ambiguous", | | [i]="err_objc_root_class_subclass", |
| [h]={{nil,v,"ambiguous constructor call when %select{copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1"},{ib,O,"ambiguous constructor call when %select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1"},{A,nil,"ambiguous constructor call when %select{copying variable|copying parameter|returning object|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1"}}, | | [h]="objc_root_class attribute may only be specified on a root class declaration", |
| [g]={{nil,v,{"ambiguous constructor call when ",{Xb,Yb,"initializing template parameter",Zb,yc,ec,fc,dc,bc,cc,gc,Sb,Rb},Dc}},{ib,O,{"ambiguous constructor call when ",{Xb,Yb,Zb,yc,ec,fc,dc,bc,cc,gc,Sb,Rb},Dc}},{A,nil,{"ambiguous constructor call when ",{Xb,Yb,Zb,ec,fc,dc,bc,cc,gc,Sb,Rb},Dc}}}, | | [g]="objc_root_class attribute may only be specified on a root class declaration", |
| [b]=k, | | [b]=k, |
| [e]="ambiguous constructor call when (?:copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value) of type (.*?)", | | [e]="objc_root_class attribute may only be specified on a root class declaration", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the","Switch the initialization required by return statements over to the\nnew InitializationSequence. This fixes some bugs (e.g., PR5808),\nchanged some diagnostics, and caused more churn than expected. What\'s\nnew:\n\n - InitializationSequence now has a \"C conversion sequence\" category\n and step kind, which falls back to\n - Changed the diagnostics for returns to always have the result type\n of the function first and the type of the expression second.\n CheckSingleAssignmentConstraints to peform checking in C. \n - Improved ASTs for initialization of return values. The ASTs now\n capture all of the temporaries we need to create, but\n intentionally do not bind the tempoary that is actually returned,\n so that it won\'t get destroyed twice.\n - Make sure to perform an (elidable!) copy of the class object that\n is returned from a class.\n - Fix copy elision in CodeGen to properly see through the\n subexpressions that occur with elidable copies.\n - Give \"new\" its own entity kind; as with return values and thrown\n objects, we don\'t bind the expression so we don\'t call a\n destructor for it.\n\nNote that, with this patch, I\'ve broken returning move-only types in\nC++0x. We\'ll fix it later, when we tackle NRVO.\n\nllvm-svn: 91669"}, | | [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,6799,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n // ...\n case OR_Ambiguous:\n CandidateSet.NoteCandidates(PartialDiagnosticAt(Loc, S.PDiag(diag::err_temp_copy_ambiguous) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange()), S, OCD_AmbiguousCandidates, CurInitExpr);"}} | | [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);"}}, |
| },
| |
| ["err_temp_copy_deleted"]={
| |
| [i]="err_temp_copy_deleted",
| |
| [h]={{nil,v,"%select{copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1 invokes deleted constructor"},{ib,O,"%select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1 invokes deleted constructor"},{A,nil,"%select{copying variable|copying parameter|returning object|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1 invokes deleted constructor"}},
| |
| [g]={{nil,v,{{Xb,Yb,"initializing template parameter",Zb,yc,ec,fc,dc,bc,cc,gc,Sb,Rb}," of type B invokes deleted constructor"}},{ib,O,{{Xb,Yb,Zb,yc,ec,fc,dc,bc,cc,gc,Sb,Rb}," of type B invokes deleted constructor"}},{A,nil,{{Xb,Yb,Zb,ec,fc,dc,bc,cc,gc,Sb,Rb}," of type B invokes deleted constructor"}}},
| |
| [b]=k,
| |
| [e]="(?:copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value) of type (.*?) invokes deleted constructor",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the","Switch the initialization required by return statements over to the\nnew InitializationSequence. This fixes some bugs (e.g., PR5808),\nchanged some diagnostics, and caused more churn than expected. What\'s\nnew:\n\n - InitializationSequence now has a \"C conversion sequence\" category\n and step kind, which falls back to\n - Changed the diagnostics for returns to always have the result type\n of the function first and the type of the expression second.\n CheckSingleAssignmentConstraints to peform checking in C. \n - Improved ASTs for initialization of return values. The ASTs now\n capture all of the temporaries we need to create, but\n intentionally do not bind the tempoary that is actually returned,\n so that it won\'t get destroyed twice.\n - Make sure to perform an (elidable!) copy of the class object that\n is returned from a class.\n - Fix copy elision in CodeGen to properly see through the\n subexpressions that occur with elidable copies.\n - Give \"new\" its own entity kind; as with return values and thrown\n objects, we don\'t bind the expression so we don\'t call a\n destructor for it.\n\nNote that, with this patch, I\'ve broken returning move-only types in\nC++0x. We\'ll fix it later, when we tackle NRVO.\n\nllvm-svn: 91669"},
| |
| [j]={{Q,6807,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n // ...\n case OR_Deleted:\n S.Diag(Loc, diag::err_temp_copy_deleted) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange();"}},
| |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/cxx1z-copy-omission.cpp"]={"clang/test/SemaCXX/cxx1z-copy-omission.cpp:55:13: error: copying variable of type \'Noncopyable\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:60:13: error: copying variable of type \'Derived\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:143:13: error: copying variable of type \'Noncopyable\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:146:13: error: copying variable of type \'Derived\' invokes deleted constructor"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_temp_copy_incomplete"]={ | | ["err_objc_runtime_visible_category"]={ |
| [i]="err_temp_copy_incomplete", | | [i]="err_objc_runtime_visible_category", |
| [h]="copying a temporary object of incomplete type %0", | | [h]="cannot implement a category for class %0 that is only visible via the Objective-C runtime", |
| [g]="copying a temporary object of incomplete type A", | | [g]="cannot implement a category for class A that is only visible via the Objective-C runtime", |
| [b]=k, | | [b]=k, |
| [e]="copying a temporary object of incomplete type (.*?)", | | [e]="cannot implement a category for class (.*?) that is only visible via the Objective\\-C runtime", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"d5c231e7450e",1272143365,"When we attempt to create a temporary object of class type, be sure","When we attempt to create a temporary object of class type, be sure\nthat the type we\'re copying is complete. \n\nBoost.Regex now builds, although it\'s failing its regression tests\nwith our favorite \"Sema doesn\'t consider destructor as used.\"\nassertion.\n\nllvm-svn: 102271"}, | | [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"}, |
| [j]={{Q,6766,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n // ...\n if (S.RequireCompleteType(Loc, T, diag::err_temp_copy_incomplete))"}}
| | [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();"}}, |
| },
| |
| ["err_temp_copy_no_viable"]={
| |
| [i]="err_temp_copy_no_viable",
| |
| [h]={{nil,v,"no viable constructor %select{copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1"},{ib,O,"no viable constructor %select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1"},{A,nil,"no viable constructor %select{copying variable|copying parameter|returning object|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1"}},
| |
| [g]={{nil,v,{"no viable constructor ",{Xb,Yb,"initializing template parameter",Zb,yc,ec,fc,dc,bc,cc,gc,Sb,Rb},Dc}},{ib,O,{"no viable constructor ",{Xb,Yb,Zb,yc,ec,fc,dc,bc,cc,gc,Sb,Rb},Dc}},{A,nil,{"no viable constructor ",{Xb,Yb,Zb,ec,fc,dc,bc,cc,gc,Sb,Rb},Dc}}},
| |
| [b]=k,
| |
| [e]="no viable constructor (?:copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value) of type (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the","Switch the initialization required by return statements over to the\nnew InitializationSequence. This fixes some bugs (e.g., PR5808),\nchanged some diagnostics, and caused more churn than expected. What\'s\nnew:\n\n - InitializationSequence now has a \"C conversion sequence\" category\n and step kind, which falls back to\n - Changed the diagnostics for returns to always have the result type\n of the function first and the type of the expression second.\n CheckSingleAssignmentConstraints to peform checking in C. \n - Improved ASTs for initialization of return values. The ASTs now\n capture all of the temporaries we need to create, but\n intentionally do not bind the tempoary that is actually returned,\n so that it won\'t get destroyed twice.\n - Make sure to perform an (elidable!) copy of the class object that\n is returned from a class.\n - Fix copy elision in CodeGen to properly see through the\n subexpressions that occur with elidable copies.\n - Give \"new\" its own entity kind; as with return values and thrown\n objects, we don\'t bind the expression so we don\'t call a\n destructor for it.\n\nNote that, with this patch, I\'ve broken returning move-only types in\nC++0x. We\'ll fix it later, when we tackle NRVO.\n\nllvm-svn: 91669"},
| |
| [j]={{Q,6789,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n // ...\n case OR_No_Viable_Function:\n CandidateSet.NoteCandidates(PartialDiagnosticAt(Loc, S.PDiag(IsExtraneousCopy && !S.isSFINAEContext() ? diag::ext_rvalue_to_reference_temp_copy_no_viable : diag::err_temp_copy_no_viable) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange()), S, OCD_AllCandidates, CurInitExpr);"}}, | |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/copy-initialization.cpp"]={"clang/test/SemaCXX/copy-initialization.cpp:44:7: error: no viable constructor copying parameter of type \'const Foo\'"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_template_arg_address_of_non_pointer"]={ | | ["err_objc_runtime_visible_subclass"]={ |
| [i]="err_template_arg_address_of_non_pointer", | | [i]="err_objc_runtime_visible_subclass", |
| [h]="address taken in non-type template argument for template parameter of reference type %0", | | [h]="cannot implement subclass %0 of a superclass %1 that is only visible via the Objective-C runtime", |
| [g]="address taken in non-type template argument for template parameter of reference type A", | | [g]="cannot implement subclass A of a superclass B that is only visible via the Objective-C runtime", |
| [b]=k, | | [b]=k, |
| [e]="address taken in non\\-type template argument for template parameter of reference type (.*?)", | | [e]="cannot implement subclass (.*?) of a superclass (.*?) that is only visible via the Objective\\-C runtime", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to","Overhaul checking of non-type template arguments that should refer to\nan object or function. Our previous checking was too lax, and ended up\nallowing missing or extraneous address-of operators, among other\nevils. The new checking provides better diagnostics and adheres more\nclosely to the standard.\n\nFixes PR6563 and PR6749.\n\nllvm-svn: 100125"}, | | [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"}, |
| [j]={{r,6909,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (AddressTaken && ParamType->isReferenceType()) {\n // If we originally had an address-of operator, but the\n // parameter has reference type, complain and (if things look\n // like they will work) drop the address-of operator.\n if (!S.Context.hasSameUnqualifiedType(Entity->getType(), ParamType.getNonReferenceType())) {\n S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer) << ParamType;"},{r,6915,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (AddressTaken && ParamType->isReferenceType()) {\n // ...\n S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer) << ParamType << FixItHint::CreateRemoval(AddrOpLoc);"}}, | | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:116:8: error: address taken in non-type template argument for template parameter of reference type \'int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:118:8: error: address taken in non-type template argument for template parameter of reference type \'int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:129:9: error: address taken in non-type template argument for template parameter of reference type \'const int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:136:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:138:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:140:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:146:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'"} | | ["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"} |
| } | | } |
| }, | | }, |
| ["err_template_arg_deduced_incomplete_pack"]={ | | ["err_objc_subscript_base_type"]={ |
| [i]="err_template_arg_deduced_incomplete_pack", | | [i]="err_objc_subscript_base_type", |
| [h]="deduced incomplete pack %0 for template parameter %1", | | [h]="%select{dictionary|array}1 subscript base type %0 is not an Objective-C object", |
| [g]="deduced incomplete pack A for template parameter B", | | [g]={{nil,nil,{{"dictionary","array"}," subscript base type A is not an Objective-C object"}}}, |
| [b]=k, | | [b]=k, |
| [e]="deduced incomplete pack (.*?) for template parameter (.*?)", | | [e]="(?:dictionary|array) subscript base type (.*?) is not an Objective\\-C object", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"539e8e370398",1483494535,"Fix template argument deduction when only some of a parameter pack is a non-deduced context.","Fix template argument deduction when only some of a parameter pack is a non-deduced context.\n\nWhen a parameter pack has multiple corresponding arguments, and some subset of\nthem are overloaded functions, it\'s possible that some subset of the parameters\nare non-deduced contexts. In such a case, keep deducing from the remainder of\nthe arguments, and resolve the incomplete pack against whatever other\ndeductions we\'ve performed for the pack.\n\nGCC, MSVC, and ICC give three different bad behaviors for this case; what we do\nnow (and what we did before) don\'t exactly match any of them, sadly :( I\'m\ngetting a core issue opened to specify more precisely how this should be\nhandled.\n\nllvm-svn: 290923"}, | | [c]={jb,1331064356,lb,kb}, |
| [j]={{"clang/lib/Sema/SemaTemplateDeduction.cpp",2675,"/// Convert the given deduced template argument and add it to the set of\n/// fully-converted template arguments.\nstatic bool ConvertDeducedTemplateArgument(Sema &S, NamedDecl *Param, DeducedTemplateArgument Arg, NamedDecl *Template, TemplateDeductionInfo &Info, bool IsDeduced, SmallVectorImpl<TemplateArgument> &SugaredOutput, SmallVectorImpl<TemplateArgument> &CanonicalOutput) {\n // ...\n if (Arg.getKind() == TemplateArgument::Pack) {\n // ...\n for (const auto &P : Arg.pack_elements()) {\n // ...\n if (P.isNull()) {\n // ...\n S.Diag(Param->getLocation(), diag::err_template_arg_deduced_incomplete_pack) << Arg << Param;"}} | | [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_template_arg_field"]={ | | ["err_objc_subscript_dic_object_type"]={ |
| [i]="err_template_arg_field", | | [i]="err_objc_subscript_dic_object_type", |
| [h]="non-type template argument refers to non-static data member %0", | | [h]="method object parameter type %0 is not object type", |
| [g]="non-type template argument refers to non-static data member A", | | [g]="method object parameter type A is not object type", |
| [b]=k, | | [b]=k, |
| [e]="non\\-type template argument refers to non\\-static data member (.*?)", | | [e]="method object parameter type (.*?) is not object type", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={u,1237025389,s,t}, | | [c]={jb,1331064356,lb,kb}, |
| [j]={{r,6839,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n // Cannot refer to non-static data members\n if (isa<FieldDecl>(Entity) || isa<IndirectFieldDecl>(Entity)) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_field) << Entity << Arg->getSourceRange();"}}, | | [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]={ |
| ["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:169:9: error: non-type template argument refers to non-static data member \'NonStaticMember\'"} | | [kc]={"clang/test/SemaObjC/objc-container-subscripting.m:40:3: error: method object parameter type \'void *\' is not object type"} |
| } | | } |
| }, | | }, |
| ["err_template_arg_invalid"]={ | | ["err_objc_subscript_index_type"]={ |
| [i]={{nil,M,"err_template_arg_invalid"}}, | | [i]="err_objc_subscript_index_type", |
| [h]={{nil,M,"non-type template argument \'%0\' is invalid"}}, | | [h]="method index parameter type %0 is not integral type", |
| [g]={{nil,M,"non-type template argument \'A\' is invalid"}}, | | [g]="method index parameter type A is not integral type", |
| [b]=k, | | [b]=k, |
| [e]="non\\-type template argument \'(.*?)\' is invalid", | | [e]="method index parameter type (.*?) is not integral type", |
| [f]=a, | | [d]=a, |
| [d]={{nil,M,m}}, | | [f]=m, |
| [c]={ab,1625925174,bb,cb}, | | [c]={jb,1331064356,lb,kb}, |
| [j]={{r,6617,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n // ...\n if (EvalResult.Val.isLValue() && !EvalResult.Val.getLValueBase()) {\n // ...\n S.Diag(Arg->getExprLoc(), diag::err_template_arg_invalid) << EvalResult.Val.getAsString(S.Context, ParamType);"}}, | | [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]={ |
| [Ac]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:31:4: error: non-type template argument \'(int *)1\' is invalid"} | | [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"} |
| } | | } |
| }, | | }, |
| ["err_template_arg_list_constraints_not_satisfied"]={ | | ["err_objc_subscript_key_type"]={ |
| [i]={{nil,p,"err_template_arg_list_constraints_not_satisfied"}}, | | [i]="err_objc_subscript_key_type", |
| [h]={{nil,p,"constraints not satisfied for %select{class template|function template|variable template|alias template|template template parameter|template}0 %1%2"}}, | | [h]="method key parameter type %0 is not object type", |
| [g]={{nil,p,{"constraints not satisfied for ",{tc,pc,Fc,"alias template","template template parameter",Lc}," BC"}}}, | | [g]="method key parameter type A is not object type", |
| [b]=k, | | [b]=k, |
| [e]="constraints not satisfied for (?:class template|function template|variable template|alias template|template template parameter|template) (.*?)(.*?)", | | [e]="method key parameter type (.*?) is not object type", |
| [f]=a, | | [d]=a, |
| [d]={{nil,p,m}}, | | [f]=m, |
| [c]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute","[clang] Add no_builtin attribute\n\nSummary:\nThis is a follow up on https://reviews.llvm.org/D61634\nThis patch is simpler and only adds the no_builtin attribute.\n\nReviewers: tejohnson, courbet, theraven, t.p.northover, jdoerfert\n\nSubscribers: mgrang, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D68028"}, | | [c]={jb,1331064356,lb,kb}, |
| [j]={{"clang/lib/Sema/SemaConcept.cpp",862,"bool Sema::EnsureTemplateArgumentListConstraints(TemplateDecl *TD, const MultiLevelTemplateArgumentList &TemplateArgsLists, SourceRange TemplateIDRange) {\n // ...\n if (!Satisfaction.IsSatisfied) {\n // ...\n Diag(TemplateIDRange.getBegin(), diag::err_template_arg_list_constraints_not_satisfied) << (int)getTemplateNameKindForDiagnostics(TemplateName(TD)) << TD << TemplateArgString << TemplateIDRange;"}},
| | [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]={ |
| ["clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:14:17: error: constraints not satisfied for class template \'is_same\' [with T = char, U = char]"} | | [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"} |
| } | | } |
| }, | | }, |
| ["err_template_arg_list_different_arity"]={ | | ["err_objc_subscript_method_not_found"]={ |
| [i]="err_template_arg_list_different_arity", | | [i]="err_objc_subscript_method_not_found", |
| [h]="%select{too few|too many}0 template arguments for %select{class template|function template|template template parameter|template}1 %2", | | [h]="expected method to %select{read|write}1 %select{dictionary|array}2 element not found on object of type %0", |
| [g]={{nil,D,{{"too few","too many"}," template arguments for ",{tc,pc,Fc,"alias template","template template parameter","concept",Lc}," C"}},{E,o,{{"too few","too many"}," template arguments for ",{tc,pc,Fc,"alias template","template template parameter",Lc}," C"}},{nil,nil,{{"too few","too many"}," template arguments for ",{tc,pc,"template template parameter",Lc}," C"}}}, | | [g]={{nil,nil,{"expected method to ",{"read","write"}," ",{"dictionary","array"}," element not found on object of type A"}}}, |
| [b]=k, | | [b]=k, |
| [e]="(?:too few|too many) template arguments for (?:class template|function template|variable template|alias template|template template parameter|concept|template) (.*?)", | | [e]="expected method to (?:read|write) (?:dictionary|array) element not found on object of type (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={u,1237025389,s,t}, | | [c]={jb,1331064356,lb,kb}, |
| [j]={{r,5870,"/// Diagnose a missing template argument.\ntemplate <typename TemplateParmDecl> static bool diagnoseMissingArgument(Sema &S, SourceLocation Loc, TemplateDecl *TD, const TemplateParmDecl *D, TemplateArgumentListInfo &Args) {\n // ...\n S.Diag(Loc, diag::err_template_arg_list_different_arity) << /*not enough args*/ 0 << (int)S.getTemplateNameKindForDiagnostics(TemplateName(TD)) << TD;"},{r,5937,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n // ...\n for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n // If we have an expanded parameter pack, make sure we don\'t have too\n // many arguments.\n if (std::optional<unsigned> Expansions = getExpandedPackSize(*Param)) {\n if (*Expansions == SugaredArgumentPack.size()) {\n // ...\n } else if (ArgIdx == NumArgs && !PartialTemplateArgs) {\n // ...\n Diag(TemplateLoc, diag::err_template_arg_list_different_arity) << /*not enough args*/ 0 << (int)getTemplateNameKindForDiagnostics(TemplateName(Template)) << Template;"},{r,6165,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n // ...\n // If we have any leftover arguments, then there were too many arguments.\n // Complain and fail.\n if (ArgIdx < NumArgs) {\n Diag(TemplateLoc, diag::err_template_arg_list_different_arity) << /*too many args*/ 1 << (int)getTemplateNameKindForDiagnostics(TemplateName(Template)) << Template << SourceRange(NewArgs[ArgIdx].getLocation(), NewArgs.getRAngleLoc());"}}, | | [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]={ |
| ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:22:28: error: too few template arguments for class template \'A\'"} | | [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 *\'"} |
| } | | } |
| }, | | }, |
| ["err_template_arg_member_ptr_base_derived_not_supported"]={ | | ["err_objc_subscript_object_type"]={ |
| [i]="err_template_arg_member_ptr_base_derived_not_supported", | | [i]="err_objc_subscript_object_type", |
| [h]="sorry, non-type template argument of pointer-to-member type %1 that refers to member %q0 of a different class is not supported yet", | | [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", |
| [g]="sorry, non-type template argument of pointer-to-member type B that refers to member A of a different class is not supported yet", | | [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"}}}, |
| [b]=k, | | [b]=k, |
| [e]="sorry, non\\-type template argument of pointer\\-to\\-member type (.*?) that refers to member (.*?) of a different class is not supported yet", | | [e]="cannot assign to this (?:dictionary|array) because assigning method\'s 2nd parameter of type (.*?) is not an Objective\\-C pointer type", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=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"}, | | [c]={jb,1331064356,lb,kb}, |
| [j]={{r,7325,"/// 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::MemberPointer: {\n // ...\n // FIXME: We need TemplateArgument representation and mangling for these.\n if (!Value.getMemberPointerPath().empty()) {\n Diag(Arg->getBeginLoc(), diag::err_template_arg_member_ptr_base_derived_not_supported) << Value.getMemberPointerDecl() << ParamType << Arg->getSourceRange();"}}, | | [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]={ |
| ["clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:100:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:101:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:105:43: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:109:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:110:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:114:43: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:208:34: error: sorry, non-type template argument of pointer-to-member type \'int Auto::Basic::Y::*\' that refers to member \'Auto::Basic::X::n\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:210:34: error: sorry, non-type template argument of pointer-to-member type \'const int Auto::Basic::Y::*\' that refers to member \'Auto::Basic::X::n\' of a different class is not supported yet"} | | [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"} |
| } | | } |
| }, | | }, |
| ["err_template_arg_method"]={ | | ["err_objc_subscript_pointer"]={ |
| [i]="err_template_arg_method", | | [i]="err_objc_subscript_pointer", |
| [h]="non-type template argument refers to non-static member function %0", | | [h]="indexing expression is invalid because subscript type %0 is not an Objective-C pointer", |
| [g]="non-type template argument refers to non-static member function A", | | [g]="indexing expression is invalid because subscript type A is not an Objective-C pointer", |
| [b]=k, | | [b]=k, |
| [e]="non\\-type template argument refers to non\\-static member function (.*?)", | | [e]="indexing expression is invalid because subscript type (.*?) is not an Objective\\-C pointer", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={u,1237025389,s,t}, | | [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"}, |
| [j]={{r,6848,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n // Cannot refer to non-static member functions\n if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Entity)) {\n if (!Method->isStatic()) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_method) << Method << Arg->getSourceRange();"}}
| | [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(), \"@\");"}}, |
| },
| |
| ["err_template_arg_must_be_expr"]={
| |
| [i]="err_template_arg_must_be_expr",
| |
| [h]="template argument for non-type template parameter must be an expression",
| |
| [g]="template argument for non-type template parameter must be an expression",
| |
| [b]=k,
| |
| [e]="template argument for non\\-type template parameter must be an expression",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,5730,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // ...\n // Check non-type template parameters.\n if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n // ...\n case TemplateArgument::Template:\n case TemplateArgument::TemplateExpansion:\n // ...\n Diag(Arg.getLocation(), diag::err_template_arg_must_be_expr) << Arg.getSourceRange();"},{r,5752,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // ...\n // Check non-type template parameters.\n if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n // ...\n case TemplateArgument::Type: {\n // ...\n if (T->isFunctionType())\n // ...\n else\n Diag(SR.getBegin(), diag::err_template_arg_must_be_expr) << SR;"}},
| |
| [l]={ | | [l]={ |
| ["clang/test/SemaTemplate/missing-class-keyword-crash.cpp"]={"clang/test/SemaTemplate/missing-class-keyword-crash.cpp:7:11: error: template argument for non-type template parameter must be an expression"} | | ["clang/test/SemaObjC/objc-dictionary-literal.m"]={"clang/test/SemaObjC/objc-dictionary-literal.m:50:14: error: indexing expression is invalid because subscript type \'char *\' is not an Objective-C pointer"} |
| } | | } |
| }, | | }, |
| ["err_template_arg_must_be_template"]={ | | ["err_objc_subscript_type_conversion"]={ |
| [i]="err_template_arg_must_be_template", | | [i]="err_objc_subscript_type_conversion", |
| [h]="template argument for template template parameter must be a class template%select{| or type alias template}0", | | [h]="indexing expression is invalid because subscript type %0 is not an integral or Objective-C pointer type", |
| [g]={{nil,nil,{"template argument for template template parameter must be a class template",{a," or type alias template"}}}}, | | [g]="indexing expression is invalid because subscript type A is not an integral or Objective-C pointer type", |
| [b]=k, | | [b]=k, |
| [e]="template argument for template template parameter must be a class template(?:| or type alias template)", | | [e]="indexing expression is invalid because subscript type (.*?) is not an integral or Objective\\-C pointer type", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={u,1237025389,s,t}, | | [c]={jb,1331064356,lb,kb}, |
| [j]={{r,5824,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // ...\n case TemplateArgument::Expression:\n case TemplateArgument::Type:\n // ...\n Diag(Arg.getLocation(), diag::err_template_arg_must_be_template) << getLangOpts().CPlusPlus11;"}}, | | [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]={ |
| ["clang/test/SemaCXX/make_integer_seq.cpp"]={"clang/test/SemaCXX/make_integer_seq.cpp:49:20: error: template argument for template template parameter must be a class template or type alias template"} | | ["clang/test/SemaObjC/objc-container-subscripting-2.m"]={"clang/test/SemaObjC/objc-container-subscripting-2.m:19:9: error: indexing expression is invalid because subscript type \'float\' is not an integral or Objective-C pointer type","clang/test/SemaObjC/objc-container-subscripting-2.m:20:16: error: indexing expression is invalid because subscript type \'double\' is not an integral or Objective-C pointer type"} |
| } | | } |
| }, | | }, |
| ["err_template_arg_must_be_type"]={ | | ["err_objc_synchronized_expects_object"]={ |
| [i]="err_template_arg_must_be_type", | | [i]="err_objc_synchronized_expects_object", |
| [h]="template argument for template type parameter must be a type", | | [h]="@synchronized requires an Objective-C object type (%0 invalid)", |
| [g]="template argument for template type parameter must be a type", | | [g]="@synchronized requires an Objective-C object type (A invalid)", |
| [b]=k, | | [b]=k, |
| [e]="template argument for template type parameter must be a type", | | [e]="@synchronized requires an Objective\\-C object type \\((.*?) invalid\\)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={u,1237025389,s,t}, | | [c]={yb,1480718311,zb,Ab}, |
| [j]={{r,5285,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n // ...\n default: {\n // ...\n Diag(SR.getBegin(), diag::err_template_arg_must_be_type) << SR;"}}, | | [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();"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:41:4: error: template argument for template type parameter must be a type"} | | ["clang/test/SemaObjCXX/synchronized.mm"]={"clang/test/SemaObjCXX/synchronized.mm:18:3: error: @synchronized requires an Objective-C object type (\'struct y\' invalid)"} |
| } | | } |
| }, | | }, |
| ["err_template_arg_must_be_type_suggest"]={ | | ["err_objc_throw_expects_object"]={ |
| [i]="err_template_arg_must_be_type_suggest", | | [i]="err_objc_throw_expects_object", |
| [h]="template argument for template type parameter must be a type; did you forget \'typename\'?", | | [h]="@throw requires an Objective-C object type (%0 invalid)", |
| [g]="template argument for template type parameter must be a type; did you forget \'typename\'?", | | [g]="@throw requires an Objective-C object type (A invalid)", |
| [b]=k, | | [b]=k, |
| [e]="template argument for template type parameter must be a type; did you forget \'typename\'\\?", | | [e]="@throw requires an Objective\\-C object type \\((.*?) invalid\\)", |
| [f]=a, | | [d]=a, |
| [d]=m, | | [f]=m, |
| [c]={"864d0b002cdc",1337384569,"Suggest adding \'typename\' when it would make the compiler","Suggest adding \'typename\' when it would make the compiler\naccept the template argument expression as a type.\n\nllvm-svn: 157085"}, | | [c]={yb,1480718311,zb,Ab}, |
| [j]={{r,5255,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n // ...\n case TemplateArgument::Expression: {\n // ...\n if (auto *II = NameInfo.getName().getAsIdentifierInfo()) {\n // ...\n if (Result.getAsSingle<TypeDecl>() || Result.getResultKind() == LookupResult::NotFoundInCurrentInstantiation) {\n // ...\n Diag(Loc, getLangOpts().MSVCCompat ? diag::ext_ms_template_type_arg_missing_typename : diag::err_template_arg_must_be_type_suggest) << FixItHint::CreateInsertion(Loc, \"typename \");"}}, | | [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());"}}, |
| [l]={ | | [l]={ |
| ["clang/test/SemaTemplate/typename-specifier.cpp"]={"clang/test/SemaTemplate/typename-specifier.cpp:174:8: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:192:8: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:165:10: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:185:10: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:210:7: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:217:7: error: template argument for template type parameter must be a type; did you forget \'typename\'?"} | | ["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)"} |
| } | | } |
| }, | | }, |
| ["err_template_arg_no_ref_bind"]={ | | ["err_objc_type_arg_does_not_match_bound"]={ |
| [i]="err_template_arg_no_ref_bind", | | [i]="err_objc_type_arg_does_not_match_bound", |
| [h]="non-type template parameter of reference type %diff{$ cannot bind to template argument of type $|cannot bind to template of incompatible argument type}0,1", | | [h]="type argument %0 does not satisfy the bound (%1) of type parameter %2", |
| [g]={{nil,nil,{"non-type template parameter of reference type ",{"A cannot bind to template argument of type B","cannot bind to template of incompatible argument type"}}}}, | | [g]="type argument A does not satisfy the bound (B) of type parameter C", |
| [b]=k, | | [b]=k, |
| [e]="non\\-type template parameter of reference type (?:(.*?) cannot bind to template argument of type (.*?)|cannot bind to template of incompatible argument type)", | | [e]="type argument (.*?) does not satisfy the bound \\((.*?)\\) of type parameter (.*?)", |
| [f]=a, | | [d]=a, |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,6685,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n // ...\n if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n // ...\n } else {\n // ...\n // At this point, the template argument refers to an object or\n // function with external linkage. We now need to check whether the\n // argument and parameter types are compatible.\n if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n // We can\'t perform this conversion or binding.\n if (ParamType->isReferenceType())\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_no_ref_bind) << ParamType << ArgIn->getType() << Arg->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.decls/temp.variadic/multi-level-substitution.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/multi-level-substitution.cpp:237:43: error: non-type template parameter of reference type \'float &\' cannot bind to template argument of type \'int\'"}
| |
| }
| |
| },
| |
| ["err_template_arg_nontype_ambig"]={
| |
| [i]="err_template_arg_nontype_ambig",
| |
| [h]="template argument for non-type template parameter is treated as function type %0",
| |
| [g]="template argument for non-type template parameter is treated as function type A",
| |
| [b]=k,
| |
| [e]="template argument for non\\-type template parameter is treated as function type (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,5750,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n // ...\n // Check non-type template parameters.\n if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n // ...\n case TemplateArgument::Type: {\n // ...\n if (T->isFunctionType())\n Diag(SR.getBegin(), diag::err_template_arg_nontype_ambig) << SR << T;"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:6:3: error: template argument for non-type template parameter is treated as function type \'int ()\'"}
| |
| }
| |
| },
| |
| ["err_template_arg_not_address_constant"]={
| |
| [i]="err_template_arg_not_address_constant",
| |
| [h]="non-type template argument of type %0 is not a constant expression",
| |
| [g]="non-type template argument of type A is not a constant expression",
| |
| [b]=k,
| |
| [e]="non\\-type template argument of type (.*?) is not a constant expression",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on","Rework implementation of null non-type template arguments based on\nRichard\'s feedback, to properly catch non-constant expressions and\ntype mismatches. Finishes <rdar://problem/11193097>.\n\nllvm-svn: 154407"},
| |
| [j]={{r,6578,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n // ...\n if (!Arg->EvaluateAsRValue(EvalResult, S.Context) || EvalResult.HasSideEffects) {\n // ...\n S.Diag(DiagLoc, diag::err_template_arg_not_address_constant) << Arg->getType() << Arg->getSourceRange();"}},
| |
| [l]={
| |
| [Ac]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:27:4: error: non-type template argument of type \'std::nullptr_t\' is not a constant expression","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:30:4: error: non-type template argument of type \'int *\' is not a constant expression"}
| |
| }
| |
| },
| |
| ["err_template_arg_not_address_of"]={
| |
| [i]="err_template_arg_not_address_of",
| |
| [h]="non-type template argument for template parameter of pointer type %0 must have its address taken",
| |
| [g]="non-type template argument for template parameter of pointer type A must have its address taken",
| |
| [b]=k,
| |
| [e]="non\\-type template argument for template parameter of pointer type (.*?) must have its address taken",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to","Overhaul checking of non-type template arguments that should refer to\nan object or function. Our previous checking was too lax, and ended up\nallowing missing or extraneous address-of operators, among other\nevils. The new checking provides better diagnostics and adheres more\nclosely to the standard.\n\nFixes PR6563 and PR6749.\n\nllvm-svn: 100125"},
| |
| [j]={{r,6938,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n // If the template parameter has pointer type, either we must have taken the\n // address or the argument must decay to a pointer.\n if (!AddressTaken && ParamType->isPointerType()) {\n if (Func) {\n // ...\n } else if (Entity->getType()->isArrayType()) {\n // ...\n } else {\n // ...\n if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType)) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_address_of) << ParamType;"},{r,6944,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n // If the template parameter has pointer type, either we must have taken the\n // address or the argument must decay to a pointer.\n if (!AddressTaken && ParamType->isPointerType()) {\n if (Func) {\n // ...\n } else if (Entity->getType()->isArrayType()) {\n // ...\n } else {\n // ...\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_address_of) << ParamType << FixItHint::CreateInsertion(Arg->getBeginLoc(), \"&\");"}},
| |
| [l]={
| |
| ["clang/test/Parser/MicrosoftExtensions.cpp"]={"clang/test/Parser/MicrosoftExtensions.cpp:148:25: error: non-type template argument for template parameter of pointer type \'const GUID *\' (aka \'const _GUID *\') must have its address taken"}
| |
| }
| |
| },
| |
| ["err_template_arg_not_convertible"]={
| |
| [i]="err_template_arg_not_convertible",
| |
| [h]="non-type template argument of type %0 cannot be converted to a value of type %1",
| |
| [g]="non-type template argument of type A cannot be converted to a value of type B",
| |
| [b]=k,
| |
| [e]="non\\-type template argument of type (.*?) cannot be converted to a value of type (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,6688,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n // ...\n if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n // ...\n } else {\n // ...\n // At this point, the template argument refers to an object or\n // function with external linkage. We now need to check whether the\n // argument and parameter types are compatible.\n if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n // We can\'t perform this conversion or binding.\n if (ParamType->isReferenceType())\n // ...\n else\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_convertible) << ArgIn->getType() << ParamType << Arg->getSourceRange();"},{r,7061,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (S.IsQualificationConversion(ResultArg->getType(), ParamType.getNonReferenceType(), false, ObjCLifetimeConversion)) {\n // ...\n } else if (!S.Context.hasSameUnqualifiedType(ResultArg->getType(), ParamType.getNonReferenceType())) {\n // ...\n S.Diag(ResultArg->getBeginLoc(), diag::err_template_arg_not_convertible) << ResultArg->getType() << ParamType << ResultArg->getSourceRange();"},{r,7521,"/// 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 // C++ [temp.arg.nontype]p5:\n // The following conversions are performed on each expression used\n // as a non-type template-argument. If a non-type\n // template-argument cannot be converted to the type of the\n // corresponding template-parameter then the program is\n // ill-formed.\n if (ParamType->isIntegralOrEnumerationType()) {\n // ...\n // Try to convert the argument to the parameter\'s type.\n if (Context.hasSameType(ParamType, ArgType)) {\n // ...\n } else if (ParamType->isBooleanType()) {\n // ...\n } else if (IsIntegralPromotion(Arg, ArgType, ParamType) || !ParamType->isEnumeralType()) {\n // ...\n } else {\n // ...\n Diag(Arg->getBeginLoc(), diag::err_template_arg_not_convertible) << Arg->getType() << ParamType << Arg->getSourceRange();"},{r,7704,"/// 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 // Deal with parameters of type std::nullptr_t.\n if (ParamType->isNullPtrType()) {\n // ...\n case NPV_NotNullPointer:\n Diag(Arg->getExprLoc(), diag::err_template_arg_not_convertible) << Arg->getType() << ParamType;"}},
| |
| [l]={
| |
| [Ac]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:68:4: error: non-type template argument of type \'const int\' cannot be converted to a value of type \'std::nullptr_t\'"}
| |
| }
| |
| },
| |
| ["err_template_arg_not_decl_ref"]={
| |
| [i]="err_template_arg_not_decl_ref",
| |
| [h]="non-type template argument does not refer to any declaration",
| |
| [g]="non-type template argument does not refer to any declaration",
| |
| [b]=k,
| |
| [e]="non\\-type template argument does not refer to any declaration",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"724a8a1fef46",1264932080,"Fix PR6159 and several other problems with value-dependent non-type template","Fix PR6159 and several other problems with value-dependent non-type template\narguments. This both prevents meaningless checks on these arguments and ensures\nthat they are represented as an expression by the instantiation.\n\nCleaned up and added standard text to the relevant test case. Also started\nadding tests for *rejected* cases. At least one FIXME here where (I think) we\nallow something we shouldn\'t. More to come in the area of rejecting crazy\narguments with decent diagnostics. Suggestions welcome for still better\ndiagnostics on these errors!\n\nllvm-svn: 94953"},
| |
| [j]={{r,6741,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (S.getLangOpts().MicrosoftExt) {\n // ...\n if (FirstOpLoc.isValid()) {\n // ...\n if (FirstOpKind == UO_AddrOf)\n // ...\n else if (Arg->getType()->isPointerType()) {\n // ...\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"},{r,6831,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (!Entity) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"},{r,7354,"/// 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 if (Base && (!VD || isa<LifetimeExtendedTemporaryDecl, UnnamedGlobalConstantDecl>(VD))) {\n Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/temp_arg_template.cpp"]={"clang/test/SemaTemplate/temp_arg_template.cpp:107:21: error: non-type template argument does not refer to any declaration"}
| |
| }
| |
| },
| |
| ["err_template_arg_not_ice"]={
| |
| [i]="err_template_arg_not_ice",
| |
| [h]="non-type template argument of type %0 is not an integral constant expression",
| |
| [g]="non-type template argument of type A is not an integral constant expression",
| |
| [b]=k,
| |
| [e]="non\\-type template argument of type (.*?) is not an integral constant expression",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,7496,"/// 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 // C++ [temp.arg.nontype]p5:\n // The following conversions are performed on each expression used\n // as a non-type template-argument. If a non-type\n // template-argument cannot be converted to the type of the\n // corresponding template-parameter then the program is\n // ill-formed.\n if (ParamType->isIntegralOrEnumerationType()) {\n // ...\n if (!ArgType->isIntegralOrEnumerationType()) {\n // ...\n } else if (!Arg->isValueDependent()) {\n class TmplArgICEDiagnoser : public VerifyICEDiagnoser {\n // ...\n SemaDiagnosticBuilder diagnoseNotICE(Sema &S, SourceLocation Loc) override { return S.Diag(Loc, diag::err_template_arg_not_ice) << T; }"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/constant-expression.cpp"]={"clang/test/SemaCXX/constant-expression.cpp:103:5: error: non-type template argument of type \'int\' is not an integral constant expression"}
| |
| }
| |
| },
| |
| ["err_template_arg_not_integral_or_enumeral"]={
| |
| [i]="err_template_arg_not_integral_or_enumeral",
| |
| [h]="non-type template argument of type %0 must have an integral or enumeration type",
| |
| [g]="non-type template argument of type A must have an integral or enumeration type",
| |
| [b]=k,
| |
| [e]="non\\-type template argument of type (.*?) must have an integral or enumeration type",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,7483,"/// 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 // C++ [temp.arg.nontype]p5:\n // The following conversions are performed on each expression used\n // as a non-type template-argument. If a non-type\n // template-argument cannot be converted to the type of the\n // corresponding template-parameter then the program is\n // ill-formed.\n if (ParamType->isIntegralOrEnumerationType()) {\n // ...\n if (!ArgType->isIntegralOrEnumerationType()) {\n Diag(Arg->getBeginLoc(), diag::err_template_arg_not_integral_or_enumeral) << ArgType << Arg->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:35:3: error: non-type template argument of type \'X\' must have an integral or enumeration type"}
| |
| }
| |
| },
| |
| ["err_template_arg_not_object_or_func"]={
| |
| [i]="err_template_arg_not_object_or_func",
| |
| [h]="non-type template argument does not refer to an object or function",
| |
| [g]="non-type template argument does not refer to an object or function",
| |
| [b]=k,
| |
| [e]="non\\-type template argument does not refer to an object or function",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,6862,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n // A non-type template argument must refer to an object or function.\n if (!Func && !Var && !Guid) {\n // ...\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_object_or_func) << Arg->getSourceRange();"}}
| |
| },
| |
| ["err_template_arg_not_pointer_to_member_form"]={
| |
| [i]="err_template_arg_not_pointer_to_member_form",
| |
| [h]="non-type template argument is not a pointer to member constant",
| |
| [g]="non-type template argument is not a pointer to member constant",
| |
| [b]=k,
| |
| [e]="non\\-type template argument is not a pointer to member constant",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,7069,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (!DRE)\n return S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_pointer_to_member_form) << Arg->getSourceRange();"},{r,7097,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_pointer_to_member_form) << Arg->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/instantiate-member-pointers.cpp"]={"clang/test/SemaTemplate/instantiate-member-pointers.cpp:73:5: error: non-type template argument is not a pointer to member constant"}
| |
| }
| |
| },
| |
| ["err_template_arg_not_valid_template"]={
| |
| [i]="err_template_arg_not_valid_template",
| |
| [h]="template argument does not refer to a class or alias template, or template template parameter",
| |
| [g]="template argument does not refer to a class or alias template, or template template parameter",
| |
| [b]=k,
| |
| [e]="template argument does not refer to a class or alias template, or template template parameter",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"b8b04f852637",1459025205,"[NFC] Tweak diagnostic for template template arguments, to include template aliases.","[NFC] Tweak diagnostic for template template arguments, to include template aliases.\n\nThe prior diagnostic (err_template_arg_not_class_template) would state that the template argument to a template template parameter can only be a class template, when it can also be a template alias. The newly renamed diagnostic (err_template_arg_not_valid_template) mentions template aliases.\n\nllvm-svn: 264522"},
| |
| [j]={{r,1683,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n // ...\n if (!Default.isInvalid()) {\n // ...\n if (DefaultArg.getArgument().getAsTemplate().isNull()) {\n Diag(DefaultArg.getLocation(), diag::err_template_arg_not_valid_template) << DefaultArg.getSourceRange();"},{r,7773,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n // ...\n // C++0x [temp.arg.template]p1:\n // A template-argument for a template template-parameter shall be\n // the name of a class template or an alias template, expressed as an\n // id-expression. When the template-argument names a class template, only\n // primary class templates are considered when matching the\n // template template argument with the corresponding parameter;\n // partial specializations are not considered even if their\n // parameter lists match that of the template template parameter.\n //\n // Note that we also allow template template parameters here, which\n // will happen when we are dealing with, e.g., class template\n // partial specializations.\n if (!isa<ClassTemplateDecl>(Template) && !isa<TemplateTemplateParmDecl>(Template) && !isa<TypeAliasTemplateDecl>(Template) && !isa<BuiltinTemplateDecl>(Template)) {\n // ...\n Diag(Arg.getLocation(), diag::err_template_arg_not_valid_template);"}}
| |
| },
| |
| ["err_template_arg_object_no_linkage"]={
| |
| [i]="err_template_arg_object_no_linkage",
| |
| [h]="non-type template argument refers to %select{function|object}0 %1 that does not have linkage",
| |
| [g]={{nil,nil,{"non-type template argument refers to ",{W,"object"}," B that does not have linkage"}}},
| |
| [b]=k,
| |
| [e]="non\\-type template argument refers to (?:function|object) (.*?) that does not have linkage",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object","Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object\nor function with internal linkage as a non-type template argument.\n\nllvm-svn: 154053"},
| |
| [j]={{r,6878,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n // Address / reference template args must have external linkage in C++98.\n if (Entity->getFormalLinkage() == InternalLinkage) {\n // ...\n } else if (!Entity->hasLinkage()) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_object_no_linkage) << !Func << Entity << Arg->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:168:9: error: non-type template argument refers to function \'f\' that does not have linkage"}
| |
| }
| |
| },
| |
| ["err_template_arg_overload_type"]={
| |
| [i]="err_template_arg_overload_type",
| |
| [h]="template argument is the type of an unresolved overloaded function",
| |
| [g]="template argument is the type of an unresolved overloaded function",
| |
| [b]=k,
| |
| [e]="template argument is the type of an unresolved overloaded function",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"8364e6b56856",1261437444,"When a template-id refers to a single function template, and the","When a template-id refers to a single function template, and the\nexplicitly-specified template arguments are enough to determine the\ninstantiation, and either template argument deduction fails or is not\nperformed in that context, we can resolve the template-id down to a\nfunction template specialization (so sayeth C++0x\n[temp.arg.explicit]p3). Fixes PR5811.\n\nllvm-svn: 91852"},
| |
| [j]={{r,6511,"/// Check a template argument against its corresponding\n/// template type parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.type]. It\n/// returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateArgument(TypeSourceInfo *ArgInfo) {\n // ...\n if (CanonArg->isVariablyModifiedType()) {\n // ...\n } else if (Context.hasSameUnqualifiedType(Arg, Context.OverloadTy)) {\n return Diag(SR.getBegin(), diag::err_template_arg_overload_type) << SR;"}}
| |
| },
| |
| ["err_template_arg_ref_bind_ignores_quals"]={
| |
| [i]="err_template_arg_ref_bind_ignores_quals",
| |
| [h]="reference binding of non-type template parameter %diff{of type $ to template argument of type $|to template argument}0,1 ignores qualifiers",
| |
| [g]={{nil,nil,{"reference binding of non-type template parameter ",{"of type A to template argument of type B","to template argument"}," ignores qualifiers"}}},
| |
| [b]=k,
| |
| [e]="reference binding of non\\-type template parameter (?:of type (.*?) to template argument of type (.*?)|to template argument) ignores qualifiers",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,6670,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n // ...\n if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n // ...\n } else {\n if (const ReferenceType *ParamRef = ParamType->getAs<ReferenceType>()) {\n if (!ParamRef->getPointeeType()->isFunctionType()) {\n // ...\n if ((ParamQuals | ArgQuals) != ParamQuals) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_ref_bind_ignores_quals) << ParamType << Arg->getType() << Arg->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:119:8: error: reference binding of non-type template parameter of type \'int &\' to template argument of type \'const int\' ignores qualifiers"}
| |
| }
| |
| },
| |
| ["err_template_arg_reference_var"]={
| |
| [i]="err_template_arg_reference_var",
| |
| [h]="non-type template argument of reference type %0 is not an object",
| |
| [g]="non-type template argument of reference type A is not an object",
| |
| [b]=k,
| |
| [e]="non\\-type template argument of reference type (.*?) is not an object",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to","Overhaul checking of non-type template arguments that should refer to\nan object or function. Our previous checking was too lax, and ended up\nallowing missing or extraneous address-of operators, among other\nevils. The new checking provides better diagnostics and adheres more\nclosely to the standard.\n\nFixes PR6563 and PR6749.\n\nllvm-svn: 100125"},
| |
| [j]={{r,6888,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (Var) {\n // A value of reference type is not an object.\n if (Var->getType()->isReferenceType()) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_reference_var) << Var->getType() << Arg->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p5.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p5.cpp:154:9: error: non-type template argument of reference type \'int &\' is not an object"}
| |
| }
| |
| },
| |
| ["err_template_arg_template_params_mismatch"]={
| |
| [i]="err_template_arg_template_params_mismatch",
| |
| [h]="template template argument has different template parameters than its corresponding template template parameter",
| |
| [g]="template template argument has different template parameters than its corresponding template template parameter",
| |
| [b]=k,
| |
| [e]="template template argument has different template parameters than its corresponding template template parameter",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,8018,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // Check the actual kind (type, non-type, template).\n if (Old->getKind() != New->getKind()) {\n if (Complain) {\n // ...\n if (TemplateArgLoc.isValid()) {\n S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{r,8041,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // ...\n // Check that both are parameter packs or neither are parameter packs.\n // However, if we are matching a template template argument to a\n // template template parameter, the template template parameter can have\n // a parameter pack where the template template argument does not.\n if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n if (Complain) {\n // ...\n if (TemplateArgLoc.isValid()) {\n S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{r,8080,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // ...\n // For non-type template parameters, check the type of the parameter.\n if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n // ...\n // If we are matching a template template argument to a template\n // template parameter and one of the non-type template parameter types\n // is dependent, then we must wait until template instantiation time\n // to actually compare the arguments.\n if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n // ...\n if (!S.Context.hasSameType(OldType, NewType)) {\n if (Complain) {\n // ...\n if (TemplateArgLoc.isValid()) {\n S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{r,8167,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // ...\n if (TemplateArgLoc.isValid()) {\n S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.param/p12.cpp"]={"clang/test/CXX/temp/temp.param/p12.cpp:36:14: error: template template argument has different template parameters than its corresponding template template parameter"}
| |
| }
| |
| },
| |
| ["err_template_arg_thread_local"]={
| |
| [i]="err_template_arg_thread_local",
| |
| [h]="non-type template argument refers to thread-local object",
| |
| [g]="non-type template argument refers to thread-local object",
| |
| [b]=k,
| |
| [e]="non\\-type template argument refers to thread\\-local object",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object","Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object\nor function with internal linkage as a non-type template argument.\n\nllvm-svn: 154053"},
| |
| [j]={{r,6896,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (Var) {\n // ...\n // A template argument must have static storage duration.\n if (Var->getTLSKind()) {\n S.Diag(Arg->getBeginLoc(), diag::err_template_arg_thread_local) << Arg->getSourceRange();"}},
| |
| [l]={
| |
| [Ac]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:33:4: error: non-type template argument refers to thread-local object"}
| |
| }
| |
| },
| |
| ["err_template_arg_untyped_null_constant"]={
| |
| [i]="err_template_arg_untyped_null_constant",
| |
| [h]="null non-type template argument must be cast to template parameter type %0",
| |
| [g]="null non-type template argument must be cast to template parameter type A",
| |
| [b]=k,
| |
| [e]="null non\\-type template argument must be cast to template parameter type (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"31f55dced546",1333752038,"Implement support for null non-type template arguments for non-type","Implement support for null non-type template arguments for non-type\ntemplate parameters of pointer, pointer-to-member, or nullptr_t\ntype in C++11. Fixes PR9700 / <rdar://problem/11193097>.\n\nllvm-svn: 154219"},
| |
| [j]={{r,6627,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n // ...\n // If we don\'t have a null pointer value, but we do have a NULL pointer\n // constant, suggest a cast to the appropriate type.\n if (Arg->isNullPointerConstant(S.Context, Expr::NPC_NeverValueDependent)) {\n // ...\n S.Diag(Arg->getExprLoc(), diag::err_template_arg_untyped_null_constant) << ParamType << FixItHint::CreateInsertion(Arg->getBeginLoc(), Code) << FixItHint::CreateInsertion(S.getLocForEndOfToken(Arg->getEndLoc()), \")\");"}},
| |
| [l]={
| |
| [Ac]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:21:4: error: null non-type template argument must be cast to template parameter type \'int *\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:22:4: error: null non-type template argument must be cast to template parameter type \'int *\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:40:4: error: null non-type template argument must be cast to template parameter type \'int X::*\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:41:4: error: null non-type template argument must be cast to template parameter type \'int X::*\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:51:5: error: null non-type template argument must be cast to template parameter type \'int (X::*)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:52:5: error: null non-type template argument must be cast to template parameter type \'int (X::*)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:66:4: error: null non-type template argument must be cast to template parameter type \'std::nullptr_t\'"}
| |
| }
| |
| },
| |
| ["err_template_arg_wrongtype_null_constant"]={
| |
| [i]="err_template_arg_wrongtype_null_constant",
| |
| [h]="null non-type template argument of type %0 does not match template parameter of type %1",
| |
| [g]="null non-type template argument of type A does not match template parameter of type B",
| |
| [b]=k,
| |
| [e]="null non\\-type template argument of type (.*?) does not match template parameter of type (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on","Rework implementation of null non-type template arguments based on\nRichard\'s feedback, to properly catch non-constant expressions and\ntype mismatches. Finishes <rdar://problem/11193097>.\n\nllvm-svn: 154407"},
| |
| [j]={{r,6607,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n // ...\n // - a constant expression that evaluates to a null pointer value (4.10); or\n // - a constant expression that evaluates to a null member pointer value\n // (4.11); or\n if ((EvalResult.Val.isLValue() && EvalResult.Val.isNullPointer()) || (EvalResult.Val.isMemberPointer() && !EvalResult.Val.getMemberPointerDecl())) {\n // ...\n S.Diag(Arg->getExprLoc(), diag::err_template_arg_wrongtype_null_constant) << Arg->getType() << ParamType << Arg->getSourceRange();"}},
| |
| [l]={
| |
| [Ac]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:29:4: error: null non-type template argument of type \'float *\' does not match template parameter of type \'int *\'"}
| |
| }
| |
| },
| |
| ["err_template_defn_explicit_instantiation"]={
| |
| [i]="err_template_defn_explicit_instantiation",
| |
| [h]="%select{function|class|variable}0 cannot be defined in an explicit instantiation; if this declaration is meant to be a %select{function|class|variable}0 definition, remove the \'template\' keyword",
| |
| [g]={{nil,nil,{{W,mc,"variable"}," cannot be defined in an explicit instantiation; if this declaration is meant to be a ",{W,mc,"variable"}," definition, remove the \'template\' keyword"}}},
| |
| [b]=k,
| |
| [e]="(?:function|class|variable) cannot be defined in an explicit instantiation; if this declaration is meant to be a (?:function|class|variable) definition, remove the \'template\' keyword",
| |
| [f]=a,
| |
| [d]=x,
| |
| [c]={"725de3e14ff2",1371773326,"Bug Fix: Template explicit instantiations should not have definitions (FixIts yet to be tested.)","Bug Fix: Template explicit instantiations should not have definitions (FixIts yet to be tested.)\n\nllvm-svn: 184503"},
| |
| [j]={{jb,2473,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n // ...\n case ParsedTemplateInfo::ExplicitInstantiation: {\n if (Tok.is(tok::semi)) {\n // ...\n } else {\n // ...\n // Check that this is a valid instantiation\n if (D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n // ...\n Diag(Tok, diag::err_template_defn_explicit_instantiation) << 2 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc);"},{Qb,2085,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n if (TemplateId) {\n // ...\n } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n // ...\n } else if (TUK == Sema::TUK_Friend && TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) {\n // ...\n } else {\n // ...\n if (TUK == Sema::TUK_Definition && TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation) {\n // ...\n Diag(Tok, diag::err_template_defn_explicit_instantiation) << 1 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc);"},{xd,334,"/// 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 (DeclaratorInfo.isFunctionDeclarator() && isStartOfFunctionDefinition(DeclaratorInfo)) {\n // ...\n if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation) {\n if (DeclaratorInfo.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n // ...\n Diag(Tok, diag::err_template_defn_explicit_instantiation) << 0;"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/explicit-instantiation.cpp"]={"clang/test/SemaTemplate/explicit-instantiation.cpp:113:24: error: function cannot be defined in an explicit instantiation; if this declaration is meant to be a function definition, remove the \'template\' keyword","clang/test/SemaTemplate/explicit-instantiation.cpp:117:31: error: function cannot be defined in an explicit instantiation; if this declaration is meant to be a function definition, remove the \'template\' keyword"}
| |
| }
| |
| },
| |
| ["err_template_different_requires_clause"]={
| |
| [i]={{nil,p,"err_template_different_requires_clause"}},
| |
| [h]={{nil,p,"requires clause differs in template redeclaration"}},
| |
| [g]={{nil,p,"requires clause differs in template redeclaration"}},
| |
| [b]=k,
| |
| [e]="requires clause differs in template redeclaration",
| |
| [f]=a,
| |
| [d]={{nil,p,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"},
| |
| [j]={{r,8275,"/// Determine whether the given template parameter lists are\n/// equivalent.\n///\n/// \\param New The new template parameter list, typically written in the\n/// source code as part of a new template declaration.\n///\n/// \\param Old The old template parameter list, typically found via\n/// name lookup of the template declared with this template parameter\n/// list.\n///\n/// \\param Complain If true, this routine will produce a diagnostic if\n/// the template parameter lists are not equivalent.\n///\n/// \\param Kind describes how we are to match the template parameter lists.\n///\n/// \\param TemplateArgLoc If this source location is valid, then we\n/// are actually checking the template parameter list of a template\n/// argument (New) against the template parameter list of its\n/// corresponding template template parameter (Old). We produce\n/// slightly different diagnostics in this scenario.\n///\n/// \\returns True if the template parameter lists are equal, false\n/// otherwise.\nbool Sema::TemplateParameterListsAreEqual(const NamedDecl *NewInstFrom, TemplateParameterList *New, const NamedDecl *OldInstFrom, TemplateParameterList *Old, bool Complain, TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // ...\n if (Kind != TPL_TemplateTemplateArgumentMatch && Kind != TPL_TemplateParamsEquivalent) {\n // ...\n auto Diagnose = [&] {\n Diag(NewRC ? NewRC->getBeginLoc() : New->getTemplateLoc(), diag::err_template_different_requires_clause);"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:24:1: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:27:32: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:32:32: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:76:1: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:80:50: error: requires clause differs in template redeclaration"}
| |
| }
| |
| },
| |
| ["err_template_different_type_constraint"]={
| |
| [i]={{nil,p,"err_template_different_type_constraint"}},
| |
| [h]={{nil,p,"type constraint differs in template redeclaration"}},
| |
| [g]={{nil,p,"type constraint differs in template redeclaration"}},
| |
| [b]=k,
| |
| [e]="type constraint differs in template redeclaration",
| |
| [f]=a,
| |
| [d]={{nil,p,m}},
| |
| [c]={vc,1576172311,wc,xc},
| |
| [j]={{r,8133,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // ...\n if (Kind != Sema::TPL_TemplateParamsEquivalent && Kind != Sema::TPL_TemplateTemplateArgumentMatch && !isa<TemplateTemplateParmDecl>(Old)) {\n // ...\n auto Diagnose = [&] {\n S.Diag(NewC ? NewC->getBeginLoc() : New->getBeginLoc(), diag::err_template_different_type_constraint);"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:40:11: error: type constraint differs in template redeclaration"}
| |
| }
| |
| },
| |
| ["err_template_expansion_into_fixed_list"]={
| |
| [i]={{nil,p,"err_template_expansion_into_fixed_list"}},
| |
| [h]={{nil,p,"pack expansion used as argument for non-pack parameter of %select{alias template|concept}0"}},
| |
| [g]={{nil,p,{"pack expansion used as argument for non-pack parameter of ",{"alias template","concept"}}}},
| |
| [b]=k,
| |
| [e]="pack expansion used as argument for non\\-pack parameter of (?:alias template|concept)",
| |
| [f]=a,
| |
| [d]={{nil,p,m}},
| |
| [c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension.","Implement VectorType conditional operator GNU extension.\n\nGCC supports the conditional operator on VectorTypes that acts as a\n\'select\' in C++ mode. This patch implements the support. Types are\nconverted as closely to GCC\'s behavior as possible, though in a few\nplaces consistency with our existing vector type support was preferred.\n\nNote that this implementation is different from the OpenCL version in a\nnumber of ways, so it unfortunately required a different implementation.\n\nFirst, the SEMA rules and promotion rules are significantly different.\n\nSecondly, GCC implements COND[i] != 0 ? LHS[i] : RHS[i] (where i is in\nthe range 0- VectorSize, for each element). In OpenCL, the condition is\nCOND[i] < 0 ? LHS[i]: RHS[i].\n\nIn the process of implementing this, it was also required to make the\nexpression COND ? LHS : RHS type dependent if COND is type dependent,\nsince the type is now dependent on the condition. For example:\n\n T ? 1 : 2;\n\nIs not typically type dependent, since the result can be deduced from\nthe operands. HOWEVER, if T is a VectorType now, it could change this\nto a \'select\' (basically a swizzle with a non-constant mask) with the 1\nand 2 being promoted to vectors themselves.\n\nWhile this is a change, it is NOT a standards incompatible change. Based\non my (and D. Gregor\'s, at the time of writing the code) reading of the\nstandard, the expression is supposed to be type dependent if ANY\nsub-expression is type dependent.\n\nDifferential Revision: https://reviews.llvm.org/D71463"},
| |
| [j]={{r,5971,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n // ...\n for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n // ...\n if (ArgIdx < NumArgs) {\n // ...\n if (PackExpansionIntoNonPack && (isa<TypeAliasTemplateDecl>(Template) || isa<ConceptDecl>(Template))) {\n // ...\n Diag(NewArgs[ArgIdx].getLocation(), diag::err_template_expansion_into_fixed_list) << (isa<ConceptDecl>(Template) ? 1 : 0) << NewArgs[ArgIdx].getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp:184:24: error: pack expansion used as argument for non-pack parameter of concept"}
| |
| }
| |
| },
| |
| ["err_template_id_not_a_type"]={
| |
| [i]="err_template_id_not_a_type",
| |
| [h]="template name refers to non-type template %0",
| |
| [g]="template name refers to non-type template A",
| |
| [b]=k,
| |
| [e]="template name refers to non\\-type template (.*?)",
| |
| [f]=a,
| |
| [d]=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"},
| |
| [j]={{r,3893,"QualType Sema::CheckTemplateIdType(TemplateName Name, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n // ...\n if (!Template || isa<FunctionTemplateDecl>(Template) || isa<VarTemplateDecl>(Template) || isa<ConceptDecl>(Template)) {\n // ...\n Diag(TemplateLoc, diag::err_template_id_not_a_type) << Name;"}},
| |
| [l]={
| |
| ["clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:104:36: error: template name refers to non-type template \'F\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:106:38: error: template name refers to non-type template \'::F\'"}
| |
| }
| |
| },
| |
| ["err_template_inside_local_class"]={
| |
| [i]="err_template_inside_local_class",
| |
| [h]="templates cannot be declared inside of a local class",
| |
| [g]="templates cannot be declared inside of a local class",
| |
| [b]=k,
| |
| [e]="templates cannot be declared inside of a local class",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"766e259e38e5",1382415258,"Sema: Do not allow template declarations inside local classes","Sema: Do not allow template declarations inside local classes\n\nSummary:\nEnforce the rule in C++11 [temp.mem]p2 that local classes cannot have\nmember templates.\n\nThis fixes PR16947.\n\nN.B. C++14 has slightly different wording to afford generic lambdas\ndeclared inside of functions.\n\nFun fact: Some formulations of local classes with member templates\nwould cause clang to crash during Itanium mangling, such as the\nfollowing:\n\nvoid outer_mem() {\n struct Inner {\n template <typename = void>\n struct InnerTemplateClass {\n static void itc_mem() {}\n };\n };\n Inner::InnerTemplateClass<>::itc_mem();\n}\n\nReviewers: eli.friedman, rsmith, doug.gregor, faisalv\n\nReviewed By: doug.gregor\n\nCC: cfe-commits, ygao\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D1866\n\nllvm-svn: 193144"},
| |
| [j]={{r,8343,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n // ...\n // C++ [temp]p2:\n // A template-declaration can appear only as a namespace scope or\n // class scope declaration.\n // C++ [temp.expl.spec]p3:\n // An explicit specialization may be declared in any scope in which the\n // corresponding primary template may be defined.\n // C++ [temp.class.spec]p6: [P2096]\n // A partial specialization may be declared in any scope in which the\n // corresponding primary template may be defined.\n if (Ctx) {\n // ...\n if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Ctx)) {\n // C++ [temp.mem]p2:\n // A local class shall not have member templates.\n if (RD->isLocalClass())\n return Diag(TemplateParams->getTemplateLoc(), diag::err_template_inside_local_class) << TemplateParams->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp"]={"clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:8:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:9:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:10:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:11:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:12:5: error: templates cannot be declared inside of a local class"}
| |
| }
| |
| },
| |
| ["err_template_instantiate_undefined"]={
| |
| [i]="err_template_instantiate_undefined",
| |
| [h]="%select{implicit|explicit}0 instantiation of undefined template %1",
| |
| [g]={{nil,nil,{{"implicit","explicit"}," instantiation of undefined template B"}}},
| |
| [b]=k,
| |
| [e]="(?:implicit|explicit) instantiation of undefined template (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"a1f499736818",1242174359,"Semantic analysis for explicit instantiation of class templates. We","Semantic analysis for explicit instantiation of class templates. We\nstill aren\'t instantiating the definitions of class template members,\nand core issues 275 and 259 will both affect the checking that we do\nfor explicit instantiations (but are not yet implemented).\n\nllvm-svn: 71613"},
| |
| [j]={{r,854,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n // ...\n if (PatternDef) {\n // ...\n } else if (InstantiatedFromMember) {\n // ...\n } else {\n if (isa<FunctionDecl>(Instantiation)) {\n // ...\n } else if (isa<TagDecl>(Instantiation)) {\n Diag(PointOfInstantiation, diag::err_template_instantiate_undefined) << (TSK != TSK_ImplicitInstantiation) << InstantiationTy;"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/dependent-class-member-operator.cpp"]={"clang/test/SemaTemplate/dependent-class-member-operator.cpp:10:8: error: implicit instantiation of undefined template \'C2<int>\'"}
| |
| }
| |
| },
| |
| ["err_template_instantiate_within_definition"]={
| |
| [i]="err_template_instantiate_within_definition",
| |
| [h]="%select{implicit|explicit}0 instantiation of template %1 within its own definition",
| |
| [g]={{nil,nil,{{"implicit","explicit"}," instantiation of template B within its own definition"}}},
| |
| [b]=k,
| |
| [e]="(?:implicit|explicit) instantiation of template (.*?) within its own definition",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"5476666d1738",1303886791,"Diagnose attempts to implicitly instantiate a template before it is","Diagnose attempts to implicitly instantiate a template before it is\nfully defined. Somehow this escaped notice for a very long time.\n\nllvm-svn: 130298"},
| |
| [j]={{r,827,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n // ...\n if (PatternDef) {\n Diag(PointOfInstantiation, diag::err_template_instantiate_within_definition) << /*implicit|explicit*/ (TSK != TSK_ImplicitInstantiation) << InstantiationTy;"}},
| |
| [l]={
| |
| ["clang/test/CXX/class/class.mem/p2.cpp"]={"clang/test/CXX/class/class.mem/p2.cpp:21:12: error: implicit instantiation of template \'test1::A<int>\' within its own definition"}
| |
| }
| |
| },
| |
| ["err_template_kernel"]={
| |
| [i]={{nil,D,"err_template_kernel"}},
| |
| [h]={{nil,D,"kernel functions cannot be used in a template declaration, instantiation or specialization"}},
| |
| [g]={{nil,D,"kernel functions cannot be used in a template declaration, instantiation or specialization"}},
| |
| [b]=k,
| |
| [e]="kernel functions cannot be used in a template declaration, instantiation or specialization",
| |
| [f]=a,
| |
| [d]={{nil,D,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"},
| |
| [j]={{w,10714,"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 // ...\n if (FunctionTemplate) {\n Diag(D.getIdentifierLoc(), diag::err_template_kernel);"}},
| |
| [l]={
| |
| ["clang/test/SemaOpenCLCXX/invalid-kernel.clcpp"]={"clang/test/SemaOpenCLCXX/invalid-kernel.clcpp:14:13: error: kernel functions cannot be used in a template declaration, instantiation or specialization","clang/test/SemaOpenCLCXX/invalid-kernel.clcpp:18:13: error: kernel functions cannot be used in a template declaration, instantiation or specialization"}
| |
| }
| |
| },
| |
| ["err_template_kw_missing"]={
| |
| [i]="err_template_kw_missing",
| |
| [h]="missing \'template\' keyword prior to dependent template name \'%0%1\'",
| |
| [g]="missing \'template\' keyword prior to dependent template name \'AB\'",
| |
| [b]=k,
| |
| [e]="missing \'template\' keyword prior to dependent template name \'(.*?)(.*?)\'",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"18473f329dbd",1263331724,"Improve recovery for template-ids whose template-name doesn\'t actually","Improve recovery for template-ids whose template-name doesn\'t actually\nname a template, when they occur in a base-specifier. This is one of\nthe (few) places where we know for sure that an identifier followed by\na \'<\' must be a template name, so we can diagnose and recover well:\n\ntest/SemaTemplate/dependent-base-classes.cpp:9:16: error: missing\n\'template\'\n keyword prior to dependent template name \'T::apply\'\nstruct X1 : T::apply<U> { }; // expected-error{{missing \'template\' ...\n ^\n template \ntest/SemaTemplate/dependent-base-classes.cpp:12:13: error: unknown\ntemplate name\n \'vector\'\nstruct X2 : vector<T> { }; // expected-error{{unknown template name\n\'vector\'}}\n ^\n2 diagnostics generated.\n\nllvm-svn: 93257"},
| |
| [j]={{n,16153,"ExprResult Sema::BuildBinOp(Scope *S, SourceLocation OpLoc, BinaryOperatorKind Opc, Expr *LHSExpr, Expr *RHSExpr) {\n // ...\n // Handle pseudo-objects in the LHS.\n if (const BuiltinType *pty = LHSExpr->getType()->getAsPlaceholderType()) {\n // ...\n // If we\'re instantiating \"a.x < b\" or \"A::x < b\" and \'x\' names a function\n // template, diagnose the missing \'template\' keyword instead of diagnosing\n // an invalid use of a bound member function.\n //\n // Note that \"A::x < b\" might be valid if \'b\' has an overloadable type due\n // to C++1z [over.over]/1.4, but we already checked for that case above.\n if (Opc == BO_LT && inTemplateInstantiation() && (pty->getKind() == BuiltinType::BoundMember || pty->getKind() == BuiltinType::Overload)) {\n // ...\n if (OE && !OE->hasTemplateKeyword() && !OE->hasExplicitTemplateArgs() && llvm::any_of(OE->decls(), [](NamedDecl *ND) { return isa<FunctionTemplateDecl>(ND); })) {\n Diag(OE->getQualifier() ? OE->getQualifierLoc().getBeginLoc() : OE->getNameLoc(), diag::err_template_kw_missing) << OE->getName().getAsString() << \"\";"},{r,367,"bool Sema::DiagnoseUnknownTemplateName(const IdentifierInfo &II, SourceLocation IILoc, Scope *S, const CXXScopeSpec *SS, TemplateTy &SuggestedTemplate, TemplateNameKind &SuggestedKind) {\n // ...\n Diag(IILoc, diag::err_template_kw_missing) << Qualifier << II.getName() << FixItHint::CreateInsertion(IILoc, \"template \");"},{r,666,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n // ...\n // If this is a dependent-scope lookup, diagnose that the \'template\' keyword\n // was missing.\n if (MissingTemplateKeyword) {\n Diag(NameInfo.getBeginLoc(), diag::err_template_kw_missing) << \"\" << NameInfo.getName().getAsString() << SourceRange(Less, Greater);"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/dependent-template-recover.cpp"]={"clang/test/SemaTemplate/dependent-template-recover.cpp:10:8: error: missing \'template\' keyword prior to dependent template name \'f1\'","clang/test/SemaTemplate/dependent-template-recover.cpp:15:10: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:16:10: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:17:8: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:18:8: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:20:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:24:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:25:17: error: missing \'template\' keyword prior to dependent template name \'bar\'","clang/test/SemaTemplate/dependent-template-recover.cpp:28:14: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:29:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:33:12: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:34:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:36:15: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:37:10: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:38:10: error: missing \'template\' keyword prior to dependent template name \'bar\'","clang/test/SemaTemplate/dependent-template-recover.cpp:42:10: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:68:15: error: missing \'template\' keyword prior to dependent template name \'t\'","clang/test/SemaTemplate/dependent-template-recover.cpp:86:6: error: missing \'template\' keyword prior to dependent template name \'g\'","clang/test/SemaTemplate/dependent-template-recover.cpp:77:5: error: missing \'template\' keyword prior to dependent template name \'f\'","clang/test/SemaTemplate/dependent-template-recover.cpp:78:5: error: missing \'template\' keyword prior to dependent template name \'f\'","clang/test/SemaTemplate/dependent-template-recover.cpp:79:3: error: missing \'template\' keyword prior to dependent template name \'g\'"}
| |
| }
| |
| },
| |
| ["err_template_kw_refers_to_dependent_non_template"]={
| |
| [i]={{nil,q,"err_template_kw_refers_to_dependent_non_template"}},
| |
| [h]={{nil,q,"%0%select{| following the \'template\' keyword}1 cannot refer to a dependent template"}},
| |
| [g]={{nil,q,{"A",{a," following the \'template\' keyword"}," cannot refer to a dependent template"}}},
| |
| [b]=k,
| |
| [e]="(.*?)(?:| following the \'template\' keyword) cannot refer to a dependent template",
| |
| [f]=a,
| |
| [d]={{nil,q,m}},
| |
| [c]={U,1576908663,T,S},
| |
| [j]={{r,5193,"/// 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 Diag(Name.getBeginLoc(), diag::err_template_kw_refers_to_dependent_non_template) << GetNameFromUnqualifiedId(Name).getName() << Name.getSourceRange() << TemplateKWLoc.isValid() << TemplateKWLoc;"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/literal-operators.cpp"]={"clang/test/SemaCXX/literal-operators.cpp:52:16: error: \'operator\"\"_foo\' following the \'template\' keyword cannot refer to a dependent template"}
| |
| }
| |
| },
| |
| ["err_template_kw_refers_to_non_template"]={
| |
| [i]="err_template_kw_refers_to_non_template",
| |
| [h]={{nil,q,"%0%select{| following the \'template\' keyword}1 does not refer to a template"},{p,nil,"%0 following the \'template\' keyword does not refer to a template"}},
| |
| [g]={{nil,q,{"A",{a," following the \'template\' keyword"}," does not refer to a template"}},{p,nil,"A following the \'template\' keyword does not refer to a template"}},
| |
| [b]=k,
| |
| [e]="(.*?)(?:| following the \'template\' keyword) does not refer to a template",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"b67535d1b6d7",1238460238,"Parsing and AST representation for dependent template names that occur","Parsing and AST representation for dependent template names that occur\nwithin nested-name-specifiers, e.g., for the \"apply\" in\n\n typename MetaFun::template apply<T1, T2>::type\n\nAt present, we can\'t instantiate these nested-name-specifiers, so our\ntesting is sketchy.\n\nllvm-svn: 68081"},
| |
| [j]={{r,557,"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()) {\n // ...\n // If a \'template\' keyword was used, a lookup that finds only non-template\n // names is an error.\n if (ExampleLookupResult && RequiredTemplate) {\n Diag(Found.getNameLoc(), diag::err_template_kw_refers_to_non_template) << Found.getLookupName() << SS.getRange() << RequiredTemplate.hasTemplateKeyword() << RequiredTemplate.getTemplateKeywordLoc();"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:25:38: error: \'apply\' following the \'template\' keyword does not refer to a template"}
| |
| }
| |
| },
| |
| ["err_template_kw_refers_to_type_template"]={
| |
| [i]="err_template_kw_refers_to_type_template",
| |
| [h]="\'%0%1\' is expected to be a non-type template, but instantiated to a %select{class|type alias}2 template",
| |
| [g]={{nil,nil,{"\'AB\' is expected to be a non-type template, but instantiated to a ",{mc,Ic}," template"}}},
| |
| [b]=k,
| |
| [e]="\'(.*?)(.*?)\' is expected to be a non\\-type template, but instantiated to a (?:class|type alias) template",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={ab,1625925174,bb,cb},
| |
| [j]={{r,5042,"// We actually only call this from template instantiation.\nExprResult Sema::BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n // ...\n auto DiagnoseTypeTemplateDecl = [&](TemplateDecl *Temp, bool isTypeAliasTemplateDecl) {\n Diag(NameInfo.getLoc(), diag::err_template_kw_refers_to_type_template) << SS.getScopeRep() << NameInfo.getName().getAsString() << SS.getRange() << isTypeAliasTemplateDecl;"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp"]={"clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp:54:61: error: \'Q::U\' is expected to be a non-type template, but instantiated to a class template"}
| |
| }
| |
| },
| |
| ["err_template_linkage"]={
| |
| [i]="err_template_linkage",
| |
| [h]="templates must have C++ linkage",
| |
| [g]="templates must have C++ linkage",
| |
| [b]=k,
| |
| [e]="templates must have C\\+\\+ linkage",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,8318,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n // ...\n if (Ctx && Ctx->isExternCContext()) {\n Diag(TemplateParams->getTemplateLoc(), diag::err_template_linkage) << TemplateParams->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/CXX/over/over.oper/over.literal/p6.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p6.cpp:5:12: error: templates must have C++ linkage","clang/test/CXX/over/over.oper/over.literal/p6.cpp:10:3: error: templates must have C++ linkage","clang/test/CXX/over/over.oper/over.literal/p6.cpp:13:5: error: templates must have C++ linkage"}
| |
| }
| |
| },
| |
| ["err_template_member"]={
| |
| [i]="err_template_member",
| |
| [h]="member %0 declared as a template",
| |
| [g]="member A declared as a template",
| |
| [b]=k,
| |
| [e]="member (.*?) declared as a template",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan","Diagnose attempts to write a templated data member, from Stepan\nDyatkovskiy! Fixes PR10896.\n\nllvm-svn: 140250"},
| |
| [j]={{H,3558,"/// 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 // Member field could not be with \"template\" keyword.\n // So TemplateParameterLists should be empty in this case.\n if (TemplateParameterLists.size()) {\n // ...\n if (TemplateParams->size()) {\n // ...\n Diag(D.getIdentifierLoc(), diag::err_template_member) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/nested-template.cpp"]={"clang/test/SemaTemplate/nested-template.cpp:137:7: error: member \'SomeField\' declared as a template"}
| |
| }
| |
| },
| |
| ["err_template_member_noparams"]={
| |
| [i]="err_template_member_noparams",
| |
| [h]="extraneous \'template<>\' in declaration of member %0",
| |
| [g]="extraneous \'template<>\' in declaration of member A",
| |
| [b]=k,
| |
| [e]="extraneous \'template\\<\\>\' in declaration of member (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan","Diagnose attempts to write a templated data member, from Stepan\nDyatkovskiy! Fixes PR10896.\n\nllvm-svn: 140250"},
| |
| [j]={{H,3565,"/// 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 // Member field could not be with \"template\" keyword.\n // So TemplateParameterLists should be empty in this case.\n if (TemplateParameterLists.size()) {\n // ...\n if (TemplateParams->size()) {\n // ...\n } else {\n // ...\n Diag(TemplateParams->getTemplateLoc(), diag::err_template_member_noparams) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/nested-template.cpp"]={"clang/test/SemaTemplate/nested-template.cpp:138:5: error: extraneous \'template<>\' in declaration of member \'SomeField2\'"}
| |
| }
| |
| },
| |
| ["err_template_missing_args"]={
| |
| [i]="err_template_missing_args",
| |
| [h]="use of class template %0 requires template arguments",
| |
| [g]="use of class template A requires template arguments",
| |
| [b]=k,
| |
| [e]="use of (?:class template|function template|variable template|alias template|template template parameter|concept|template) (.*?) requires template arguments",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"823015d627b8",1270684986,"When a template (without arguments) is passed as a template type","When a template (without arguments) is passed as a template type\nparameter, explicitly ask the user to give it arguments. We used to\ncomplain that it wasn\'t a type and expect the user to figure it out.\n\nllvm-svn: 100729"},
| |
| [j]={{r,4899,"void Sema::diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc) {\n Diag(Loc, diag::err_template_missing_args) << (int)getTemplateNameKindForDiagnostics(Name) << Name;"}},
| |
| [l]={
| |
| ["clang/test/Parser/cxx2a-constrained-template-param.cpp"]={"clang/test/Parser/cxx2a-constrained-template-param.cpp:49:27: error: use of class template \'test1\' requires template arguments"}
| |
| }
| |
| },
| |
| ["err_template_nontype_parm_bad_structural_type"]={
| |
| [i]={{nil,v,"err_template_nontype_parm_bad_structural_type"}},
| |
| [h]={{nil,v,"a non-type template parameter cannot have type %0 before C++20"}},
| |
| [g]={{nil,v,"a non-type template parameter cannot have type A before C++20"}},
| |
| [b]=k,
| |
| [e]="a non\\-type template parameter cannot have type (.*?) before C\\+\\+20",
| |
| [f]=a,
| |
| [d]={{nil,v,m}},
| |
| [c]={lb,1582847864,mb,nb},
| |
| [j]={{r,1484,"QualType Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) {\n // ...\n if (!getLangOpts().CPlusPlus20) {\n // ...\n Diag(Loc, diag::err_template_nontype_parm_bad_structural_type) << T;"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.param/p4.cpp"]={"clang/test/CXX/temp/temp.param/p4.cpp:18:16: error: a non-type template parameter cannot have type \'float\' before C++20"}
| |
| }
| |
| },
| |
| ["err_template_nontype_parm_bad_type"]={
| |
| [i]="err_template_nontype_parm_bad_type",
| |
| [h]="a non-type template parameter cannot have type %0",
| |
| [g]="a non-type template parameter cannot have type A",
| |
| [b]=k,
| |
| [e]="a non\\-type template parameter cannot have type (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,1349,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n // ...\n // Don\'t mention structural types in our diagnostic prior to C++20. Also,\n // there\'s not much more we can say about non-scalar non-class types --\n // because we can\'t see functions or arrays here, those can only be language\n // extensions.\n if (!getLangOpts().CPlusPlus20 || (!T->isScalarType() && !T->isRecordType())) {\n Diag(Loc, diag::err_template_nontype_parm_bad_type) << T;"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:36:24: error: a non-type template parameter cannot have type \'_Atomic(float)\'","clang/test/CXX/temp/temp.param/p7.cpp:37:22: error: a non-type template parameter cannot have type \'_Atomic(int)\'"}
| |
| }
| |
| },
| |
| ["err_template_nontype_parm_different_type"]={
| |
| [i]="err_template_nontype_parm_different_type",
| |
| [h]="template non-type parameter has a different type %0 in template %select{|template parameter }1redeclaration",
| |
| [g]={{nil,nil,{"template non-type parameter has a different type A in template ",{a,"template parameter "},"redeclaration"}}},
| |
| [b]=k,
| |
| [e]="template non\\-type parameter has a different type (.*?) in template (?:|template parameter )redeclaration",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,8077,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // ...\n // For non-type template parameters, check the type of the parameter.\n if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n // ...\n // If we are matching a template template argument to a template\n // template parameter and one of the non-type template parameter types\n // is dependent, then we must wait until template instantiation time\n // to actually compare the arguments.\n if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n // ...\n if (!S.Context.hasSameType(OldType, NewType)) {\n if (Complain) {\n unsigned NextDiag = diag::err_template_nontype_parm_different_type;"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/friend-template.cpp"]={"clang/test/SemaTemplate/friend-template.cpp:80:28: error: template non-type parameter has a different type \'long\' in template redeclaration","clang/test/SemaTemplate/friend-template.cpp:305:15: error: template non-type parameter has a different type \'char\' in template redeclaration"}
| |
| }
| |
| },
| |
| ["err_template_nontype_parm_incomplete"]={
| |
| [i]={{nil,v,"err_template_nontype_parm_incomplete"}},
| |
| [h]={{nil,v,"non-type template parameter has incomplete type %0"}},
| |
| [g]={{nil,v,"non-type template parameter has incomplete type A"}},
| |
| [b]=k,
| |
| [e]="non\\-type template parameter has incomplete type (.*?)",
| |
| [f]=a,
| |
| [d]={{nil,v,m}},
| |
| [c]={lb,1582847864,mb,nb},
| |
| [j]={{r,1331,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n // ...\n if (RequireCompleteType(Loc, T, diag::err_template_nontype_parm_incomplete))"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/invalid-template-params.cpp"]={"clang/test/SemaCXX/invalid-template-params.cpp:7:3: error: non-type template parameter has incomplete type \'class UBar\'"}
| |
| }
| |
| },
| |
| ["err_template_nontype_parm_not_literal"]={
| |
| [i]={{nil,v,"err_template_nontype_parm_not_literal"}},
| |
| [h]={{nil,v,"non-type template parameter has non-literal type %0"}},
| |
| [g]={{nil,v,"non-type template parameter has non-literal type A"}},
| |
| [b]=k,
| |
| [e]="non\\-type template parameter has non\\-literal type (.*?)",
| |
| [f]=a,
| |
| [d]={{nil,v,m}},
| |
| [c]={lb,1582847864,mb,nb},
| |
| [j]={{r,1354,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n // ...\n if (RequireLiteralType(Loc, T, diag::err_template_nontype_parm_not_literal))"}}
| |
| },
| |
| ["err_template_nontype_parm_not_structural"]={
| |
| [i]={{nil,v,"err_template_nontype_parm_not_structural"}},
| |
| [h]={{nil,v,"type %0 of non-type template parameter is not a structural type"}},
| |
| [g]={{nil,v,"type A of non-type template parameter is not a structural type"}},
| |
| [b]=k,
| |
| [e]="type (.*?) of non\\-type template parameter is not a structural type",
| |
| [f]=a,
| |
| [d]={{nil,v,m}},
| |
| [c]={lb,1582847864,mb,nb},
| |
| [j]={{r,1357,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n // ...\n Diag(Loc, diag::err_template_nontype_parm_not_structural) << T;"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:73:14: error: type \'RRef\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:78:17: error: type \'BadBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:83:18: error: type \'BadField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:88:23: error: type \'BadFieldArray\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:92:23: error: type \'ProtectedBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:96:21: error: type \'PrivateBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:100:22: error: type \'Private2Base\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:106:24: error: type \'ProtectedField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:112:22: error: type \'PrivateField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:117:23: error: type \'Private2Field\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:122:22: error: type \'MutableField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:125:36: error: type \'BadExtType<_Atomic(float)>\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:126:34: error: type \'BadExtType<_Atomic(int)>\' of non-type template parameter is not a structural type"}
| |
| }
| |
| },
| |
| ["err_template_nontype_parm_rvalue_ref"]={
| |
| [i]={{nil,v,"err_template_nontype_parm_rvalue_ref"}},
| |
| [h]={{nil,v,"non-type template parameter has rvalue reference type %0"}},
| |
| [g]={{nil,v,"non-type template parameter has rvalue reference type A"}},
| |
| [b]=k,
| |
| [e]="non\\-type template parameter has rvalue reference type (.*?)",
| |
| [f]=a,
| |
| [d]={{nil,v,m}},
| |
| [c]={lb,1582847864,mb,nb},
| |
| [j]={{r,1339,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n // ...\n // Structural types are required to be object types or lvalue references.\n if (T->isRValueReferenceType()) {\n Diag(Loc, diag::err_template_nontype_parm_rvalue_ref) << T;"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:26:16: error: non-type template parameter has rvalue reference type \'int &&\'"}
| |
| }
| |
| },
| |
| ["err_template_outside_namespace_or_class_scope"]={
| |
| [i]="err_template_outside_namespace_or_class_scope",
| |
| [h]="templates can only be declared in namespace or class scope",
| |
| [g]="templates can only be declared in namespace or class scope",
| |
| [b]=k,
| |
| [e]="templates can only be declared in namespace or class scope",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,8351,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n // ...\n return Diag(TemplateParams->getTemplateLoc(), diag::err_template_outside_namespace_or_class_scope) << TemplateParams->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/extern-c.cpp"]={"clang/test/SemaCXX/extern-c.cpp:265:5: error: templates can only be declared in namespace or class scope"}
| |
| }
| |
| },
| |
| ["err_template_param_default_arg_inconsistent_redefinition"]={
| |
| [i]={{nil,y,"err_template_param_default_arg_inconsistent_redefinition"}},
| |
| [h]={{nil,y,"template parameter default argument is inconsistent with previous definition"}},
| |
| [g]={{nil,y,"template parameter default argument is inconsistent with previous definition"}},
| |
| [b]=k,
| |
| [e]="template parameter default argument is inconsistent with previous definition",
| |
| [f]=a,
| |
| [d]={{nil,y,m}},
| |
| [c]={ab,1625925174,bb,cb},
| |
| [j]={{r,3048,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n // ...\n for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n // ...\n // [basic.def.odr]/13:\n // There can be more than one definition of a\n // ...\n // default template argument\n // ...\n // in a program provided that each definition appears in a different\n // translation unit and the definitions satisfy the [same-meaning\n // criteria of the ODR].\n //\n // Simply, the design of modules allows the definition of template default\n // argument to be repeated across translation unit. Note that the ODR is\n // checked elsewhere. But it is still not allowed to repeat template default\n // argument in the same translation unit.\n if (RedundantDefaultArg) {\n // ...\n } else if (InconsistentDefaultArg) {\n // ...\n Diag(NewDefaultLoc, diag::err_template_param_default_arg_inconsistent_redefinition);"}}
| |
| },
| |
| ["err_template_param_default_arg_missing"]={
| |
| [i]="err_template_param_default_arg_missing",
| |
| [h]="template parameter missing a default argument",
| |
| [g]="template parameter missing a default argument",
| |
| [b]=k,
| |
| [e]="template parameter missing a default argument",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,3060,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n // ...\n for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n // ...\n // [basic.def.odr]/13:\n // There can be more than one definition of a\n // ...\n // default template argument\n // ...\n // in a program provided that each definition appears in a different\n // translation unit and the definitions satisfy the [same-meaning\n // criteria of the ODR].\n //\n // Simply, the design of modules allows the definition of template default\n // argument to be repeated across translation unit. Note that the ODR is\n // checked elsewhere. But it is still not allowed to repeat template default\n // argument in the same translation unit.\n if (RedundantDefaultArg) {\n // ...\n } else if (InconsistentDefaultArg) {\n // ...\n } else if (MissingDefaultArg && TPC != TPC_FunctionTemplate) {\n // ...\n Diag((*NewParam)->getLocation(), diag::err_template_param_default_arg_missing);"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.param/p11.cpp"]={"clang/test/CXX/temp/temp.param/p11.cpp:6:16: error: template parameter missing a default argument","clang/test/CXX/temp/temp.param/p11.cpp:10:31: error: template parameter missing a default argument","clang/test/CXX/temp/temp.param/p11.cpp:14:14: error: template parameter missing a default argument"}
| |
| }
| |
| },
| |
| ["err_template_param_default_arg_redefinition"]={
| |
| [i]="err_template_param_default_arg_redefinition",
| |
| [h]="template parameter redefines default argument",
| |
| [g]="template parameter redefines default argument",
| |
| [b]=k,
| |
| [e]="template parameter redefines default argument",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,3041,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n // ...\n for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n // ...\n // [basic.def.odr]/13:\n // There can be more than one definition of a\n // ...\n // default template argument\n // ...\n // in a program provided that each definition appears in a different\n // translation unit and the definitions satisfy the [same-meaning\n // criteria of the ODR].\n //\n // Simply, the design of modules allows the definition of template default\n // argument to be repeated across translation unit. Note that the ODR is\n // checked elsewhere. But it is still not allowed to repeat template default\n // argument in the same translation unit.\n if (RedundantDefaultArg) {\n Diag(NewDefaultLoc, diag::err_template_param_default_arg_redefinition);"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.param/p12.cpp"]={"clang/test/CXX/temp/temp.param/p12.cpp:11:24: error: template parameter redefines default argument","clang/test/CXX/temp/temp.param/p12.cpp:21:34: error: template parameter redefines default argument","clang/test/CXX/temp/temp.param/p12.cpp:31:18: error: template parameter redefines default argument"}
| |
| }
| |
| },
| |
| ["err_template_param_different_kind"]={
| |
| [i]="err_template_param_different_kind",
| |
| [h]="template parameter has a different kind in template %select{|template parameter }0redeclaration",
| |
| [g]={{nil,nil,{"template parameter has a different kind in template ",{a,"template parameter "},"redeclaration"}}},
| |
| [b]=k,
| |
| [e]="template parameter has a different kind in template (?:|template parameter )redeclaration",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,8016,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // Check the actual kind (type, non-type, template).\n if (Old->getKind() != New->getKind()) {\n if (Complain) {\n unsigned NextDiag = diag::err_template_param_different_kind;"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/class-template-decl.cpp"]={"clang/test/SemaTemplate/class-template-decl.cpp:35:14: error: template parameter has a different kind in template redeclaration","clang/test/SemaTemplate/class-template-decl.cpp:50:18: error: template parameter has a different kind in template redeclaration"}
| |
| }
| |
| },
| |
| ["err_template_param_list_different_arity"]={
| |
| [i]="err_template_param_list_different_arity",
| |
| [h]="%select{too few|too many}0 template parameters in template %select{|template parameter }1redeclaration",
| |
| [g]={{nil,nil,{{"too few","too many"}," template parameters in template ",{a,"template parameter "},"redeclaration"}}},
| |
| [b]=k,
| |
| [e]="(?:too few|too many) template parameters in template (?:|template parameter )redeclaration",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,8165,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n unsigned NextDiag = diag::err_template_param_list_different_arity;"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/libstdcxx_map_base_hack.cpp"]={"clang/test/SemaCXX/libstdcxx_map_base_hack.cpp:20:5: error: too few template parameters in template redeclaration"}
| |
| }
| |
| },
| |
| ["err_template_param_list_matches_nontemplate"]={
| |
| [i]="err_template_param_list_matches_nontemplate",
| |
| [h]="template parameter list matching the non-templated nested type %0 should be empty (\'template<>\')",
| |
| [g]="template parameter list matching the non-templated nested type A should be empty (\'template<>\')",
| |
| [b]=k,
| |
| [e]="template parameter list matching the non\\-templated nested type (.*?) should be empty \\(\'template\\<\\>\'\\)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"1530138fd04d",1248975651,"Support out-of-line definitions of the members of class template","Support out-of-line definitions of the members of class template\npartial specializations.\n\nllvm-svn: 77606"},
| |
| [j]={{r,3487,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n // ...\n for (unsigned TypeIdx = 0, NumTypes = NestedTypes.size(); TypeIdx != NumTypes; ++TypeIdx) {\n // ...\n if (NeedEmptyTemplateHeader) {\n // ...\n if (ParamIdx < ParamLists.size()) {\n if (ParamLists[ParamIdx]->size() > 0) {\n // The header has template parameters when it shouldn\'t. Complain.\n if (!SuppressDiagnostic)\n Diag(ParamLists[ParamIdx]->getTemplateLoc(), diag::err_template_param_list_matches_nontemplate) << T << SourceRange(ParamLists[ParamIdx]->getLAngleLoc(), ParamLists[ParamIdx]->getRAngleLoc()) << getRangeOfTypeInNestedNameSpecifier(Context, T, SS);"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p5-example.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p5-example.cpp:34:1: error: template parameter list matching the non-templated nested type \'A<short>\' should be empty (\'template<>\')"}
| |
| }
| |
| },
| |
| ["err_template_param_pack_default_arg"]={
| |
| [i]="err_template_param_pack_default_arg",
| |
| [h]="template parameter pack cannot have a default argument",
| |
| [g]="template parameter pack cannot have a default argument",
| |
| [b]=k,
| |
| [e]="template parameter pack cannot have a default argument",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"d382435014c5",1244845813,"Parameter packs can\'t have default arguments.","Parameter packs can\'t have default arguments.\n\nllvm-svn: 73262"},
| |
| [j]={{r,1072,"/// ActOnTypeParameter - Called when a C++ template type parameter\n/// (e.g., \"typename T\") has been parsed. Typename specifies whether\n/// the keyword \"typename\" was used to declare the type parameter\n/// (otherwise, \"class\" was used), and KeyLoc is the location of the\n/// \"class\" or \"typename\" keyword. ParamName is the name of the\n/// parameter (NULL indicates an unnamed template parameter) and\n/// ParamNameLoc is the location of the parameter name (if any).\n/// If the type parameter has a default argument, it will be added\n/// later via ActOnTypeParameterDefault.\nNamedDecl *Sema::ActOnTypeParameter(Scope *S, bool Typename, SourceLocation EllipsisLoc, SourceLocation KeyLoc, IdentifierInfo *ParamName, SourceLocation ParamNameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedType DefaultArg, bool HasTypeConstraint) {\n // ...\n // C++0x [temp.param]p9:\n // A default template-argument may be specified for any kind of\n // template-parameter that is not a template parameter pack.\n if (DefaultArg && IsParameterPack) {\n Diag(EqualLoc, diag::err_template_param_pack_default_arg);"},{r,1604,"NamedDecl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, unsigned Depth, unsigned Position, SourceLocation EqualLoc, Expr *Default) {\n // ...\n // C++0x [temp.param]p9:\n // A default template-argument may be specified for any kind of\n // template-parameter that is not a template parameter pack.\n if (Default && IsParameterPack) {\n Diag(EqualLoc, diag::err_template_param_pack_default_arg);"},{r,1668,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n // ...\n // C++0x [temp.param]p9:\n // A default template-argument may be specified for any kind of\n // template-parameter that is not a template parameter pack.\n if (IsParameterPack && !Default.isInvalid()) {\n Diag(EqualLoc, diag::err_template_param_pack_default_arg);"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:5:28: error: template parameter pack cannot have a default argument","clang/test/CXX/temp/temp.param/p9-0x.cpp:8:24: error: template parameter pack cannot have a default argument","clang/test/CXX/temp/temp.param/p9-0x.cpp:13:45: error: template parameter pack cannot have a default argument"}
| |
| }
| |
| },
| |
| ["err_template_param_pack_must_be_last_template_parameter"]={
| |
| [i]="err_template_param_pack_must_be_last_template_parameter",
| |
| [h]="template parameter pack must be the last template parameter",
| |
| [g]="template parameter pack must be the last template parameter",
| |
| [b]=k,
| |
| [e]="template parameter pack must be the last template parameter",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"327865db5323",1244848815,"A parameter pack must always come last in a class template.","A parameter pack must always come last in a class template.\n\nllvm-svn: 73269"},
| |
| [j]={{r,3023,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n // ...\n for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n // ...\n // C++11 [temp.param]p11:\n // If a template parameter of a primary class template or alias template\n // is a template parameter pack, it shall be the last template parameter.\n if (SawParameterPack && (NewParam + 1) != NewParamEnd && (TPC == TPC_ClassTemplate || TPC == TPC_VarTemplate || TPC == TPC_TypeAliasTemplate)) {\n Diag((*NewParam)->getLocation(), diag::err_template_param_pack_must_be_last_template_parameter);"},{r,9016,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n // ...\n // Ensure that the parameter pack, if present, is the last parameter in the\n // template.\n for (TemplateParameterList::const_iterator ParamIt = Params->begin(), ParamEnd = Params->end(); ParamIt != ParamEnd; ++ParamIt) {\n // ...\n if (Param->isParameterPack()) {\n // ...\n Diag(Param->getLocation(), diag::err_template_param_pack_must_be_last_template_parameter);"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.param/p11-0x.cpp"]={"clang/test/CXX/temp/temp.param/p11-0x.cpp:26:22: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:30:22: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:34:17: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:37:17: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:41:38: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:44:38: error: template parameter pack must be the last template parameter"}
| |
| }
| |
| },
| |
| ["err_template_param_shadow"]={
| |
| [i]="err_template_param_shadow",
| |
| [h]="declaration of %0 shadows template parameter",
| |
| [g]="declaration of A shadows template parameter",
| |
| [b]=k,
| |
| [e]="declaration of (.*?) shadows template parameter",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{kd,1381,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n // ...\n if (TemplateParams) {\n for (const auto *TP : TemplateParams->asArray()) {\n // ...\n for (const auto &Capture : Intro.Captures) {\n if (Capture.Id == TP->getIdentifier()) {\n Diag(Capture.Loc, diag::err_template_param_shadow) << Capture.Id;"},{r,898,"/// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining\n/// that the template parameter \'PrevDecl\' is being shadowed by a new\n/// declaration at location Loc. Returns true to indicate that this is\n/// an error, and false otherwise.\nvoid Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {\n // ...\n unsigned DiagId = getLangOpts().MSVCCompat ? diag::ext_template_param_shadow : diag::err_template_param_shadow;"}},
| |
| [l]={
| |
| [dd]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:80:11: error: declaration of \'T\' shadows template parameter","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:98:11: error: declaration of \'T\' shadows template parameter"}
| |
| }
| |
| },
| |
| ["err_template_parameter_default_friend_template"]={
| |
| [i]="err_template_parameter_default_friend_template",
| |
| [h]="default template argument not permitted on a friend template",
| |
| [g]="default template argument not permitted on a friend template",
| |
| [b]=k,
| |
| [e]="default template argument not permitted on a friend template",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in","Diagnose ill-formed uses of default template arguments in\nfunction templates (in C++98), friend function templates, and\nout-of-line definitions of members of class templates.\n\nAlso handles merging of default template arguments from previous\ndeclarations of function templates, for C++0x. However, we don\'t yet\nmake use of those default template arguments.\n\nllvm-svn: 89872"},
| |
| [j]={{r,2742,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n // ...\n case Sema::TPC_FriendClassTemplate:\n case Sema::TPC_FriendFunctionTemplate:\n // ...\n S.Diag(ParamLoc, diag::err_template_parameter_default_friend_template) << DefArgRange;"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:17:21: error: default template argument not permitted on a friend template"}
| |
| }
| |
| },
| |
| ["err_template_parameter_default_template_member"]={
| |
| [i]="err_template_parameter_default_template_member",
| |
| [h]="cannot add a default template argument to the definition of a member of a class template",
| |
| [g]="cannot add a default template argument to the definition of a member of a class template",
| |
| [b]=k,
| |
| [e]="cannot add a default template argument to the definition of a member of a class template",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in","Diagnose ill-formed uses of default template arguments in\nfunction templates (in C++98), friend function templates, and\nout-of-line definitions of members of class templates.\n\nAlso handles merging of default template arguments from previous\ndeclarations of function templates, for C++0x. However, we don\'t yet\nmake use of those default template arguments.\n\nllvm-svn: 89872"},
| |
| [j]={{r,2733,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n // ...\n case Sema::TPC_ClassTemplateMember:\n // ...\n S.Diag(ParamLoc, diag::err_template_parameter_default_template_member) << DefArgRange;"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:32:42: error: cannot add a default template argument to the definition of a member of a class template","clang/test/CXX/temp/temp.param/p9-0x.cpp:41:21: error: cannot add a default template argument to the definition of a member of a class template","clang/test/CXX/temp/temp.param/p9-0x.cpp:42:42: error: cannot add a default template argument to the definition of a member of a class template"}
| |
| }
| |
| },
| |
| ["err_template_parameter_pack_non_pack"]={
| |
| [i]="err_template_parameter_pack_non_pack",
| |
| [h]="%select{template type|non-type template|template template}0 parameter%select{| pack}1 conflicts with previous %select{template type|non-type template|template template}0 parameter%select{ pack|}1",
| |
| [g]={{nil,nil,{{"template type","non-type template","template template"}," parameter",{a," pack"}," conflicts with previous ",{"template type","non-type template","template template"}," parameter",{" pack",a}}}},
| |
| [b]=k,
| |
| [e]="(?:template type|non\\-type template|template template) parameter(?:| pack) conflicts with previous (?:template type|non\\-type template|template template) parameter(?: pack|)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template","When checking for equality of template parameter lists, a template\ntype parameter pack is distinct from a template type parameter.\n\nllvm-svn: 105464"},
| |
| [j]={{r,8038,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // ...\n // Check that both are parameter packs or neither are parameter packs.\n // However, if we are matching a template template argument to a\n // template template parameter, the template template parameter can have\n // a parameter pack where the template template argument does not.\n if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n if (Complain) {\n unsigned NextDiag = diag::err_template_parameter_pack_non_pack;"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:9:19: error: template type parameter conflicts with previous template type parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:12:22: error: template type parameter pack conflicts with previous template type parameter","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:18:28: error: template type parameter conflicts with previous template type parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:21:31: error: template type parameter pack conflicts with previous template type parameter","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:24:14: error: non-type template parameter conflicts with previous non-type template parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:27:36: error: template template parameter pack conflicts with previous template template parameter"}
| |
| }
| |
| },
| |
| ["err_template_qualified_declarator_no_match"]={
| |
| [i]="err_template_qualified_declarator_no_match",
| |
| [h]="nested name specifier \'%0\' for declaration does not refer into a class, class template or class template partial specialization",
| |
| [g]="nested name specifier \'A\' for declaration does not refer into a class, class template or class template partial specialization",
| |
| [b]=k,
| |
| [e]="nested name specifier \'(.*?)\' for declaration does not refer into a class, class template or class template partial specialization",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"168190d82254",1248222489,"Complain if we\'re entering the context of a dependent nested-name-specifier but","Complain if we\'re entering the context of a dependent nested-name-specifier but\ncannot match that nested-name-specifier to a class template or class template\npartial specialization.\n\nllvm-svn: 76704"},
| |
| [j]={{w,6289,"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 (!DC || isa<EnumDecl>(DC)) {\n // ...\n Diag(D.getIdentifierLoc(), diag::err_template_qualified_declarator_no_match) << D.getCXXScopeSpec().getScopeRep() << D.getCXXScopeSpec().getRange();"},{r,1862,"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.isNotEmpty() && !SS.isInvalid()) {\n // ...\n if (!SemanticContext) {\n // ...\n Diag(NameLoc, TUK == TUK_Friend ? diag::warn_template_qualified_friend_ignored : diag::err_template_qualified_declarator_no_match) << SS.getScopeRep() << SS.getRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/pr25181-crash-on-invalid.cpp"]={"clang/test/SemaCXX/pr25181-crash-on-invalid.cpp:6:16: error: nested name specifier \'Foo<T>::\' for declaration does not refer into a class, class template or class template partial specialization"}
| |
| }
| |
| },
| |
| ["err_template_recursion_depth_exceeded"]={
| |
| [i]="err_template_recursion_depth_exceeded",
| |
| [h]="recursive template instantiation exceeded maximum depth of %0",
| |
| [g]="recursive template instantiation exceeded maximum depth of A",
| |
| [b]="fatal error\\: ",
| |
| [e]="recursive template instantiation exceeded maximum depth of (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{"clang/lib/Sema/SemaTemplateInstantiate.cpp",723,"bool Sema::InstantiatingTemplate::CheckInstantiationDepth(SourceLocation PointOfInstantiation, SourceRange InstantiationRange) {\n // ...\n SemaRef.Diag(PointOfInstantiation, diag::err_template_recursion_depth_exceeded) << SemaRef.getLangOpts().InstantiationDepth << InstantiationRange;"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/instantiation-depth-subst.cpp"]={"clang/test/SemaTemplate/instantiation-depth-subst.cpp:4:46: fatal error: recursive template instantiation exceeded maximum depth of 2"}
| |
| }
| |
| },
| |
| ["err_template_spec_decl_friend"]={
| |
| [i]="err_template_spec_decl_friend",
| |
| [h]="cannot declare an explicit specialization in a friend",
| |
| [g]="cannot declare an explicit specialization in a friend",
| |
| [b]=k,
| |
| [e]="cannot declare an explicit specialization in a friend",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"816d75b7012a",1269416766,"Support friend function specializations.","Support friend function specializations.\n\nllvm-svn: 99389"},
| |
| [j]={{w,9845,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (getLangOpts().CPlusPlus) {\n // ...\n if (TemplateParams) {\n // ...\n if (TemplateParams->size() > 0) {\n // ...\n } else {\n // ...\n // C++0x [temp.expl.spec]p20 forbids \"template<> friend void foo(int);\".\n if (isFriend) {\n // ...\n Diag(D.getIdentifierLoc(), diag::err_template_spec_decl_friend) << Name << RemoveRange << FixItHint::CreateRemoval(RemoveRange) << FixItHint::CreateInsertion(InsertLoc, \"<>\");"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:9:26: error: cannot declare an explicit specialization in a friend","clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:18:27: error: cannot declare an explicit specialization in a friend"}
| |
| }
| |
| },
| |
| ["err_template_spec_decl_function_scope"]={
| |
| [i]="err_template_spec_decl_function_scope",
| |
| [h]="explicit specialization of %0 in function scope",
| |
| [g]="explicit specialization of A in function scope",
| |
| [b]=k,
| |
| [e]="explicit specialization of (.*?) in function scope",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,8428,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n // ...\n // C++ [temp.expl.spec]p2:\n // An explicit specialization may be declared in any scope in which\n // the corresponding primary template may be defined.\n if (S.CurContext->getRedeclContext()->isFunctionOrMethod()) {\n S.Diag(Loc, diag::err_template_spec_decl_function_scope) << Specialized;"}}
| |
| },
| |
| ["err_template_spec_default_arg"]={
| |
| [i]="err_template_spec_default_arg",
| |
| [h]="default argument not permitted on an explicit %select{instantiation|specialization}0 of function %1",
| |
| [g]={{nil,nil,{"default argument not permitted on an explicit ",{"instantiation","specialization"}," of function B"}}},
| |
| [b]=k,
| |
| [e]="default argument not permitted on an explicit (?:instantiation|specialization) of function (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"62e10f0bdcaa",1255453374,"Diagnose attempts to add default function arguments to a","Diagnose attempts to add default function arguments to a\nspecialization. This completes C++ [temp.expl.spec]!\n\nllvm-svn: 83980"},
| |
| [j]={{H,618,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n // ...\n // C++ [dcl.fct.default]p4:\n // For non-template functions, default arguments can be added in\n // later declarations of a function in the same\n // scope. Declarations in different scopes have completely\n // distinct sets of default arguments. That is, declarations in\n // inner scopes do not acquire default arguments from\n // declarations in outer scopes, and vice versa. In a given\n // function declaration, all parameters subsequent to a\n // parameter with a default argument shall have default\n // arguments supplied in this or previous declarations. A\n // default argument shall not be redefined by a later\n // declaration (not even to the same value).\n //\n // C++ [dcl.fct.default]p6:\n // Except for member functions of class templates, the default arguments\n // in a member function definition that appears outside of the class\n // definition are added to the set of default arguments provided by the\n // member function declaration in the class definition.\n for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n // ...\n if (OldParamHasDfl && NewParamHasDfl) {\n // ...\n } else if (OldParamHasDfl) {\n // ...\n } else if (NewParamHasDfl) {\n if (New->getDescribedFunctionTemplate()) {\n // ...\n } else if (New->getTemplateSpecializationKind() != TSK_ImplicitInstantiation && New->getTemplateSpecializationKind() != TSK_Undeclared) {\n // ...\n Diag(NewParam->getLocation(), diag::err_template_spec_default_arg) << (New->getTemplateSpecializationKind() == TSK_ExplicitSpecialization) << New->getDeclName() << NewParam->getDefaultArgRange();"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp:10:22: error: default argument not permitted on an explicit specialization of function \'mf1\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp:15:27: error: default argument not permitted on an explicit specialization of function \'mf2\'"}
| |
| }
| |
| },
| |
| ["err_template_spec_extra_headers"]={
| |
| [i]="err_template_spec_extra_headers",
| |
| [h]="extraneous template parameter list in template specialization or out-of-line template definition",
| |
| [g]="extraneous template parameter list in template specialization or out-of-line template definition",
| |
| [b]=k,
| |
| [e]="extraneous template parameter list in template specialization or out\\-of\\-line template definition",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,3581,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n // ...\n // If there were too many template parameter lists, complain about that now.\n if (ParamIdx < ParamLists.size() - 1) {\n // ...\n if (!SuppressDiagnostic)\n Diag(ParamLists[ParamIdx]->getTemplateLoc(), AllExplicitSpecHeaders ? diag::warn_template_spec_extra_headers : diag::err_template_spec_extra_headers) << SourceRange(ParamLists[ParamIdx]->getTemplateLoc(), ParamLists[ParamLists.size() - 2]->getRAngleLoc());"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/crash-8204126.cpp"]={"clang/test/SemaTemplate/crash-8204126.cpp:4:3: error: extraneous template parameter list in template specialization or out-of-line template definition"}
| |
| }
| |
| },
| |
| ["err_template_spec_friend"]={
| |
| [i]="err_template_spec_friend",
| |
| [h]="template specialization declaration cannot be a friend",
| |
| [g]="template specialization declaration cannot be a friend",
| |
| [b]=k,
| |
| [e]="template specialization declaration cannot be a friend",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"3a88c1d784d8",1255444781,"Improve the internal representation and semantic analysis of friend","Improve the internal representation and semantic analysis of friend\nfunction templates.\n\nThis commit ensures that friend function templates are constructed as\nFunctionTemplateDecls rather than partial FunctionDecls (as they\npreviously were). It then implements template instantiation for friend\nfunction templates, injecting the friend function template only when\nno previous declaration exists at the time of instantiation. \n\nOh, and make sure that explicit specialization declarations are not\nfriends.\n\nllvm-svn: 83970"},
| |
| [j]={{r,8698,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n // ...\n if (TemplateParams && TemplateParams->size() > 0) {\n // ...\n } else if (TemplateParams) {\n if (TUK == TUK_Friend)\n Diag(KWLoc, diag::err_template_spec_friend) << FixItHint::CreateRemoval(SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc())) << SourceRange(LAngleLoc, RAngleLoc);"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:10:21: error: template specialization declaration cannot be a friend","clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:22:22: error: template specialization declaration cannot be a friend"}
| |
| }
| |
| },
| |
| ["err_template_spec_needs_header"]={
| |
| [i]="err_template_spec_needs_header",
| |
| [h]="template specialization requires \'template<>\'",
| |
| [g]="template specialization requires \'template<>\'",
| |
| [b]=k,
| |
| [e]="template specialization requires \'template\\<\\>\'",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,3393,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n // ...\n auto DiagnoseMissingExplicitSpecialization = [&](SourceRange Range) {\n // ...\n if (!SuppressDiagnostic)\n Diag(DeclLoc, diag::err_template_spec_needs_header) << Range << FixItHint::CreateInsertion(ExpectedTemplateLoc, \"template<> \");"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:12:34: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:22:11: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:23:17: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:42:14: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:44:8: error: template specialization requires \'template<>\'"}
| |
| }
| |
| },
| |
| ["err_template_spec_needs_template_parameters"]={
| |
| [i]="err_template_spec_needs_template_parameters",
| |
| [h]="template specialization or definition requires a template parameter list corresponding to the nested type %0",
| |
| [g]="template specialization or definition requires a template parameter list corresponding to the nested type A",
| |
| [b]=k,
| |
| [e]="template specialization or definition requires a template parameter list corresponding to the nested type (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"d8d297c0ac88",1248220411,"Basic parsing and semantic analysis for out-of-line definitions of the","Basic parsing and semantic analysis for out-of-line definitions of the\nmember functions of class templates, e.g.,\n\n template<typename T> \n struct X {\n void f(T);\n };\n\n template<typename T> X<T>::f(T) { /* ... */ }\n\nllvm-svn: 76692"},
| |
| [j]={{r,3540,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n // ...\n for (unsigned TypeIdx = 0, NumTypes = NestedTypes.size(); TypeIdx != NumTypes; ++TypeIdx) {\n // ...\n if (NeedNonemptyTemplateHeader) {\n // ...\n if (!SuppressDiagnostic)\n Diag(DeclLoc, diag::err_template_spec_needs_template_parameters) << T << getRangeOfTypeInNestedNameSpecifier(Context, T, SS);"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:283:13: error: template specialization or definition requires a template parameter list corresponding to the nested type \'A<T>\'"}
| |
| }
| |
| },
| |
| ["err_template_spec_redecl_global_scope"]={
| |
| [i]="err_template_spec_redecl_global_scope",
| |
| [h]="%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 must occur at global scope",
| |
| [g]={{nil,nil,{{tc,"class template partial",Fc,"variable template partial",pc,"member function","static data member","member class","member enumeration"}," specialization of B must occur at global scope"}}},
| |
| [b]=k,
| |
| [e]="(?:class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration) specialization of (.*?) must occur at global scope",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,8445,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n // ...\n // Make sure that this redeclaration (or definition) occurs in the same\n // scope or an enclosing namespace.\n if (!(DC->isFileContext() ? DC->Encloses(SpecializedContext) : DC->Equals(SpecializedContext))) {\n if (isa<TranslationUnitDecl>(SpecializedContext))\n S.Diag(Loc, diag::err_template_spec_redecl_global_scope) << EntityKind << Specialized;"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:121:18: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:122:16: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:126:18: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:127:16: error: variable template specialization of \'v1\' must occur at global scope"}
| |
| }
| |
| },
| |
| ["err_template_spec_redecl_out_of_scope"]={
| |
| [i]="err_template_spec_redecl_out_of_scope",
| |
| [h]={{nil,O,"%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 not in %select{a namespace enclosing %2|class %2 or an enclosing namespace}3"},{A,nil,"%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 not in a namespace enclosing %2"}},
| |
| [g]={{nil,O,{{tc,"class template partial",Fc,"variable template partial",pc,"member function","static data member","member class","member enumeration"}," specialization of B not in ",{"a namespace enclosing C","class C or an enclosing namespace"}}},{A,nil,{{tc,"class template partial",Fc,"variable template partial",pc,"member function","static data member","member class","member enumeration"}," specialization of B not in a namespace enclosing C"}}},
| |
| [b]=k,
| |
| [e]="(?:class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration) specialization of (.*?) not in (?:a namespace enclosing (.*?)|class (.*?) or an enclosing namespace)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,8449,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n // ...\n // Make sure that this redeclaration (or definition) occurs in the same\n // scope or an enclosing namespace.\n if (!(DC->isFileContext() ? DC->Encloses(SpecializedContext) : DC->Equals(SpecializedContext))) {\n if (isa<TranslationUnitDecl>(SpecializedContext))\n // ...\n else {\n // ...\n int Diag = diag::err_template_spec_redecl_out_of_scope;"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:81:25: error: class template specialization of \'X0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:119:20: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:120:16: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:124:20: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:125:16: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:199:28: error: member class specialization of \'Inner\' not in class \'X0\' or an enclosing namespace","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:202:33: error: member class specialization of \'Inner\' not in class \'X0\' or an enclosing namespace","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:235:23: error: class template specialization of \'InnerTemplate\' not in class \'X0<int>\' or an enclosing namespace"}
| |
| }
| |
| },
| |
| ["err_template_spec_syntax_non_template"]={
| |
| [i]="err_template_spec_syntax_non_template",
| |
| [h]={{nil,M,"identifier followed by \'<\' indicates a class template specialization but %0 %select{does not refer to a template|refers to a function template|<unused>|refers to a variable template|<unused>|<unused>|refers to a concept}1"},{y,D,"identifier followed by \'<\' indicates a class template specialization but %0 %select{does not refer to a template|refers to a function template|<unused>|refers to a variable template|<unused>|refers to a concept}1"},{E,nil,"identifier followed by \'<\' indicates a class template specialization but %0 %select{does not refer to a template|refers to a function template|<unused>|refers to a variable template|<unused>}1"}},
| |
| [g]={{nil,M,{"identifier followed by \'<\' indicates a class template specialization but A ",{"does not refer to a template","refers to a function template",sc,"refers to a variable template",sc,sc,"refers to a concept"}}},{y,D,{"identifier followed by \'<\' indicates a class template specialization but A ",{"does not refer to a template","refers to a function template",sc,"refers to a variable template",sc,"refers to a concept"}}},{E,nil,{"identifier followed by \'<\' indicates a class template specialization but A ",{"does not refer to a template","refers to a function template",sc,"refers to a variable template",sc}}}},
| |
| [b]=k,
| |
| [e]="identifier followed by \'\\<\' indicates a class template specialization but (.*?) (?:does not refer to a template|refers to a function template|\\<unused\\>|refers to a variable template|\\<unused\\>|\\<unused\\>|refers to a concept)",
| |
| [f]=a,
| |
| [d]=x,
| |
| [c]={K,1236199783,J,I},
| |
| [j]={{Qb,1802,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n if (Tok.is(tok::identifier)) {\n // ...\n } else if (Tok.is(tok::annot_template_id)) {\n // ...\n if (TemplateId && !TemplateId->mightBeType()) {\n // ...\n Diag(TemplateId->LAngleLoc, diag::err_template_spec_syntax_non_template) << TemplateId->Name << static_cast<int>(TemplateId->Kind) << Range;"}},
| |
| [l]={
| |
| ["clang/test/CXX/basic/basic.lookup/basic.lookup.elab/templateid.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.elab/templateid.cpp:13:14: error: identifier followed by \'<\' indicates a class template specialization but \'Ident\' refers to a function template"}
| |
| }
| |
| },
| |
| ["err_template_spec_unknown_kind"]={
| |
| [i]="err_template_spec_unknown_kind",
| |
| [h]="can only provide an explicit specialization for a class template, function template, variable template, or a member function, static data member, %select{or member class|member class, or member enumeration}0 of a class template",
| |
| [g]={{nil,nil,{"can only provide an explicit specialization for a class template, function template, variable template, or a member function, static data member, ",{"or member class","member class, or member enumeration"}," of a class template"}}},
| |
| [b]=k,
| |
| [e]="can only provide an explicit specialization for a class template, function template, variable template, or a member function, static data member, (?:or member class|member class, or member enumeration) of a class template",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"548886518d08",1254874412,"Refactor checking of the scope of explicit template specialization","Refactor checking of the scope of explicit template specialization\ndeclarations and explicit template instantiations, improving\ndiagnostics and making the code usable for function template\nspecializations (as well as class template specializations and partial\nspecializations). \n\nllvm-svn: 83436"},
| |
| [j]={{r,8418,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n // ...\n if (isa<ClassTemplateDecl>(Specialized))\n // ...\n else if (isa<VarTemplateDecl>(Specialized))\n // ...\n else if (isa<FunctionTemplateDecl>(Specialized))\n // ...\n else if (isa<CXXMethodDecl>(Specialized))\n // ...\n else if (isa<VarDecl>(Specialized))\n // ...\n else if (isa<RecordDecl>(Specialized))\n // ...\n else if (isa<EnumDecl>(Specialized) && S.getLangOpts().CPlusPlus11)\n // ...\n else {\n S.Diag(Loc, diag::err_template_spec_unknown_kind) << S.getLangOpts().CPlusPlus11;"}}
| |
| },
| |
| ["err_template_tag_noparams"]={
| |
| [i]="err_template_tag_noparams",
| |
| [h]="extraneous \'template<>\' in declaration of %0 %1",
| |
| [g]="extraneous \'template<>\' in declaration of A B",
| |
| [b]=k,
| |
| [e]="extraneous \'template\\<\\>\' in declaration of (.*?) (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"bbe8f4662117",1255014873,"Improve checking for specializations of member classes of class","Improve checking for specializations of member classes of class\ntemplates, and keep track of how those member classes were\ninstantiated or specialized. \n\nMake sure that we don\'t try to instantiate an explicitly-specialized\nmember class of a class template, when that explicit specialization\nwas a declaration rather than a definition.\n\nllvm-svn: 83547"},
| |
| [j]={{w,16817,"/// 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 // We only need to do this matching if we have template parameters\n // or a scope specifier, which also conveniently avoids this work\n // for non-C++ cases.\n if (TemplateParameterLists.size() > 0 || (SS.isNotEmpty() && TUK != TUK_Reference)) {\n if (TemplateParameterList *TemplateParams = MatchTemplateParametersToScopeSpecifier(KWLoc, NameLoc, SS, nullptr, TemplateParameterLists, TUK == TUK_Friend, isMemberSpecialization, Invalid)) {\n // ...\n if (TemplateParams->size() > 0) {\n // ...\n } else {\n // ...\n Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams) << TypeWithKeyword::getTagTypeKindName(Kind) << Name;"},{H,17279,"/// Handle a friend tag declaration where the scope specifier was\n/// templated.\nDeclResult Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc, unsigned TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, MultiTemplateParamsArg TempParamLists) {\n // ...\n if (TemplateParameterList *TemplateParams = MatchTemplateParametersToScopeSpecifier(TagLoc, NameLoc, SS, nullptr, TempParamLists, /*friend*/ true, IsMemberSpecialization, Invalid)) {\n if (TemplateParams->size() > 0) {\n // ...\n } else {\n // ...\n Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams) << TypeWithKeyword::getTagTypeKindName(Kind) << Name;"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/friend-template.cpp"]={"clang/test/SemaTemplate/friend-template.cpp:230:5: error: extraneous \'template<>\' in declaration of class \'B\'"}
| |
| }
| |
| },
| |
| ["err_template_template_parameter_not_at_least_as_constrained"]={
| |
| [i]={{nil,p,"err_template_template_parameter_not_at_least_as_constrained"}},
| |
| [h]={{nil,p,"template template argument %0 is more constrained than template template parameter %1"}},
| |
| [g]={{nil,p,"template template argument A is more constrained than template template parameter B"}},
| |
| [b]=k,
| |
| [e]="template template argument (.*?) is more constrained than template template parameter (.*?)",
| |
| [f]=a,
| |
| [d]={{nil,p,m}},
| |
| [c]={vc,1576172311,wc,xc},
| |
| [j]={{r,7820,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n // ...\n // C++1z [temp.arg.template]p3: (DR 150)\n // A template-argument matches a template template-parameter P when P\n // is at least as specialized as the template-argument A.\n // FIXME: We should enable RelaxedTemplateTemplateArgs by default as it is a\n // defect report resolution from C++17 and shouldn\'t be introduced by\n // concepts.\n if (getLangOpts().RelaxedTemplateTemplateArgs) {\n // ...\n if (isTemplateTemplateParameterAtLeastAsSpecializedAs(Params, Template, Arg.getLocation())) {\n // ...\n if (!IsParamAtLeastAsConstrained) {\n Diag(Arg.getLocation(), diag::err_template_template_parameter_not_at_least_as_constrained) << Template << Param << Arg.getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:14:4: error: template template argument \'Y\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:19:4: error: template template argument \'W\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:44:4: error: template template argument \'Y\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:49:4: error: template template argument \'W\' is more constrained than template template parameter \'P\'"}
| |
| }
| |
| },
| |
| ["err_template_template_parm_no_parms"]={
| |
| [i]="err_template_template_parm_no_parms",
| |
| [h]="template template parameter must have its own template parameters",
| |
| [g]="template template parameter must have its own template parameters",
| |
| [b]=k,
| |
| [e]="template template parameter must have its own template parameters",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"a02bb37a8c37",1287682009,"Diagnose the declaration of template template parameters that","Diagnose the declaration of template template parameters that\nthemselves have no template parameters. This is actually a restriction\ndue to the grammar of template template parameters, but we choose to\ndiagnose it in Sema to provide better recovery.\n\nllvm-svn: 117032"},
| |
| [j]={{r,1659,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n // ...\n if (Params->size() == 0) {\n Diag(Param->getLocation(), diag::err_template_template_parm_no_parms) << SourceRange(Params->getLAngleLoc(), Params->getRAngleLoc());"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.param/p1.cpp"]={"clang/test/CXX/temp/temp.param/p1.cpp:4:27: error: template template parameter must have its own template parameters"}
| |
| }
| |
| },
| |
| ["err_template_typedef"]={
| |
| [i]="err_template_typedef",
| |
| [h]="a typedef cannot be a template",
| |
| [g]="a typedef cannot be a template",
| |
| [b]=k,
| |
| [e]="a typedef cannot be a template",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"b52fabb2a8c2",1245798688,"Start propagating template parameter lists to the right places to","Start propagating template parameter lists to the right places to\nhandle function templates. There\'s no actual code for function\ntemplates yet, but at least we complain about typedef templates.\n\nllvm-svn: 74021"},
| |
| [j]={{w,6430,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n // ...\n if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef) {\n if (TemplateParamLists.size()) {\n Diag(D.getIdentifierLoc(), diag::err_template_typedef);"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/template-decl-fail.cpp"]={"clang/test/SemaTemplate/template-decl-fail.cpp:3:32: error: a typedef cannot be a template"}
| |
| }
| |
| },
| |
| ["err_template_unnamed_class"]={
| |
| [i]="err_template_unnamed_class",
| |
| [h]="cannot declare a class template with no name",
| |
| [g]="cannot declare a class template with no name",
| |
| [b]=k,
| |
| [e]="cannot declare a class template with no name",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{r,1842,"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 // There is no such thing as an unnamed class template.\n if (!Name) {\n Diag(KWLoc, diag::err_template_unnamed_class);"}}
| |
| },
| |
| ["err_template_variable_noparams"]={
| |
| [i]="err_template_variable_noparams",
| |
| [h]="extraneous \'template<>\' in declaration of variable %0",
| |
| [g]="extraneous \'template<>\' in declaration of variable A",
| |
| [b]=k,
| |
| [e]="extraneous \'template\\<\\>\' in declaration of variable (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"b09f3d82cc7e",1248283117,"Implement parsing and semantic analysis for out-of-line definitions of static","Implement parsing and semantic analysis for out-of-line definitions of static\ndata members of class templates. We don\'t instantiate the definitions yet,\nhowever.\n\nllvm-svn: 76756"},
| |
| [j]={{w,7631,"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 if (TemplateParams) {\n if (!TemplateParams->size() && D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n // ...\n Diag(TemplateParams->getTemplateLoc(), diag::err_template_variable_noparams) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:32:3: error: extraneous \'template<>\' in declaration of variable \'foo\'"}
| |
| }
| |
| },
| |
| ["err_templated_invalid_declaration"]={
| |
| [i]="err_templated_invalid_declaration",
| |
| [h]="a static_assert declaration cannot be a template",
| |
| [g]="a static_assert declaration cannot be a template",
| |
| [b]=k,
| |
| [e]="a static_assert declaration cannot be a template",
| |
| [f]=a,
| |
| [d]=x,
| |
| [c]={"e7c544d38800",1407184115,"A static_assert declaration cannot be a template; adding the diagnostic for this instead of silently...","A static_assert declaration cannot be a template; adding the diagnostic for this instead of silently accepting and producing possibly-unexpected behavior.\n\nllvm-svn: 214770"},
| |
| [j]={{xd,197,"/// 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::kw_static_assert)) {\n // ...\n Diag(Tok.getLocation(), diag::err_templated_invalid_declaration) << TemplateInfo.getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/Parser/cxx11-templates.cpp"]={"clang/test/Parser/cxx11-templates.cpp:5:3: error: a static_assert declaration cannot be a template","clang/test/Parser/cxx11-templates.cpp:9:1: error: a static_assert declaration cannot be a template"}
| |
| }
| |
| },
| |
| ["err_templated_using_directive_declaration"]={
| |
| [i]="err_templated_using_directive_declaration",
| |
| [h]="cannot template a using %select{directive|declaration}0",
| |
| [g]={{nil,nil,{"cannot template a using ",{"directive","declaration"}}}},
| |
| [b]=k,
| |
| [e]="cannot template a using (?:directive|declaration)",
| |
| [f]=a,
| |
| [d]=x,
| |
| [c]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select.","Merge some similar diagnostics using %select.\n\nllvm-svn: 253136"},
| |
| [j]={{Qb,503,"/// ParseUsingDirectiveOrDeclaration - Parse C++ using using-declaration or\n/// using-directive. Assumes that current token is \'using\'.\nParser::DeclGroupPtrTy Parser::ParseUsingDirectiveOrDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd, ParsedAttributes &Attrs) {\n // ...\n // \'using namespace\' means this is a using-directive.\n if (Tok.is(tok::kw_namespace)) {\n // Template parameters are always an error here.\n if (TemplateInfo.Kind) {\n // ...\n Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 0 /* directive */ << R << FixItHint::CreateRemoval(R);"},{Qb,708,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n/// using-declaration: [C++ 7.3.p3: namespace.udecl]\n/// \'using\' using-declarator-list[opt] ;\n///\n/// using-declarator-list: [C++1z]\n/// using-declarator \'...\'[opt]\n/// using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n/// using-declarator-list: [C++98-14]\n/// using-declarator\n///\n/// alias-declaration: C++11 [dcl.dcl]p1\n/// \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n/// using-enum-declaration: [C++20, dcl.enum]\n/// \'using\' elaborated-enum-specifier ;\n/// The terminal name of the elaborated-enum-specifier undergoes\n/// ordinary lookup\n///\n/// elaborated-enum-specifier:\n/// \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n // ...\n if (TryConsumeToken(tok::kw_enum, UELoc) && !InInitStatement) {\n // ...\n if (TemplateInfo.Kind) {\n // ...\n Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 1 /* declaration */ << R << FixItHint::CreateRemoval(R);"},{Qb,806,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n/// using-declaration: [C++ 7.3.p3: namespace.udecl]\n/// \'using\' using-declarator-list[opt] ;\n///\n/// using-declarator-list: [C++1z]\n/// using-declarator \'...\'[opt]\n/// using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n/// using-declarator-list: [C++98-14]\n/// using-declarator\n///\n/// alias-declaration: C++11 [dcl.dcl]p1\n/// \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n/// using-enum-declaration: [C++20, dcl.enum]\n/// \'using\' elaborated-enum-specifier ;\n/// The terminal name of the elaborated-enum-specifier undergoes\n/// ordinary lookup\n///\n/// elaborated-enum-specifier:\n/// \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n // ...\n // Diagnose an attempt to declare a templated using-declaration.\n // In C++11, alias-declarations can be templates:\n // template <...> using id = type;\n if (TemplateInfo.Kind) {\n // ...\n Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 1 /* declaration */ << R << FixItHint::CreateRemoval(R);"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/using-directive.cpp"]={"clang/test/SemaCXX/using-directive.cpp:131:22: error: cannot template a using directive"}
| |
| }
| |
| },
| |
| ["err_tentative_def_incomplete_type"]={
| |
| [i]="err_tentative_def_incomplete_type",
| |
| [h]="tentative definition has type %0 that is never completed",
| |
| [g]="tentative definition has type A that is never completed",
| |
| [b]=k,
| |
| [e]="tentative definition has type (.*?) that is never completed",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{qc,1314,"/// 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 for (TentativeDefinitionsType::iterator T = TentativeDefinitions.begin(ExternalSource.get()), TEnd = TentativeDefinitions.end(); T != TEnd; ++T) {\n // ...\n } else if (RequireCompleteType(VD->getLocation(), VD->getType(), diag::err_tentative_def_incomplete_type))"}},
| |
| [l]={
| |
| ["clang/test/Misc/verify.c"]={"clang/test/Misc/verify.c:6:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:7:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:10:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:11:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:12:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:13:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:14:10: error: tentative definition has type \'struct s\' that is never completed"}
| |
| }
| |
| },
| |
| ["err_test_module_file_extension_format"]={
| |
| [i]="err_test_module_file_extension_format",
| |
| [h]="-ftest-module-file-extension argument \'%0\' is not of the required form \'blockname:major:minor:hashed:user info\'",
| |
| [g]="-ftest-module-file-extension argument \'A\' is not of the required form \'blockname:major:minor:hashed:user info\'",
| |
| [b]=k,
| |
| [e]="\\-ftest\\-module\\-file\\-extension argument \'(.*?)\' is not of the required form \'blockname\\:major\\:minor\\:hashed\\:user info\'",
| |
| [f]=a,
| |
| [d]=a,
| |
| [c]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files.","Introduce module file extensions to piggy-back data onto module files.\n\nIntroduce the notion of a module file extension, which introduces\nadditional information into a module file at the time it is built that\ncan then be queried when the module file is read. Module file\nextensions are identified by a block name (which must be unique to the\nextension) and can write any bitstream records into their own\nextension block within the module file. When a module file is loaded,\nany extension blocks are matched up with module file extension\nreaders, that are per-module-file and are given access to the input\nbitstream.\n\nNote that module file extensions can only be introduced by\nprogrammatic clients that have access to the CompilerInvocation. There\nis only one such extension at the moment, which is used for testing\nthe module file extension harness. As a future direction, one could\nimagine allowing the plugin mechanism to introduce new module file\nextensions.\n\nllvm-svn: 251955"},
| |
| [j]={{"clang/lib/Frontend/CompilerInvocation.cpp",2765,"#include \"clang/Driver/Options.inc\"\n // ...\n for (const std::string &Arg : Args.getAllArgValues(OPT_ftest_module_file_extension_EQ)) {\n // ...\n if (parseTestModuleFileExtensionArg(Arg, BlockName, MajorVersion, MinorVersion, Hashed, UserInfo)) {\n Diags.Report(diag::err_test_module_file_extension_format) << Arg;"}}
| |
| },
| |
| ["err_test_module_file_extension_version"]={
| |
| [i]="err_test_module_file_extension_version",
| |
| [h]="test module file extension \'%0\' has different version (%1.%2) than expected (%3.%4)",
| |
| [g]="test module file extension \'A\' has different version (B.C) than expected (D.E)",
| |
| [b]=k,
| |
| [e]="test module file extension \'(.*?)\' has different version \\((.*?)\\.(.*?)\\) than expected \\((.*?)\\.(.*?)\\)",
| |
| [f]=a,
| |
| [d]=a,
| |
| [c]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files.","Introduce module file extensions to piggy-back data onto module files.\n\nIntroduce the notion of a module file extension, which introduces\nadditional information into a module file at the time it is built that\ncan then be queried when the module file is read. Module file\nextensions are identified by a block name (which must be unique to the\nextension) and can write any bitstream records into their own\nextension block within the module file. When a module file is loaded,\nany extension blocks are matched up with module file extension\nreaders, that are per-module-file and are given access to the input\nbitstream.\n\nNote that module file extensions can only be introduced by\nprogrammatic clients that have access to the CompilerInvocation. There\nis only one such extension at the moment, which is used for testing\nthe module file extension harness. As a future direction, one could\nimagine allowing the plugin mechanism to introduce new module file\nextensions.\n\nllvm-svn: 251955"},
| |
| [j]={{"clang/lib/Frontend/TestModuleFileExtension.cpp",122,"std::unique_ptr<ModuleFileExtensionReader> TestModuleFileExtension::createExtensionReader(const ModuleFileExtensionMetadata &Metadata, ASTReader &Reader, serialization::ModuleFile &Mod, const llvm::BitstreamCursor &Stream) {\n // ...\n if (std::make_pair(Metadata.MajorVersion, Metadata.MinorVersion) != std::make_pair(MajorVersion, MinorVersion)) {\n Reader.getDiags().Report(Mod.ImportLoc, diag::err_test_module_file_extension_version) << BlockName << Metadata.MajorVersion << Metadata.MinorVersion << MajorVersion << MinorVersion;"}},
| |
| [l]={
| |
| ["clang/test/Modules/extensions.c"]={"clang/test/Modules/extensions.c:31:2: error: test module file extension \'clang.testA\' has different version (2.5) than expected (1.3)","clang/test/Modules/extensions.c:31:2: error: test module file extension \'clang.testB\' has different version (7.3) than expected (3.2)"}
| |
| }
| |
| },
| |
| ["err_this_capture"]={
| |
| [i]="err_this_capture",
| |
| [h]="\'this\' cannot be %select{implicitly |}0captured in this context",
| |
| [g]={{nil,nil,{"\'this\' cannot be ",{"implicitly ",a},"captured in this context"}}},
| |
| [b]=k,
| |
| [e]="\'this\' cannot be (?:implicitly |)captured in this context",
| |
| [f]=a,
| |
| [d]="Lambda Issue",
| |
| [c]={"cdd11d4e7ef7",1328115861,"Introduce the lambda scope before determining explicit captures, which","Introduce the lambda scope before determining explicit captures, which\ncleans up and improves a few things:\n - We get rid of the ugly dance of computing all of the captures in\n data structures that clone those of CapturingScopeInfo, centralizing\n the logic for accessing/updating these data structures\n - We re-use the existing capture logic for \'this\', which actually\n works now.\n\nCleaned up some diagnostic wording in minor ways as well.\n\nllvm-svn: 149516"},
| |
| [j]={{P,1330,"bool Sema::CheckCXXThisCapture(SourceLocation Loc, const bool Explicit, bool BuildAndDiagnose, const unsigned *const FunctionScopeIndexToStopAt, const bool ByCopy) {\n // ...\n for (int idx = MaxFunctionScopesIndex; idx >= 0; idx--) {\n if (CapturingScopeInfo *CSI = dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) {\n // ...\n if (LSI && isGenericLambdaCallOperatorSpecialization(LSI->CallOperator)) {\n // This context can\'t implicitly capture \'this\'; fail out.\n if (BuildAndDiagnose) {\n Diag(Loc, diag::err_this_capture) << (Explicit && idx == MaxFunctionScopesIndex);"},{P,1352,"bool Sema::CheckCXXThisCapture(SourceLocation Loc, const bool Explicit, bool BuildAndDiagnose, const unsigned *const FunctionScopeIndexToStopAt, const bool ByCopy) {\n // ...\n for (int idx = MaxFunctionScopesIndex; idx >= 0; idx--) {\n if (CapturingScopeInfo *CSI = dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) {\n // ...\n // This context can\'t implicitly capture \'this\'; fail out.\n if (BuildAndDiagnose)\n Diag(Loc, diag::err_this_capture) << (Explicit && idx == MaxFunctionScopesIndex);"},{kd,1051,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n // ...\n for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n // ...\n if (ThisCaptureType.isNull()) {\n Diag(C->Loc, diag::err_this_capture) << true;"}},
| |
| [l]={
| |
| ["clang/test/Parser/lambda-misplaced-capture-default.cpp"]={"clang/test/Parser/lambda-misplaced-capture-default.cpp:20:7: error: \'this\' cannot be captured in this context"}
| |
| }
| |
| },
| |
| ["err_this_captured_by_reference"]={
| |
| [i]="err_this_captured_by_reference",
| |
| [h]="\'this\' cannot be captured by reference",
| |
| [g]="\'this\' cannot be captured by reference",
| |
| [b]=k,
| |
| [e]="\'this\' cannot be captured by reference",
| |
| [f]=a,
| |
| [d]=x,
| |
| [c]={"db0b9f126459",1312471847,"Parsing of C++0x lambda expressions, from John Freeman with help from","Parsing of C++0x lambda expressions, from John Freeman with help from\nDavid Blaikie!\n\nllvm-svn: 136876"},
| |
| [j]={{Vb,969,"/// Parse a lambda introducer.\n/// \\param Intro A LambdaIntroducer filled in with information about the\n/// contents of the lambda-introducer.\n/// \\param Tentative If non-null, we are disambiguating between a\n/// lambda-introducer and some other construct. In this mode, we do not\n/// produce any diagnostics or take any other irreversible action unless\n/// we\'re sure that this is a lambda-expression.\n/// \\return \\c true if parsing (or disambiguation) failed with a diagnostic and\n/// the caller should bail out / recover.\nbool Parser::ParseLambdaIntroducer(LambdaIntroducer &Intro, LambdaIntroducerTentativeParse *Tentative) {\n // ...\n while (Tok.isNot(tok::r_square)) {\n // ...\n if (Tok.is(tok::star)) {\n // ...\n } else if (Tok.is(tok::kw_this)) {\n // ...\n } else if (Tok.isOneOf(tok::amp, tok::equal) && NextToken().isOneOf(tok::comma, tok::r_square) && Intro.Default == LCD_None) {\n // ...\n } else {\n // ...\n if (Tok.is(tok::identifier)) {\n // ...\n } else if (Tok.is(tok::kw_this)) {\n return Invalid([&] {\n // ...\n Diag(Tok.getLocation(), diag::err_this_captured_by_reference);"}},
| |
| [l]={
| |
| ["clang/test/Parser/cxx0x-lambda-expressions.cpp"]={"clang/test/Parser/cxx0x-lambda-expressions.cpp:17:11: error: \'this\' cannot be captured by reference","clang/test/Parser/cxx0x-lambda-expressions.cpp:18:7: error: \'this\' cannot be captured by reference"}
| |
| }
| |
| },
| |
| ["err_this_static_member_func"]={
| |
| [i]="err_this_static_member_func",
| |
| [h]="\'this\' cannot be%select{| implicitly}0 used in a static member function declaration",
| |
| [g]={{nil,nil,{"\'this\' cannot be",{a," implicitly"}," used in a static member function declaration"}}},
| |
| [b]=k,
| |
| [e]="\'this\' cannot be(?:| implicitly) used in a static member function declaration",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"3024f07c1232",1334559922,"Implement C++11 [expr.prim.general]p3, which permits the use of \'this\'","Implement C++11 [expr.prim.general]p3, which permits the use of \'this\'\nin the declaration of a non-static member function after the\n(optional) cv-qualifier-seq, which in practice means in the exception\nspecification and late-specified return type. \n\nThe new scheme here used to manage \'this\' outside of a member function\nscope is more general than the Scope-based mechanism previously used\nfor non-static data member initializers and late-parsesd attributes,\nbecause it can also handle the cv-qualifiers on the member\nfunction. Note, however, that a separate pass is required for static\nmember functions to determine whether \'this\' was used, because we\nmight not know that we have a static function until after declaration\nmatching.\n\nFinally, this introduces name mangling for \'this\' and for the implicit\n\'this\', which is intended to match GCC\'s mangling. Independent\nverification for the new mangling test case would be appreciated.\n\nFixes PR10036 and PR12450.\n\nllvm-svn: 154799"},
| |
| [j]={{H,18588,"/// AST visitor that finds references to the \'this\' expression.\nclass FindCXXThisExpr : public RecursiveASTVisitor<FindCXXThisExpr> {\n // ...\n bool VisitCXXThisExpr(CXXThisExpr *E) {\n S.Diag(E->getLocation(), diag::err_this_static_member_func) << E->isImplicit();"}},
| |
| [l]={
| |
| ["clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:112:33: error: \'this\' cannot be implicitly used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:113:33: error: \'this\' cannot be used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:117:38: error: \'this\' cannot be implicitly used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:120:28: error: \'this\' cannot be implicitly used in a static member function declaration"}
| |
| }
| |
| },
| |
| ["err_thread_dynamic_init"]={
| |
| [i]="err_thread_dynamic_init",
| |
| [h]="initializer for thread-local variable must be a constant expression",
| |
| [g]="initializer for thread-local variable must be a constant expression",
| |
| [b]=k,
| |
| [e]="initializer for thread\\-local variable must be a constant expression",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer","Diagnose if a __thread or _Thread_local variable has a non-constant initializer\nor non-trivial destructor.\n\nllvm-svn: 179491"},
| |
| [j]={{w,14108,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n // ...\n if (var->getTLSKind() == VarDecl::TLS_Static) {\n if (var->getType().isDestructedType()) {\n // ...\n } else if (getLangOpts().CPlusPlus && var->hasInit()) {\n if (!checkConstInit()) {\n // ...\n Diag(CacheCulprit->getExprLoc(), diag::err_thread_dynamic_init) << CacheCulprit->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/declspec-thread.cpp"]={"clang/test/SemaCXX/declspec-thread.cpp:12:28: error: initializer for thread-local variable must be a constant expression","clang/test/SemaCXX/declspec-thread.cpp:19:28: error: initializer for thread-local variable must be a constant expression","clang/test/SemaCXX/declspec-thread.cpp:26:28: error: initializer for thread-local variable must be a constant expression"}
| |
| }
| |
| },
| |
| ["err_thread_non_global"]={
| |
| [i]="err_thread_non_global",
| |
| [h]="\'%0\' variables must have global storage",
| |
| [g]="\'A\' variables must have global storage",
| |
| [b]=k,
| |
| [e]="\'(.*?)\' variables must have global storage",
| |
| [f]=a,
| |
| [d]=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"},
| |
| [j]={{w,7764,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec()) {\n // C++11 [dcl.stc]p4:\n // When thread_local is applied to a variable of block scope the\n // storage-class-specifier static is implied if it does not appear\n // explicitly.\n // Core issue: \'static\' is not implied if the variable is declared\n // \'extern\'.\n if (NewVD->hasLocalStorage() && (SCSpec != DeclSpec::SCS_unspecified || TSCS != DeclSpec::TSCS_thread_local || !DC->isFunctionOrMethod()))\n Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_non_global) << DeclSpec::getSpecifierName(TSCS);"},{db,7314,"static void handleDeclspecThreadAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (VD->hasLocalStorage()) {\n S.Diag(AL.getLoc(), diag::err_thread_non_global) << \"__declspec(thread)\";"}},
| |
| [l]={
| |
| ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:46:3: error: \'_Thread_local\' variables must have global storage","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:54:3: error: \'__thread\' variables must have global storage"}
| |
| }
| |
| },
| |
| ["err_thread_non_thread"]={
| |
| [i]="err_thread_non_thread",
| |
| [h]="thread-local declaration of %0 follows non-thread-local declaration",
| |
| [g]="thread-local declaration of A follows non-thread-local declaration",
| |
| [b]=k,
| |
| [e]="thread\\-local declaration of (.*?) follows non\\-thread\\-local declaration",
| |
| [f]=a,
| |
| [d]=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"},
| |
| [j]={{w,4707,"/// 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 Diag(New->getLocation(), diag::err_thread_non_thread) << New->getDeclName();"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/cxx11-thread-local.cpp"]={"clang/test/SemaCXX/cxx11-thread-local.cpp:11:21: error: thread-local declaration of \'b\' follows non-thread-local declaration"}
| |
| }
| |
| },
| |
| ["err_thread_nontrivial_dtor"]={
| |
| [i]="err_thread_nontrivial_dtor",
| |
| [h]="type of thread-local variable has non-trivial destruction",
| |
| [g]="type of thread-local variable has non-trivial destruction",
| |
| [b]=k,
| |
| [e]="type of thread\\-local variable has non\\-trivial destruction",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer","Diagnose if a __thread or _Thread_local variable has a non-constant initializer\nor non-trivial destructor.\n\nllvm-svn: 179491"},
| |
| [j]={{w,14099,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n // ...\n if (var->getTLSKind() == VarDecl::TLS_Static) {\n if (var->getType().isDestructedType()) {\n // ...\n Diag(var->getLocation(), diag::err_thread_nontrivial_dtor);"}},
| |
| [l]={
| |
| ["clang/test/Sema/thread-specifier.c"]={"clang/test/Sema/thread-specifier.c:109:12: error: type of thread-local variable has non-trivial destruction"}
| |
| }
| |
| },
| |
| ["err_thread_thread_different_kind"]={
| |
| [i]="err_thread_thread_different_kind",
| |
| [h]="thread-local declaration of %0 with %select{static|dynamic}1 initialization follows declaration with %select{dynamic|static}1 initialization",
| |
| [g]={{nil,nil,{"thread-local declaration of A with ",{"static","dynamic"}," initialization follows declaration with ",{"dynamic","static"}," initialization"}}},
| |
| [b]=k,
| |
| [e]="thread\\-local declaration of (.*?) with (?:static|dynamic) initialization follows declaration with (?:dynamic|static) initialization",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"fd3834f7a1cc",1365821034,"Annotate flavor of TLS variable (statically or dynamically initialized) onto the AST.","Annotate flavor of TLS variable (statically or dynamically initialized) onto the AST.\n\nllvm-svn: 179447"},
| |
| [j]={{w,4717,"/// 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 // ...\n } else {\n // ...\n Diag(New->getLocation(), diag::err_thread_thread_different_kind) << New->getDeclName() << (New->getTLSKind() == VarDecl::TLS_Dynamic);"}},
| |
| [l]={
| |
| ["clang/test/Sema/thread-specifier.c"]={"clang/test/Sema/thread-specifier.c:74:19: error: thread-local declaration of \'t17\' with static initialization follows declaration with dynamic initialization","clang/test/Sema/thread-specifier.c:78:18: error: thread-local declaration of \'t18\' with dynamic initialization follows declaration with static initialization"}
| |
| }
| |
| },
| |
| ["err_thread_unsupported"]={
| |
| [i]="err_thread_unsupported",
| |
| [h]="thread-local storage is not supported for the current target",
| |
| [g]="thread-local storage is not supported for the current target",
| |
| [b]=k,
| |
| [e]="thread\\-local storage is not supported for the current target",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"daea3f62b561",1240177713,"Print an error for uses of __thread on targets which don\'t support it.","Print an error for uses of __thread on targets which don\'t support it.\n\nllvm-svn: 69553"},
| |
| [j]={{w,7779,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec()) {\n // C++11 [dcl.stc]p4:\n // When thread_local is applied to a variable of block scope the\n // storage-class-specifier static is implied if it does not appear\n // explicitly.\n // Core issue: \'static\' is not implied if the variable is declared\n // \'extern\'.\n if (NewVD->hasLocalStorage() && (SCSpec != DeclSpec::SCS_unspecified || TSCS != DeclSpec::TSCS_thread_local || !DC->isFunctionOrMethod()))\n // ...\n else if (!Context.getTargetInfo().isTLSSupported()) {\n if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n // ...\n } else\n Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_unsupported);"},{w,7903,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n if (EmitTLSUnsupportedError && ((getLangOpts().CUDA && DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) || (getLangOpts().OpenMPIsTargetDevice && OMPDeclareTargetDeclAttr::isDeclareTargetDeclaration(NewVD))))\n Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_unsupported);"},{w,7908,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n // ...\n if (EmitTLSUnsupportedError && (LangOpts.SYCLIsDevice || (LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice)))\n targetDiag(D.getIdentifierLoc(), diag::err_thread_unsupported);"},{db,7306,"static void handleDeclspecThreadAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (!S.Context.getTargetInfo().isTLSSupported()) {\n S.Diag(AL.getLoc(), diag::err_thread_unsupported);"},{n,396,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n // ...\n if (LangOpts.SYCLIsDevice || (LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice)) {\n if (!Context.getTargetInfo().isTLSSupported())\n if (const auto *VD = dyn_cast<VarDecl>(D))\n if (VD->getTLSKind() != VarDecl::TLS_None)\n targetDiag(*Locs.begin(), diag::err_thread_unsupported);"}},
| |
| [l]={
| |
| ["clang/test/SemaSYCL/prohibit-thread-local.cpp"]={"clang/test/SemaSYCL/prohibit-thread-local.cpp:29:9: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:31:9: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:33:12: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:35:12: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:18:26: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:20:20: error: thread-local storage is not supported for the current target"}
| |
| }
| |
| },
| |
| ["err_three_way_vector_comparison"]={
| |
| [i]={{nil,p,"err_three_way_vector_comparison"}},
| |
| [h]={{nil,p,"three-way comparison between vectors is not supported"}},
| |
| [g]={{nil,p,"three-way comparison between vectors is not supported"}},
| |
| [b]=k,
| |
| [e]="three\\-way comparison between vectors is not supported",
| |
| [f]=a,
| |
| [d]={{nil,p,a}},
| |
| [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"},
| |
| [j]={{n,13510,"/// CheckVectorCompareOperands - vector comparisons are a clang extension that\n/// operates on extended vector types. Instead of producing an IntTy result,\n/// like a scalar comparison, a vector comparison produces a vector of integer\n/// types.\nQualType Sema::CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n if (Opc == BO_Cmp) {\n Diag(Loc, diag::err_three_way_vector_comparison);"},{n,13671,"QualType Sema::CheckSizelessVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n if (Opc == BO_Cmp) {\n Diag(Loc, diag::err_three_way_vector_comparison);"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/compare-cxx2a.cpp"]={"clang/test/SemaCXX/compare-cxx2a.cpp:419:15: error: three-way comparison between vectors is not supported"}
| |
| }
| |
| },
| |
| ["err_throw_abstract_type"]={
| |
| [i]="err_throw_abstract_type",
| |
| [h]="cannot throw an object of abstract type %0",
| |
| [g]="cannot throw an object of abstract type A",
| |
| [b]=k,
| |
| [e]="cannot throw an object of abstract type (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"e8154339f46e",1271354739,"Diagnose attempts to throw an abstract class type.","Diagnose attempts to throw an abstract class type.\n\nllvm-svn: 101381"},
| |
| [j]={{P,1011,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n // ...\n if (!isPointer || !Ty->isVoidType()) {\n // ...\n if (RequireNonAbstractType(ThrowLoc, ExceptionObjectTy, diag::err_throw_abstract_type, E))"}},
| |
| [l]={
| |
| [ed]={"clang/test/SemaCXX/exceptions.cpp:112:5: error: cannot throw an object of abstract type \'foo\'"}
| |
| }
| |
| },
| |
| ["err_throw_incomplete"]={
| |
| [i]="err_throw_incomplete",
| |
| [h]="cannot throw object of incomplete type %0",
| |
| [g]="cannot throw object of incomplete type A",
| |
| [b]=k,
| |
| [e]="cannot throw object of incomplete type (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot...","Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into protected try-catch scopes.\n\nllvm-svn: 70242"},
| |
| [j]={{P,1001,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n // ...\n if (!isPointer || !Ty->isVoidType()) {\n if (RequireCompleteType(ThrowLoc, Ty, isPointer ? diag::err_throw_incomplete_ptr : diag::err_throw_incomplete, E->getSourceRange()))"}},
| |
| [l]={
| |
| [ed]={"clang/test/SemaCXX/exceptions.cpp:37:3: error: cannot throw object of incomplete type \'void\'"}
| |
| }
| |
| },
| |
| ["err_throw_incomplete_ptr"]={
| |
| [i]="err_throw_incomplete_ptr",
| |
| [h]="cannot throw pointer to object of incomplete type %0",
| |
| [g]="cannot throw pointer to object of incomplete type A",
| |
| [b]=k,
| |
| [e]="cannot throw pointer to object of incomplete type (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot...","Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into protected try-catch scopes.\n\nllvm-svn: 70242"},
| |
| [j]={{P,1000,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n // ...\n if (!isPointer || !Ty->isVoidType()) {\n if (RequireCompleteType(ThrowLoc, Ty, isPointer ? diag::err_throw_incomplete_ptr : diag::err_throw_incomplete, E->getSourceRange()))"}},
| |
| [l]={
| |
| [ed]={"clang/test/SemaCXX/exceptions.cpp:38:3: error: cannot throw pointer to object of incomplete type \'A\'"}
| |
| }
| |
| },
| |
| ["err_throw_sizeless"]={
| |
| [i]={{nil,q,"err_throw_sizeless"}},
| |
| [h]={{nil,q,"cannot throw object of sizeless type %0"}},
| |
| [g]={{nil,q,"cannot throw object of sizeless type A"}},
| |
| [b]=k,
| |
| [e]="cannot throw object of sizeless type (.*?)",
| |
| [f]=a,
| |
| [d]={{nil,q,m}},
| |
| [c]={U,1576908663,T,S},
| |
| [j]={{P,1006,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n // ...\n if (!isPointer || !Ty->isVoidType()) {\n // ...\n if (!isPointer && Ty->isSizelessType()) {\n Diag(ThrowLoc, diag::err_throw_sizeless) << Ty << E->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:361:3: error: cannot throw object of sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"}
| |
| }
| |
| },
| |
| ["err_tls_var_aligned_over_maximum"]={
| |
| [i]="err_tls_var_aligned_over_maximum",
| |
| [h]="alignment (%0) of thread-local variable %1 is greater than the maximum supported alignment (%2) for a thread-local variable on this target",
| |
| [g]="alignment (A) of thread-local variable B is greater than the maximum supported alignment (C) for a thread-local variable on this target",
| |
| [b]=k,
| |
| [e]="alignment \\((.*?)\\) of thread\\-local variable (.*?) is greater than the maximum supported alignment \\((.*?)\\) for a thread\\-local variable on this target",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"d30e2eefc3cf",1436907152,"Add a \"maximum TLS alignment\" characteristic to the target info, so it","Add a \"maximum TLS alignment\" characteristic to the target info, so it\ncan be different from the normal variable maximum.\nAdd an error diagnostic for when TLS variables exceed maximum TLS alignment.\nCurrenty only PS4 sets an explicit maximum TLS alignment.\n\nPatch by Charles Li!\n\nllvm-svn: 242198"},
| |
| [j]={{w,14367,"void Sema::CheckThreadLocalForLargeAlignment(VarDecl *VD) {\n // ...\n // Perform TLS alignment check here after attributes attached to the variable\n // which may affect the alignment have been processed. Only perform the check\n // if the target has a maximum TLS alignment (zero means no constraints).\n if (unsigned MaxAlign = Context.getTargetInfo().getMaxTLSAlign()) {\n // Protect the check so that it\'s not performed on dependent types and\n // dependent alignments (we can\'t determine the alignment in that case).\n if (!VD->hasDependentAlignment()) {\n // ...\n if (Context.getDeclAlign(VD) > MaxAlignChars) {\n Diag(VD->getLocation(), diag::err_tls_var_aligned_over_maximum) << (unsigned)Context.getDeclAlign(VD).getQuantity() << VD << (unsigned)MaxAlignChars.getQuantity();"},{db,4507,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n // ...\n if (VD) {\n // ...\n if (MaxTLSAlign && AlignVal > MaxTLSAlign && VD->getTLSKind() != VarDecl::TLS_None) {\n Diag(VD->getLocation(), diag::err_tls_var_aligned_over_maximum) << (unsigned)AlignVal << VD << MaxTLSAlign;"}},
| |
| [l]={
| |
| ["clang/test/Sema/tls_alignment.cpp"]={"clang/test/Sema/tls_alignment.cpp:37:44: error: alignment (64) of thread-local variable \'bar\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:40:44: error: alignment (64) of thread-local variable \'bar2\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:43:44: error: alignment (64) of thread-local variable \'bar3\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:46:44: error: alignment (64) of thread-local variable \'bar4\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:49:44: error: alignment (64) of thread-local variable \'bar5\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:65:30: error: alignment (64) of thread-local variable \'blah\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:76:51: error: alignment (64) of thread-local variable \'x\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:75:50: error: alignment (64) of thread-local variable \'b<64>\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:72:20: error: alignment (64) of thread-local variable \'b\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:73:20: error: alignment (64) of thread-local variable \'c\' is greater than the maximum supported alignment (32) for a thread-local variable on this target"}
| |
| }
| |
| },
| |
| ["err_too_few_args_in_macro_invoc"]={
| |
| [i]="err_too_few_args_in_macro_invoc",
| |
| [h]="too few arguments provided to function-like macro invocation",
| |
| [g]="too few arguments provided to function-like macro invocation",
| |
| [b]=k,
| |
| [e]="too few arguments provided to function\\-like macro invocation",
| |
| [f]=a,
| |
| [d]=G,
| |
| [c]={K,1236199783,J,I},
| |
| [j]={{Ec,1015,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation. This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n // ...\n if (NumActuals < MinArgsExpected) {\n // There are several cases where too few arguments is ok, handle them now.\n if (NumActuals == 0 && MinArgsExpected == 1) {\n // ...\n } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected || // A(x, ...) -> A(X)\n // ...\n } else if (!ContainsCodeCompletionTok) {\n // ...\n Diag(Tok, diag::err_too_few_args_in_macro_invoc);"},{Ec,1357,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n // ...\n already_lexed:\n // ...\n case tok::r_paren:\n // ...\n // The last \')\' has been reached; return the value if one found or\n // a diagnostic and a dummy value.\n if (Result) {\n // ...\n } else {\n // ...\n if (!SuppressDiagnostic)\n PP.Diag(Tok.getLocation(), diag::err_too_few_args_in_macro_invoc);"}},
| |
| [l]={
| |
| ["clang/test/Preprocessor/macro_fn.c"]={"clang/test/Preprocessor/macro_fn.c:20:5: error: too few arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:21:6: error: too few arguments provided to function-like macro invocation"}
| |
| }
| |
| },
| |
| ["err_too_large_for_fixed_point"]={
| |
| [i]={{nil,O,"err_too_large_for_fixed_point"}},
| |
| [h]={{nil,O,"this value is too large for this fixed point type"}},
| |
| [g]={{nil,O,"this value is too large for this fixed point type"}},
| |
| [b]=k,
| |
| [e]="this value is too large for this fixed point type",
| |
| [f]=a,
| |
| [d]={{nil,O,a}},
| |
| [c]={"db01c3adc6f9",1529515180,"[Fixed Point Arithmetic] Fixed Point Precision Bits and Fixed Point Literals","[Fixed Point Arithmetic] Fixed Point Precision Bits and Fixed Point Literals\n\nThis diff includes the logic for setting the precision bits for each primary fixed point type in the target info and logic for initializing a fixed point literal.\n\nFixed point literals are declared using the suffixes\n\n```\nhr: short _Fract\nuhr: unsigned short _Fract\nr: _Fract\nur: unsigned _Fract\nlr: long _Fract\nulr: unsigned long _Fract\nhk: short _Accum\nuhk: unsigned short _Accum\nk: _Accum\nuk: unsigned _Accum\n```\nErrors are also thrown for illegal literal values\n\n```\nunsigned short _Accum u_short_accum = 256.0uhk; // expected-error{{the integral part of this literal is too large for this unsigned _Accum type}}\n```\n\nDifferential Revision: https://reviews.llvm.org/D46915\n\nllvm-svn: 335148"},
| |
| [j]={{n,4010,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n // ...\n if (Literal.isFixedPointLiteral()) {\n // ...\n if (Literal.isFract && Val == MaxVal + 1 && !ValIsZero)\n // ...\n else if (Val.ugt(MaxVal) || Overflowed)\n Diag(Tok.getLocation(), diag::err_too_large_for_fixed_point);"}},
| |
| [l]={
| |
| ["clang/test/Frontend/fixed_point_errors.c"]={"clang/test/Frontend/fixed_point_errors.c:83:37: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:84:39: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:85:25: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:86:27: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:87:35: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:88:37: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:91:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:92:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:93:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:94:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:95:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:96:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:99:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:100:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:101:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:102:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:103:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:104:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:107:12: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:111:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:112:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:113:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:114:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:115:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:116:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:118:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:119:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:120:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:121:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:122:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:123:47: error: this value is too large for this fixed point type"}
| |
| }
| |
| },
| |
| ["err_too_many_args_in_macro_invoc"]={
| |
| [i]="err_too_many_args_in_macro_invoc",
| |
| [h]="too many arguments provided to function-like macro invocation",
| |
| [g]="too many arguments provided to function-like macro invocation",
| |
| [b]=k,
| |
| [e]="too many arguments provided to function\\-like macro invocation",
| |
| [f]=a,
| |
| [d]=G,
| |
| [c]={K,1236199783,J,I},
| |
| [j]={{Ec,929,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation. This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n // ...\n // If this is not a variadic macro, and too many args were specified, emit\n // an error.\n if (!isVariadic && NumActuals > MinArgsExpected && !ContainsCodeCompletionTok) {\n // ...\n Diag(TooManyArgsLoc, diag::err_too_many_args_in_macro_invoc);"},{Ec,1037,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation. This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n // ...\n if (NumActuals < MinArgsExpected) {\n // ...\n } else if (NumActuals > MinArgsExpected && !MI->isVariadic() && !ContainsCodeCompletionTok) {\n // ...\n Diag(MacroName, diag::err_too_many_args_in_macro_invoc);"},{Ec,1327,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n // ...\n already_lexed:\n // ...\n case tok::comma:\n if (!SuppressDiagnostic) {\n PP.Diag(Tok.getLocation(), diag::err_too_many_args_in_macro_invoc);"}},
| |
| [l]={
| |
| ["clang/test/Preprocessor/macro_fn.c"]={"clang/test/Preprocessor/macro_fn.c:11:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:12:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:16:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:18:8: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:24:9: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:27:5: error: too many arguments provided to function-like macro invocation"}
| |
| }
| |
| },
| |
| ["err_toomany_element_decls"]={
| |
| [i]="err_toomany_element_decls",
| |
| [h]="only one element declaration is allowed",
| |
| [g]="only one element declaration is allowed",
| |
| [b]=k,
| |
| [e]="only one element declaration is allowed",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{Z,2296,"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 if (!DS->isSingleDecl())\n return StmtError(Diag((*DS->decl_begin())->getLocation(), diag::err_toomany_element_decls));"}},
| |
| [l]={
| |
| ["clang/test/Parser/objc-forcollection-neg-2.m"]={"clang/test/Parser/objc-forcollection-neg-2.m:28:17: error: only one element declaration is allowed"}
| |
| }
| |
| },
| |
| ["err_trailing_requires_clause_on_deduction_guide"]={
| |
| [i]={{nil,p,"err_trailing_requires_clause_on_deduction_guide"}},
| |
| [h]={{nil,p,"deduction guide cannot have a requires clause"}},
| |
| [g]={{nil,p,"deduction guide cannot have a requires clause"}},
| |
| [b]=k,
| |
| [e]="deduction guide cannot have a requires clause",
| |
| [f]=a,
| |
| [d]={{nil,p,m}},
| |
| [c]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension.","Implement VectorType conditional operator GNU extension.\n\nGCC supports the conditional operator on VectorTypes that acts as a\n\'select\' in C++ mode. This patch implements the support. Types are\nconverted as closely to GCC\'s behavior as possible, though in a few\nplaces consistency with our existing vector type support was preferred.\n\nNote that this implementation is different from the OpenCL version in a\nnumber of ways, so it unfortunately required a different implementation.\n\nFirst, the SEMA rules and promotion rules are significantly different.\n\nSecondly, GCC implements COND[i] != 0 ? LHS[i] : RHS[i] (where i is in\nthe range 0- VectorSize, for each element). In OpenCL, the condition is\nCOND[i] < 0 ? LHS[i]: RHS[i].\n\nIn the process of implementing this, it was also required to make the\nexpression COND ? LHS : RHS type dependent if COND is type dependent,\nsince the type is now dependent on the condition. For example:\n\n T ? 1 : 2;\n\nIs not typically type dependent, since the result can be deduced from\nthe operands. HOWEVER, if T is a VectorType now, it could change this\nto a \'select\' (basically a swizzle with a non-constant mask) with the 1\nand 2 being promoted to vectors themselves.\n\nWhile this is a change, it is NOT a standards incompatible change. Based\non my (and D. Gregor\'s, at the time of writing the code) reading of the\nstandard, the expression is supposed to be type dependent if ANY\nsub-expression is type dependent.\n\nDifferential Revision: https://reviews.llvm.org/D71463"},
| |
| [j]={{w,9257,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n // ...\n if (Name.getNameKind() == DeclarationName::CXXConstructorName) {\n // ...\n } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {\n // ...\n } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {\n // ...\n } else if (Name.getNameKind() == DeclarationName::CXXDeductionGuideName) {\n if (TrailingRequiresClause)\n SemaRef.Diag(TrailingRequiresClause->getBeginLoc(), diag::err_trailing_requires_clause_on_deduction_guide) << TrailingRequiresClause->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:68:23: error: deduction guide cannot have a requires clause"}
| |
| }
| |
| },
| |
| ["err_trailing_return_in_parens"]={
| |
| [i]="err_trailing_return_in_parens",
| |
| [h]="trailing return type may not be nested within parentheses",
| |
| [g]="trailing return type may not be nested within parentheses",
| |
| [b]=k,
| |
| [e]="trailing return type may not be nested within parentheses",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"59006e4338ce",1298335013,"Fix a few auto-related issues:","Fix a few auto-related issues:\n\n * \'auto\' was being rejected on abstract-declarators with trailing return\ntypes and on typedefs with trailing return types. \'auto\' is always\nallowed in these cases. This was found while testing the fix for PR 9278.\n\n * A very poor diagnostic was being issued for auto (f() -> int): \"return\ntype must be \'auto\', not \'auto\'\". This is closely related to PR 9060.\n\n * Trailing return type handling was happening slightly too late,\nresulting in the checks for functions returning arrays and functions\nreturning functions being missed.\n\nllvm-svn: 126166"},
| |
| [j]={{R,5210,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n // ...\n for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n // ...\n case DeclaratorChunk::Function: {\n // ...\n // Check for auto functions and trailing return type and adjust the\n // return type accordingly.\n if (!D.isInvalidType()) {\n // trailing-return-type is only required if we\'re declaring a function,\n // and not, for instance, a pointer to a function.\n if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n // ...\n } else if (FTI.hasTrailingReturnType()) {\n // T must be exactly \'auto\' at this point. See CWG issue 681.\n if (isa<ParenType>(T)) {\n S.Diag(D.getBeginLoc(), diag::err_trailing_return_in_parens) << T << D.getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p2-cxx0x.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p2-cxx0x.cpp:6:1: error: trailing return type may not be nested within parentheses"}
| |
| }
| |
| },
| |
| ["err_trailing_return_without_auto"]={
| |
| [i]="err_trailing_return_without_auto",
| |
| [h]="function with trailing return type must specify return type \'auto\', not %0",
| |
| [g]="function with trailing return type must specify return type \'auto\', not A",
| |
| [b]=k,
| |
| [e]="function with trailing return type must specify return type \'auto\', not (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"7fb25418ed72",1285958690,"Implement the C++0x \"trailing return type\" feature, e.g.,","Implement the C++0x \"trailing return type\" feature, e.g.,\n\n auto f(int) -> int\n\nfrom Daniel Wallin!\n\n(With a few minor bug fixes from me).\n\nllvm-svn: 115322"},
| |
| [j]={{R,5231,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n // ...\n for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n // ...\n case DeclaratorChunk::Function: {\n // ...\n // Check for auto functions and trailing return type and adjust the\n // return type accordingly.\n if (!D.isInvalidType()) {\n // trailing-return-type is only required if we\'re declaring a function,\n // and not, for instance, a pointer to a function.\n if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n // ...\n } else if (FTI.hasTrailingReturnType()) {\n // T must be exactly \'auto\' at this point. See CWG issue 681.\n if (isa<ParenType>(T)) {\n // ...\n } else if (D.getName().getKind() == UnqualifiedIdKind::IK_DeductionGuideName) {\n // ...\n } else if (D.getContext() != DeclaratorContext::LambdaExpr && (T.hasQualifiers() || !isa<AutoType>(T) || cast<AutoType>(T)->getKeyword() != AutoTypeKeyword::Auto || cast<AutoType>(T)->isConstrained())) {\n S.Diag(D.getDeclSpec().getTypeSpecTypeLoc(), diag::err_trailing_return_without_auto) << T << D.getDeclSpec().getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp"]={"clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:41:7: error: function with trailing return type must specify return type \'auto\', not \'Large auto\'"}
| |
| }
| |
| },
| |
| ["err_two_right_angle_brackets_need_space"]={
| |
| [i]="err_two_right_angle_brackets_need_space",
| |
| [h]="a space is required between consecutive right angle brackets (use \'> >\')",
| |
| [g]="a space is required between consecutive right angle brackets (use \'> >\')",
| |
| [b]=k,
| |
| [e]="a space is required between consecutive right angle brackets \\(use \'\\> \\>\'\\)",
| |
| [f]=a,
| |
| [d]=x,
| |
| [c]={K,1236199783,J,I},
| |
| [j]={{xd,1204,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n // ...\n // Diagnose this situation as appropriate.\n if (!ObjCGenericList) {\n // ...\n unsigned DiagId = diag::err_two_right_angle_brackets_need_space;"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.param/p15.cpp"]={"clang/test/CXX/temp/temp.param/p15.cpp:6:8: error: a space is required between consecutive right angle brackets (use \'> >\')","clang/test/CXX/temp/temp.param/p15.cpp:8:12: error: a space is required between consecutive right angle brackets (use \'> >\')","clang/test/CXX/temp/temp.param/p15.cpp:9:5: error: a space is required between consecutive right angle brackets (use \'> >\')"}
| |
| }
| |
| },
| |
| ["err_type_attribute_wrong_type"]={
| |
| [i]="err_type_attribute_wrong_type",
| |
| [h]="\'%0\' only applies to %select{function|pointer|Objective-C object or block pointer}1 types; type here is %2",
| |
| [g]={{nil,nil,{"\'A\' only applies to ",{W,"pointer","Objective-C object or block pointer"}," types; type here is C"}}},
| |
| [b]=k,
| |
| [e]="\'(.*?)\' only applies to (?:function|pointer|Objective\\-C object or block pointer) types; type here is (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={ab,1625925174,bb,cb},
| |
| [j]={{R,108,"/// diagnoseBadTypeAttribute - Diagnoses a type attribute which\n/// doesn\'t apply to the given type.\nstatic void diagnoseBadTypeAttribute(Sema &S, const ParsedAttr &attr, QualType type) {\n // ...\n S.Diag(loc, attr.isRegularKeywordAttribute() ? diag::err_type_attribute_wrong_type : diag::warn_type_attribute_wrong_type) << name << WhichType << type;"}},
| |
| [l]={
| |
| ["clang/test/Parser/cxx0x-keyword-attributes.cpp"]={"clang/test/Parser/cxx0x-keyword-attributes.cpp:38:1: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:39:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:41:16: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:42:7: error: \'__arm_streaming\' only applies to function types; type here is \'int *\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:43:7: error: \'__arm_streaming\' only applies to function types; type here is \'int &\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:44:8: error: \'__arm_streaming\' only applies to function types; type here is \'int &&\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:45:20: error: \'__arm_streaming\' only applies to function types; type here is \'int[1]\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:72:9: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:72:25: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:9: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:25: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:43: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:59: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:91:1: error: \'__arm_streaming\' only applies to function types; type here is \'struct with_init_declarators\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:95:3: error: \'__arm_streaming\' only applies to function types; type here is \'struct with_init_declarators\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:107:14: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:37: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:53: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:1: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:17: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:80: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:96: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:135:7: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:135:34: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:140:9: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:141:30: error: \'__arm_streaming\' only applies to function types; type here is \'T\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:162:9: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:166:30: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:167:41: error: \'__arm_streaming\' only applies to function types; type here is \'struct struct_attr\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:212:15: error: \'__arm_streaming\' only applies to function types; type here is \'void\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:238:29: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:238:52: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:240:26: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:248:32: error: \'__arm_streaming\' only applies to function types; type here is \'int[5]\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:253:7: error: \'__arm_streaming\' only applies to function types; type here is \'bool\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:254:13: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:256:12: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:256:39: error: \'__arm_streaming\' only applies to function types; type here is \'char\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:266:10: error: \'__arm_streaming\' only applies to function types; type here is \'bool\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:273:8: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:283:37: error: \'__arm_streaming\' only applies to function types; type here is \'unsigned int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:285:39: error: \'__arm_streaming\' only applies to function types; type here is \'unsigned long\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:287:29: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:287:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:292:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:294:6: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:313:10: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:318:15: error: \'__arm_streaming\' only applies to function types; type here is \'int\'"}
| |
| }
| |
| },
| |
| ["err_type_available_only_in_default_eval_method"]={
| |
| [i]="err_type_available_only_in_default_eval_method",
| |
| [h]="cannot use type \'%0\' within \'#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit",
| |
| [g]="cannot use type \'A\' within \'#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit",
| |
| [b]=k,
| |
| [e]="cannot use type \'(.*?)\' within \'\\#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit",
| |
| [f]=a,
| |
| [d]=a,
| |
| [c]={ab,1625925174,bb,cb},
| |
| [j]={{n,384,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n // ...\n if (D->hasAttr<AvailableOnlyInDefaultEvalMethodAttr>()) {\n if (getLangOpts().getFPEvalMethod() != LangOptions::FPEvalMethodKind::FEM_UnsetOnCommandLine && PP.getLastFPEvalPragmaLocation().isValid() && PP.getCurrentFPEvalMethod() != getLangOpts().getFPEvalMethod())\n Diag(D->getLocation(), diag::err_type_available_only_in_default_eval_method) << D->getName();"}},
| |
| [l]={
| |
| ["clang/test/Sema/fp-eval-pragma-with-float-double_t-1.c"]={Tb,Ub,Tb,Ub,Tb,Ub,Tb,Ub,Tb,Ub,Tb,Ub,Tb,Ub,Tb,Ub,Tb,Ub}
| |
| }
| |
| },
| |
| ["err_type_constraint_missing_arguments"]={
| |
| [i]={{nil,p,"err_type_constraint_missing_arguments"}},
| |
| [h]={{nil,p,"%0 requires more than 1 template argument; provide the remaining arguments explicitly to use it here"}},
| |
| [g]={{nil,p,"A requires more than 1 template argument; provide the remaining arguments explicitly to use it here"}},
| |
| [b]=k,
| |
| [e]="(.*?) requires more than 1 template argument; provide the remaining arguments explicitly to use it here",
| |
| [f]=a,
| |
| [d]={{nil,p,m}},
| |
| [c]={vc,1576172311,wc,xc},
| |
| [j]={{r,1130,"bool Sema::CheckTypeConstraint(TemplateIdAnnotation *TypeConstr) {\n // ...\n if (!WereArgsSpecified && CD->getTemplateParameters()->getMinRequiredArguments() > 1) {\n Diag(TypeConstr->TemplateNameLoc, diag::err_type_constraint_missing_arguments) << CD;"}},
| |
| [l]={
| |
| ["clang/test/Parser/cxx2a-placeholder-type-constraint.cpp"]={"clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:65:15: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:66:10: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:67:3: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:68:3: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here"}
| |
| }
| |
| },
| |
| ["err_type_constraint_non_type_concept"]={
| |
| [i]={{nil,p,"err_type_constraint_non_type_concept"}},
| |
| [h]={{nil,p,"concept named in type constraint is not a type concept"}},
| |
| [g]={{nil,p,"concept named in type constraint is not a type concept"}},
| |
| [b]=k,
| |
| [e]="concept named in type constraint is not a type concept",
| |
| [f]=a,
| |
| [d]={{nil,p,m}},
| |
| [c]={vc,1576172311,wc,xc},
| |
| [j]={{r,1121,"bool Sema::CheckTypeConstraint(TemplateIdAnnotation *TypeConstr) {\n // ...\n // C++2a [temp.param]p4:\n // [...] The concept designated by a type-constraint shall be a type\n // concept ([temp.concept]).\n if (!CD->isTypeConcept()) {\n Diag(TypeConstr->TemplateNameLoc, diag::err_type_constraint_non_type_concept);"}},
| |
| [l]={
| |
| ["clang/test/Parser/cxx2a-placeholder-type-constraint.cpp"]={"clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:55:15: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:56:10: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:57:3: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:58:3: error: concept named in type constraint is not a type concept"}
| |
| }
| |
| },
| |
| ["err_type_defined_in_alias_template"]={
| |
| [i]="err_type_defined_in_alias_template",
| |
| [h]="%0 cannot be defined in a type alias template",
| |
| [g]="A cannot be defined in a type alias template",
| |
| [b]=k,
| |
| [e]="(.*?) cannot be defined in a type alias template",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates.","Implement support for C++0x alias templates.\n\nllvm-svn: 130953"},
| |
| [j]={{R,3782,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n // ...\n if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n // ...\n case DeclaratorContext::AliasTemplate:\n DiagID = diag::err_type_defined_in_alias_template;"}},
| |
| [l]={
| |
| ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:5:32: error: \'(unnamed struct at clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:5:32)\' cannot be defined in a type alias template"}
| |
| }
| |
| },
| |
| ["err_type_defined_in_condition"]={
| |
| [i]="err_type_defined_in_condition",
| |
| [h]="%0 cannot be defined in a condition",
| |
| [g]="A cannot be defined in a condition",
| |
| [b]=k,
| |
| [e]="(.*?) cannot be defined in a condition",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{R,3810,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n // ...\n if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n // ...\n case DeclaratorContext::Condition:\n // ...\n DiagID = diag::err_type_defined_in_condition;"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/condition.cpp"]={"clang/test/SemaCXX/condition.cpp:20:17: error: \'S\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:21:10: error: \'(unnamed struct at clang/test/SemaCXX/condition.cpp:21:10)\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:22:11: error: \'(unnamed enum at clang/test/SemaCXX/condition.cpp:22:11)\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:64:14: error: \'S\' cannot be defined in a condition"}
| |
| }
| |
| },
| |
| ["err_type_defined_in_enum"]={
| |
| [i]={{nil,A,"err_type_defined_in_enum"}},
| |
| [h]={{nil,A,"%0 cannot be defined in an enumeration"}},
| |
| [g]={{nil,A,"A cannot be defined in an enumeration"}},
| |
| [b]=k,
| |
| [e]="(.*?) cannot be defined in an enumeration",
| |
| [f]=a,
| |
| [d]={{nil,A,m}},
| |
| [c]={"8b0bbc6fe03b",1505505102,"[Sema] Error out early for tags defined inside an enumeration.","[Sema] Error out early for tags defined inside an enumeration.\n\nThis fixes PR28903 by avoiding access check for inner enum constant. We\nare performing access check because one enum constant references another\nand because enum is defined in CXXRecordDecl. But access check doesn\'t\nwork because FindDeclaringClass doesn\'t expect more than one EnumDecl\nand because inner enum has access AS_none due to not being an immediate\nchild of a record.\n\nThe change detects an enum is defined in wrong place and allows to skip\nparsing its body. Access check is skipped together with body parsing.\nThere was no crash in C, added test case to cover the new error.\n\nrdar://problem/28530809\n\nReviewers: rnk, doug.gregor, rsmith\n\nReviewed By: doug.gregor\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D37089\n\nllvm-svn: 313386"},
| |
| [j]={{w,17563,"CreateNewDecl:\n // ...\n if (!Invalid && getLangOpts().CPlusPlus && TUK == TUK_Definition && DC->getDeclKind() == Decl::Enum) {\n Diag(New->getLocation(), diag::err_type_defined_in_enum) << Context.getTagDeclType(New);"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/enum.cpp"]={"clang/test/SemaCXX/enum.cpp:123:18: error: \'PR28903::(unnamed enum at clang/test/SemaCXX/enum.cpp:123:18)\' cannot be defined in an enumeration"}
| |
| }
| |
| },
| |
| ["err_type_defined_in_for_range"]={
| |
| [i]="err_type_defined_in_for_range",
| |
| [h]="types may not be defined in a for range declaration",
| |
| [g]="types may not be defined in a for range declaration",
| |
| [b]=k,
| |
| [e]="types may not be defined in a for range declaration",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"02e85f3bc5fc",1302818966,"Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291).","Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291).\n\nllvm-svn: 129541"},
| |
| [j]={{Z,2504,"/// 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 (!DS->isSingleDecl()) {\n Diag(DS->getBeginLoc(), diag::err_type_defined_in_for_range);"}},
| |
| [l]={
| |
| ["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:18:8: error: types may not be defined in a for range declaration","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:21:8: error: types may not be defined in a for range declaration"}
| |
| }
| |
| },
| |
| ["err_type_defined_in_param_type"]={
| |
| [i]="err_type_defined_in_param_type",
| |
| [h]="%0 cannot be defined in a parameter type",
| |
| [g]="A cannot be defined in a parameter type",
| |
| [b]=k,
| |
| [e]="(.*?) cannot be defined in a parameter type",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag","When we parse a tag specifier, keep track of whether that tag\nspecifier resulted in the creation of a new TagDecl node, which\nhappens either when the tag specifier was a definition or when the tag\nspecifier was the first declaration of that tag type. This information\nhas several uses, the first of which is implemented in this commit:\n\n 1) In C++, one is not allowed to define tag types within a type\n specifier (e.g., static_cast<struct S { int x; } *>(0) is\n ill-formed) or within the result or parameter types of a\n function. We now diagnose this.\n\n 2) We can extend DeclGroups to contain information about any tags\n that are declared/defined within the declaration specifiers of a\n variable, e.g.,\n\n struct Point { int x, y, z; } p;\n\n This will help improve AST printing and template instantiation,\n among other things.\n\n 3) For C99, we can keep track of whether a tag type is defined\n within the type of a parameter, to properly cope with cases like,\n e.g.,\n\n int bar(struct T2 { int x; } y) {\n struct T2 z;\n }\n\n We can also do similar things wherever there is a type specifier,\n e.g., to keep track of where the definition of S occurs in this\n legal C99 code:\n\n (struct S { int x, y; } *)0\n\n \n\nllvm-svn: 72555"},
| |
| [j]={{w,17629,"CreateNewDecl:\n // ...\n // If we\'re declaring or defining a tag in function prototype scope in C,\n // note that this type can only be used within the function and add it to\n // the list of decls to inject into the function definition scope.\n if ((Name || Kind == TTK_Enum) && getNonFieldDeclScope(S)->isFunctionPrototypeScope()) {\n if (getLangOpts().CPlusPlus) {\n // C++ [dcl.fct]p6:\n // Types shall not be defined in return or parameter types.\n if (TUK == TUK_Definition && !IsTypeSpecifier) {\n Diag(Loc, diag::err_type_defined_in_param_type) << Name;"},{R,3804,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n // ...\n if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n // ...\n case DeclaratorContext::Prototype:\n case DeclaratorContext::LambdaExprParameter:\n case DeclaratorContext::ObjCParameter:\n case DeclaratorContext::ObjCResult:\n case DeclaratorContext::KNRTypeList:\n case DeclaratorContext::RequiresExpr:\n // ...\n DiagID = diag::err_type_defined_in_param_type;"}},
| |
| [l]={
| |
| ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:4:7: error: (null) cannot be defined in a parameter type","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:5:11: error: (null) cannot be defined in a parameter type"}
| |
| }
| |
| },
| |
| ["err_type_defined_in_result_type"]={
| |
| [i]="err_type_defined_in_result_type",
| |
| [h]="%0 cannot be defined in the result type of a function",
| |
| [g]="A cannot be defined in the result type of a function",
| |
| [b]=k,
| |
| [e]="(.*?) cannot be defined in the result type of a function",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag","When we parse a tag specifier, keep track of whether that tag\nspecifier resulted in the creation of a new TagDecl node, which\nhappens either when the tag specifier was a definition or when the tag\nspecifier was the first declaration of that tag type. This information\nhas several uses, the first of which is implemented in this commit:\n\n 1) In C++, one is not allowed to define tag types within a type\n specifier (e.g., static_cast<struct S { int x; } *>(0) is\n ill-formed) or within the result or parameter types of a\n function. We now diagnose this.\n\n 2) We can extend DeclGroups to contain information about any tags\n that are declared/defined within the declaration specifiers of a\n variable, e.g.,\n\n struct Point { int x, y, z; } p;\n\n This will help improve AST printing and template instantiation,\n among other things.\n\n 3) For C99, we can keep track of whether a tag type is defined\n within the type of a parameter, to properly cope with cases like,\n e.g.,\n\n int bar(struct T2 { int x; } y) {\n struct T2 z;\n }\n\n We can also do similar things wherever there is a type specifier,\n e.g., to keep track of where the definition of S occurs in this\n legal C99 code:\n\n (struct S { int x, y; } *)0\n\n \n\nllvm-svn: 72555"},
| |
| [j]={{R,5411,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n // ...\n for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n // ...\n case DeclaratorChunk::Function: {\n // ...\n if (LangOpts.CPlusPlus && D.getDeclSpec().hasTagDefinition()) {\n // ...\n S.Diag(Tag->getLocation(), diag::err_type_defined_in_result_type) << Context.getTypeDeclType(Tag);"}},
| |
| [l]={
| |
| ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:7:1: error: \'(unnamed enum at clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:7:1)\' cannot be defined in the result type of a function"}
| |
| }
| |
| },
| |
| ["err_type_defined_in_type_specifier"]={
| |
| [i]="err_type_defined_in_type_specifier",
| |
| [h]="%0 cannot be defined in a type specifier",
| |
| [g]="A cannot be defined in a type specifier",
| |
| [b]=k,
| |
| [e]="(.*?) cannot be defined in a type specifier",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag","When we parse a tag specifier, keep track of whether that tag\nspecifier resulted in the creation of a new TagDecl node, which\nhappens either when the tag specifier was a definition or when the tag\nspecifier was the first declaration of that tag type. This information\nhas several uses, the first of which is implemented in this commit:\n\n 1) In C++, one is not allowed to define tag types within a type\n specifier (e.g., static_cast<struct S { int x; } *>(0) is\n ill-formed) or within the result or parameter types of a\n function. We now diagnose this.\n\n 2) We can extend DeclGroups to contain information about any tags\n that are declared/defined within the declaration specifiers of a\n variable, e.g.,\n\n struct Point { int x, y, z; } p;\n\n This will help improve AST printing and template instantiation,\n among other things.\n\n 3) For C99, we can keep track of whether a tag type is defined\n within the type of a parameter, to properly cope with cases like,\n e.g.,\n\n int bar(struct T2 { int x; } y) {\n struct T2 z;\n }\n\n We can also do similar things wherever there is a type specifier,\n e.g., to keep track of where the definition of S occurs in this\n legal C99 code:\n\n (struct S { int x, y; } *)0\n\n \n\nllvm-svn: 72555"},
| |
| [j]={{w,17556,"CreateNewDecl:\n // ...\n // C++11 [dcl.type]p3:\n // A type-specifier-seq shall not define a class or enumeration [...].\n if (!Invalid && getLangOpts().CPlusPlus && (IsTypeSpecifier || IsTemplateParamOrArg) && TUK == TUK_Definition) {\n Diag(New->getLocation(), diag::err_type_defined_in_type_specifier) << Context.getTagDeclType(New);"},{R,3794,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n // ...\n if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n // ...\n case DeclaratorContext::TypeName:\n case DeclaratorContext::FunctionalCast:\n case DeclaratorContext::ConversionId:\n case DeclaratorContext::TemplateParam:\n case DeclaratorContext::CXXNew:\n case DeclaratorContext::CXXCatch:\n case DeclaratorContext::ObjCCatch:\n case DeclaratorContext::TemplateArg:\n case DeclaratorContext::TemplateTypeArg:\n case DeclaratorContext::Association:\n DiagID = diag::err_type_defined_in_type_specifier;"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/PR16677.cpp"]={"clang/test/SemaCXX/PR16677.cpp:11:7: error: \'Derived\' cannot be defined in a type specifier"}
| |
| }
| |
| },
| |
| ["err_type_mismatch_continuation_class"]={
| |
| [i]="err_type_mismatch_continuation_class",
| |
| [h]="type of property %0 in class extension does not match property type in primary class",
| |
| [g]="type of property A in class extension does not match property type in primary class",
| |
| [b]=k,
| |
| [e]="type of property (.*?) in class extension does not match property type in primary class",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"22b405c7aa40",1322505507,"objc: turn warning for property type mismatch in ","objc: turn warning for property type mismatch in \nprimary and its continuation class into error.\n// rdar://10142679\n\nllvm-svn: 145255"},
| |
| [j]={{hb,544,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n // ...\n if (!Context.hasSameType(PIDecl->getType(), PDecl->getType())) {\n // ...\n if (!isa<ObjCObjectPointerType>(PrimaryClassPropertyT) || !isa<ObjCObjectPointerType>(ClassExtPropertyT) || (!isObjCPointerConversion(ClassExtPropertyT, PrimaryClassPropertyT, ConvertedType, IncompatibleObjC)) || IncompatibleObjC) {\n Diag(AtLoc, diag::err_type_mismatch_continuation_class) << PDecl->getType();"}},
| |
| [l]={
| |
| ["clang/test/SemaObjC/continuation-class-property.m"]={"clang/test/SemaObjC/continuation-class-property.m:41:1: error: type of property \'NSString *\' in class extension does not match property type in primary class","clang/test/SemaObjC/continuation-class-property.m:42:1: error: type of property \'NSRect\' in class extension does not match property type in primary class"}
| |
| }
| |
| },
| |
| ["err_type_pack_element_out_of_bounds"]={
| |
| [i]="err_type_pack_element_out_of_bounds",
| |
| [h]="a parameter pack may not be accessed at an out of bounds index",
| |
| [g]="a parameter pack may not be accessed at an out of bounds index",
| |
| [b]=k,
| |
| [e]="a parameter pack may not be accessed at an out of bounds index",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"6ad68551c3fb",1467336249,"[Feature] Add a builtin for indexing into parameter packs. Patch by Louis Dionne.","[Feature] Add a builtin for indexing into parameter packs. Patch by Louis Dionne.\n\nThis patch adds a __nth_element builtin that allows fetching the n-th type of a\nparameter pack with very little compile-time overhead. The patch was inspired by\nr252036 and r252115 by David Majnemer, which add a similar __make_integer_seq\nbuiltin for efficiently creating a std::integer_sequence.\n\nReviewed as D15421. http://reviews.llvm.org/D15421\n\nllvm-svn: 274316"},
| |
| [j]={{r,3717,"static QualType checkBuiltinTemplateIdType(Sema &SemaRef, BuiltinTemplateDecl *BTD, ArrayRef<TemplateArgument> Converted, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n // ...\n case BTK__type_pack_element:\n // ...\n // If the Index is out of bounds, the program is ill-formed.\n if (Index >= Ts.pack_size()) {\n SemaRef.Diag(TemplateArgs[0].getLocation(), diag::err_type_pack_element_out_of_bounds);"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/type_pack_element.cpp"]={"clang/test/SemaCXX/type_pack_element.cpp:44:51: error: a parameter pack may not be accessed at an out of bounds index"}
| |
| }
| |
| },
| |
| ["err_type_safety_unknown_flag"]={
| |
| [i]="err_type_safety_unknown_flag",
| |
| [h]="invalid comparison flag %0; use \'layout_compatible\' or \'must_be_null\'",
| |
| [g]="invalid comparison flag A; use \'layout_compatible\' or \'must_be_null\'",
| |
| [b]=k,
| |
| [e]="invalid comparison flag (.*?); use \'layout_compatible\' or \'must_be_null\'",
| |
| [f]=a,
| |
| [d]=x,
| |
| [c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'","Add support for \"type safety\" attributes that allow checking that \'void *\'\nfunction arguments and arguments for variadic functions are of a particular\ntype which is determined by some other argument to the same function call.\n\nUsecases include:\n* MPI library implementations, where these attributes enable checking that\n buffer type matches the passed MPI_Datatype;\n* for HDF5 library there is a similar usecase as MPI;\n* checking types of variadic functions\' arguments for functions like\n fcntl() and ioctl().\n\nllvm-svn: 162067"},
| |
| [j]={{jb,1639,"void Parser::ParseTypeTagForDatatypeAttribute(IdentifierInfo &AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n // ...\n while (TryConsumeToken(tok::comma)) {\n // ...\n if (Flag->isStr(\"layout_compatible\"))\n // ...\n else if (Flag->isStr(\"must_be_null\"))\n // ...\n else {\n Diag(Tok, diag::err_type_safety_unknown_flag) << Flag;"}},
| |
| [l]={
| |
| ["clang/test/Sema/attr-type-safety.c"]={"clang/test/Sema/attr-type-safety.c:15:72: error: invalid comparison flag \'not_a_flag\'; use \'layout_compatible\' or \'must_be_null\'","clang/test/Sema/attr-type-safety.c:17:90: error: invalid comparison flag \'not_a_flag\'; use \'layout_compatible\' or \'must_be_null\'"}
| |
| }
| |
| },
| |
| ["err_type_tag_for_datatype_not_ice"]={
| |
| [i]="err_type_tag_for_datatype_not_ice",
| |
| [h]="\'type_tag_for_datatype\' attribute requires the initializer to be an %select{integer|integral}0 constant expression",
| |
| [g]={{nil,nil,{"\'type_tag_for_datatype\' attribute requires the initializer to be an ",{"integer","integral"}," constant expression"}}},
| |
| [b]=k,
| |
| [e]="\'type_tag_for_datatype\' attribute requires the initializer to be an (?:integer|integral) constant expression",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'","Add support for \"type safety\" attributes that allow checking that \'void *\'\nfunction arguments and arguments for variadic functions are of a particular\ntype which is determined by some other argument to the same function call.\n\nUsecases include:\n* MPI library implementations, where these attributes enable checking that\n buffer type matches the passed MPI_Datatype;\n* for HDF5 library there is a similar usecase as MPI;\n* checking types of variadic functions\' arguments for functions like\n fcntl() and ioctl().\n\nllvm-svn: 162067"},
| |
| [j]={{w,14508,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n // ...\n for (const auto *I : ThisDecl->specific_attrs<TypeTagForDatatypeAttr>()) {\n // ...\n if (!(MagicValueInt = MagicValueExpr->getIntegerConstantExpr(Context))) {\n Diag(I->getRange().getBegin(), diag::err_type_tag_for_datatype_not_ice) << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/Sema/warn-type-safety.cpp"]={"clang/test/Sema/warn-type-safety.cpp:16:45: error: \'type_tag_for_datatype\' attribute requires the initializer to be an integral constant expression"}
| |
| }
| |
| },
| |
| ["err_type_tag_for_datatype_too_large"]={
| |
| [i]="err_type_tag_for_datatype_too_large",
| |
| [h]="\'type_tag_for_datatype\' attribute requires the initializer to be an %select{integer|integral}0 constant expression that can be represented by a 64 bit integer",
| |
| [g]={{nil,nil,{"\'type_tag_for_datatype\' attribute requires the initializer to be an ",{"integer","integral"}," constant expression that can be represented by a 64 bit integer"}}},
| |
| [b]=k,
| |
| [e]="\'type_tag_for_datatype\' attribute requires the initializer to be an (?:integer|integral) constant expression that can be represented by a 64 bit integer",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'","Add support for \"type safety\" attributes that allow checking that \'void *\'\nfunction arguments and arguments for variadic functions are of a particular\ntype which is determined by some other argument to the same function call.\n\nUsecases include:\n* MPI library implementations, where these attributes enable checking that\n buffer type matches the passed MPI_Datatype;\n* for HDF5 library there is a similar usecase as MPI;\n* checking types of variadic functions\' arguments for functions like\n fcntl() and ioctl().\n\nllvm-svn: 162067"},
| |
| [j]={{w,14514,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n // ...\n for (const auto *I : ThisDecl->specific_attrs<TypeTagForDatatypeAttr>()) {\n // ...\n if (MagicValueInt->getActiveBits() > 64) {\n Diag(I->getRange().getBegin(), diag::err_type_tag_for_datatype_too_large) << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange();"}}
| |
| },
| |
| ["err_type_trait_arity"]={
| |
| [i]="err_type_trait_arity",
| |
| [h]="type trait requires %0%select{| or more}1 argument%select{|s}2; have %3 argument%s3",
| |
| [g]={{nil,nil,{"type trait requires A",{a," or more"}," argument",{a,kc},"; have D argumentD"}}},
| |
| [b]=k,
| |
| [e]="type trait requires (.*?)(?:| or more) argument(?:|s); have (.*?) argument(.*?)",
| |
| [f]=a,
| |
| [d]=x,
| |
| [c]={"29c42f2a25d6",1330069114,"Implement a new type trait __is_trivially_constructible(T, Args...)","Implement a new type trait __is_trivially_constructible(T, Args...)\nthat provides the behavior of the C++11 library trait\nstd::is_trivially_constructible<T, Args...>, which can\'t be\nimplemented purely as a library.\n\nSince __is_trivially_constructible can have zero or more arguments, I\nneeded to add Yet Another Type Trait Expression Class, this one\nhandling arbitrary arguments. The next step will be to migrate\nUnaryTypeTrait and BinaryTypeTrait over to this new, more general\nTypeTrait class.\n\nFixes the Clang side of <rdar://problem/10895483> / PR12038.\n\nllvm-svn: 151352"},
| |
| [j]={{P,5565,"bool Sema::CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N) {\n if (Arity && N != Arity) {\n Diag(Loc, diag::err_type_trait_arity) << Arity << 0 << (Arity > 1) << (int)N << SourceRange(Loc);"},{P,5571,"bool Sema::CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N) {\n // ...\n if (!Arity && N == 0) {\n Diag(Loc, diag::err_type_trait_arity) << 1 << 1 << 1 << (int)N << SourceRange(Loc);"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/type-trait-eval-crash-issue-57008.cpp"]={"clang/test/SemaCXX/type-trait-eval-crash-issue-57008.cpp:5:32: error: type trait requires 1 or more arguments; have 0 arguments"}
| |
| }
| |
| },
| |
| ["err_type_unsupported"]={
| |
| [i]="err_type_unsupported",
| |
| [h]="%0 is not supported on this target",
| |
| [g]="A is not supported on this target",
| |
| [b]=k,
| |
| [e]="(.*?) is not supported on this target",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"50f29e06a1b6",1460540985,"Enable support for __float128 in Clang","Enable support for __float128 in Clang\n\nThis patch corresponds to review:\nhttp://reviews.llvm.org/D15120\n\nIt adds support for the __float128 keyword, literals and a target feature to\nenable it. This support is disabled by default on all targets and any target\nthat has support for this type is free to add it.\n\nBased on feedback that I\'ve received from target maintainers, this appears to\nbe the right thing for most targets. I have not heard from the maintainers of\nX86 which I believe supports this type. I will subsequently investigate the\nimpact of enabling this on X86.\n\nllvm-svn: 266186"},
| |
| [j]={{R,1447,"/// 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_bitint: {\n if (!S.Context.getTargetInfo().hasBitIntType())\n S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"_BitInt\";"},{R,1507,"/// 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_int128:\n if (!S.Context.getTargetInfo().hasInt128Type() && !(S.getLangOpts().SYCLIsDevice || S.getLangOpts().CUDAIsDevice || (S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice)))\n S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__int128\";"},{R,1520,"/// 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_float16:\n // CUDA host and device may have different _Float16 support, therefore\n // do not diagnose _Float16 usage to avoid false alarm.\n // ToDo: more precise diagnostics for CUDA.\n if (!S.Context.getTargetInfo().hasFloat16Type() && !S.getLangOpts().CUDA && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"_Float16\";"},{R,1529,"/// 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_BFloat16:\n if (!S.Context.getTargetInfo().hasBFloat16Type() && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice) && !S.getLangOpts().SYCLIsDevice)\n S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__bf16\";"},{R,1553,"/// 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_float128:\n if (!S.Context.getTargetInfo().hasFloat128Type() && !S.getLangOpts().SYCLIsDevice && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__float128\";"},{R,1561,"/// 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_ibm128:\n if (!S.Context.getTargetInfo().hasIbm128Type() && !S.getLangOpts().SYCLIsDevice && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__ibm128\";"}}
| |
| },
| |
| ["err_typecheck_address_of"]={
| |
| [i]="err_typecheck_address_of",
| |
| [h]={{nil,q,"address of %select{bit-field|vector element|property expression|register variable|matrix element}0 requested"},{p,nil,"address of %select{bit-field|vector element|property expression|register variable}0 requested"}},
| |
| [g]={{nil,q,{"address of ",{"bit-field","vector element","property expression","register variable","matrix element"}," requested"}},{p,nil,{"address of ",{"bit-field","vector element","property expression","register variable"}," requested"}}},
| |
| [b]=k,
| |
| [e]="address of (?:bit\\-field|vector element|property expression|register variable|matrix element) requested",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{qc,688,"#endif\n // ...\n if (Kind == CK_ArrayToPointerDecay) {\n // ...\n // C17 6.7.1p6 footnote 124: The implementation can treat any register\n // declaration simply as an auto declaration. However, whether or not\n // addressable storage is actually used, the address of any part of an\n // object declared with storage-class specifier register cannot be\n // computed, either explicitly(by use of the unary & operator as discussed\n // in 6.5.3.2) or implicitly(by converting an array name to a pointer as\n // discussed in 6.3.2.1).Thus, the only operator that can be applied to an\n // array declared with storage-class specifier register is sizeof.\n if (VK == VK_PRValue && !getLangOpts().CPlusPlus && !E->isPRValue()) {\n if (const auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n if (const auto *VD = dyn_cast<VarDecl>(DRE->getDecl())) {\n if (VD->getStorageClass() == SC_Register) {\n Diag(E->getExprLoc(), diag::err_typecheck_address_of) << /*register variable*/ 3 << E->getSourceRange();"},{n,14861,"static void diagnoseAddressOfInvalidType(Sema &S, SourceLocation Loc, Expr *E, unsigned Type) { S.Diag(Loc, diag::err_typecheck_address_of) << Type << E->getSourceRange(); }"}},
| |
| [l]={
| |
| ["clang/test/SemaObjC/property-expression-error.m"]={"clang/test/SemaObjC/property-expression-error.m:16:2: error: address of property expression requested"}
| |
| }
| |
| },
| |
| ["err_typecheck_addrof_dtor"]={
| |
| [i]="err_typecheck_addrof_dtor",
| |
| [h]="taking the address of a destructor",
| |
| [g]="taking the address of a destructor",
| |
| [b]=k,
| |
| [e]="taking the address of a destructor",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"915d169c6a73",1381398281,"Sema: Taking the address of a dtor is illegal per C++ [class.dtor]p2.","Sema: Taking the address of a dtor is illegal per C++ [class.dtor]p2.\n\nEmit a proper error instead of crashing in CodeGen. PR16892.\n\nllvm-svn: 192345"},
| |
| [j]={{n,14994,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n // ...\n if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n // ...\n } else if (isa<ObjCSelectorExpr>(op)) {\n // ...\n } else if (lval == Expr::LV_MemberFunction) {\n // ...\n // Taking the address of a dtor is illegal per C++ [class.dtor]p2.\n if (isa<CXXDestructorDecl>(MD))\n Diag(OpLoc, diag::err_typecheck_addrof_dtor) << op->getSourceRange();"}}
| |
| },
| |
| ["err_typecheck_addrof_temporary"]={
| |
| [i]="err_typecheck_addrof_temporary",
| |
| [h]="taking the address of a temporary object of type %0",
| |
| [g]="taking the address of a temporary object of type A",
| |
| [b]=k,
| |
| [e]="taking the address of a temporary object of type (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function","PR15132: Replace \"address expression must be an lvalue or a function\ndesignator\" diagnostic with more correct and more human-friendly \"cannot take\naddress of rvalue of type \'T\'\".\n\nFor the case of & &T::f, provide a custom diagnostic, rather than unhelpfully\nsaying \"cannot take address of rvalue of type \'<overloaded function type>\'\".\n\nFor the case of &array_temporary, treat it just like a class temporary\n(including allowing it as an extension); the existing diagnostic wording\nfor the class temporary case works fine.\n\nllvm-svn: 174262"},
| |
| [j]={{n,14935,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n // ...\n if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n // ...\n Diag(OpLoc, isSFINAEContext() ? diag::err_typecheck_addrof_temporary : diag::ext_typecheck_addrof_temporary) << op->getType() << op->getSourceRange();"}}
| |
| },
| |
| ["err_typecheck_ambiguous_condition"]={
| |
| [i]="err_typecheck_ambiguous_condition",
| |
| [h]="conversion %diff{from $ to $|between types}0,1 is ambiguous",
| |
| [g]={{nil,nil,{"conversion ",{"from A to B","between types"}," is ambiguous"}}},
| |
| [b]=k,
| |
| [e]="conversion (?:from (.*?) to (.*?)|between types) is ambiguous",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"0b51c729c9c3",1253649195,"Issue good ambiguity diagnostic when convesion fails.","Issue good ambiguity diagnostic when convesion fails.\n\nllvm-svn: 82565"},
| |
| [j]={{P,4248,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType using the pre-computed implicit\n/// conversion sequence ICS. Returns the converted\n/// expression. Action is the kind of conversion we\'re performing,\n/// used in the error message.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const ImplicitConversionSequence &ICS, AssignmentAction Action, CheckedConversionKind CCK) {\n // ...\n case ImplicitConversionSequence::AmbiguousConversion:\n ICS.DiagnoseAmbiguousConversion(*this, From->getExprLoc(), PDiag(diag::err_typecheck_ambiguous_condition) << From->getSourceRange());"},{Q,9648,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitOverloadFailed:\n case FK_UserConversionOverloadFailed:\n // ...\n case OR_Ambiguous:\n FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), Failure == FK_UserConversionOverloadFailed ? (S.PDiag(diag::err_typecheck_ambiguous_condition) << OnlyArg->getType() << DestType << Args[0]->getSourceRange()) : (S.PDiag(diag::err_ref_init_ambiguous) << DestType << OnlyArg->getType() << Args[0]->getSourceRange())), S, OCD_AmbiguousCandidates, Args);"},{Pb,3774,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n // ...\n if (OvResult == OR_Ambiguous)\n Diag(From->getBeginLoc(), diag::err_typecheck_ambiguous_condition) << From->getType() << ToType << From->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/CXX/dcl.dcl/p4-0x.cpp"]={"clang/test/CXX/dcl.dcl/p4-0x.cpp:19:15: error: conversion from \'U\' to \'bool\' is ambiguous"}
| |
| }
| |
| },
| |
| ["err_typecheck_arc_assign_externally_retained"]={
| |
| [i]={{nil,E,"err_typecheck_arc_assign_externally_retained"}},
| |
| [h]={{nil,E,"variable declared with \'objc_externally_retained\' cannot be modified in ARC"}},
| |
| [g]={{nil,E,"variable declared with \'objc_externally_retained\' cannot be modified in ARC"}},
| |
| [b]=k,
| |
| [e]="variable declared with \'objc_externally_retained\' cannot be modified in ARC",
| |
| [f]=a,
| |
| [d]={{nil,E,"ARC Semantic Issue"}},
| |
| [c]={"1e36882b5291",1546626786,"[ObjCARC] Add an new attribute, objc_externally_retained","[ObjCARC] Add an new attribute, objc_externally_retained\n\nThis attribute, called \"objc_externally_retained\", exposes clang\'s\nnotion of pseudo-__strong variables in ARC. Pseudo-strong variables\n\"borrow\" their initializer, meaning that they don\'t retain/release\nit, instead assuming that someone else is keeping their value alive.\n\nIf a function is annotated with this attribute, implicitly strong\nparameters of that function aren\'t implicitly retained/released in\nthe function body, and are implicitly const. This is useful to expose\nfor performance reasons, most functions don\'t need the extra safety\nof the retain/release, so programmers can opt out as needed.\n\nThis attribute can also apply to declarations of local variables,\nwith similar effect.\n\nDifferential revision: https://reviews.llvm.org/D55865\n\nllvm-svn: 350422"},
| |
| [j]={{n,14313,"/// 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_ConstQualified:\n // ...\n // In ARC, use some specialized diagnostics for occasions where we\n // infer \'const\'. These are always pseudo-strong variables.\n if (S.getLangOpts().ObjCAutoRefCount) {\n // ...\n if (declRef && isa<VarDecl>(declRef->getDecl())) {\n // ...\n // Use the normal diagnostic if it\'s pseudo-__strong but the\n // user actually wrote \'const\'.\n if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n // ...\n if (method && var == method->getSelfDecl()) {\n // ...\n } else if (var->hasAttr<ObjCExternallyRetainedAttr>() || isa<ParmVarDecl>(var)) {\n DiagID = diag::err_typecheck_arc_assign_externally_retained;"}},
| |
| [l]={
| |
| ["clang/test/SemaObjC/externally-retained.m"]={"clang/test/SemaObjC/externally-retained.m:18:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:19:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:20:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:26:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:36:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:45:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:51:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:61:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:68:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:74:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:81:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:85:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:91:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:95:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:103:11: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:107:11: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:114:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC"}
| |
| }
| |
| },
| |
| ["err_typecheck_arc_assign_self"]={
| |
| [i]="err_typecheck_arc_assign_self",
| |
| [h]="cannot assign to \'self\' outside of a method in the init family",
| |
| [g]="cannot assign to \'self\' outside of a method in the init family",
| |
| [b]=k,
| |
| [e]="cannot assign to \'self\' outside of a method in the init family",
| |
| [f]=a,
| |
| [d]="ARC Semantic Issue",
| |
| [c]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal. Fixes <rdar://problem/10416568>.","ARC: make assignment to \'self\' within class methods illegal. Fixes <rdar://problem/10416568>.\n\nllvm-svn: 144572"},
| |
| [j]={{n,14309,"/// 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_ConstQualified:\n // ...\n // In ARC, use some specialized diagnostics for occasions where we\n // infer \'const\'. These are always pseudo-strong variables.\n if (S.getLangOpts().ObjCAutoRefCount) {\n // ...\n if (declRef && isa<VarDecl>(declRef->getDecl())) {\n // ...\n // Use the normal diagnostic if it\'s pseudo-__strong but the\n // user actually wrote \'const\'.\n if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n // ...\n if (method && var == method->getSelfDecl()) {\n DiagID = method->isClassMethod() ? diag::err_typecheck_arc_assign_self_class_method : diag::err_typecheck_arc_assign_self;"}},
| |
| [l]={
| |
| ["clang/test/ARCMT/checking.m"]={"clang/test/ARCMT/checking.m:142:8: error: cannot assign to \'self\' outside of a method in the init family"}
| |
| }
| |
| },
| |
| ["err_typecheck_arc_assign_self_class_method"]={
| |
| [i]="err_typecheck_arc_assign_self_class_method",
| |
| [h]="cannot assign to \'self\' in a class method",
| |
| [g]="cannot assign to \'self\' in a class method",
| |
| [b]=k,
| |
| [e]="cannot assign to \'self\' in a class method",
| |
| [f]=a,
| |
| [d]="ARC Semantic Issue",
| |
| [c]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal. Fixes <rdar://problem/10416568>.","ARC: make assignment to \'self\' within class methods illegal. Fixes <rdar://problem/10416568>.\n\nllvm-svn: 144572"},
| |
| [j]={{n,14304,"/// 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_ConstQualified:\n // ...\n // In ARC, use some specialized diagnostics for occasions where we\n // infer \'const\'. These are always pseudo-strong variables.\n if (S.getLangOpts().ObjCAutoRefCount) {\n // ...\n if (declRef && isa<VarDecl>(declRef->getDecl())) {\n // ...\n // Use the normal diagnostic if it\'s pseudo-__strong but the\n // user actually wrote \'const\'.\n if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n // ...\n if (method && var == method->getSelfDecl()) {\n DiagID = method->isClassMethod() ? diag::err_typecheck_arc_assign_self_class_method : diag::err_typecheck_arc_assign_self;"}}
| |
| },
| |
| ["err_typecheck_arithmetic_incomplete_or_sizeless_type"]={
| |
| [i]={{nil,q,"err_typecheck_arithmetic_incomplete_or_sizeless_type"}},
| |
| [h]={{nil,q,"arithmetic on a pointer to %select{an incomplete|sizeless}0 type %1"}},
| |
| [g]={{nil,q,{"arithmetic on a pointer to ",{"an incomplete","sizeless"}," type B"}}},
| |
| [b]=k,
| |
| [e]="arithmetic on a pointer to (?:an incomplete|sizeless) type (.*?)",
| |
| [f]=a,
| |
| [d]={{nil,q,m}},
| |
| [c]={U,1576908663,T,S},
| |
| [j]={{n,11577,"/// Emit error if Operand is incomplete pointer type\n///\n/// \\returns True if pointer has incomplete type\nstatic bool checkArithmeticIncompletePointerType(Sema &S, SourceLocation Loc, Expr *Operand) {\n // ...\n return S.RequireCompleteSizedType(Loc, PointeeTy, diag::err_typecheck_arithmetic_incomplete_or_sizeless_type, Operand->getSourceRange());"}},
| |
| [l]={
| |
| ["clang/test/Sema/empty1.c"]={"clang/test/Sema/empty1.c:74:12: error: arithmetic on a pointer to an incomplete type \'struct A\'","clang/test/Sema/empty1.c:82:12: error: arithmetic on a pointer to an incomplete type \'struct emp_1[]\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_arr_assign_enumeration"]={
| |
| [i]="err_typecheck_arr_assign_enumeration",
| |
| [h]="fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this",
| |
| [g]="fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this",
| |
| [b]=k,
| |
| [e]="fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this",
| |
| [f]=a,
| |
| [d]="ARC Semantic Issue",
| |
| [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"},
| |
| [j]={{"clang/lib/ARCMigrate/TransARCAssign.cpp",58,"class ARCAssignChecker : public RecursiveASTVisitor<ARCAssignChecker> {\n // ...\n bool VisitBinaryOperator(BinaryOperator *Exp) {\n // ...\n if (declRef && isa<VarDecl>(declRef->getDecl())) {\n // ...\n if (var->isARCPseudoStrong()) {\n // ...\n if (Pass.TA.clearDiagnostic(diag::err_typecheck_arr_assign_enumeration, Exp->getOperatorLoc())) {"},{n,14343,"/// 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_ConstQualified:\n // ...\n // In ARC, use some specialized diagnostics for occasions where we\n // infer \'const\'. These are always pseudo-strong variables.\n if (S.getLangOpts().ObjCAutoRefCount) {\n // ...\n if (declRef && isa<VarDecl>(declRef->getDecl())) {\n // ...\n // Use the normal diagnostic if it\'s pseudo-__strong but the\n // user actually wrote \'const\'.\n if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n // ...\n if (method && var == method->getSelfDecl()) {\n // ...\n } else if (var->hasAttr<ObjCExternallyRetainedAttr>() || isa<ParmVarDecl>(var)) {\n // ...\n } else {\n DiagID = diag::err_typecheck_arr_assign_enumeration;"}},
| |
| [l]={
| |
| ["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:306:7: error: fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this"}
| |
| }
| |
| },
| |
| ["err_typecheck_array_not_modifiable_lvalue"]={
| |
| [i]="err_typecheck_array_not_modifiable_lvalue",
| |
| [h]="array type %0 is not assignable",
| |
| [g]="array type A is not assignable",
| |
| [b]=k,
| |
| [e]="array type (.*?) is not assignable",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,14347,"/// 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_ArrayType:\n case Expr::MLV_ArrayTemporary:\n DiagID = diag::err_typecheck_array_not_modifiable_lvalue;"}}
| |
| },
| |
| ["err_typecheck_assign_const"]={
| |
| [i]="err_typecheck_assign_const",
| |
| [h]={{nil,A,"%select{cannot assign to return value because function %1 returns a const value|cannot assign to variable %1 with const-qualified type %2|cannot assign to %select{non-|}1static data member %2 with const-qualified type %3|cannot assign to non-static data member within const member function %1|cannot assign to %select{variable %2|non-static data member %2|lvalue}1 with %select{|nested }3const-qualified data member %4|read-only variable is not assignable}0"},{o,nil,"%select{cannot assign to return value because function %1 returns a const value|cannot assign to variable %1 with const-qualified type %2|cannot assign to %select{non-|}1static data member %2 with const-qualified type %3|cannot assign to non-static data member within const member function %1|read-only variable is not assignable}0"}},
| |
| [g]={{nil,A,{{"cannot assign to return value because function B returns a const value","cannot assign to variable B with const-qualified type C",{"cannot assign to ",{"non-",a},"static data member C with const-qualified type D"},"cannot assign to non-static data member within const member function B",{"cannot assign to ",{"variable C","non-static data member C",id}," with ",{a,"nested "},"const-qualified data member E"},"read-only variable is not assignable"}}},{o,nil,{{"cannot assign to return value because function B returns a const value","cannot assign to variable B with const-qualified type C",{"cannot assign to ",{"non-",a},"static data member C with const-qualified type D"},"cannot assign to non-static data member within const member function B","read-only variable is not assignable"}}}},
| |
| [b]=k,
| |
| [e]="(?:cannot assign to return value because function (.*?) returns a const value|cannot assign to variable (.*?) with const\\-qualified type (.*?)|cannot assign to (?:non\\-|)static data member (.*?) with const\\-qualified type (.*?)|cannot assign to non\\-static data member within const member function (.*?)|cannot assign to (?:variable (.*?)|non\\-static data member (.*?)|lvalue) with (?:|nested )const\\-qualified data member (.*?)|read\\-only variable is not assignable)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,14105,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n // ...\n // Loop to process MemberExpr chains.\n while (true) {\n // ...\n if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n // ...\n if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n // ...\n if (!IsTypeModifiable(Field->getType(), IsDereference)) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMember << false /*static*/ << Field << Field->getType();"},{n,14119,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n // ...\n // Loop to process MemberExpr chains.\n while (true) {\n // ...\n if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n // ...\n if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n // ...\n } else if (const VarDecl *VDecl = dyn_cast<VarDecl>(VD)) {\n if (VDecl->getType().isConstQualified()) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMember << true /*static*/ << VDecl << VDecl->getType();"},{n,14149,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n // ...\n if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n // ...\n if (FD && !IsTypeModifiable(FD->getReturnType(), IsDereference)) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstFunction << FD;"},{n,14162,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n // ...\n if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n // ...\n } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n // Point to variable declaration.\n if (const ValueDecl *VD = DRE->getDecl()) {\n if (!IsTypeModifiable(VD->getType(), IsDereference)) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstVariable << VD << VD->getType();"},{n,14175,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n // ...\n if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n // ...\n } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n // ...\n } else if (isa<CXXThisExpr>(E)) {\n if (const DeclContext *DC = S.getFunctionLevelDeclContext()) {\n if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(DC)) {\n if (MD->isConst()) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMethod << MD;"},{n,14213,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n // ...\n S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstUnknown;"},{n,14218,"static void DiagnoseRecursiveConstFields(Sema &S, const ValueDecl *VD, const RecordType *Ty, SourceLocation Loc, SourceRange Range, OriginalExprKind OEK, bool &DiagnosticEmitted) {\n // ...\n // We walk the record hierarchy breadth-first to ensure that we print\n // diagnostics in field nesting order.\n while (RecordTypeList.size() > NextToCheckIndex) {\n // ...\n for (const FieldDecl *Field : RecordTypeList[NextToCheckIndex]->getDecl()->fields()) {\n // ...\n if (FieldTy.isConstQualified()) {\n if (!DiagnosticEmitted) {\n S.Diag(Loc, diag::err_typecheck_assign_const) << Range << NestedConstMember << OEK << VD << IsNested << Field;"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/cxx0x-constexpr-const.cpp"]={"clang/test/SemaCXX/cxx0x-constexpr-const.cpp:7:5: error: cannot assign to variable \'x\' with const-qualified type \'const int\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_bool_condition"]={
| |
| [i]="err_typecheck_bool_condition",
| |
| [h]="value of type %0 is not contextually convertible to \'bool\'",
| |
| [g]="value of type A is not contextually convertible to \'bool\'",
| |
| [b]=k,
| |
| [e]="value of type (.*?) is not contextually convertible to \'bool\'",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{Pb,5744,"/// PerformContextuallyConvertToBool - Perform a contextual conversion\n/// of the expression From to bool (C++0x [conv]p3).\nExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {\n // ...\n if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))\n return Diag(From->getBeginLoc(), diag::err_typecheck_bool_condition) << From->getType() << From->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/Parser/decomposed-condition.cpp"]={"clang/test/Parser/decomposed-condition.cpp:38:12: error: value of type \'Na\' is not contextually convertible to \'bool\'","clang/test/Parser/decomposed-condition.cpp:49:15: error: value of type \'Na\' is not contextually convertible to \'bool\'","clang/test/Parser/decomposed-condition.cpp:60:15: error: value of type \'Na\' is not contextually convertible to \'bool\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_call_different_arg_types"]={
| |
| [i]={{nil,v,"err_typecheck_call_different_arg_types"}},
| |
| [h]={{nil,v,"arguments are of different types%diff{ ($ vs $)|}0,1"}},
| |
| [g]={{nil,v,{"arguments are of different types",{" (A vs B)",a}}}},
| |
| [b]=k,
| |
| [e]="arguments are of different types(?: \\((.*?) vs (.*?)\\)|)",
| |
| [f]=a,
| |
| [d]={{nil,v,m}},
| |
| [c]={lb,1582847864,mb,nb},
| |
| [j]={{z,2724,"#include \"clang/Basic/Builtins.def\"\n // ...\n case Builtin::BI__builtin_elementwise_copysign: {\n // ...\n if (MagnitudeTy.getCanonicalType() != SignTy.getCanonicalType()) {\n return Diag(Sign.get()->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << MagnitudeTy << SignTy;"},{z,8368,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n // ...\n if (!Context.hasSameType(Real->getType(), Imag->getType())) {\n return Diag(Real->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << Real->getType() << Imag->getType() << Real->getSourceRange() << Imag->getSourceRange();"},{z,18659,"bool Sema::SemaBuiltinElementwiseMath(CallExpr *TheCall) {\n // ...\n if (Res.isNull() || TyA.getCanonicalType() != TyB.getCanonicalType())\n return Diag(A.get()->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << TyA << TyB;"},{z,18694,"bool Sema::SemaBuiltinElementwiseTernaryMath(CallExpr *TheCall) {\n // ...\n for (int I = 1; I < 3; ++I) {\n if (Args[0]->getType().getCanonicalType() != Args[I]->getType().getCanonicalType()) {\n return Diag(Args[0]->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << Args[0]->getType() << Args[I]->getType();"}},
| |
| [l]={
| |
| ["clang/test/Sema/builtins-elementwise-math.c"]={"clang/test/Sema/builtins-elementwise-math.c:47:37: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:62:37: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:65:37: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:105:37: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:120:37: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:123:37: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:163:33: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:178:33: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:181:33: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:218:33: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:233:33: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:236:33: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:442:33: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:457:33: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:460:33: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:690:53: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:693:50: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:697:55: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:700:50: error: arguments are of different types (\'float\' vs \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:705:56: error: arguments are of different types (\'double4\' (vector of 4 \'double\' values) vs \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:708:55: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'double4\' (vector of 4 \'double\' values))","clang/test/Sema/builtins-elementwise-math.c:711:55: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'float2\' (vector of 2 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:714:55: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:739:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:742:35: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:745:35: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:748:35: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:751:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:754:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:757:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:760:37: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:763:37: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'double2\' (vector of 2 \'double\' values))","clang/test/Sema/builtins-elementwise-math.c:766:37: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:769:37: error: arguments are of different types (\'double\' vs \'float2\' (vector of 2 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:772:37: error: arguments are of different types (\'double\' vs \'double2\' (vector of 2 \'double\' values))"}
| |
| }
| |
| },
| |
| ["err_typecheck_call_invalid_ordered_compare"]={
| |
| [i]="err_typecheck_call_invalid_ordered_compare",
| |
| [h]="ordered compare requires two args of floating point type%diff{ ($ and $)|}0,1",
| |
| [g]={{nil,nil,{"ordered compare requires two args of floating point type",{rc,a}}}},
| |
| [b]=k,
| |
| [e]="ordered compare requires two args of floating point type(?: \\((.*?) and (.*?)\\)|)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{z,8269,"/// SemaBuiltinUnorderedCompare - Handle functions like __builtin_isgreater and\n/// friends. This is declared to take (...), so we have to check everything.\nbool Sema::SemaBuiltinUnorderedCompare(CallExpr *TheCall) {\n // ...\n // If the common type isn\'t a real floating type, then the arguments were\n // invalid for this operation.\n if (Res.isNull() || !Res->isRealFloatingType())\n return Diag(OrigArg0.get()->getBeginLoc(), diag::err_typecheck_call_invalid_ordered_compare) << OrigArg0.get()->getType() << OrigArg1.get()->getType() << SourceRange(OrigArg0.get()->getBeginLoc(), OrigArg1.get()->getEndLoc());"}},
| |
| [l]={
| |
| ["clang/test/Sema/builtins.c"]={"clang/test/Sema/builtins.c:8:32: error: ordered compare requires two args of floating point type (\'int\' and \'int\')","clang/test/Sema/builtins.c:15:32: error: ordered compare requires two args of floating point type (\'int *\' and \'double\')"}
| |
| }
| |
| },
| |
| ["err_typecheck_call_invalid_unary_fp"]={
| |
| [i]="err_typecheck_call_invalid_unary_fp",
| |
| [h]="floating point classification requires argument of floating point type (passed in %0)",
| |
| [g]="floating point classification requires argument of floating point type (passed in A)",
| |
| [b]=k,
| |
| [e]="floating point classification requires argument of floating point type \\(passed in (.*?)\\)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"7e4faaccda69",1251749160,"PR4836, part 1: add Sema support for __builtin_isnan and friends; they ","PR4836, part 1: add Sema support for __builtin_isnan and friends; they \nare apparently used by Solaris libc despite the fact that clang claims \nto be compatible with gcc 4.2, which doesn\'t support them.\n\nllvm-svn: 80610"},
| |
| [j]={{z,8320,"/// SemaBuiltinSemaBuiltinFPClassification - Handle functions like\n/// __builtin_isnan and friends. This is declared to take (...), so we have\n/// to check everything. We expect the last argument to be a floating point\n/// value.\nbool Sema::SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs) {\n // ...\n // This operation requires a non-_Complex floating-point number.\n if (!OrigArg->getType()->isRealFloatingType())\n return Diag(OrigArg->getBeginLoc(), diag::err_typecheck_call_invalid_unary_fp) << OrigArg->getType() << OrigArg->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/Sema/builtin-unary-fp.c"]={"clang/test/Sema/builtin-unary-fp.c:9:28: error: floating point classification requires argument of floating point type (passed in \'int\')","clang/test/Sema/builtin-unary-fp.c:13:45: error: floating point classification requires argument of floating point type (passed in \'int\')"}
| |
| }
| |
| },
| |
| ["err_typecheck_call_not_function"]={
| |
| [i]="err_typecheck_call_not_function",
| |
| [h]="called object type %0 is not a function or function pointer",
| |
| [g]="called object type A is not a function or function pointer",
| |
| [b]=k,
| |
| [e]="called object type (.*?) is not a function or function pointer",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,7417,"/// 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 retry:\n if (const PointerType *PT = Fn->getType()->getAs<PointerType>()) {\n // ...\n if (!FuncT)\n return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function) << Fn->getType() << Fn->getSourceRange());"},{n,7483,"/// 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 retry:\n if (const PointerType *PT = Fn->getType()->getAs<PointerType>()) {\n // ...\n } else if (const BlockPointerType *BPT = Fn->getType()->getAs<BlockPointerType>()) {\n // ...\n } else {\n // ...\n return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function) << Fn->getType() << Fn->getSourceRange());"}},
| |
| [l]={
| |
| ["clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp:17:10: error: called object type \'test0::Test::E\' is not a function or function pointer"}
| |
| }
| |
| },
| |
| ["err_typecheck_call_requires_real_fp"]={
| |
| [i]={{nil,v,"err_typecheck_call_requires_real_fp"}},
| |
| [h]={{nil,v,"argument type %0 is not a real floating point type"}},
| |
| [g]={{nil,v,"argument type A is not a real floating point type"}},
| |
| [b]=k,
| |
| [e]="argument type (.*?) is not a real floating point type",
| |
| [f]=a,
| |
| [d]={{nil,v,m}},
| |
| [c]={lb,1582847864,mb,nb},
| |
| [j]={{z,8349,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n // ...\n for (unsigned I = 0; I != 2; ++I) {\n // ...\n // Despite supporting _Complex int, GCC requires a real floating point type\n // for the operands of __builtin_complex.\n if (!T->isRealFloatingType()) {\n return Diag(Arg->getBeginLoc(), diag::err_typecheck_call_requires_real_fp) << Arg->getType() << Arg->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/Sema/builtins.c"]={"clang/test/Sema/builtins.c:373:21: error: argument type \'int\' is not a real floating point type","clang/test/Sema/builtins.c:374:21: error: argument type \'int\' is not a real floating point type","clang/test/Sema/builtins.c:375:26: error: argument type \'int\' is not a real floating point type"}
| |
| }
| |
| },
| |
| ["err_typecheck_call_too_few_args"]={
| |
| [i]="err_typecheck_call_too_few_args",
| |
| [h]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2",
| |
| [g]={{nil,nil,{Cc,{a,a,a,ub},sb,{W,rb,kb,qb}," call, expected B, have C"}}},
| |
| [b]=k,
| |
| [e]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{z,127,"/// Checks that a call expression\'s argument count is at least the desired\n/// number. This is useful when doing custom type-checking on a variadic\n/// function. Returns true on error.\nstatic bool checkArgCountAtLeast(Sema &S, CallExpr *Call, unsigned MinArgCount) {\n // ...\n return S.Diag(Call->getEndLoc(), diag::err_typecheck_call_too_few_args) << 0 /*function call*/ << MinArgCount << ArgCount << Call->getSourceRange();"},{z,7132,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n // ...\n // Check we have the right number of arguments.\n if (Args.size() < AdjustedNumArgs) {\n Diag(CallRange.getEnd(), diag::err_typecheck_call_too_few_args) << 0 << AdjustedNumArgs << static_cast<unsigned>(Args.size()) << ExprRange;"},{z,8700,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n // ...\n if (NumArgs < NumRequiredArgs) {\n return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args) << 0 /* function call */ << NumRequiredArgs << NumArgs << TheCall->getSourceRange();"},{n,6471,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\n // If too few arguments are available (and we don\'t have default\n // arguments for the remaining parameters), don\'t make the call.\n if (Args.size() < NumParams) {\n if (Args.size() < MinArgs) {\n // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n // ...\n } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n // ...\n else\n Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args : diag::err_typecheck_call_too_few_args_at_least) << FnKind << MinArgs << static_cast<unsigned>(Args.size()) << Fn->getSourceRange();"},{ac,1803,"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 // FIXME. This need be cleaned up.\n if (Args.size() < NumNamedArgs) {\n Diag(SelLoc, diag::err_typecheck_call_too_few_args) << 2 << NumNamedArgs << static_cast<unsigned>(Args.size());"}},
| |
| [l]={
| |
| ["clang/test/Sema/builtin-unary-fp.c"]={"clang/test/Sema/builtin-unary-fp.c:10:25: error: too few arguments to function call, expected 1, have 0","clang/test/Sema/builtin-unary-fp.c:15:43: error: too few arguments to function call, expected 6, have 5"}
| |
| }
| |
| },
| |
| ["err_typecheck_call_too_few_args_at_least"]={
| |
| [i]="err_typecheck_call_too_few_args_at_least",
| |
| [h]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at least %1, have %2",
| |
| [g]={{nil,nil,{Cc,{a,a,a,ub},sb,{W,rb,kb,qb}," call, expected at least B, have C"}}},
| |
| [b]=k,
| |
| [e]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at least (.*?), have (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"abf1e18e32c9",1271393302,"Expand argument diagnostic for too few arguments to give the number","Expand argument diagnostic for too few arguments to give the number\nof arguments both seen and expected.\n\nFixes PR6501.\n\nllvm-svn: 101441"},
| |
| [j]={{z,219,"static bool SemaBuiltinMSVCAnnotation(Sema &S, CallExpr *TheCall) {\n // We need at least one argument.\n if (TheCall->getNumArgs() < 1) {\n S.Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 << TheCall->getNumArgs() << TheCall->getCallee()->getSourceRange();"},{z,1533,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n/// kernel_enqueue_flags_t flags,\n/// const ndrange_t ndrange,\n/// void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n/// kernel_enqueue_flags_t flags,\n/// const ndrange_t ndrange,\n/// uint num_events_in_wait_list,\n/// clk_event_t *event_wait_list,\n/// clk_event_t *event_ret,\n/// void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n/// kernel_enqueue_flags_t flags,\n/// const ndrange_t ndrange,\n/// void (^block)(local void*, ...),\n/// uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n/// kernel_enqueue_flags_t flags,\n/// const ndrange_t ndrange,\n/// uint num_events_in_wait_list,\n/// clk_event_t *event_wait_list,\n/// clk_event_t *event_ret,\n/// void (^block)(local void*, ...),\n/// uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n // ...\n if (NumArgs < 4) {\n S.Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 4 << NumArgs;"},{z,7535,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n // ...\n // Ensure that we have at least one argument to do type inference from.\n if (TheCall->getNumArgs() < 1) {\n Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 << TheCall->getNumArgs() << Callee->getSourceRange();"},{z,7811,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n // ...\n // Now that we know how many fixed arguments we expect, first check that we\n // have at least that many.\n if (TheCall->getNumArgs() < 1 + NumFixed) {\n Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 + NumFixed << TheCall->getNumArgs() << Callee->getSourceRange();"},{z,8201,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n // ...\n if (Call->getNumArgs() < 3)\n return Diag(Call->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 /*function call*/ << 3 << Call->getNumArgs();"},{z,8441,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n if (TheCall->getNumArgs() < 2)\n return ExprError(Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 /*function call*/ << 2 << TheCall->getNumArgs() << TheCall->getSourceRange());"},{n,6477,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\n // If too few arguments are available (and we don\'t have default\n // arguments for the remaining parameters), don\'t make the call.\n if (Args.size() < NumParams) {\n if (Args.size() < MinArgs) {\n // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n // ...\n } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n // ...\n else\n Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args : diag::err_typecheck_call_too_few_args_at_least) << FnKind << MinArgs << static_cast<unsigned>(Args.size()) << Fn->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:182:12: error: too few arguments to function call, expected at least 2, have 0"}
| |
| }
| |
| },
| |
| ["err_typecheck_call_too_few_args_at_least_one"]={
| |
| [i]="err_typecheck_call_too_few_args_at_least_one",
| |
| [h]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, at least argument %1 must be specified",
| |
| [g]={{nil,nil,{Cc,{a,a,a,ub},sb,{W,rb,kb,qb}," call, at least argument B must be specified"}}},
| |
| [b]=k,
| |
| [e]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, at least argument (.*?) must be specified",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function","PR11857: When the wrong number of arguments are provided for a function\nwhich expects exactly one argument, include the name of the argument in\nthe diagnostic text. Patch by Terry Long!\n\nllvm-svn: 156607"},
| |
| [j]={{n,6470,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\n // If too few arguments are available (and we don\'t have default\n // arguments for the remaining parameters), don\'t make the call.\n if (Args.size() < NumParams) {\n if (Args.size() < MinArgs) {\n // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n // ...\n } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_one : diag::err_typecheck_call_too_few_args_at_least_one) << FnKind << FDecl->getParamDecl(0) << Fn->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:181:12: error: too few arguments to function call, at least argument \'a\' must be specified"}
| |
| }
| |
| },
| |
| ["err_typecheck_call_too_few_args_at_least_suggest"]={
| |
| [i]="err_typecheck_call_too_few_args_at_least_suggest",
| |
| [h]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at least %1, have %2; did you mean %3?",
| |
| [g]={{nil,nil,{Cc,{a,a,a,ub},sb,{W,rb,kb,qb}," call, expected at least B, have C; did you mean D?"}}},
| |
| [b]=k,
| |
| [e]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at least (.*?), have (.*?); did you mean (.*?)\\?",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments.","Attempt typo correction for function calls with the wrong number of arguments.\n\nCombined with typo correction\'s new ability to apply global/absolute nested\nname specifiers to possible corrections, cases such as in PR12287 where the\ndesired function is being shadowed by a lexically closer function with the\nsame name but a different number of parameters will now include a FixIt.\n\nOn a side note, since the test for this change caused\ntest/SemaCXX/typo-correction.cpp to exceed the typo correction limit for\na single file, I\'ve included a test case for exceeding the limit and added\nsome comments to both the original and part two of typo-correction.cpp\nwarning future editors of the files about the limit.\n\nllvm-svn: 185881"},
| |
| [j]={{n,6465,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\n // If too few arguments are available (and we don\'t have default\n // arguments for the remaining parameters), don\'t make the call.\n if (Args.size() < NumParams) {\n if (Args.size() < MinArgs) {\n // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_suggest : diag::err_typecheck_call_too_few_args_at_least_suggest;"}}
| |
| },
| |
| ["err_typecheck_call_too_few_args_one"]={
| |
| [i]="err_typecheck_call_too_few_args_one",
| |
| [h]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, single argument %1 was not specified",
| |
| [g]={{nil,nil,{Cc,{a,a,a,ub},sb,{W,rb,kb,qb}," call, single argument B was not specified"}}},
| |
| [b]=k,
| |
| [e]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, single argument (.*?) was not specified",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function","PR11857: When the wrong number of arguments are provided for a function\nwhich expects exactly one argument, include the name of the argument in\nthe diagnostic text. Patch by Terry Long!\n\nllvm-svn: 156607"},
| |
| [j]={{n,6466,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\n // If too few arguments are available (and we don\'t have default\n // arguments for the remaining parameters), don\'t make the call.\n if (Args.size() < NumParams) {\n if (Args.size() < MinArgs) {\n // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n // ...\n } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_one : diag::err_typecheck_call_too_few_args_at_least_one) << FnKind << FDecl->getParamDecl(0) << Fn->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:177:12: error: too few arguments to function call, single argument \'a\' was not specified"}
| |
| }
| |
| },
| |
| ["err_typecheck_call_too_few_args_suggest"]={
| |
| [i]="err_typecheck_call_too_few_args_suggest",
| |
| [h]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2; did you mean %3?",
| |
| [g]={{nil,nil,{Cc,{a,a,a,ub},sb,{W,rb,kb,qb}," call, expected B, have C; did you mean D?"}}},
| |
| [b]=k,
| |
| [e]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?); did you mean (.*?)\\?",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments.","Attempt typo correction for function calls with the wrong number of arguments.\n\nCombined with typo correction\'s new ability to apply global/absolute nested\nname specifiers to possible corrections, cases such as in PR12287 where the\ndesired function is being shadowed by a lexically closer function with the\nsame name but a different number of parameters will now include a FixIt.\n\nOn a side note, since the test for this change caused\ntest/SemaCXX/typo-correction.cpp to exceed the typo correction limit for\na single file, I\'ve included a test case for exceeding the limit and added\nsome comments to both the original and part two of typo-correction.cpp\nwarning future editors of the files about the limit.\n\nllvm-svn: 185881"},
| |
| [j]={{n,6458,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\n // If too few arguments are available (and we don\'t have default\n // arguments for the remaining parameters), don\'t make the call.\n if (Args.size() < NumParams) {\n if (Args.size() < MinArgs) {\n // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_suggest : diag::err_typecheck_call_too_few_args_at_least_suggest;"}},
| |
| [l]={
| |
| ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p10.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p10.cpp:15:7: error: too few arguments to function call, expected 1, have 0; did you mean \'A::f\'?"}
| |
| }
| |
| },
| |
| ["err_typecheck_call_too_many_args"]={
| |
| [i]="err_typecheck_call_too_many_args",
| |
| [h]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2",
| |
| [g]={{nil,nil,{Pc,{a,a,a,ub},sb,{W,rb,kb,qb}," call, expected B, have C"}}},
| |
| [b]=k,
| |
| [e]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{z,169,"/// Checks that a call expression\'s argument count is the desired number.\n/// This is useful when doing custom type-checking. Returns true on error.\nstatic bool checkArgCount(Sema &S, CallExpr *Call, unsigned DesiredArgCount) {\n // ...\n return S.Diag(Range.getBegin(), diag::err_typecheck_call_too_many_args) << 0 /*function call*/ << DesiredArgCount << ArgCount << Call->getArg(1)->getSourceRange();"},{z,7138,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n // ...\n // Check we have the right number of arguments.\n if (Args.size() < AdjustedNumArgs) {\n // ...\n } else if (Args.size() > AdjustedNumArgs) {\n Diag(Args[AdjustedNumArgs]->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 0 << AdjustedNumArgs << static_cast<unsigned>(Args.size()) << ExprRange;"},{z,7502,"bool Sema::BuiltinWasmRefNullFunc(CallExpr *TheCall) {\n if (TheCall->getNumArgs() != 0) {\n Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 0 /*function call*/ << 0 << TheCall->getNumArgs();"},{n,6515,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\n // If too many are passed and not variadic, error on the extras and drop\n // them.\n if (Args.size() > NumParams) {\n if (!Proto->isVariadic()) {\n // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n // ...\n } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n // ...\n else\n Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args : diag::err_typecheck_call_too_many_args_at_most) << FnKind << NumParams << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"},{ac,1900,"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 // Promote additional arguments to variadic methods.\n if (Method->isVariadic()) {\n // ...\n } else {\n // Check for extra arguments to non-variadic methods.\n if (Args.size() != NumNamedArgs) {\n Diag(Args[NumNamedArgs]->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 2 /*method*/ << NumNamedArgs << static_cast<unsigned>(Args.size()) << Method->getSourceRange() << SourceRange(Args[NumNamedArgs]->getBeginLoc(), Args.back()->getEndLoc());"}},
| |
| [l]={
| |
| ["clang/test/Sema/builtin-unary-fp.c"]={"clang/test/Sema/builtin-unary-fp.c:11:27: error: too many arguments to function call, expected 1, have 2","clang/test/Sema/builtin-unary-fp.c:16:48: error: too many arguments to function call, expected 6, have 7"}
| |
| }
| |
| },
| |
| ["err_typecheck_call_too_many_args_at_most"]={
| |
| [i]="err_typecheck_call_too_many_args_at_most",
| |
| [h]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at most %1, have %2",
| |
| [g]={{nil,nil,{Pc,{a,a,a,ub},sb,{W,rb,kb,qb}," call, expected at most B, have C"}}},
| |
| [b]=k,
| |
| [e]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most (.*?), have (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"2a5aafff307a",1271393806,"Expand the argument diagnostics for too many arguments and give","Expand the argument diagnostics for too many arguments and give\nboth number seen and number expected.\n\nFinishes fixing PR6501.\n\nllvm-svn: 101442"},
| |
| [j]={{z,140,"/// Checks that a call expression\'s argument count is at most the desired\n/// number. This is useful when doing custom type-checking on a variadic\n/// function. Returns true on error.\nstatic bool checkArgCountAtMost(Sema &S, CallExpr *Call, unsigned MaxArgCount) {\n // ...\n return S.Diag(Call->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /*function call*/ << MaxArgCount << ArgCount << Call->getSourceRange();"},{z,8562,"/// SemaBuiltinPrefetch - Handle __builtin_prefetch.\n// This is declared to take (const void*, ...) and can take two\n// optional constant int args.\nbool Sema::SemaBuiltinPrefetch(CallExpr *TheCall) {\n // ...\n if (NumArgs > 3)\n return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /*function call*/ << 3 << NumArgs << TheCall->getSourceRange();"},{z,8706,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n // ...\n if (NumArgs >= NumRequiredArgs + 0x100) {\n return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /* function call */ << (NumRequiredArgs + 0xff) << NumArgs << TheCall->getSourceRange();"},{n,6523,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\n // If too many are passed and not variadic, error on the extras and drop\n // them.\n if (Args.size() > NumParams) {\n if (!Proto->isVariadic()) {\n // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n // ...\n } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n // ...\n else\n Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args : diag::err_typecheck_call_too_many_args_at_most) << FnKind << NumParams << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}},
| |
| [l]={
| |
| ["clang/test/Sema/builtin-prefetch.c"]={"clang/test/Sema/builtin-prefetch.c:8:33: error: too many arguments to function call, expected at most 3, have 4"}
| |
| }
| |
| },
| |
| ["err_typecheck_call_too_many_args_at_most_one"]={
| |
| [i]="err_typecheck_call_too_many_args_at_most_one",
| |
| [h]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at most single argument %1, have %2 arguments",
| |
| [g]={{nil,nil,{Pc,{a,a,a,ub},sb,{W,rb,kb,qb}," call, expected at most single argument B, have C arguments"}}},
| |
| [b]=k,
| |
| [e]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most single argument (.*?), have (.*?) arguments",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including","Further improvement to wording of overload resolution diagnostics, and including\nthe sole parameter name in the diagnostic in more cases. Patch by Terry Long!\n\nllvm-svn: 156807"},
| |
| [j]={{n,6514,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\n // If too many are passed and not variadic, error on the extras and drop\n // them.\n if (Args.size() > NumParams) {\n if (!Proto->isVariadic()) {\n // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n // ...\n } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args_one : diag::err_typecheck_call_too_many_args_at_most_one) << FnKind << FDecl->getParamDecl(0) << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/default1.cpp"]={"clang/test/SemaCXX/default1.cpp:69:10: error: too many arguments to function call, expected at most single argument \'f\', have 2 arguments"}
| |
| }
| |
| },
| |
| ["err_typecheck_call_too_many_args_at_most_suggest"]={
| |
| [i]="err_typecheck_call_too_many_args_at_most_suggest",
| |
| [h]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at most %1, have %2; did you mean %3?",
| |
| [g]={{nil,nil,{Pc,{a,a,a,ub},sb,{W,rb,kb,qb}," call, expected at most B, have C; did you mean D?"}}},
| |
| [b]=k,
| |
| [e]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most (.*?), have (.*?); did you mean (.*?)\\?",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments.","Attempt typo correction for function calls with the wrong number of arguments.\n\nCombined with typo correction\'s new ability to apply global/absolute nested\nname specifiers to possible corrections, cases such as in PR12287 where the\ndesired function is being shadowed by a lexically closer function with the\nsame name but a different number of parameters will now include a FixIt.\n\nOn a side note, since the test for this change caused\ntest/SemaCXX/typo-correction.cpp to exceed the typo correction limit for\na single file, I\'ve included a test case for exceeding the limit and added\nsome comments to both the original and part two of typo-correction.cpp\nwarning future editors of the files about the limit.\n\nllvm-svn: 185881"},
| |
| [j]={{n,6505,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\n // If too many are passed and not variadic, error on the extras and drop\n // them.\n if (Args.size() > NumParams) {\n if (!Proto->isVariadic()) {\n // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_many_args_suggest : diag::err_typecheck_call_too_many_args_at_most_suggest;"}}
| |
| },
| |
| ["err_typecheck_call_too_many_args_one"]={
| |
| [i]="err_typecheck_call_too_many_args_one",
| |
| [h]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected single argument %1, have %2 arguments",
| |
| [g]={{nil,nil,{Pc,{a,a,a,ub},sb,{W,rb,kb,qb}," call, expected single argument B, have C arguments"}}},
| |
| [b]=k,
| |
| [e]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected single argument (.*?), have (.*?) arguments",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including","Further improvement to wording of overload resolution diagnostics, and including\nthe sole parameter name in the diagnostic in more cases. Patch by Terry Long!\n\nllvm-svn: 156807"},
| |
| [j]={{n,6506,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\n // If too many are passed and not variadic, error on the extras and drop\n // them.\n if (Args.size() > NumParams) {\n if (!Proto->isVariadic()) {\n // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n // ...\n } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args_one : diag::err_typecheck_call_too_many_args_at_most_one) << FnKind << FDecl->getParamDecl(0) << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}},
| |
| [l]={
| |
| ["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:176:15: error: too many arguments to function call, expected single argument \'a\', have 2 arguments"}
| |
| }
| |
| },
| |
| ["err_typecheck_call_too_many_args_suggest"]={
| |
| [i]="err_typecheck_call_too_many_args_suggest",
| |
| [h]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2; did you mean %3?",
| |
| [g]={{nil,nil,{Pc,{a,a,a,ub},sb,{W,rb,kb,qb}," call, expected B, have C; did you mean D?"}}},
| |
| [b]=k,
| |
| [e]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?); did you mean (.*?)\\?",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments.","Attempt typo correction for function calls with the wrong number of arguments.\n\nCombined with typo correction\'s new ability to apply global/absolute nested\nname specifiers to possible corrections, cases such as in PR12287 where the\ndesired function is being shadowed by a lexically closer function with the\nsame name but a different number of parameters will now include a FixIt.\n\nOn a side note, since the test for this change caused\ntest/SemaCXX/typo-correction.cpp to exceed the typo correction limit for\na single file, I\'ve included a test case for exceeding the limit and added\nsome comments to both the original and part two of typo-correction.cpp\nwarning future editors of the files about the limit.\n\nllvm-svn: 185881"},
| |
| [j]={{n,6497,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\n // If too many are passed and not variadic, error on the extras and drop\n // them.\n if (Args.size() > NumParams) {\n if (!Proto->isVariadic()) {\n // ...\n if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_many_args_suggest : diag::err_typecheck_call_too_many_args_at_most_suggest;"}},
| |
| [l]={
| |
| ["clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp:33:7: error: too many arguments to function call, expected 0, have 1; did you mean \'N::f\'?"}
| |
| }
| |
| },
| |
| ["err_typecheck_cast_to_incomplete"]={
| |
| [i]="err_typecheck_cast_to_incomplete",
| |
| [h]="cast to incomplete type %0",
| |
| [g]="cast to incomplete type A",
| |
| [b]=k,
| |
| [e]="cast to incomplete type (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"e98194d9e8d2",1279399429,"Check for casts to an incomplete type in C. Improves diagnostics for cast to","Check for casts to an incomplete type in C. Improves diagnostics for cast to\nincomplete union (PR5692) and incomplete enum, and fixes obscure\naccepts-invalid on cast to incomplete struct.\n\nllvm-svn: 108630"},
| |
| [j]={{jc,2975,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_typecheck_cast_to_incomplete)) {"},{jc,3257,"void CastOperation::CheckBuiltinBitCast() {\n // ...\n if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_typecheck_cast_to_incomplete) || Self.RequireCompleteType(OpRange.getBegin(), SrcType, diag::err_incomplete_type)) {"},{n,21464,"/// Check a cast of an unknown-any type. We intentionally only\n/// trigger this for C-style casts.\nExprResult Sema::checkUnknownAnyCast(SourceRange TypeRange, QualType CastType, Expr *CastExpr, CastKind &CastKind, ExprValueKind &VK, CXXCastPath &Path) {\n // ...\n if (!CastType->isVoidType() && RequireCompleteType(TypeRange.getBegin(), CastType, diag::err_typecheck_cast_to_incomplete))"}},
| |
| [l]={
| |
| ["clang/test/Sema/cast-incomplete.c"]={"clang/test/Sema/cast-incomplete.c:9:3: error: cast to incomplete type \'enum x\'","clang/test/Sema/cast-incomplete.c:10:3: error: cast to incomplete type \'struct y\'","clang/test/Sema/cast-incomplete.c:11:3: error: cast to incomplete type \'union z\'","clang/test/Sema/cast-incomplete.c:12:3: error: cast to incomplete type \'union z\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_cast_to_union_no_type"]={
| |
| [i]="err_typecheck_cast_to_union_no_type",
| |
| [h]="cast to union type from type %0 not present in union",
| |
| [g]="cast to union type from type A not present in union",
| |
| [b]=k,
| |
| [e]="cast to union type from type (.*?) not present in union",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{jc,3022,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n // ...\n // GCC\'s cast to union extension.\n if (DestRecordTy && DestRecordTy->getDecl()->isUnion()) {\n // ...\n if (CastExpr::getTargetFieldForToUnionCast(RD, SrcType)) {\n // ...\n } else {\n Self.Diag(OpRange.getBegin(), diag::err_typecheck_cast_to_union_no_type) << SrcType << SrcExpr.get()->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/Sema/cast-to-union.c"]={"clang/test/Sema/cast-to-union.c:8:5: error: cast to union type from type \'int *\' not present in union","clang/test/Sema/cast-to-union.c:9:5: error: cast to union type from type \'unsigned int\' not present in union","clang/test/Sema/cast-to-union.c:13:14: error: cast to union type from type \'double\' not present in union"}
| |
| }
| |
| },
| |
| ["err_typecheck_choose_expr_requires_constant"]={
| |
| [i]="err_typecheck_choose_expr_requires_constant",
| |
| [h]="\'__builtin_choose_expr\' requires a constant expression",
| |
| [g]="\'__builtin_choose_expr\' requires a constant expression",
| |
| [b]=k,
| |
| [e]="\'__builtin_choose_expr\' requires a constant expression",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,16896,"ExprResult Sema::ActOnChooseExpr(SourceLocation BuiltinLoc, Expr *CondExpr, Expr *LHSExpr, Expr *RHSExpr, SourceLocation RPLoc) {\n // ...\n if (CondExpr->isTypeDependent() || CondExpr->isValueDependent()) {\n // ...\n } else {\n // ...\n ExprResult CondICE = VerifyIntegerConstantExpression(CondExpr, &condEval, diag::err_typecheck_choose_expr_requires_constant);"}},
| |
| [l]={
| |
| ["clang/test/Parser/builtin_types_compatible.c"]={"clang/test/Parser/builtin_types_compatible.c:37:29: error: \'__builtin_choose_expr\' requires a constant expression"}
| |
| }
| |
| },
| |
| ["err_typecheck_comparison_of_distinct_blocks"]={
| |
| [i]="err_typecheck_comparison_of_distinct_blocks",
| |
| [h]="comparison of distinct block types%diff{ ($ and $)|}0,1",
| |
| [g]={{nil,nil,{"comparison of distinct block types",{rc,a}}}},
| |
| [b]=k,
| |
| [e]="comparison of distinct block types(?: \\((.*?) and (.*?)\\)|)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,13258,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n // Handle block pointer types.\n if (!IsOrdered && LHSType->isBlockPointerType() && RHSType->isBlockPointerType()) {\n // ...\n if (!LHSIsNull && !RHSIsNull && !Context.typesAreCompatible(lpointee, rpointee)) {\n Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,13348,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n // Allow block pointers to be compared with null pointer constants.\n if (!IsOrdered && ((LHSType->isBlockPointerType() && RHSType->isPointerType()) || (LHSType->isPointerType() && RHSType->isBlockPointerType()))) {\n if (!LHSIsNull && !RHSIsNull) {\n if (!((RHSType->isPointerType() && RHSType->castAs<PointerType>()->getPointeeType()->isVoidType()) || (LHSType->isPointerType() && LHSType->castAs<PointerType>()->getPointeeType()->isVoidType())))\n Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
| |
| },
| |
| ["err_typecheck_comparison_of_distinct_pointers"]={
| |
| [i]="err_typecheck_comparison_of_distinct_pointers",
| |
| [h]="comparison of distinct pointer types%diff{ ($ and $)|}0,1",
| |
| [g]={{nil,nil,{"comparison of distinct pointer types",{rc,a}}}},
| |
| [b]=k,
| |
| [e]="comparison of distinct pointer types(?: \\((.*?) and (.*?)\\)|)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"5b07c7ec057d",1241417232,"Implement support for comparing pointers with <, >, <=, >=, ==, and !=","Implement support for comparing pointers with <, >, <=, >=, ==, and !=\nin C++, taking into account conversions to the \"composite pointer\ntype\" so that we can compare, e.g., a pointer to a derived class to a\npointer to a base class. \n\nAlso, upgrade the \"comparing distinct pointer types\" from a warning to\nan error for C++, since this is clearly an error. Turns out that we\nhadn\'t gone through and audited this code for C++, ever. \n\nFixes <rdar://problem/6816420>.\n\nllvm-svn: 70829"},
| |
| [j]={{n,12324,"static void diagnoseDistinctPointerComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError) { S.Diag(Loc, IsError ? diag::err_typecheck_comparison_of_distinct_pointers : diag::ext_typecheck_comparison_of_distinct_pointers) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); }"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/compare-function-pointer.cpp"]={"clang/test/SemaCXX/compare-function-pointer.cpp:17:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:18:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:19:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:21:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:23:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:25:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))"}
| |
| }
| |
| },
| |
| ["err_typecheck_comparison_of_fptr_to_void"]={
| |
| [i]="err_typecheck_comparison_of_fptr_to_void",
| |
| [h]="equality comparison between function pointer and void pointer (%0 and %1)",
| |
| [g]="equality comparison between function pointer and void pointer (A and B)",
| |
| [b]=k,
| |
| [e]="equality comparison between function pointer and void pointer \\((.*?) and (.*?)\\)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect","Update equality and relationship comparisons of pointers to reflect\nC++ semantics, eliminating an extension diagnostic that doesn\'t match\nC++ semantics (ordered comparison with NULL) and tightening some\nextwarns to errors in C++ to match GCC and maintain conformance in\nSFINAE contexts. Fixes <rdar://problem/7941392>.\n\nllvm-svn: 106050"},
| |
| [j]={{n,12365,"static void diagnoseFunctionPointerToVoidComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError) { S.Diag(Loc, IsError ? diag::err_typecheck_comparison_of_fptr_to_void : diag::ext_typecheck_comparison_of_fptr_to_void) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); }"}}
| |
| },
| |
| ["err_typecheck_comparison_of_pointer_integer"]={
| |
| [i]="err_typecheck_comparison_of_pointer_integer",
| |
| [h]="comparison between pointer and integer (%0 and %1)",
| |
| [g]="comparison between pointer and integer (A and B)",
| |
| [b]=k,
| |
| [e]="comparison between pointer and integer \\((.*?) and (.*?)\\)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect","Update equality and relationship comparisons of pointers to reflect\nC++ semantics, eliminating an extension diagnostic that doesn\'t match\nC++ semantics (ordered comparison with NULL) and tightening some\nextwarns to errors in C++ to match GCC and maintain conformance in\nSFINAE contexts. Fixes <rdar://problem/7941392>.\n\nllvm-svn: 106050"},
| |
| [j]={{n,13355,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n // ...\n if (LangOpts.DebuggerSupport) {\n // ...\n } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n // ...\n } else if (getLangOpts().CPlusPlus) {\n DiagID = diag::err_typecheck_comparison_of_pointer_integer;"}},
| |
| [l]={
| |
| ["clang/test/CXX/over/over.built/spaceship.cpp"]={"clang/test/CXX/over/over.built/spaceship.cpp:16:12: error: comparison between pointer and integer (\'int\' and \'int *\')"}
| |
| }
| |
| },
| |
| ["err_typecheck_cond_expect_int_float"]={
| |
| [i]="err_typecheck_cond_expect_int_float",
| |
| [h]="used type %0 where integer or floating point type is required",
| |
| [g]="used type A where integer or floating point type is required",
| |
| [b]=k,
| |
| [e]="used type (.*?) where integer or floating point type is required",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector","OpenCL: handle ternary operator when the condition is a vector\n\nWhen the condition is a vector, OpenCL specifies additional\nrequirements on the operand types, and also the operations\nrequired to determine the result type of the operator. This is a\ncombination of OpenCL v1.1 s6.3.i and s6.11.6, and the semantics\nremain unchanged in later versions of OpenCL.\n\nllvm-svn: 228118"},
| |
| [j]={{n,8889,"/// Simple conversion between integer and floating point types.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// OpenCL v1.1 s6.3.i and s6.11.6 together require that the scalar\n/// types are either integer or floating type. Between the two\n/// operands, the type with the higher rank is defined as the \"result\n/// type\". The other operand needs to be promoted to the same type. No\n/// other type promotion is allowed. We cannot use\n/// UsualArithmeticConversions() for this purpose, since it always\n/// promotes promotable types.\nstatic QualType OpenCLArithmeticConversions(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n // ...\n if (!LHSType->isIntegerType() && !LHSType->isRealFloatingType()) {\n S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_int_float) << LHSType << LHS.get()->getSourceRange();"},{n,8941,"/// Simple conversion between integer and floating point types.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// OpenCL v1.1 s6.3.i and s6.11.6 together require that the scalar\n/// types are either integer or floating type. Between the two\n/// operands, the type with the higher rank is defined as the \"result\n/// type\". The other operand needs to be promoted to the same type. No\n/// other type promotion is allowed. We cannot use\n/// UsualArithmeticConversions() for this purpose, since it always\n/// promotes promotable types.\nstatic QualType OpenCLArithmeticConversions(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n // ...\n if (!RHSType->isIntegerType() && !RHSType->isRealFloatingType()) {\n S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_int_float) << RHSType << RHS.get()->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:113:12: error: used type \'__global int *\' where integer or floating point type is required"}
| |
| }
| |
| },
| |
| ["err_typecheck_cond_expect_nonfloat"]={
| |
| [i]="err_typecheck_cond_expect_nonfloat",
| |
| [h]="used type %0 where floating point type is not allowed",
| |
| [g]="used type A where floating point type is not allowed",
| |
| [b]=k,
| |
| [e]="used type (.*?) where floating point type is not allowed",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector","OpenCL: handle ternary operator when the condition is a vector\n\nWhen the condition is a vector, OpenCL specifies additional\nrequirements on the operand types, and also the operations\nrequired to determine the result type of the operator. This is a\ncombination of OpenCL v1.1 s6.3.i and s6.11.6, and the semantics\nremain unchanged in later versions of OpenCL.\n\nllvm-svn: 228118"},
| |
| [j]={{n,8619,"/// Return false if the condition expression is valid, true otherwise.\nstatic bool checkCondition(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n // ...\n // OpenCL v1.1 s6.3.i says the condition cannot be a floating point type.\n if (S.getLangOpts().OpenCL && CondTy->isFloatingType()) {\n S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_nonfloat) << CondTy << Cond->getSourceRange();"},{n,8981,"/// Return false if this is a valid OpenCL condition vector\nstatic bool checkOpenCLConditionVector(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n // ...\n S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_nonfloat) << Cond->getType() << Cond->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:102:12: error: used type \'float\' where floating point type is not allowed","clang/test/SemaOpenCL/cond.cl:107:12: error: used type \'float2\' (vector of 2 \'float\' values) where floating point type is not allowed"}
| |
| }
| |
| },
| |
| ["err_typecheck_cond_expect_scalar"]={
| |
| [i]="err_typecheck_cond_expect_scalar",
| |
| [h]="used type %0 where arithmetic or pointer type is required",
| |
| [g]="used type A where arithmetic or pointer type is required",
| |
| [b]=k,
| |
| [e]="used type (.*?) where arithmetic or pointer type is required",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{jc,3047,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n // ...\n Self.Diag(OpRange.getBegin(), diag::err_typecheck_cond_expect_scalar) << DestType << SrcExpr.get()->getSourceRange();"},{n,8686,"/// Return false if the condition expression is valid, true otherwise.\nstatic bool checkCondition(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n // ...\n S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_scalar) << CondTy << Cond->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/Parser/check_cast.c"]={"clang/test/Parser/check_cast.c:10:9: error: used type \'struct foo\' where arithmetic or pointer type is required"}
| |
| }
| |
| },
| |
| ["err_typecheck_cond_incompatible_operands"]={
| |
| [i]="err_typecheck_cond_incompatible_operands",
| |
| [h]="incompatible operand types%diff{ ($ and $)|}0,1",
| |
| [g]={{nil,nil,{"incompatible operand types",{rc,a}}}},
| |
| [b]=k,
| |
| [e]="incompatible operand types(?: \\((.*?) and (.*?)\\)|)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,8845,"/// Return the resulting type when the operands are both block pointers.\nstatic QualType checkConditionalBlockPointerCompatibility(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n // ...\n if (!LHSTy->isBlockPointerType() || !RHSTy->isBlockPointerType()) {\n // ...\n S.Diag(Loc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,9143,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n // ...\n // Diagnose attempts to convert between __ibm128, __float128 and long double\n // where such conversions currently can\'t be handled.\n if (unsupportedTypeConversion(*this, LHSTy, RHSTy)) {\n Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,9180,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n // ...\n // If both operands have arithmetic type, do the usual arithmetic conversions\n // to find a common type: C99 6.5.15p3,5.\n if (LHSTy->isArithmeticType() && RHSTy->isArithmeticType()) {\n // Disallow invalid arithmetic conversions, such as those between bit-\n // precise integers types of different sizes, or between a bit-precise\n // integer and another type.\n if (ResTy.isNull() && (LHSTy->isBitIntType() || RHSTy->isBitIntType())) {\n Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,9334,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n // ...\n Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{P,6261,"/// Try to find a common type for two according to C++0x 5.16p5.\n///\n/// This is part of the parameter validation for the ? operator. If either\n/// value operand is a class type, overload resolution is used to find a\n/// conversion to a common type.\nstatic bool FindConditionalOverload(Sema &Self, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n // ...\n case OR_No_Viable_Function:\n // ...\n Self.Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{P,6766,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n/// (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n/// (most-significant-bit-set(a[0]) ? b[0] : c[0], .. ,\n/// most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n // ...\n // -- The second and third operands have arithmetic or enumeration type;\n // the usual arithmetic conversions are performed to bring them to a\n // common type, and the result is of that type.\n if (LTy->isArithmeticType() && RTy->isArithmeticType()) {\n // ...\n if (ResTy.isNull()) {\n Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LTy << RTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{P,6804,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n/// (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n/// (most-significant-bit-set(a[0]) ? b[0] : c[0], .. ,\n/// most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n // ...\n Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:175:7: error: incompatible operand types (\'void (^)(int)\' and \'void (*)(int)\')"}
| |
| }
| |
| },
| |
| ["err_typecheck_cond_incompatible_operands_null"]={
| |
| [i]="err_typecheck_cond_incompatible_operands_null",
| |
| [h]="non-pointer operand type %0 incompatible with %select{NULL|nullptr}1",
| |
| [g]={{nil,nil,{"non-pointer operand type A incompatible with ",{"NULL","nullptr"}}}},
| |
| [b]=k,
| |
| [e]="non\\-pointer operand type (.*?) incompatible with (?:NULL|nullptr)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"a8bea4b90ec7",1298073290,"Initial steps to improve diagnostics when there is a NULL and","Initial steps to improve diagnostics when there is a NULL and\na non-pointer on the two sides of a conditional expression.\n\nPatch by Stephen Hines and Mihai Rusu.\n\nllvm-svn: 125995"},
| |
| [j]={{n,8611,"/// Emit a specialized diagnostic when one expression is a null pointer\n/// constant and the other is not a pointer. Returns true if a diagnostic is\n/// emitted.\nbool Sema::DiagnoseConditionalForNull(Expr *LHSExpr, Expr *RHSExpr, SourceLocation QuestionLoc) {\n // ...\n Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands_null) << NonPointerExpr->getType() << DiagType << NonPointerExpr->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/nullptr.cpp"]={"clang/test/SemaCXX/nullptr.cpp:51:12: error: non-pointer operand type \'A\' incompatible with nullptr","clang/test/SemaCXX/nullptr.cpp:52:12: error: non-pointer operand type \'A\' incompatible with nullptr"}
| |
| }
| |
| },
| |
| ["err_typecheck_convert_discards_qualifiers"]={
| |
| [i]={{nil,q,"err_typecheck_convert_discards_qualifiers"}},
| |
| [h]={{nil,q,"%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"}},
| |
| [g]={{nil,q,{{{{Wb,zb}},{{xb,yb}},{{pb,Ab}},{{Bb,Cb}},{{Db,Eb}},{{Fb,Gb}},{{Hb,Ib}}}," discards qualifiers"}}},
| |
| [b]=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",
| |
| [f]=a,
| |
| [d]={{nil,q,m}},
| |
| [c]={U,1576908663,T,S},
| |
| [j]={{n,17631,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case CompatiblePointerDiscardsQualifiers:\n // ...\n if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_discards_qualifiers;"}},
| |
| [l]={
| |
| ["clang/test/CXX/drs/dr3xx.cpp"]={"clang/test/CXX/drs/dr3xx.cpp:405:9: error: assigning to \'T\' (aka \'const int *(*)[]\') from \'S\' (aka \'const int *const (*)[]\') discards qualifiers"}
| |
| }
| |
| },
| |
| ["err_typecheck_convert_incompatible"]={
| |
| [i]="err_typecheck_convert_incompatible",
| |
| [h]={{nil,E,"%select{%diff{assigning to $ from incompatible type $|assigning to type from incompatible type}0,1|%diff{passing $ to parameter of incompatible type $|passing type to parameter of incompatible type}0,1|%diff{returning $ from a function with incompatible result type $|returning type from a function with incompatible result type}0,1|%diff{converting $ to incompatible type $|converting type to incompatible type}0,1|%diff{initializing $ with an expression of incompatible type $|initializing type with an expression of incompatible type}0,1|%diff{sending $ to parameter of incompatible type $|sending type to parameter of incompatible type}0,1|%diff{casting $ to incompatible type $|casting type to incompatible type}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3%select{|: different classes%diff{ ($ vs $)|}5,6|: different number of parameters (%5 vs %6)|: type mismatch at %ordinal5 parameter%diff{ ($ vs $)|}6,7|: different return type%diff{ ($ vs $)|}5,6|: different qualifiers (%5 vs %6)|: different exception specifications}4"},{ic,nil,"%select{%diff{assigning to $ from incompatible type $|assigning to type from incompatible type}0,1|%diff{passing $ to parameter of incompatible type $|passing type to parameter of incompatible type}0,1|%diff{returning $ from a function with incompatible result type $|returning type from a function with incompatible result type}0,1|%diff{converting $ to incompatible type $|converting type to incompatible type}0,1|%diff{initializing $ with an expression of incompatible type $|initializing type with an expression of incompatible type}0,1|%diff{sending $ to parameter of incompatible type $|sending type to parameter of incompatible type}0,1|%diff{casting $ to incompatible type $|casting type to incompatible type}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3%select{|: different classes%diff{ ($ vs $)|}5,6|: different number of parameters (%5 vs %6)|: type mismatch at %ordinal5 parameter%diff{ ($ vs $)|}6,7|: different return type%diff{ ($ vs $)|}5,6|: different qualifiers (%select{none|const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}5 vs %select{none|const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}6)|: different exception specifications}4"}},
| |
| [g]={{nil,E,{{{{"assigning to A from incompatible type B","assigning to type from incompatible type"}},{{"passing A to parameter of incompatible type B","passing type to parameter of incompatible type"}},{{"returning A from a function with incompatible result type B","returning type from a function with incompatible result type"}},{{"converting A to incompatible type B","converting type to incompatible type"}},{{"initializing A with an expression of incompatible type B","initializing type with an expression of incompatible type"}},{{"sending A to parameter of incompatible type B","sending type to parameter of incompatible type"}},{{"casting A to incompatible type B","casting type to incompatible type"}}},{a,Jc,Kc,Qc,Sc},{a,{": different classes",{" (F vs G)",a}},": different number of parameters (F vs G)",{": type mismatch at F parameter",{" (G vs H)",a}},{": different return type",{" (F vs G)",a}},": different qualifiers (F vs G)",": different exception specifications"}}},{ic,nil,{{{{"assigning to A from incompatible type B","assigning to type from incompatible type"}},{{"passing A to parameter of incompatible type B","passing type to parameter of incompatible type"}},{{"returning A from a function with incompatible result type B","returning type from a function with incompatible result type"}},{{"converting A to incompatible type B","converting type to incompatible type"}},{{"initializing A with an expression of incompatible type B","initializing type with an expression of incompatible type"}},{{"sending A to parameter of incompatible type B","sending type to parameter of incompatible type"}},{{"casting A to incompatible type B","casting type to incompatible type"}}},{a,Jc,Kc,Qc,Sc},{a,{": different classes",{" (F vs G)",a}},": different number of parameters (F vs G)",{": type mismatch at F parameter",{" (G vs H)",a}},{": different return type",{" (F vs G)",a}},{": different qualifiers (",{"none","const","restrict","const and restrict",Wc,"const and volatile","volatile and restrict","const, volatile, and restrict"}," vs ",{"none","const","restrict","const and restrict",Wc,"const and volatile","volatile and restrict","const, volatile, and restrict"},")"},": different exception specifications"}}}},
| |
| [b]=k,
| |
| [e]="(?:(?:assigning to (.*?) from incompatible type (.*?)|assigning to type from incompatible type)|(?:passing (.*?) to parameter of incompatible type (.*?)|passing type to parameter of incompatible type)|(?:returning (.*?) from a function with incompatible result type (.*?)|returning type from a function with incompatible result type)|(?:converting (.*?) to incompatible type (.*?)|converting type to incompatible type)|(?:initializing (.*?) with an expression of incompatible type (.*?)|initializing type with an expression of incompatible type)|(?:sending (.*?) to parameter of incompatible type (.*?)|sending type to parameter of incompatible type)|(?:casting (.*?) to incompatible type (.*?)|casting type to incompatible type))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)(?:|\\: different classes(?: \\((.*?) vs (.*?)\\)|)|\\: different number of parameters \\((.*?) vs (.*?)\\)|\\: type mismatch at (.*?) parameter(?: \\((.*?) vs (.*?)\\)|)|\\: different return type(?: \\((.*?) vs (.*?)\\)|)|\\: different qualifiers \\((.*?) vs (.*?)\\)|\\: different exception specifications)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{z,4387,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n case PPC::BI__builtin_ppc_maxfe:\n case PPC::BI__builtin_ppc_minfe:\n case PPC::BI__builtin_ppc_maxfl:\n case PPC::BI__builtin_ppc_minfl:\n case PPC::BI__builtin_ppc_maxfs:\n case PPC::BI__builtin_ppc_minfs: {\n // ...\n for (unsigned I = 0, E = TheCall->getNumArgs(); I < E; ++I)\n if (TheCall->getArg(I)->getType() != ArgType)\n return Diag(TheCall->getBeginLoc(), diag::err_typecheck_convert_incompatible) << TheCall->getArg(I)->getType() << ArgType << 1 << 0 << 0;"},{z,8223,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n // ...\n if (!Arg1Ty->isPointerType() || !IsSuitablyTypedFormatArgument(Arg1))\n Diag(Arg1->getBeginLoc(), diag::err_typecheck_convert_incompatible) << Arg1->getType() << ConstCharPtrTy << 1 /* different class */"},{z,8231,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n // ...\n if (Arg2Ty->getCanonicalTypeInternal().withoutLocalFastQualifiers() != SizeTy)\n Diag(Arg2->getBeginLoc(), diag::err_typecheck_convert_incompatible) << Arg2->getType() << SizeTy << 1 /* different class */"},{z,9278,"/// SemaBuiltinPPCMMACall - Check the call to a PPC MMA builtin for validity.\n/// Emit an error and return true on failure; return false on success.\n/// TypeStr is a string containing the type descriptor of the value returned by\n/// the builtin and the descriptors of the expected type of the arguments.\nbool Sema::SemaBuiltinPPCMMACall(CallExpr *TheCall, unsigned BuiltinID, const char *TypeStr) {\n // ...\n while (*TypeStr != \'\\0\') {\n // ...\n // The only case where the argument type and expected type are allowed to\n // mismatch is if the argument type is a non-void pointer (or array) and\n // expected type is a void pointer.\n if (StrippedRVType != ExpectedType)\n if (!(ExpectedType->isVoidPointerType() && (StrippedRVType->isPointerType() || StrippedRVType->isArrayType())))\n return Diag(Arg->getBeginLoc(), diag::err_typecheck_convert_incompatible) << PassedType << ExpectedType << 1 << 0 << 0;"},{n,17742,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case Incompatible:\n // ...\n DiagKind = diag::err_typecheck_convert_incompatible;"}},
| |
| [l]={
| |
| ["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:17:7: error: assigning to \'C\' (aka \'void (X::*)() noexcept\') from incompatible type \'void (X::*)()\': different exception specifications","clang/test/CXX/expr/p13.cpp:20:7: error: assigning to \'E\' (aka \'void (Y::*)() noexcept\') from incompatible type \'void (Y::*)()\': different exception specifications","clang/test/CXX/expr/p13.cpp:21:7: error: assigning to \'E\' (aka \'void (Y::*)() noexcept\') from incompatible type \'void (Y::*)()\': different exception specifications"}
| |
| }
| |
| },
| |
| ["err_typecheck_convert_incompatible_block_pointer"]={
| |
| [i]="err_typecheck_convert_incompatible_block_pointer",
| |
| [h]="incompatible block pointer types %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",
| |
| [g]={{nil,nil,{"incompatible block pointer types ",{{{Wb,zb}},{{xb,yb}},{{pb,Ab}},{{Bb,Cb}},{{Db,Eb}},{{Fb,Gb}},{{Hb,Ib}}}}}},
| |
| [b]=k,
| |
| [e]="incompatible block pointer types (?:(?: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))",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"d79b5a85b059",1240354302,"Tighten up blocks type checking. This was discussed back in the","Tighten up blocks type checking. This was discussed back in the\nr56595 timeframe, but left undone. Radar 6812711\n\nllvm-svn: 69745"},
| |
| [j]={{n,17679,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatibleBlockPointer:\n DiagKind = diag::err_typecheck_convert_incompatible_block_pointer;"}},
| |
| [l]={
| |
| ["clang/test/SemaObjC/block-omitted-return-type.m"]={"clang/test/SemaObjC/block-omitted-return-type.m:26:10: error: incompatible block pointer types initializing \'void (^)(void)\' with an expression of type \'const void (^)(void)\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_convert_incompatible_function_pointer"]={
| |
| [i]={{nil,q,"err_typecheck_convert_incompatible_function_pointer"}},
| |
| [h]={{nil,q,"incompatible function pointer types %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%select{|; dereference with *|; take the address with &|; remove *|; remove &}3"}},
| |
| [g]={{nil,q,{"incompatible function pointer types ",{{{Wb,zb}},{{xb,yb}},{{pb,Ab}},{{Bb,Cb}},{{Db,Eb}},{{Fb,Gb}},{{Hb,Ib}}},{a,Jc,Kc,Qc,Sc}}}},
| |
| [b]=k,
| |
| [e]="incompatible function pointer types (?:(?: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))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)",
| |
| [f]=a,
| |
| [d]={{nil,q,m}},
| |
| [c]={U,1576908663,T,S},
| |
| [j]={{n,17554,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatibleFunctionPointer:\n if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_incompatible_function_pointer;"}},
| |
| [l]={
| |
| ["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:14:7: error: incompatible function pointer types assigning to \'A\' (aka \'void (*)() noexcept\') from \'void (*)()\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_convert_incompatible_pointer"]={
| |
| [i]={{nil,q,"err_typecheck_convert_incompatible_pointer"}},
| |
| [h]={{nil,q,"incompatible pointer types %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%select{|; dereference with *|; take the address with &|; remove *|; remove &}3"}},
| |
| [g]={{nil,q,{"incompatible pointer types ",{{{Wb,zb}},{{xb,yb}},{{pb,Ab}},{{Bb,Cb}},{{Db,Eb}},{{Fb,Gb}},{{Hb,Ib}}},{a,Jc,Kc,Qc,Sc}}}},
| |
| [b]=k,
| |
| [e]="incompatible pointer types (?:(?: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))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)",
| |
| [f]=a,
| |
| [d]={{nil,q,m}},
| |
| [c]={U,1576908663,T,S},
| |
| [j]={{n,17566,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatiblePointer:\n if (Action == AA_Passing_CFAudited) {\n // ...\n } else if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_incompatible_pointer;"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.decls/temp.class/temp.mem.class/p1.cpp"]={"clang/test/CXX/temp/temp.decls/temp.class/temp.mem.class/p1.cpp:13:18: error: incompatible pointer types assigning to \'int *\' from \'float *\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_convert_incompatible_pointer_sign"]={
| |
| [i]={{nil,q,"err_typecheck_convert_incompatible_pointer_sign"}},
| |
| [h]={{nil,v,"%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 converts between pointers to integer types %select{with different sign|where one is of the unique plain \'char\' type and the other is not}3"},{ib,q,"%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 converts between pointers to integer types with different sign"}},
| |
| [g]={{nil,v,{{{{Wb,zb}},{{xb,yb}},{{pb,Ab}},{{Bb,Cb}},{{Db,Eb}},{{Fb,Gb}},{{Hb,Ib}}}," converts between pointers to integer types ",{"with different sign","where one is of the unique plain \'char\' type and the other is not"}}},{ib,q,{{{{Wb,zb}},{{xb,yb}},{{pb,Ab}},{{Bb,Cb}},{{Db,Eb}},{{Fb,Gb}},{{Hb,Ib}}}," converts between pointers to integer types with different sign"}}},
| |
| [b]=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)) converts between pointers to integer types (?:with different sign|where one is of the unique plain \'char\' type and the other is not)",
| |
| [f]=a,
| |
| [d]={{nil,q,m}},
| |
| [c]={U,1576908663,T,S},
| |
| [j]={{n,17583,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatiblePointerSign:\n if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_incompatible_pointer_sign;"},{n,17764,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n if (DiagKind == diag::ext_typecheck_convert_incompatible_pointer_sign || DiagKind == diag::err_typecheck_convert_incompatible_pointer_sign) {"}},
| |
| [l]={
| |
| ["clang/test/Sema/incompatible-sign.cpp"]={"clang/test/Sema/incompatible-sign.cpp:7:7: error: assigning to \'signed char *\' from \'char *\' converts between pointers to integer types where one is of the unique plain \'char\' type and the other is not","clang/test/Sema/incompatible-sign.cpp:13:7: error: assigning to \'char *\' from \'unsigned char *\' converts between pointers to integer types where one is of the unique plain \'char\' type and the other is not"}
| |
| }
| |
| },
| |
| ["err_typecheck_convert_int_pointer"]={
| |
| [i]={{nil,q,"err_typecheck_convert_int_pointer"}},
| |
| [h]={{nil,q,"incompatible integer to pointer conversion %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%select{|; dereference with *|; take the address with &|; remove *|; remove &}3"}},
| |
| [g]={{nil,q,{"incompatible integer to pointer conversion ",{{{Wb,zb}},{{xb,yb}},{{pb,Ab}},{{Bb,Cb}},{{Db,Eb}},{{Fb,Gb}},{{Hb,Ib}}},{a,Jc,Kc,Qc,Sc}}}},
| |
| [b]=k,
| |
| [e]="incompatible integer to pointer conversion (?:(?: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))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)",
| |
| [f]=a,
| |
| [d]={{nil,q,m}},
| |
| [c]={U,1576908663,T,S},
| |
| [j]={{n,17538,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IntToPointer:\n if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_int_pointer;"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/goto.cpp"]={"clang/test/SemaCXX/goto.cpp:43:9: error: incompatible integer to pointer conversion assigning to \'double *\' from \'int\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_convert_pointer_int"]={
| |
| [i]={{nil,q,"err_typecheck_convert_pointer_int"}},
| |
| [h]={{nil,q,"incompatible pointer to integer conversion %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%select{|; dereference with *|; take the address with &|; remove *|; remove &}3"}},
| |
| [g]={{nil,q,{"incompatible pointer to integer conversion ",{{{Wb,zb}},{{xb,yb}},{{pb,Ab}},{{Bb,Cb}},{{Db,Eb}},{{Fb,Gb}},{{Hb,Ib}}},{a,Jc,Kc,Qc,Sc}}}},
| |
| [b]=k,
| |
| [e]="incompatible pointer to integer conversion (?:(?: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))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)",
| |
| [f]=a,
| |
| [d]={{nil,q,m}},
| |
| [c]={U,1576908663,T,S},
| |
| [j]={{n,17528,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case PointerToInt:\n if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_pointer_int;"}},
| |
| [l]={
| |
| ["clang/test/SemaObjCXX/comptypes-7.mm"]={"clang/test/SemaObjCXX/comptypes-7.mm:38:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'id\'","clang/test/SemaObjCXX/comptypes-7.mm:39:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'id<MyProtocol>\'","clang/test/SemaObjCXX/comptypes-7.mm:40:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'MyClass *\'","clang/test/SemaObjCXX/comptypes-7.mm:41:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'Class\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_convert_pointer_void_func"]={
| |
| [i]={{nil,q,"err_typecheck_convert_pointer_void_func"}},
| |
| [h]={{nil,q,"%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 converts between void pointer and function pointer"}},
| |
| [g]={{nil,q,{{{{Wb,zb}},{{xb,yb}},{{pb,Ab}},{{Bb,Cb}},{{Db,Eb}},{{Fb,Gb}},{{Hb,Ib}}}," converts between void pointer and function pointer"}}},
| |
| [b]=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)) converts between void pointer and function pointer",
| |
| [f]=a,
| |
| [d]={{nil,q,m}},
| |
| [c]={U,1576908663,T,S},
| |
| [j]={{n,17591,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case FunctionVoidPointer:\n if (getLangOpts().CPlusPlus) {\n DiagKind = diag::err_typecheck_convert_pointer_void_func;"}}
| |
| },
| |
| ["err_typecheck_converted_constant_expression"]={
| |
| [i]="err_typecheck_converted_constant_expression",
| |
| [h]="value of type %0 is not implicitly convertible to %1",
| |
| [g]="value of type A is not implicitly convertible to B",
| |
| [b]=k,
| |
| [e]="value of type (.*?) is not implicitly convertible to (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case","constexpr: converted constant expression handling for enumerator values, case\nvalues and non-type template arguments of integral and enumeration types.\n\nThis change causes some legal C++98 code to no longer compile in C++11 mode, by\nenforcing the C++11 rule that narrowing integral conversions are not permitted\nin the final implicit conversion sequence for the above cases.\n\nllvm-svn: 148439"},
| |
| [j]={{Pb,5859,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n // ...\n case ImplicitConversionSequence::AmbiguousConversion:\n case ImplicitConversionSequence::BadConversion:\n if (!S.DiagnoseMultipleUserDefinedConversion(From, T))\n return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression) << From->getType() << From->getSourceRange() << T;"}},
| |
| [l]={
| |
| ["clang/test/Misc/integer-literal-printing.cpp"]={"clang/test/Misc/integer-literal-printing.cpp:71:27: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type3Helper<(boolTy)false>::Ty\' (aka \'boolTy\')","clang/test/Misc/integer-literal-printing.cpp:73:27: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type4Helper<(charTy)\'\\x00\'>::Ty\' (aka \'charTy\')","clang/test/Misc/integer-literal-printing.cpp:74:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type5Helper<(scharTy)\'\\x00\'>::Ty\' (aka \'scharTy\')","clang/test/Misc/integer-literal-printing.cpp:75:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type6Helper<(ucharTy)\'\\x00\'>::Ty\' (aka \'ucharTy\')","clang/test/Misc/integer-literal-printing.cpp:76:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type7Helper<(wcharTy)L\'\\x00\'>::Ty\' (aka \'wcharTy\')","clang/test/Misc/integer-literal-printing.cpp:77:29: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type8Helper<(char16Ty)u\'\\x00\'>::Ty\' (aka \'char16Ty\')","clang/test/Misc/integer-literal-printing.cpp:78:29: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type9Helper<(char32Ty)u\'\\x00\'>::Ty\' (aka \'char32Ty\')"}
| |
| }
| |
| },
| |
| ["err_typecheck_converted_constant_expression_disallowed"]={
| |
| [i]="err_typecheck_converted_constant_expression_disallowed",
| |
| [h]="conversion from %0 to %1 is not allowed in a converted constant expression",
| |
| [g]="conversion from A to B is not allowed in a converted constant expression",
| |
| [b]=k,
| |
| [e]="conversion from (.*?) to (.*?) is not allowed in a converted constant expression",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case","constexpr: converted constant expression handling for enumerator values, case\nvalues and non-type template arguments of integral and enumeration types.\n\nThis change causes some legal C++98 code to no longer compile in C++11 mode, by\nenforcing the C++11 rule that narrowing integral conversions are not permitted\nin the final implicit conversion sequence for the above cases.\n\nllvm-svn: 148439"},
| |
| [j]={{Pb,5871,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n // ...\n // Check that we would only use permitted conversions.\n if (!CheckConvertedConstantConversions(S, *SCS)) {\n return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression_disallowed) << From->getType() << From->getSourceRange() << T;"}},
| |
| [l]={
| |
| ["clang/test/Misc/explicit.cpp"]={"clang/test/Misc/explicit.cpp:5:13: error: conversion from \'void *\' to \'bool\' is not allowed in a converted constant expression"}
| |
| }
| |
| },
| |
| ["err_typecheck_converted_constant_expression_indirect"]={
| |
| [i]="err_typecheck_converted_constant_expression_indirect",
| |
| [h]="conversion from %0 to %1 in converted constant expression would bind reference to a temporary",
| |
| [g]="conversion from A to B in converted constant expression would bind reference to a temporary",
| |
| [b]=k,
| |
| [e]="conversion from (.*?) to (.*?) in converted constant expression would bind reference to a temporary",
| |
| [f]=a,
| |
| [d]=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"},
| |
| [j]={{Pb,5877,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n // ...\n // [...] and where the reference binding (if any) binds directly.\n if (SCS->ReferenceBinding && !SCS->DirectBinding) {\n return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression_indirect) << From->getType() << From->getSourceRange() << T;"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:231:5: error: conversion from \'int\' to \'const int &\' in converted constant expression would bind reference to a temporary"}
| |
| }
| |
| },
| |
| ["err_typecheck_decl_incomplete_type"]={
| |
| [i]="err_typecheck_decl_incomplete_type",
| |
| [h]="variable has incomplete type %0",
| |
| [g]="variable has incomplete type A",
| |
| [b]=k,
| |
| [e]="variable has incomplete type (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{z,16640,"/// CheckParmsForFunctionDef - Check that the parameters of the given\n/// function are appropriate for the definition of a function. This\n/// takes care of any checks that cannot be performed on the\n/// declaration itself, e.g., that the types of each of the function\n/// parameters are complete.\nbool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, bool CheckParameterNames) {\n // ...\n for (ParmVarDecl *Param : Parameters) {\n // ...\n if (!Param->isInvalidDecl() && (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type) || RequireNonAbstractType(Param->getBeginLoc(), Param->getOriginalType(), diag::err_abstract_type_in_decl, AbstractParamType))) {"},{w,8734,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n if (T->isVoidType()) {\n // C++98 [dcl.stc]p5: The extern specifier can be applied only to the names\n // of objects and functions.\n if (NewVD->isThisDeclarationADefinition() || getLangOpts().CPlusPlus) {\n Diag(NewVD->getLocation(), diag::err_typecheck_decl_incomplete_type) << T;"},{w,13202,"/// 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 (!VDecl->getType()->isDependentType()) {\n // ...\n if (RequireCompleteType(VDecl->getLocation(), BaseDeclType, diag::err_typecheck_decl_incomplete_type)) {"},{w,13636,"/// ActOnInitializerError - Given that there was an error parsing an\n/// initializer for the given declaration, try to at least re-establish\n/// invariants such as whether a variable\'s type is either dependent or\n/// complete.\nvoid Sema::ActOnInitializerError(Decl *D) {\n // ...\n if (RequireCompleteType(VD->getLocation(), Context.getBaseElementType(Ty), diag::err_typecheck_decl_incomplete_type)) {"},{w,13728,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n // ...\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n // ...\n if (!Var->isInvalidDecl() && RealDecl->hasAttr<LoaderUninitializedAttr>()) {\n // ...\n if (RequireCompleteType(Var->getLocation(), Var->getType(), diag::err_typecheck_decl_incomplete_type)) {"},{w,13770,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n // ...\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n // ...\n case VarDecl::DeclarationOnly:\n // ...\n if (!Type->isDependentType() && Var->isLocalVarDecl() && !Var->hasLinkage() && !Var->isInvalidDecl() && RequireCompleteType(Var->getLocation(), Type, diag::err_typecheck_decl_incomplete_type))"},{w,13858,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n // ...\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n // ...\n if (!Var->hasAttr<AliasAttr>()) {\n if (RequireCompleteType(Var->getLocation(), Context.getBaseElementType(Type), diag::err_typecheck_decl_incomplete_type)) {"},{H,278,"ExprResult Sema::ConvertParamDefaultArgument(ParmVarDecl *Param, Expr *Arg, SourceLocation EqualLoc) {\n if (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type))"},{n,7741,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n // ...\n } else if (!literalType->isDependentType() && RequireCompleteType(LParenLoc, literalType, diag::err_typecheck_decl_incomplete_type, SourceRange(LParenLoc, LiteralExpr->getSourceRange().getEnd())))"}},
| |
| [l]={
| |
| ["clang/test/CXX/temp/temp.spec/temp.expl.spec/p10.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p10.cpp:7:8: error: variable has incomplete type \'X<int>\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_deleted_function"]={
| |
| [i]="err_typecheck_deleted_function",
| |
| [h]="conversion function %diff{from $ to $|between types}0,1 invokes a deleted function",
| |
| [g]={{nil,nil,{"conversion function ",{"from A to B","between types"}," invokes a deleted function"}}},
| |
| [b]=k,
| |
| [e]="conversion function (?:from (.*?) to (.*?)|between types) invokes a deleted function",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={rd,1260399737,pd,ld},
| |
| [j]={{Q,9672,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitOverloadFailed:\n case FK_UserConversionOverloadFailed:\n // ...\n case OR_Deleted: {\n S.Diag(Kind.getLocation(), diag::err_typecheck_deleted_function) << OnlyArg->getType() << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/deleted-function.cpp"]={"clang/test/SemaCXX/deleted-function.cpp:34:7: error: conversion function from \'WithDel\' to \'int\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:74:9: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:83:19: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:85:19: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function"}
| |
| }
| |
| },
| |
| ["err_typecheck_duplicate_vector_components_not_mlvalue"]={
| |
| [i]="err_typecheck_duplicate_vector_components_not_mlvalue",
| |
| [h]="vector is not assignable (contains duplicate components)",
| |
| [g]="vector is not assignable (contains duplicate components)",
| |
| [b]=k,
| |
| [e]="vector is not assignable \\(contains duplicate components\\)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,14370,"/// 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_DuplicateVectorComponents:\n DiagID = diag::err_typecheck_duplicate_vector_components_not_mlvalue;"}},
| |
| [l]={
| |
| ["clang/test/Sema/ext_vector_components.c"]={"clang/test/Sema/ext_vector_components.c:29:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:30:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:31:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:33:13: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:56:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:57:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:58:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:60:13: error: vector is not assignable (contains duplicate components)"}
| |
| }
| |
| },
| |
| ["err_typecheck_expect_flt_or_vector"]={
| |
| [i]={{nil,F,"err_typecheck_expect_flt_or_vector"}},
| |
| [h]={{nil,F,"invalid operand of type %0 where floating, complex or a vector of such types is required"}},
| |
| [g]={{nil,F,"invalid operand of type A where floating, complex or a vector of such types is required"}},
| |
| [b]=k,
| |
| [e]="invalid operand of type (.*?) where floating, complex or a vector of such types is required",
| |
| [f]=a,
| |
| [d]={{nil,F,m}},
| |
| [c]={Vc,1615397021,Zc,ad},
| |
| [j]={{z,8587,"/// SemaBuiltinArithmeticFence - Handle __arithmetic_fence.\nbool Sema::SemaBuiltinArithmeticFence(CallExpr *TheCall) {\n // ...\n if (!ArgTy->hasFloatingRepresentation())\n return Diag(TheCall->getEndLoc(), diag::err_typecheck_expect_flt_or_vector) << ArgTy;"}},
| |
| [l]={
| |
| ["clang/test/Sema/arithmetic-fence-builtin.c"]={"clang/test/Sema/arithmetic-fence-builtin.c:21:27: error: invalid operand of type \'stype\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:32:31: error: invalid operand of type \'int\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:9:31: error: invalid operand of type \'float *\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:9:31: error: invalid operand of type \'int *\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:12:34: error: invalid operand of type \'int\' where floating, complex or a vector of such types is required"}
| |
| }
| |
| },
| |
| ["err_typecheck_expect_int"]={
| |
| [i]="err_typecheck_expect_int",
| |
| [h]="used type %0 where integer is required",
| |
| [g]="used type A where integer is required",
| |
| [b]=k,
| |
| [e]="used type (.*?) where integer is required",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands","OpenCL: handle shift operator with vector operands\n\nIntroduce a number of checks:\n1. If LHS is a scalar, then RHS cannot be a vector.\n2. Operands must be of integer type.\n3. If both are vectors, then the number of elements must match.\n\nRelax the requirement for \"usual arithmetic conversions\":\nWhen LHS is a vector, a scalar RHS can simply be expanded into a\nvector; OpenCL does not require that its rank be lower than the LHS.\nFor example, the following code is not an error even if the implicit\ntype of the constant literal is \"int\".\n\n char2 foo(char2 v) { return v << 1; }\n\nConsolidate existing tests under CodeGenOpenCL, and add more tests\nunder SemaOpenCL.\n\nllvm-svn: 228382"},
| |
| [j]={{z,316,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n // ...\n if (!IsValidIntegerType(AlignOp->getType())) {\n S.Diag(AlignOp->getExprLoc(), diag::err_typecheck_expect_int) << AlignOp->getType();"},{z,4441,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n if (!ArgExpr->EvaluateAsInt(ArgResult, Context))\n return Diag(ArgExpr->getExprLoc(), diag::err_typecheck_expect_int) << ArgExpr->getType();"},{n,12117,"/// Return the resulting type when a vector is shifted\n/// by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n // The operands need to be integers.\n if (!LHSEleType->isIntegerType()) {\n S.Diag(Loc, diag::err_typecheck_expect_int) << LHS.get()->getType() << LHS.get()->getSourceRange();"},{n,12139,"/// Return the resulting type when a vector is shifted\n/// by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n if (!RHSEleType->isIntegerType()) {\n S.Diag(Loc, diag::err_typecheck_expect_int) << RHS.get()->getType() << RHS.get()->getSourceRange();"},{n,12204,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n if (!LHSEleType->isIntegerType()) {\n S.Diag(Loc, diag::err_typecheck_expect_int) << LHS.get()->getType() << LHS.get()->getSourceRange();"},{n,12212,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n if (!RHSEleType->isIntegerType()) {\n S.Diag(Loc, diag::err_typecheck_expect_int) << RHS.get()->getType() << RHS.get()->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/Sema/ext_vector_ops.c"]={"clang/test/Sema/ext_vector_ops.c:129:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:130:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:131:13: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:132:13: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:133:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:134:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:135:13: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:136:13: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:146:8: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:147:8: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:157:6: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:158:6: error: used type \'float\' where integer is required"}
| |
| }
| |
| },
| |
| ["err_typecheck_expect_scalar_operand"]={
| |
| [i]="err_typecheck_expect_scalar_operand",
| |
| [h]="operand of type %0 where arithmetic or pointer type is required",
| |
| [g]="operand of type A where arithmetic or pointer type is required",
| |
| [b]=k,
| |
| [e]="operand of type (.*?) where arithmetic or pointer type is required",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{jc,3059,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n // Require the operand to be a scalar, a vector, or a matrix.\n if (!SrcType->isScalarType() && !SrcType->isVectorType() && !SrcType->isMatrixType()) {\n Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_typecheck_expect_scalar_operand) << SrcType << SrcExpr.get()->getSourceRange();"},{z,309,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n // ...\n if ((!SrcTy->isPointerType() && !IsValidIntegerType(SrcTy)) || SrcTy->isFunctionPointerType()) {\n // ...\n S.Diag(Source->getExprLoc(), diag::err_typecheck_expect_scalar_operand) << SrcTy;"}},
| |
| [l]={
| |
| ["clang/test/Parser/check_cast.c"]={"clang/test/Parser/check_cast.c:11:12: error: operand of type \'struct foo\' where arithmetic or pointer type is required"}
| |
| }
| |
| },
| |
| ["err_typecheck_expression_not_modifiable_lvalue"]={
| |
| [i]="err_typecheck_expression_not_modifiable_lvalue",
| |
| [h]="expression is not assignable",
| |
| [g]="expression is not assignable",
| |
| [b]=k,
| |
| [e]="expression is not assignable",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,14363,"/// 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_InvalidExpression:\n case Expr::MLV_MemberFunction:\n case Expr::MLV_ClassTemporary:\n DiagID = diag::err_typecheck_expression_not_modifiable_lvalue;"}}
| |
| },
| |
| ["err_typecheck_field_variable_size"]={
| |
| [i]="err_typecheck_field_variable_size",
| |
| [h]="fields must have a constant size: \'variable length array in structure\' extension will never be supported",
| |
| [g]="fields must have a constant size: \'variable length array in structure\' extension will never be supported",
| |
| [b]=k,
| |
| [e]="fields must have a constant size\\: \'variable length array in structure\' extension will never be supported",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{w,18160,"/// 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 // C99 6.7.2.1p8: A member of a structure or union may have any type other\n // than a variably modified type.\n if (!InvalidDecl && T->isVariablyModifiedType()) {\n if (!tryToFixVariablyModifiedVarType(TInfo, T, Loc, diag::err_typecheck_field_variable_size))"}},
| |
| [l]={
| |
| ["clang/test/Sema/vla.c"]={"clang/test/Sema/vla.c:17:28: error: fields must have a constant size: \'variable length array in structure\' extension will never be supported","clang/test/Sema/vla.c:74:7: error: fields must have a constant size: \'variable length array in structure\' extension will never be supported"}
| |
| }
| |
| },
| |
| ["err_typecheck_illegal_increment_decrement"]={
| |
| [i]="err_typecheck_illegal_increment_decrement",
| |
| [h]="cannot %select{decrement|increment}1 value of type %0",
| |
| [g]={{nil,nil,{"cannot ",{"decrement","increment"}," value of type A"}}},
| |
| [b]=k,
| |
| [e]="cannot (?:decrement|increment) value of type (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,14751,"/// CheckIncrementDecrementOperand - unlike most \"Check\" methods, this routine\n/// doesn\'t need to call UsualUnaryConversions or UsualArithmeticConversions.\nstatic QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) {\n // ...\n if (S.getLangOpts().CPlusPlus && ResType->isBooleanType()) {\n // ...\n } else if (S.getLangOpts().CPlusPlus && ResType->isEnumeralType()) {\n // ...\n } else if (ResType->isRealType()) {\n // ...\n } else if (ResType->isPointerType()) {\n // ...\n } else if (ResType->isObjCObjectPointerType()) {\n // ...\n } else if (ResType->isAnyComplexType()) {\n // ...\n } else if (ResType->isPlaceholderType()) {\n // ...\n } else if (S.getLangOpts().AltiVec && ResType->isVectorType()) {\n // ...\n } else if (S.getLangOpts().ZVector && ResType->isVectorType() && (ResType->castAs<VectorType>()->getVectorKind() != VectorType::AltiVecBool)) {\n // ...\n } else if (S.getLangOpts().OpenCL && ResType->isVectorType() && ResType->castAs<VectorType>()->getElementType()->isIntegerType()) {\n // ...\n } else {\n S.Diag(OpLoc, diag::err_typecheck_illegal_increment_decrement) << ResType << int(IsInc) << Op->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/overloaded-builtin-operators-cxx17.cpp"]={"clang/test/SemaCXX/overloaded-builtin-operators-cxx17.cpp:9:14: error: cannot increment value of type \'BoolRef\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_incompatible_address_space"]={
| |
| [i]="err_typecheck_incompatible_address_space",
| |
| [h]="%select{%diff{assigning $ to $|assigning to different types}1,0|%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 changes address space of pointer",
| |
| [g]={{nil,nil,{{{{"assigning B to A",zb}},{{xb,yb}},{{pb,Ab}},{{Bb,Cb}},{{Db,Eb}},{{Fb,Gb}},{{Hb,Ib}}}," changes address space of pointer"}}},
| |
| [b]=k,
| |
| [e]="(?:(?:assigning (.*?) to (.*?)|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)) changes address space of pointer",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"4fff8f6cff1c",1296519029,"Perform the bad-address-space conversions check as part of ","Perform the bad-address-space conversions check as part of \nCheckPointerTypesForAssignment.\n\nllvm-svn: 124632"},
| |
| [j]={{jc,2655,"void CastOperation::checkAddressSpaceCast(QualType SrcType, QualType DestType) {\n // ...\n // Converting the top level pointee addrspace is permitted for compatible\n // addrspaces (such as \'generic int *\' to \'local int *\' or vice versa), but\n // if any of the nested pointee addrspaces differ, we emit a warning\n // regardless of addrspace compatibility. This makes\n // local int ** p;\n // return (generic int **) p;\n // warn even though local -> generic is permitted.\n if (Self.getLangOpts().OpenCL) {\n // ...\n unsigned DiagID = diag::err_typecheck_incompatible_address_space;"},{n,17607,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatiblePointerDiscardsQualifiers: {\n // ...\n if (lhq.getAddressSpace() != rhq.getAddressSpace()) {\n DiagKind = diag::err_typecheck_incompatible_address_space;"}},
| |
| [l]={
| |
| ["clang/test/SemaSYCL/address-space-conversions.cpp"]={"clang/test/SemaSYCL/address-space-conversions.cpp:20:10: error: assigning \'__private int *\' to \'__global int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:21:10: error: assigning \'__local int *\' to \'__global int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:72:15: error: assigning \'__global int *\' to \'__global_host int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:78:17: error: assigning \'__global int *\' to \'__global_device int *\' changes address space of pointer"}
| |
| }
| |
| },
| |
| ["err_typecheck_incompatible_nested_address_space"]={
| |
| [i]={{nil,D,"err_typecheck_incompatible_nested_address_space"}},
| |
| [h]={{nil,D,"%select{%diff{assigning $ to $|assigning to different types}1,0|%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 changes address space of nested pointer"}},
| |
| [g]={{nil,D,{{{{"assigning B to A",zb}},{{xb,yb}},{{pb,Ab}},{{Bb,Cb}},{{Db,Eb}},{{Fb,Gb}},{{Hb,Ib}}}," changes address space of nested pointer"}}},
| |
| [b]=k,
| |
| [e]="(?:(?:assigning (.*?) to (.*?)|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)) changes address space of nested pointer",
| |
| [f]=a,
| |
| [d]={{nil,D,m}},
| |
| [c]={"5b6dda33d122",1557325429,"[Sema][OpenCL] Make address space conversions a bit stricter.","[Sema][OpenCL] Make address space conversions a bit stricter.\n\nThe semantics for converting nested pointers between address\nspaces are not very well defined. Some conversions which do not\nreally carry any meaning only produce warnings, and in some cases\nwarnings hide invalid conversions, such as \'global int*\' to\n\'local float*\'!\n\nThis patch changes the logic in checkPointerTypesForAssignment\nand checkAddressSpaceCast to fail properly on implicit conversions\nthat should definitely not be permitted. We also dig deeper into the\npointer types and warn on explicit conversions where the address\nspace in a nested pointer changes, regardless of whether the address\nspace is compatible with the corresponding pointer nesting level\non the destination type.\n\nFixes PR39674!\n\nPatch by ebevhan (Bevin Hansson)!\n\nDifferential Revision: https://reviews.llvm.org/D58236\n\nllvm-svn: 360258"},
| |
| [j]={{n,17648,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatibleNestedPointerAddressSpaceMismatch:\n DiagKind = diag::err_typecheck_incompatible_nested_address_space;"}},
| |
| [l]={
| |
| ["clang/test/SemaOpenCL/address-spaces.cl"]={"clang/test/SemaOpenCL/address-spaces.cl:196:8: error: assigning \'__local int *__private *__private\' to \'__global int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:207:8: error: assigning \'__global int *__private *__private\' to \'__local int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:209:8: error: assigning \'__global float *__private *__private\' to \'__local int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:215:10: error: assigning \'__local int *__private *__private\' to \'__global float *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:222:8: error: assigning \'__private l_t *__private\' (aka \'__local int *__private *__private\') to \'__global int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:223:8: error: assigning \'__global int *__private *__private\' to \'__private l_t *\' (aka \'__local int *__private *\') changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:226:8: error: assigning \'__private l_t *__private\' (aka \'__local int *__private *__private\') to \'__private g_t *\' (aka \'__global int *__private *\') changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:227:8: error: assigning \'__private g_t *__private\' (aka \'__global int *__private *__private\') to \'__private l_t *\' (aka \'__local int *__private *\') changes address space of nested pointer"}
| |
| }
| |
| },
| |
| ["err_typecheck_incompatible_ownership"]={
| |
| [i]="err_typecheck_incompatible_ownership",
| |
| [h]="%select{%diff{assigning $ to $|assigning to different types}1,0|%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 changes retain/release properties of pointer",
| |
| [g]={{nil,nil,{{{{"assigning B to A",zb}},{{xb,yb}},{{pb,Ab}},{{Bb,Cb}},{{Db,Eb}},{{Fb,Gb}},{{Hb,Ib}}}," changes retain/release properties of pointer"}}},
| |
| [b]=k,
| |
| [e]="(?:(?:assigning (.*?) to (.*?)|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)) changes retain\\/release properties of pointer",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet...","Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifetime\'.\n\nrdar://9477613.\n\nllvm-svn: 133779"},
| |
| [j]={{jc,3206,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n // ARC imposes extra restrictions on casts.\n if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers()) {\n // ...\n if (Self.getLangOpts().ObjCAutoRefCount && CastPtr) {\n if (const PointerType *ExprPtr = SrcType->getAs<PointerType>()) {\n // ...\n if (CastPtr->getPointeeType()->isObjCLifetimeType() && ExprPtr->getPointeeType()->isObjCLifetimeType() && !CastQuals.compatiblyIncludesObjCLifetime(ExprQuals)) {\n Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_typecheck_incompatible_ownership) << SrcType << DestType << Sema::AA_Casting << SrcExpr.get()->getSourceRange();"},{n,17628,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatiblePointerDiscardsQualifiers: {\n // ...\n if (lhq.getAddressSpace() != rhq.getAddressSpace()) {\n // ...\n } else if (lhq.getObjCLifetime() != rhq.getObjCLifetime()) {\n DiagKind = diag::err_typecheck_incompatible_ownership;"}},
| |
| [l]={
| |
| ["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:53:7: error: initializing \'id *\' with an expression of type \'__weak id *\' changes retain/release properties of pointer","clang/test/SemaObjC/mrc-weak.m:54:14: error: initializing \'__weak id *\' with an expression of type \'id *\' changes retain/release properties of pointer","clang/test/SemaObjC/mrc-weak.m:65:27: error: initializing \'id *\' with an expression of type \'__weak id *\' changes retain/release properties of pointer"}
| |
| }
| |
| },
| |
| ["err_typecheck_incomplete_array_needs_initializer"]={
| |
| [i]="err_typecheck_incomplete_array_needs_initializer",
| |
| [h]="definition of variable with array type needs an explicit size or an initializer",
| |
| [g]="definition of variable with array type needs an explicit size or an initializer",
| |
| [b]=k,
| |
| [e]="definition of variable with array type needs an explicit size or an initializer",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"1060067dd11a",1257450467,"Don\'t allow definitions of array variables without some size information in C++. Fixed PR5401","Don\'t allow definitions of array variables without some size information in C++. Fixed PR5401\n\nllvm-svn: 86165"},
| |
| [j]={{w,13834,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n // ...\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n // ...\n // Provide a specific diagnostic for uninitialized variable\n // definitions with incomplete array type.\n if (Type->isIncompleteArrayType()) {\n if (Var->isConstexpr())\n // ...\n else\n Diag(Var->getLocation(), diag::err_typecheck_incomplete_array_needs_initializer);"}},
| |
| [l]={
| |
| ["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p1.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p1.cpp:23:5: error: definition of variable with array type needs an explicit size or an initializer"}
| |
| }
| |
| },
| |
| ["err_typecheck_incomplete_tag"]={
| |
| [i]="err_typecheck_incomplete_tag",
| |
| [h]="incomplete definition of type %0",
| |
| [g]="incomplete definition of type A",
| |
| [b]=k,
| |
| [e]="incomplete definition of type (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{V,655,"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 if (!SemaRef.isThisOutsideMemberFunctionBody(QualType(RTy, 0)) && SemaRef.RequireCompleteType(OpLoc, QualType(RTy, 0), diag::err_typecheck_incomplete_tag, BaseRange))"},{V,675,"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 if (SS.isSet()) {\n // ...\n if (SemaRef.RequireCompleteDeclContext(SS, DC)) {\n SemaRef.Diag(SS.getRange().getEnd(), diag::err_typecheck_incomplete_tag) << SS.getRange() << DC;"},{V,1361,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n // ...\n if (S.RequireCompleteType(OpLoc, BaseType, diag::err_typecheck_incomplete_tag, BaseExpr.get()))"},{Pb,15242,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n/// (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n // ...\n if (RequireCompleteType(Loc, Base->getType(), diag::err_typecheck_incomplete_tag, Base))"}},
| |
| [l]={
| |
| ["clang/test/Parser/recovery.c"]={"clang/test/Parser/recovery.c:70:36: error: incomplete definition of type \'struct forward\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_incomplete_type_not_modifiable_lvalue"]={
| |
| [i]="err_typecheck_incomplete_type_not_modifiable_lvalue",
| |
| [h]="incomplete type %0 is not assignable",
| |
| [g]="incomplete type A is not assignable",
| |
| [b]=k,
| |
| [e]="incomplete type (.*?) is not assignable",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,14365,"/// 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_IncompleteType:\n case Expr::MLV_IncompleteVoidType:\n return S.RequireCompleteType(Loc, E->getType(), diag::err_typecheck_incomplete_type_not_modifiable_lvalue, E);"}},
| |
| [l]={
| |
| ["clang/test/Sema/conditional-expr.c"]={"clang/test/Sema/conditional-expr.c:5:41: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:7:44: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:9:41: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:13:17: error: incomplete type \'void\' is not assignable"}
| |
| }
| |
| },
| |
| ["err_typecheck_indirection_requires_pointer"]={
| |
| [i]="err_typecheck_indirection_requires_pointer",
| |
| [h]="indirection requires pointer operand (%0 invalid)",
| |
| [g]="indirection requires pointer operand (A invalid)",
| |
| [b]=k,
| |
| [e]="indirection requires pointer operand \\((.*?) invalid\\)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,15152,"/// CheckIndirectionOperand - Type check unary indirection (prefix \'*\').\nstatic QualType CheckIndirectionOperand(Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc, bool IsAfterAmp = false) {\n // ...\n if (Result.isNull()) {\n S.Diag(OpLoc, diag::err_typecheck_indirection_requires_pointer) << OpTy << Op->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/instantiate-case.cpp"]={"clang/test/SemaTemplate/instantiate-case.cpp:6:12: error: indirection requires pointer operand (\'int\' invalid)"}
| |
| }
| |
| },
| |
| ["err_typecheck_indirection_through_void_pointer_cpp"]={
| |
| [i]="err_typecheck_indirection_through_void_pointer_cpp",
| |
| [h]="indirection not permitted on operand of type %0",
| |
| [g]="indirection not permitted on operand of type A",
| |
| [b]=k,
| |
| [e]="indirection not permitted on operand of type (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={ab,1625925174,bb,cb},
| |
| [j]={{n,15155,"/// CheckIndirectionOperand - Type check unary indirection (prefix \'*\').\nstatic QualType CheckIndirectionOperand(Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc, bool IsAfterAmp = false) {\n // ...\n if (Result->isVoidType()) {\n // ...\n if (LO.CPlusPlus)\n S.Diag(OpLoc, diag::err_typecheck_indirection_through_void_pointer_cpp) << OpTy << Op->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/reinterpret-cast.cpp"]={"clang/test/SemaCXX/reinterpret-cast.cpp:217:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:218:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:219:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:220:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:221:9: error: indirection not permitted on operand of type \'void *\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_invalid_lvalue_addrof"]={
| |
| [i]="err_typecheck_invalid_lvalue_addrof",
| |
| [h]="cannot take the address of an rvalue of type %0",
| |
| [g]="cannot take the address of an rvalue of type A",
| |
| [b]=k,
| |
| [e]="cannot take the address of an rvalue of type (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,15031,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n // ...\n if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n // ...\n } else if (isa<ObjCSelectorExpr>(op)) {\n // ...\n } else if (lval == Expr::LV_MemberFunction) {\n // ...\n } else if (lval != Expr::LV_Valid && lval != Expr::LV_IncompleteVoidType) {\n // C99 6.5.3.2p1\n // The operand must be either an l-value or a function designator\n if (!op->getType()->isFunctionType()) {\n // Use a special diagnostic for loads from property references.\n if (isa<PseudoObjectExpr>(op)) {\n // ...\n } else {\n Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof) << op->getType() << op->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaObjC/property-not-lvalue.m"]={"clang/test/SemaObjC/property-not-lvalue.m:41:20: error: cannot take the address of an rvalue of type \'simd_float2\' (vector of 2 \'float\' values)"}
| |
| }
| |
| },
| |
| ["err_typecheck_invalid_lvalue_addrof_addrof_function"]={
| |
| [i]="err_typecheck_invalid_lvalue_addrof_addrof_function",
| |
| [h]="extra \'&\' taking address of overloaded function",
| |
| [g]="extra \'&\' taking address of overloaded function",
| |
| [b]=k,
| |
| [e]="extra \'&\' taking address of overloaded function",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function","PR15132: Replace \"address expression must be an lvalue or a function\ndesignator\" diagnostic with more correct and more human-friendly \"cannot take\naddress of rvalue of type \'T\'\".\n\nFor the case of & &T::f, provide a custom diagnostic, rather than unhelpfully\nsaying \"cannot take address of rvalue of type \'<overloaded function type>\'\".\n\nFor the case of &array_temporary, treat it just like a class temporary\n(including allowing it as an extension); the existing diagnostic wording\nfor the class temporary case works fine.\n\nllvm-svn: 174262"},
| |
| [j]={{n,14869,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n if (const BuiltinType *PTy = OrigOp.get()->getType()->getAsPlaceholderType()) {\n if (PTy->getKind() == BuiltinType::Overload) {\n // ...\n if (!isa<OverloadExpr>(E)) {\n // ...\n Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof_addrof_function) << OrigOp.get()->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/address-of.cpp"]={"clang/test/SemaCXX/address-of.cpp:44:30: error: extra \'&\' taking address of overloaded function"}
| |
| }
| |
| },
| |
| ["err_typecheck_invalid_operands"]={
| |
| [i]="err_typecheck_invalid_operands",
| |
| [h]="invalid operands to binary expression (%0 and %1)",
| |
| [g]="invalid operands to binary expression (A and B)",
| |
| [b]=k,
| |
| [e]="invalid operands to binary expression \\((.*?) and (.*?)\\)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,10632,"QualType Sema::InvalidOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n // ...\n Diag(Loc, diag::err_typecheck_invalid_operands) << OrigLHS.getType() << OrigRHS.getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,11218,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n // ...\n unsigned DiagID = diag::err_typecheck_invalid_operands;"},{n,12111,"/// Return the resulting type when a vector is shifted\n/// by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n // Do not allow shifts for boolean vectors.\n if ((LHSVecTy && LHSVecTy->isExtVectorBoolType()) || (RHSVecTy && RHSVecTy->isExtVectorBoolType())) {\n S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange();"},{n,12198,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n if ((LHSBuiltinTy && LHSBuiltinTy->isSVEBool()) || (RHSBuiltinTy && RHSBuiltinTy->isSVEBool())) {\n S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHSType << RHSType << LHS.get()->getSourceRange();"},{n,12235,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n if (LHSType->isVLSTBuiltinType() && RHSType->isVLSTBuiltinType() && (S.Context.getBuiltinVectorTypeInfo(LHSBuiltinTy).EC != S.Context.getBuiltinVectorTypeInfo(RHSBuiltinTy).EC)) {\n S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaObjC/arc-invalid.m"]={"clang/test/SemaObjC/arc-invalid.m:12:24: error: invalid operands to binary expression (\'id\' and \'const __strong id\')"}
| |
| }
| |
| },
| |
| ["err_typecheck_invalid_restrict_invalid_pointee"]={
| |
| [i]="err_typecheck_invalid_restrict_invalid_pointee",
| |
| [h]="pointer to function type %0 may not be \'restrict\' qualified",
| |
| [g]="pointer to function type A may not be \'restrict\' qualified",
| |
| [b]=k,
| |
| [e]="pointer to function type (.*?) may not be \'restrict\' qualified",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{R,1965,"QualType Sema::BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs, const DeclSpec *DS) {\n // ...\n // Enforce C99 6.7.3p2: \"Types other than pointer types derived from\n // object or incomplete types shall not be restrict-qualified.\"\n if (Qs.hasRestrict()) {\n // ...\n if (T->isAnyPointerType() || T->isReferenceType() || T->isMemberPointerType()) {\n // ...\n // If we have a pointer or reference, the pointee must have an object\n // incomplete type.\n if (!EltTy->isIncompleteOrObjectType()) {\n DiagID = diag::err_typecheck_invalid_restrict_invalid_pointee;"}},
| |
| [l]={
| |
| ["clang/test/Sema/declspec.c"]={"clang/test/Sema/declspec.c:23:1: error: pointer to function type \'f\' (aka \'int (void)\') may not be \'restrict\' qualified","clang/test/Sema/declspec.c:24:3: error: pointer to function type \'f\' (aka \'int (void)\') may not be \'restrict\' qualified"}
| |
| }
| |
| },
| |
| ["err_typecheck_invalid_restrict_not_pointer"]={
| |
| [i]="err_typecheck_invalid_restrict_not_pointer",
| |
| [h]="restrict requires a pointer or reference (%0 is invalid)",
| |
| [g]="restrict requires a pointer or reference (A is invalid)",
| |
| [b]=k,
| |
| [e]="restrict requires a pointer or reference \\((.*?) is invalid\\)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{R,1972,"QualType Sema::BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs, const DeclSpec *DS) {\n // ...\n // Enforce C99 6.7.3p2: \"Types other than pointer types derived from\n // object or incomplete types shall not be restrict-qualified.\"\n if (Qs.hasRestrict()) {\n // ...\n if (T->isAnyPointerType() || T->isReferenceType() || T->isMemberPointerType()) {\n // ...\n } else if (!isDependentOrGNUAutoType(T)) {\n // ...\n DiagID = diag::err_typecheck_invalid_restrict_not_pointer;"}},
| |
| [l]={
| |
| ["clang/test/Sema/declspec.c"]={"clang/test/Sema/declspec.c:22:1: error: restrict requires a pointer or reference (\'f\' (aka \'int (void)\') is invalid)"}
| |
| }
| |
| },
| |
| ["err_typecheck_invalid_restrict_not_pointer_noarg"]={
| |
| [i]="err_typecheck_invalid_restrict_not_pointer_noarg",
| |
| [h]="restrict requires a pointer or reference",
| |
| [g]="restrict requires a pointer or reference",
| |
| [b]=k,
| |
| [e]="restrict requires a pointer or reference",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"e9823fab83ac",1261049726,"implement PR3962: diagnose more faulty cases of usage of the restrict qualifier. this also removes a...","implement PR3962: diagnose more faulty cases of usage of the restrict qualifier. this also removes a FIXME\n\nllvm-svn: 91601"},
| |
| [j]={{w,5109,"/// 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 (unsigned TypeQuals = DS.getTypeQualifiers()) {\n // Enforce C99 6.7.3p2: \"Types other than pointer types derived from object\n // or incomplete types shall not be restrict-qualified.\"\n if (TypeQuals & DeclSpec::TQ_restrict)\n Diag(DS.getRestrictSpecLoc(), diag::err_typecheck_invalid_restrict_not_pointer_noarg) << DS.getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp"]={"clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp:66:10: error: restrict requires a pointer or reference"}
| |
| }
| |
| },
| |
| ["err_typecheck_ivar_variable_size"]={
| |
| [i]="err_typecheck_ivar_variable_size",
| |
| [h]="instance variables must have a constant size",
| |
| [g]="instance variables must have a constant size",
| |
| [b]=k,
| |
| [e]="instance variables must have a constant size",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{w,18386,"/// 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 }\n // C99 6.7.2.1p8: A member of a structure or union may have any type other\n // than a variably modified type.\n else if (T->isVariablyModifiedType()) {\n if (!tryToFixVariablyModifiedVarType(TInfo, T, Loc, diag::err_typecheck_ivar_variable_size))"}},
| |
| [l]={
| |
| ["clang/test/SemaObjC/variable-size-ivar.m"]={"clang/test/SemaObjC/variable-size-ivar.m:9:7: error: instance variables must have a constant size"}
| |
| }
| |
| },
| |
| ["err_typecheck_logical_vector_expr_gnu_cpp_restrict"]={
| |
| [i]={{nil,o,"err_typecheck_logical_vector_expr_gnu_cpp_restrict"}},
| |
| [h]={{nil,o,"logical expression with vector %select{type %1 and non-vector type %2|types %1 and %2}0 is only supported in C++"}},
| |
| [g]={{nil,o,{"logical expression with vector ",{"type B and non-vector type C","types B and C"}," is only supported in C++"}}},
| |
| [b]=k,
| |
| [e]="logical expression with vector (?:type (.*?) and non\\-vector type (.*?)|types (.*?) and (.*?)) is only supported in C\\+\\+",
| |
| [f]=a,
| |
| [d]={{nil,o,m}},
| |
| [c]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions","[Sema] Support implicit scalar to vector conversions\n\nThis patch teaches clang to perform implicit scalar to vector conversions\nwhen one of the operands of a binary vector expression is a scalar which\ncan be converted to the element type of the vector without truncation\nfollowing GCC\'s implementation.\n\nIf the (constant) scalar is can be casted safely, it is implicitly casted to the\nvector elements type and splatted to produce a vector of the same type.\n\nContributions from: Petar Jovanovic\n\nReviewers: bruno, vkalintiris\n\nDifferential Revision: https://reviews.llvm.org/D25866\n\nllvm-svn: 302935"},
| |
| [j]={{n,10664,"// Diagnose cases where a scalar was implicitly converted to a vector and\n// diagnose the underlying types. Otherwise, diagnose the error\n// as invalid vector logical operands for non-C++ cases.\nQualType Sema::InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n // ...\n if (!(LHSNatVec && RHSNatVec)) {\n // ...\n Diag(Loc, diag::err_typecheck_logical_vector_expr_gnu_cpp_restrict) << 0 << Vector->getType() << NonVector->IgnoreImpCasts()->getType() << Vector->getSourceRange();"},{n,10696,"// Diagnose cases where a scalar was implicitly converted to a vector and\n// diagnose the underlying types. Otherwise, diagnose the error\n// as invalid vector logical operands for non-C++ cases.\nQualType Sema::InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n // ...\n Diag(Loc, diag::err_typecheck_logical_vector_expr_gnu_cpp_restrict) << 1 << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/Sema/vector-ops.c"]={
| |
| [1]="clang/test/Sema/vector-ops.c:32:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
| |
| [2]="clang/test/Sema/vector-ops.c:33:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
| |
| [3]="clang/test/Sema/vector-ops.c:35:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
| |
| [4]="clang/test/Sema/vector-ops.c:36:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
| |
| [5]="clang/test/Sema/vector-ops.c:38:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
| |
| [6]="clang/test/Sema/vector-ops.c:39:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
| |
| [7]="clang/test/Sema/vector-ops.c:41:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
| |
| [8]="clang/test/Sema/vector-ops.c:42:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
| |
| [9]="clang/test/Sema/vector-ops.c:44:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2s\' is only supported in C++",
| |
| [10]="clang/test/Sema/vector-ops.c:45:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2s\' is only supported in C++",
| |
| [11]="clang/test/Sema/vector-ops.c:47:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
| |
| [12]="clang/test/Sema/vector-ops.c:48:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
| |
| [13]="clang/test/Sema/vector-ops.c:50:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
| |
| [14]="clang/test/Sema/vector-ops.c:51:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
| |
| [15]="clang/test/Sema/vector-ops.c:53:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
| |
| [16]="clang/test/Sema/vector-ops.c:54:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
| |
| [17]="clang/test/Sema/vector-ops.c:56:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
| |
| [18]="clang/test/Sema/vector-ops.c:57:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
| |
| [19]="clang/test/Sema/vector-ops.c:59:15: error: logical expression with vector types \'v2f\' (vector of 2 \'float\' values) and \'v2f\' is only supported in C++",
| |
| [20]="clang/test/Sema/vector-ops.c:60:15: error: logical expression with vector types \'v2f\' (vector of 2 \'float\' values) and \'v2f\' is only supported in C++",
| |
| [21]="clang/test/Sema/vector-ops.c:62:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
| |
| [22]="clang/test/Sema/vector-ops.c:63:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
| |
| [23]="clang/test/Sema/vector-ops.c:65:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
| |
| [24]="clang/test/Sema/vector-ops.c:66:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
| |
| [25]="clang/test/Sema/vector-ops.c:68:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
| |
| [26]="clang/test/Sema/vector-ops.c:69:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
| |
| [27]="clang/test/Sema/vector-ops.c:71:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2s\' is only supported in C++",
| |
| [28]="clang/test/Sema/vector-ops.c:72:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2s\' is only supported in C++",
| |
| [29]="clang/test/Sema/vector-ops.c:74:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
| |
| [30]="clang/test/Sema/vector-ops.c:75:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
| |
| [31]="clang/test/Sema/vector-ops.c:80:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'unsigned int\' is only supported in C++",
| |
| [32]="clang/test/Sema/vector-ops.c:81:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'unsigned int\' is only supported in C++",
| |
| [33]="clang/test/Sema/vector-ops.c:88:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'unsigned int\' is only supported in C++",
| |
| [34]="clang/test/Sema/vector-ops.c:89:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'unsigned int\' is only supported in C++",
| |
| [35]="clang/test/Sema/vector-ops.c:98:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'int\' is only supported in C++",
| |
| [36]="clang/test/Sema/vector-ops.c:99:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'int\' is only supported in C++",
| |
| [37]="clang/test/Sema/vector-ops.c:101:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'int\' is only supported in C++",
| |
| [38]="clang/test/Sema/vector-ops.c:102:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'int\' is only supported in C++",
| |
| [39]="clang/test/Sema/vector-ops.c:104:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'int\' is only supported in C++",
| |
| [40]="clang/test/Sema/vector-ops.c:105:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'int\' is only supported in C++",
| |
| [41]="clang/test/Sema/vector-ops.c:107:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'int\' is only supported in C++",
| |
| [42]="clang/test/Sema/vector-ops.c:108:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'int\' is only supported in C++",
| |
| [43]="clang/test/Sema/vector-ops.c:117:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'float\' is only supported in C++",
| |
| [44]="clang/test/Sema/vector-ops.c:118:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'float\' is only supported in C++",
| |
| [45]="clang/test/Sema/vector-ops.c:120:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'float\' is only supported in C++",
| |
| [46]="clang/test/Sema/vector-ops.c:121:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'float\' is only supported in C++",
| |
| [47]="clang/test/Sema/vector-ops.c:123:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'float\' is only supported in C++",
| |
| [48]="clang/test/Sema/vector-ops.c:124:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'float\' is only supported in C++",
| |
| [49]="clang/test/Sema/vector-ops.c:126:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'float\' is only supported in C++",
| |
| [50]="clang/test/Sema/vector-ops.c:127:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'float\' is only supported in C++",
| |
| [51]="clang/test/Sema/vector-ops.c:129:15: error: logical expression with vector type \'v2f\' (vector of 2 \'float\' values) and non-vector type \'float\' is only supported in C++",
| |
| [52]="clang/test/Sema/vector-ops.c:130:15: error: logical expression with vector type \'v2f\' (vector of 2 \'float\' values) and non-vector type \'float\' is only supported in C++",
| |
| [53]="clang/test/Sema/vector-ops.c:132:15: error: logical expression with vector type \'v2f\' (vector of 2 \'float\' values) and non-vector type \'float\' is only supported in C++",
| |
| [54]="clang/test/Sema/vector-ops.c:133:15: error: logical expression with vector type \'v2f\' (vector of 2 \'float\' values) and non-vector type \'float\' is only supported in C++"
| |
| }
| |
| }
| |
| },
| |
| ["err_typecheck_lvalue_casts_not_supported"]={
| |
| [i]="err_typecheck_lvalue_casts_not_supported",
| |
| [h]="assignment to cast is illegal, lvalue casts are not supported",
| |
| [g]="assignment to cast is illegal, lvalue casts are not supported",
| |
| [b]=k,
| |
| [e]="assignment to cast is illegal, lvalue casts are not supported",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,14358,"/// 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_LValueCast:\n DiagID = diag::err_typecheck_lvalue_casts_not_supported;"}},
| |
| [l]={
| |
| ["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:33:3: error: assignment to cast is illegal, lvalue casts are not supported"}
| |
| }
| |
| },
| |
| ["err_typecheck_member_reference_arrow"]={
| |
| [i]="err_typecheck_member_reference_arrow",
| |
| [h]="member reference type %0 is not a pointer",
| |
| [g]="member reference type A is not a pointer",
| |
| [b]=k,
| |
| [e]="member reference type (.*?) is not a pointer",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{P,7614,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n // ...\n // C++ [over.match.oper]p8:\n // [...] When operator->returns, the operator-> is applied to the value\n // returned, with the original second operand.\n if (OpKind == tok::arrow) {\n // ...\n while (BaseType->isRecordType()) {\n // ...\n if (Result.isInvalid()) {\n if (NoArrowOperatorFound) {\n // ...\n Diag(OpLoc, diag::err_typecheck_member_reference_arrow) << BaseType << Base->getSourceRange();"},{V,1293,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n // For later type-checking purposes, turn arrow accesses into dot\n // accesses. The only access type we support that doesn\'t follow\n // the C equivalence \"a->b === (*a).b\" is ObjC property accesses,\n // and those never use arrows, so this is unaffected.\n if (IsArrow) {\n if (const PointerType *Ptr = BaseType->getAs<PointerType>())\n // ...\n else if (const ObjCObjectPointerType *Ptr = BaseType->getAs<ObjCObjectPointerType>())\n // ...\n else if (BaseType->isRecordType()) {\n // ...\n } else if (BaseType->isFunctionType()) {\n // ...\n } else {\n S.Diag(MemberLoc, diag::err_typecheck_member_reference_arrow) << BaseType << BaseExpr.get()->getSourceRange();"},{Pb,15275,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n/// (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n // ...\n case OR_No_Viable_Function: {\n // ...\n if (CandidateSet.empty()) {\n // ...\n Diag(OpLoc, diag::err_typecheck_member_reference_arrow) << BaseType << Base->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaHLSL/prohibit_pointer.hlsl"]={"clang/test/SemaHLSL/prohibit_pointer.hlsl:79:14: error: member reference type \'Fins\' is not a pointer"}
| |
| }
| |
| },
| |
| ["err_typecheck_member_reference_ivar"]={
| |
| [i]="err_typecheck_member_reference_ivar",
| |
| [h]="%0 does not have a member named %1",
| |
| [g]="A does not have a member named B",
| |
| [b]=k,
| |
| [e]="(.*?) does not have a member named (.*?)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{V,1404,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n // ...\n if (!IV) {\n // ...\n if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n // ...\n } else {\n // ...\n S.Diag(MemberLoc, diag::err_typecheck_member_reference_ivar) << IDecl->getDeclName() << MemberName << BaseExpr.get()->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaObjC/ivar-in-class-extension.m"]={"clang/test/SemaObjC/ivar-in-class-extension.m:6:14: error: \'SomeClass\' does not have a member named \'privateIvar\'","clang/test/SemaObjC/ivar-in-class-extension.m:7:21: error: \'SomeClass\' does not have a member named \'publicIvar\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_member_reference_ivar_suggest"]={
| |
| [i]="err_typecheck_member_reference_ivar_suggest",
| |
| [h]="%0 does not have a member named %1; did you mean %2?",
| |
| [g]="A does not have a member named B; did you mean C?",
| |
| [b]=k,
| |
| [e]="(.*?) does not have a member named (.*?); did you mean (.*?)\\?",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific","Implement typo correction for a variety of Objective-C-specific\nconstructs:\n\n - Instance variable lookup (\"foo->ivar\" and, in instance methods, \"ivar\")\n - Property name lookup (\"foo.prop\")\n - Superclasses\n - Various places where a class name is required\n - Protocol names (e.g., id<proto>)\n\nThis seems to cover many of the common places where typos could occur.\n\nllvm-svn: 92449"},
| |
| [j]={{V,1378,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n // Handle ivar access to Objective-C objects.\n if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n // ...\n if (!IV) {\n // ...\n if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n // ...\n S.diagnoseTypo(Corrected, S.PDiag(diag::err_typecheck_member_reference_ivar_suggest) << IDecl->getDeclName() << MemberName);"}},
| |
| [l]={
| |
| ["clang/test/SemaObjC/typo-correction.m"]={"clang/test/SemaObjC/typo-correction.m:48:15: error: \'I\' does not have a member named \'implementation\'; did you mean \'_implementation\'?","clang/test/SemaObjC/typo-correction.m:49:15: error: \'I\' does not have a member named \'interface\'; did you mean \'_interface\'?","clang/test/SemaObjC/typo-correction.m:50:15: error: \'I\' does not have a member named \'extension\'; did you mean \'_extension\'?"}
| |
| }
| |
| },
| |
| ["err_typecheck_member_reference_struct_union"]={
| |
| [i]="err_typecheck_member_reference_struct_union",
| |
| [h]="member reference base type %0 is not a structure or union",
| |
| [g]="member reference base type A is not a structure or union",
| |
| [b]=k,
| |
| [e]="member reference base type (.*?) is not a structure or union",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{V,505,"ExprResult Sema::ActOnDependentMemberExpr(Expr *BaseExpr, QualType BaseType, bool IsArrow, SourceLocation OpLoc, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n // Even in dependent contexts, try to diagnose base expressions with\n // obviously wrong types, e.g.:\n //\n // T* t;\n // t.f;\n //\n // In Obj-C++, however, the above expression is valid, since it could be\n // accessing the \'f\' property if T is an Obj-C interface. The extra check\n // allows this, while still reporting an error if T is a struct pointer.\n if (!IsArrow) {\n // ...\n if (PT && (!getLangOpts().ObjC || PT->getPointeeType()->isRecordType())) {\n // ...\n Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr->getSourceRange() << NameInfo.getSourceRange();"},{V,1691,"fail:\n // ...\n S.Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr.get()->getSourceRange() << MemberLoc;"}},
| |
| [l]={
| |
| ["clang/test/SemaObjC/conditional-expr-4.m"]={"clang/test/SemaObjC/conditional-expr-4.m:66:24: error: member reference base type \'void *\' is not a structure or union"}
| |
| }
| |
| },
| |
| ["err_typecheck_member_reference_suggestion"]={
| |
| [i]="err_typecheck_member_reference_suggestion",
| |
| [h]="member reference type %0 is %select{a|not a}1 pointer; did you mean to use \'%select{->|.}1\'?",
| |
| [g]={{nil,nil,{"member reference type A is ",{"a","not a"}," pointer; did you mean to use \'",{"->","."},"\'?"}}},
| |
| [b]=k,
| |
| [e]="member reference type (.*?) is (?:a|not a) pointer; did you mean to use \'(?:\\-\\>|\\.)\'\\?",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"a928c652bec1",1260226019,"Recover from dot accesses to record pointers and arrow accesses to records.","Recover from dot accesses to record pointers and arrow accesses to records.\nPatch by Nicola Gigante!\n\nllvm-svn: 90814"},
| |
| [j]={{P,7608,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n // ...\n // C++ [over.match.oper]p8:\n // [...] When operator->returns, the operator-> is applied to the value\n // returned, with the original second operand.\n if (OpKind == tok::arrow) {\n // ...\n while (BaseType->isRecordType()) {\n // ...\n if (Result.isInvalid()) {\n if (NoArrowOperatorFound) {\n if (FirstIteration) {\n Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << 1 << Base->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \".\");"},{P,7720,"static bool CheckArrow(Sema &S, QualType &ObjectType, Expr *&Base, tok::TokenKind &OpKind, SourceLocation OpLoc) {\n // ...\n // C++ [expr.pseudo]p2:\n // The left-hand side of the dot operator shall be of scalar type. The\n // left-hand side of the arrow operator shall be of pointer to scalar type.\n // This scalar type is the object type.\n // Note that this is rather different from the normal handling for the\n // arrow operator.\n if (OpKind == tok::arrow) {\n // ...\n if (const PointerType *Ptr = ObjectType->getAs<PointerType>()) {\n // ...\n } else if (!Base->isTypeDependent()) {\n // ...\n S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << ObjectType << true << FixItHint::CreateReplacement(OpLoc, \".\");"},{P,7792,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n // ...\n // C++ [expr.pseudo]p2:\n // [...] The cv-unqualified versions of the object type and of the type\n // designated by the pseudo-destructor-name shall be the same type.\n if (DestructedTypeInfo) {\n // ...\n if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n // Detect dot pseudo destructor calls on pointer objects, e.g.:\n // Foo *foo;\n // foo.~Foo();\n if (OpKind == tok::period && ObjectType->isPointerType() && Context.hasSameUnqualifiedType(DestructedType, ObjectType->getPointeeType())) {\n auto Diagnostic = Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << ObjectType << /*IsArrow=*/0 << Base->getSourceRange();"},{V,1285,"/// Look up the given member of the given non-type-dependent\n/// expression. This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n/// assume that lookup was performed and the results written into\n/// the provided structure. It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n/// an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n // ...\n // For later type-checking purposes, turn arrow accesses into dot\n // accesses. The only access type we support that doesn\'t follow\n // the C equivalence \"a->b === (*a).b\" is ObjC property accesses,\n // and those never use arrows, so this is unaffected.\n if (IsArrow) {\n if (const PointerType *Ptr = BaseType->getAs<PointerType>())\n // ...\n else if (const ObjCObjectPointerType *Ptr = BaseType->getAs<ObjCObjectPointerType>())\n // ...\n else if (BaseType->isRecordType()) {\n // Recover from arrow accesses to records, e.g.:\n // struct MyRecord foo;\n // foo->bar\n // This is actually well-formed in C++ if MyRecord has an\n // overloaded operator->, but that should have been dealt with\n // by now--or a diagnostic message already issued if a problem\n // was encountered while looking for the overloaded operator->.\n if (!S.getLangOpts().CPlusPlus) {\n S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \".\");"},{V,1664,"fail:\n // Recover from dot accesses to pointers, e.g.:\n // type *foo;\n // foo.bar\n // This is actually well-formed in two cases:\n // - \'type\' is an Objective C type\n // - \'bar\' is a pseudo-destructor name which happens to refer to\n // the appropriate pointer type\n if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {\n if (!IsArrow && Ptr->getPointeeType()->isRecordType() && MemberName.getNameKind() != DeclarationName::CXXDestructorName) {\n S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \"->\");"}},
| |
| [l]={
| |
| ["clang/test/Sema/member-reference.c"]={"clang/test/Sema/member-reference.c:23:11: error: member reference type \'struct simple\' is not a pointer; did you mean to use \'.\'?"}
| |
| }
| |
| },
| |
| ["err_typecheck_member_reference_type"]={
| |
| [i]="err_typecheck_member_reference_type",
| |
| [h]="cannot refer to type member %0 in %1 with \'%select{.|->}2\'",
| |
| [g]={{nil,nil,{"cannot refer to type member A in B with \'",{".","->"},uc}}},
| |
| [b]=k,
| |
| [e]="cannot refer to type member (.*?) in (.*?) with \'(?:\\.|\\-\\>)\'",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{V,1176,"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 // We found something that we didn\'t expect. Complain.\n if (isa<TypeDecl>(MemberDecl))\n Diag(MemberLoc, diag::err_typecheck_member_reference_type) << MemberName << BaseType << int(IsArrow);"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/member-expr.cpp"]={"clang/test/SemaCXX/member-expr.cpp:16:5: error: cannot refer to type member \'E\' in \'X\' with \'.\'","clang/test/SemaCXX/member-expr.cpp:17:7: error: cannot refer to type member \'E\' in \'X\' with \'->\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_member_reference_unknown"]={
| |
| [i]="err_typecheck_member_reference_unknown",
| |
| [h]="cannot refer to member %0 in %1 with \'%select{.|->}2\'",
| |
| [g]={{nil,nil,{"cannot refer to member A in B with \'",{".","->"},uc}}},
| |
| [b]=k,
| |
| [e]="cannot refer to member (.*?) in (.*?) with \'(?:\\.|\\-\\>)\'",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{V,1179,"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 // We found something that we didn\'t expect. Complain.\n if (isa<TypeDecl>(MemberDecl))\n // ...\n else\n Diag(MemberLoc, diag::err_typecheck_member_reference_unknown) << MemberName << BaseType << int(IsArrow);"}}
| |
| },
| |
| ["err_typecheck_missing_return_type_incompatible"]={
| |
| [i]="err_typecheck_missing_return_type_incompatible",
| |
| [h]="%diff{return type $ must match previous return type $|return type must match previous return type}0,1 when %select{block literal|lambda expression}2 has unspecified explicit return type",
| |
| [g]={{nil,nil,{{"return type A must match previous return type B","return type must match previous return type"}," when ",{"block literal","lambda expression"}," has unspecified explicit return type"}}},
| |
| [b]=k,
| |
| [e]="(?:return type (.*?) must match previous return type (.*?)|return type must match previous return type) when (?:block literal|lambda expression) has unspecified explicit return type",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"dd5eb9df0cd2",1322934473,"If block literal return type is not specified, return type of the block is ","If block literal return type is not specified, return type of the block is \ninferred from return types. All the return statements have to agree about the type.\n// rdar://10466373\n\nllvm-svn: 145774"},
| |
| [j]={{kd,704,"void Sema::deduceClosureReturnType(CapturingScopeInfo &CSI) {\n // ...\n // We require the return types to strictly match here.\n // Note that we\'ve already done the required promotions as part of\n // processing the return statement.\n for (const ReturnStmt *RS : CSI.Returns) {\n // ...\n Diag(RS->getBeginLoc(), diag::err_typecheck_missing_return_type_incompatible) << ReturnType << CSI.ReturnType << isa<LambdaScopeInfo>(CSI);"},{Z,3860,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n // ...\n {\n // ...\n case TDK_Inconsistent: {\n // ...\n if (LambdaSI && LambdaSI->HasImplicitReturnType)\n Diag(ReturnLoc, diag::err_typecheck_missing_return_type_incompatible) << Info.SecondArg << Info.FirstArg << true /*IsLambda*/;"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/instantiate-blocks.cpp"]={"clang/test/SemaCXX/instantiate-blocks.cpp:22:7: error: return type \'double\' must match previous return type \'float\' when block literal has unspecified explicit return type"}
| |
| }
| |
| },
| |
| ["err_typecheck_negative_array_size"]={
| |
| [i]="err_typecheck_negative_array_size",
| |
| [h]="array size is negative",
| |
| [g]="array size is negative",
| |
| [b]=k,
| |
| [e]="array size is negative",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{w,6609,"/// Attempt to fold a variable-sized type to a constant-sized type, returning\n/// true if we were successful.\nbool Sema::tryToFixVariablyModifiedVarType(TypeSourceInfo *&TInfo, QualType &T, SourceLocation Loc, unsigned FailedFoldDiagID) {\n // ...\n if (SizeIsNegative)\n Diag(Loc, diag::err_typecheck_negative_array_size);"},{w,6726,"void Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {\n // ...\n if (T->isVariablyModifiedType()) {\n // ...\n if (S->getFnParent() == nullptr) {\n // ...\n if (FixedTInfo) {\n // ...\n } else {\n if (SizeIsNegative)\n Diag(NewTD->getLocation(), diag::err_typecheck_negative_array_size);"},{P,2221,"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 (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n // ...\n // We\'ve already performed any required implicit conversion to integer or\n // unscoped enumeration type.\n // FIXME: Per CWG1464, we are required to check the value prior to\n // converting to size_t. This will never find a negative array size in\n // C++14 onwards, because Value is always unsigned here!\n if (std::optional<llvm::APSInt> Value = (*ArraySize)->getIntegerConstantExpr(Context)) {\n if (Value->isSigned() && Value->isNegative()) {\n return ExprError(Diag((*ArraySize)->getBeginLoc(), diag::err_typecheck_negative_array_size) << (*ArraySize)->getSourceRange());"},{R,2640,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n // ...\n if (!ArraySize) {\n // ...\n } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n // ...\n } else {\n // ...\n if (!R.isUsable()) {\n // ...\n } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n // ...\n } else {\n // C99 6.7.5.2p1: If the expression is a constant expression, it shall\n // have a value greater than zero.\n // In C++, this follows from narrowing conversions being disallowed.\n if (ConstVal.isSigned() && ConstVal.isNegative()) {\n if (Entity)\n // ...\n else\n Diag(ArraySize->getBeginLoc(), diag::err_typecheck_negative_array_size) << ArraySize->getSourceRange();"}},
| |
| [l]={
| |
| [dd]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:76:19: error: array size is negative"}
| |
| }
| |
| },
| |
| ["err_typecheck_non_object_not_modifiable_lvalue"]={
| |
| [i]="err_typecheck_non_object_not_modifiable_lvalue",
| |
| [h]="non-object type %0 is not assignable",
| |
| [g]="non-object type A is not assignable",
| |
| [b]=k,
| |
| [e]="non\\-object type (.*?) is not assignable",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,14351,"/// 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_NotObjectType:\n DiagID = diag::err_typecheck_non_object_not_modifiable_lvalue;"}},
| |
| [l]={
| |
| ["clang/test/Sema/ucn-identifiers.c"]={"clang/test/Sema/ucn-identifiers.c:26:13: error: non-object type \'void (int)\' is not assignable"}
| |
| }
| |
| },
| |
| ["err_typecheck_nonviable_condition"]={
| |
| [i]="err_typecheck_nonviable_condition",
| |
| [h]="no viable conversion%select{%diff{ from $ to $|}1,2|%diff{ from returned value of type $ to function return type $|}1,2}0",
| |
| [g]={{nil,nil,{"no viable conversion",{{{" from B to C",a}},{{" from returned value of type B to function return type C",a}}}}}},
| |
| [b]=k,
| |
| [e]="no viable conversion(?:(?: from (.*?) to (.*?)|)|(?: from returned value of type (.*?) to function return type (.*?)|))",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"76197416ac15",1258568789,"Improve on diagnosing type mismatches because of ","Improve on diagnosing type mismatches because of \nlack of viable convesion functions.\n\nllvm-svn: 89216"},
| |
| [j]={{Q,9663,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitOverloadFailed:\n case FK_UserConversionOverloadFailed:\n // ...\n case OR_No_Viable_Function: {\n // ...\n if (!S.RequireCompleteType(Kind.getLocation(), DestType.getNonReferenceType(), diag::err_typecheck_nonviable_condition_incomplete, OnlyArg->getType(), Args[0]->getSourceRange()))\n S.Diag(Kind.getLocation(), diag::err_typecheck_nonviable_condition) << (Entity.getKind() == InitializedEntity::EK_Result) << OnlyArg->getType() << Args[0]->getSourceRange() << DestType.getNonReferenceType();"},{Pb,3780,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n // ...\n if (OvResult == OR_Ambiguous)\n // ...\n else { // OR_No_Viable_Function && !CandidateSet.empty()\n if (!RequireCompleteType(From->getBeginLoc(), ToType, diag::err_typecheck_nonviable_condition_incomplete, From->getType(), From->getSourceRange()))\n Diag(From->getBeginLoc(), diag::err_typecheck_nonviable_condition) << false << From->getType() << From->getSourceRange() << ToType;"}},
| |
| [l]={
| |
| ["clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl"]={"clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:19:34: error: no viable conversion from \'S\' to \'float\'","clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:19:37: error: no viable conversion from \'S\' to \'float\'","clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:21:32: error: no viable conversion from \'S2\' to \'float\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_nonviable_condition_incomplete"]={
| |
| [i]="err_typecheck_nonviable_condition_incomplete",
| |
| [h]="no viable conversion%diff{ from $ to incomplete type $|}0,1",
| |
| [g]={{nil,nil,{"no viable conversion",{" from A to incomplete type B",a}}}},
| |
| [b]=k,
| |
| [e]="no viable conversion(?: from (.*?) to incomplete type (.*?)|)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"64cf3efd47bc",1372297825,"Fix a conversion to incomplete type bug -- The error message now specifically states that the type i...","Fix a conversion to incomplete type bug -- The error message now specifically states that the type is incomplete and points to the forward declaration of the incomplete type.\n\nllvm-svn: 185056"},
| |
| [j]={{Q,9661,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitOverloadFailed:\n case FK_UserConversionOverloadFailed:\n // ...\n case OR_No_Viable_Function: {\n // ...\n if (!S.RequireCompleteType(Kind.getLocation(), DestType.getNonReferenceType(), diag::err_typecheck_nonviable_condition_incomplete, OnlyArg->getType(), Args[0]->getSourceRange()))"},{Pb,3778,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n // ...\n if (OvResult == OR_Ambiguous)\n // ...\n else { // OR_No_Viable_Function && !CandidateSet.empty()\n if (!RequireCompleteType(From->getBeginLoc(), ToType, diag::err_typecheck_nonviable_condition_incomplete, From->getType(), From->getSourceRange()))"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/conversion-incomplete-type.cpp"]={"clang/test/SemaCXX/conversion-incomplete-type.cpp:12:23: error: no viable conversion from \'const string\' to incomplete type \'const StringPiece\'","clang/test/SemaCXX/conversion-incomplete-type.cpp:20:23: error: no viable conversion from \'const string\' to incomplete type \'const StringPiece\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_op_on_nonoverlapping_address_space_pointers"]={
| |
| [i]="err_typecheck_op_on_nonoverlapping_address_space_pointers",
| |
| [h]="%select{comparison between %diff{ ($ and $)|}0,1|arithmetic operation with operands of type %diff{ ($ and $)|}0,1|conditional operator with the second and third operands of type %diff{ ($ and $)|}0,1}2 which are pointers to non-overlapping address spaces",
| |
| [g]={{nil,nil,{{{"comparison between ",{rc,a}},{"arithmetic operation with operands of type ",{rc,a}},{"conditional operator with the second and third operands of type ",{rc,a}}}," which are pointers to non-overlapping address spaces"}}},
| |
| [b]=k,
| |
| [e]="(?:comparison between (?: \\((.*?) and (.*?)\\)|)|arithmetic operation with operands of type (?: \\((.*?) and (.*?)\\)|)|conditional operator with the second and third operands of type (?: \\((.*?) and (.*?)\\)|)) which are pointers to non\\-overlapping address spaces",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"5d8ad8a7b891",1417016201,"[OpenCL] Implemented restrictions for pointer conversions specified in OpenCL v2.0.","[OpenCL] Implemented restrictions for pointer conversions specified in OpenCL v2.0.\n\nOpenCL v2.0 s6.5.5 restricts conversion of pointers to different address spaces:\n- the named address spaces (__global, __local, and __private) => __generic - implicitly converted;\n- __generic => named - with an explicit cast;\n- named <=> named - disallowed;\n- __constant <=> any other - disallowed.\n\nllvm-svn: 222834"},
| |
| [j]={{n,8738,"/// Checks compatibility between two pointers and return the resulting\n/// type.\nstatic QualType checkConditionalPointerCompatibility(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n // ...\n // OpenCL v1.1 s6.5 - Conversion between pointers to distinct address\n // spaces is disallowed.\n if (lhQual.isAddressSpaceSupersetOf(rhQual))\n // ...\n else if (rhQual.isAddressSpaceSupersetOf(lhQual))\n // ...\n else {\n S.Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSTy << RHSTy << 2 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,11631,"/// Check the validity of a binary arithmetic operation w.r.t. pointer\n/// operands.\n///\n/// This routine will diagnose any invalid arithmetic on pointer operands much\n/// like \\see checkArithmeticOpPointerOperand. However, it has special logic\n/// for emitting a single diagnostic even for operations where both LHS and RHS\n/// are (potentially problematic) pointers.\n///\n/// \\returns True when the operand is valid to use (even if as an extension).\nstatic bool checkArithmeticBinOpPointerOperands(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) {\n // ...\n // if both are pointers check if operation is valid wrt address spaces\n if (isLHSPointer && isRHSPointer) {\n if (!LHSPointeeTy.isAddressSpaceOverlapping(RHSPointeeTy)) {\n S.Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSExpr->getType() << RHSExpr->getType() << 1 /*arithmetic op*/"},{n,13241,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n if ((LHSType->isIntegerType() && !LHSIsNull) || (RHSType->isIntegerType() && !RHSIsNull)) {\n // ...\n } else if (getLangOpts().CPlusPlus) {\n // ...\n } else if (LHSType->isPointerType() && RHSType->isPointerType()) { // C99 6.5.8p2\n // ...\n if (LCanPointeeTy != RCanPointeeTy) {\n // Treat NULL constant as a special case in OpenCL.\n if (getLangOpts().OpenCL && !LHSIsNull && !RHSIsNull) {\n if (!LCanPointeeTy.isAddressSpaceOverlapping(RCanPointeeTy)) {\n Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSType << RHSType << 0 /* comparison */"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/address-space-arithmetic.cpp"]={"clang/test/SemaCXX/address-space-arithmetic.cpp:5:12: error: arithmetic operation with operands of type (\'__private int *\' and \'__local int *\') which are pointers to non-overlapping address spaces"}
| |
| }
| |
| },
| |
| ["err_typecheck_ordered_comparison_of_function_pointers"]={
| |
| [i]={{nil,F,"err_typecheck_ordered_comparison_of_function_pointers"}},
| |
| [h]={{nil,F,"ordered comparison of function pointers (%0 and %1)"}},
| |
| [g]={{nil,F,"ordered comparison of function pointers (A and B)"}},
| |
| [b]=k,
| |
| [e]="ordered comparison of function pointers \\((.*?) and (.*?)\\)",
| |
| [f]=a,
| |
| [d]={{nil,F,m}},
| |
| [c]={Vc,1615397021,Zc,ad},
| |
| [j]={{n,13039,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n if (IsOrdered && LHSType->isFunctionPointerType() && RHSType->isFunctionPointerType()) {\n // ...\n auto DiagID = IsError ? diag::err_typecheck_ordered_comparison_of_function_pointers : getLangOpts().CPlusPlus ? diag::warn_typecheck_ordered_comparison_of_function_pointers : diag::ext_typecheck_ordered_comparison_of_function_pointers;"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/compare-function-pointer.cpp"]={"clang/test/SemaCXX/compare-function-pointer.cpp:15:14: error: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp0_t\')","clang/test/SemaCXX/compare-function-pointer.cpp:27:14: error: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))"}
| |
| }
| |
| },
| |
| ["err_typecheck_ordered_comparison_of_pointer_and_zero"]={
| |
| [i]="err_typecheck_ordered_comparison_of_pointer_and_zero",
| |
| [h]="ordered comparison between pointer and zero (%0 and %1)",
| |
| [g]="ordered comparison between pointer and zero (A and B)",
| |
| [b]=k,
| |
| [e]="ordered comparison between pointer and zero \\((.*?) and (.*?)\\)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"0c1c53e3fad7",1477017397,"DR583, DR1512: Implement a rewrite to C++\'s \'composite pointer type\' rules.","DR583, DR1512: Implement a rewrite to C++\'s \'composite pointer type\' rules.\nThis has two significant effects:\n\n1) Direct relational comparisons between null pointer constants (0 and nullopt)\n and pointers are now ill-formed. This was always the case for C, and it\n appears that C++ only ever permitted by accident. For instance, cases like\n nullptr < &a\n are now rejected.\n\n2) Comparisons and conditional operators between differently-cv-qualified\n pointer types now work, and produce a composite type that both source\n pointer types can convert to (when possible). For instance, comparison\n between \'int **\' and \'const int **\' is now valid, and uses an intermediate\n type of \'const int *const *\'.\n\nClang previously supported #2 as an extension.\n\nWe do not accept the cases in #1 as an extension. I\'ve tested a fair amount of\ncode to check that this doesn\'t break it, but if it turns out that someone is\nrelying on this, we can easily add it back as an extension.\n\nllvm-svn: 284800"},
| |
| [j]={{n,13349,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n // ...\n if (LangOpts.DebuggerSupport) {\n // ...\n } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n if (IsOrdered) {\n // ...\n DiagID = isError ? diag::err_typecheck_ordered_comparison_of_pointer_and_zero : diag::ext_typecheck_ordered_comparison_of_pointer_and_zero;"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/null_in_arithmetic_ops.cpp"]={"clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:10: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:25: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:36: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:51: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:10: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:26: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:38: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:54: error: ordered comparison between pointer and zero (\'long\' and \'int *\')"}
| |
| }
| |
| },
| |
| ["err_typecheck_pointer_arith_function_type"]={
| |
| [i]="err_typecheck_pointer_arith_function_type",
| |
| [h]="arithmetic on%select{ a|}0 pointer%select{|s}0 to%select{ the|}2 function type%select{|s}2 %1%select{| and %3}2",
| |
| [g]={{nil,nil,{"arithmetic on",{" a",a}," pointer",{a,kc}," to",{" the",a}," function type",{a,kc},Ob,{a," and D"}}}},
| |
| [b]=k,
| |
| [e]="arithmetic on(?: a|) pointer(?:|s) to(?: the|) function type(?:|s) (.*?)(?:| and (.*?))",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,11485,"/// Diagnose invalid arithmetic on two function pointers.\nstatic void diagnoseArithmeticOnTwoFunctionPointers(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS) {\n // ...\n S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_function_type : diag::ext_gnu_ptr_func_arith) << 1 /* two pointers */"},{n,11500,"/// Diagnose invalid arithmetic on a function pointer.\nstatic void diagnoseArithmeticOnFunctionPointer(Sema &S, SourceLocation Loc, Expr *Pointer) {\n // ...\n S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_function_type : diag::ext_gnu_ptr_func_arith) << 0 /* one pointer */ << Pointer->getType()->getPointeeType() << 0 /* one pointer, so only one type */"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/null_in_arithmetic_ops.cpp"]={"clang/test/SemaCXX/null_in_arithmetic_ops.cpp:36:16: error: arithmetic on a pointer to the function type \'void ()\'","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:36:24: error: arithmetic on a pointer to the function type \'void ()\'"}
| |
| }
| |
| },
| |
| ["err_typecheck_pointer_arith_void_type"]={
| |
| [i]="err_typecheck_pointer_arith_void_type",
| |
| [h]="arithmetic on%select{ a|}0 pointer%select{|s}0 to void",
| |
| [g]={{nil,nil,{"arithmetic on",{" a",a}," pointer",{a,kc}," to void"}}},
| |
| [b]=k,
| |
| [e]="arithmetic on(?: a|) pointer(?:|s) to void",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,11431,"static void diagnoseArithmeticOnTwoVoidPointers(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) { S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_void_type : diag::ext_gnu_void_ptr) << 1 /* two pointers */ << LHSExpr->getSourceRange() << RHSExpr->getSourceRange(); }"},{n,11441,"static void diagnoseArithmeticOnVoidPointer(Sema &S, SourceLocation Loc, Expr *Pointer) { S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_void_type : diag::ext_gnu_void_ptr) << 0 /* one pointer */ << Pointer->getSourceRange(); }"}},
| |
| [l]={
| |
| ["clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp"]={"clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp:178:15: error: arithmetic on a pointer to void"}
| |
| }
| |
| },
| |
| ["err_typecheck_sclass_fscope"]={
| |
| [i]="err_typecheck_sclass_fscope",
| |
| [h]="illegal storage class on file-scoped variable",
| |
| [g]="illegal storage class on file-scoped variable",
| |
| [b]=k,
| |
| [e]="illegal storage class on file\\-scoped variable",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{w,7508,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (!DC->isRecord() && S->getFnParent() == nullptr) {\n // C99 6.9p2: The storage-class specifiers auto and register shall not\n // appear in the declaration specifiers in an external declaration.\n // Global Register+Asm is a GNU extension we support.\n if (SC == SC_Auto || (SC == SC_Register && !D.getAsmLabel())) {\n Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope);"}},
| |
| [l]={
| |
| ["clang/test/Sema/decl-invalid.c"]={"clang/test/Sema/decl-invalid.c:26:14: error: illegal storage class on file-scoped variable"}
| |
| }
| |
| },
| |
| ["err_typecheck_sclass_func"]={
| |
| [i]="err_typecheck_sclass_func",
| |
| [h]="illegal storage class on function",
| |
| [g]="illegal storage class on function",
| |
| [b]=k,
| |
| [e]="illegal storage class on function",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{w,9104,"static StorageClass getFunctionStorageClass(Sema &SemaRef, Declarator &D) {\n // ...\n case DeclSpec::SCS_auto:\n case DeclSpec::SCS_register:\n case DeclSpec::SCS_mutable:\n SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_typecheck_sclass_func);"}},
| |
| [l]={
| |
| ["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:59:3: error: illegal storage class on function"}
| |
| }
| |
| },
| |
| ["err_typecheck_statement_requires_integer"]={
| |
| [i]="err_typecheck_statement_requires_integer",
| |
| [h]="statement requires expression of integer type (%0 invalid)",
| |
| [g]="statement requires expression of integer type (A invalid)",
| |
| [b]=k,
| |
| [e]="statement requires expression of integer type \\((.*?) invalid\\)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{Z,1040,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n // ...\n SemaDiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_typecheck_statement_requires_integer) << T; }"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/non-integral-switch-cond.cpp"]={"clang/test/SemaTemplate/non-integral-switch-cond.cpp:9:5: error: statement requires expression of integer type (\'NOT_AN_INTEGRAL_TYPE\' invalid)"}
| |
| }
| |
| },
| |
| ["err_typecheck_statement_requires_scalar"]={
| |
| [i]="err_typecheck_statement_requires_scalar",
| |
| [h]="statement requires expression of scalar type (%0 invalid)",
| |
| [g]="statement requires expression of scalar type (A invalid)",
| |
| [b]=k,
| |
| [e]="statement requires expression of scalar type \\((.*?) invalid\\)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,21002,"ExprResult Sema::CheckBooleanCondition(SourceLocation Loc, Expr *E, bool IsConstexpr) {\n // ...\n if (!E->isTypeDependent()) {\n // ...\n if (!T->isScalarType()) { // C99 6.8.4.1p1\n Diag(Loc, diag::err_typecheck_statement_requires_scalar) << T << E->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:43:3: error: statement requires expression of scalar type (\'enum some_undefined_enum\' invalid)"}
| |
| }
| |
| },
| |
| ["err_typecheck_sub_ptr_compatible"]={
| |
| [i]="err_typecheck_sub_ptr_compatible",
| |
| [h]="%diff{$ and $ are not pointers to compatible types|pointers to incompatible types}0,1",
| |
| [g]={{nil,nil,{{"A and B are not pointers to compatible types","pointers to incompatible types"}}}},
| |
| [b]=k,
| |
| [e]="(?:(.*?) and (.*?) are not pointers to compatible types|pointers to incompatible types)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{z,9078,"/// 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 // Ensure Pointee types are compatible\n if (ArgTypeA->isAnyPointerType() && !isNull(ArgA) && ArgTypeB->isAnyPointerType() && !isNull(ArgB)) {\n // ...\n if (!Context.typesAreCompatible(Context.getCanonicalType(pointeeA).getUnqualifiedType(), Context.getCanonicalType(pointeeB).getUnqualifiedType())) {\n return Diag(TheCall->getBeginLoc(), diag::err_typecheck_sub_ptr_compatible) << ArgTypeA << ArgTypeB << ArgA->getSourceRange() << ArgB->getSourceRange();"},{n,11948,"/// Emit error when two pointers are incompatible.\nstatic void diagnosePointerIncompatibility(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) {\n // ...\n S.Diag(Loc, diag::err_typecheck_sub_ptr_compatible) << LHSExpr->getType() << RHSExpr->getType() << LHSExpr->getSourceRange() << RHSExpr->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/CXX/over/over.built/p15.cpp"]={"clang/test/CXX/over/over.built/p15.cpp:6:13: error: \'int *\' and \'float *\' are not pointers to compatible types"}
| |
| }
| |
| },
| |
| ["err_typecheck_subscript_not_integer"]={
| |
| [i]="err_typecheck_subscript_not_integer",
| |
| [h]="array subscript is not an integer",
| |
| [g]="array subscript is not an integer",
| |
| [b]=k,
| |
| [e]="array subscript is not an integer",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"003af249275a",1240699855,"minor diagnostics improvements.","minor diagnostics improvements.\n\nllvm-svn: 70092"},
| |
| [j]={{n,5956,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // ...\n // C99 6.5.2.1p1\n if (!IndexExpr->getType()->isIntegerType() && !IndexExpr->isTypeDependent())\n return ExprError(Diag(LLoc, diag::err_typecheck_subscript_not_integer) << IndexExpr->getSourceRange());"},{n,16636,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n // ...\n for (const OffsetOfComponent &OC : Components) {\n if (OC.isBrackets) {\n // ...\n // The expression must be an integral expression.\n // FIXME: An integral constant expression?\n if (!Idx->isTypeDependent() && !Idx->isValueDependent() && !Idx->getType()->isIntegerType())\n return ExprError(Diag(Idx->getBeginLoc(), diag::err_typecheck_subscript_not_integer) << Idx->getSourceRange());"}},
| |
| [l]={
| |
| ["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:23:16: error: array subscript is not an integer"}
| |
| }
| |
| },
| |
| ["err_typecheck_subscript_value"]={
| |
| [i]="err_typecheck_subscript_value",
| |
| [h]="subscripted value is not an array, pointer, or vector",
| |
| [g]="subscripted value is not an array, pointer, or vector",
| |
| [b]=k,
| |
| [e]="subscripted value is not an array, pointer, or vector",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,5950,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // ...\n if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n // ...\n } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n // ...\n } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n // ...\n } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n // ...\n } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n // ...\n } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n // ...\n } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n // ...\n } else if (LHSTy->isArrayType()) {\n // ...\n } else if (RHSTy->isArrayType()) {\n // ...\n } else {\n return ExprError(Diag(LLoc, diag::err_typecheck_subscript_value) << LHSExp->getSourceRange() << RHSExp->getSourceRange());"}},
| |
| [l]={
| |
| ["clang/test/SemaObjC/matrix-type-operators.m"]={"clang/test/SemaObjC/matrix-type-operators.m:20:17: error: subscripted value is not an array, pointer, or vector"}
| |
| }
| |
| },
| |
| ["err_typecheck_sve_rvv_ambiguous"]={
| |
| [i]="err_typecheck_sve_rvv_ambiguous",
| |
| [h]="cannot combine fixed-length and sizeless %select{SVE|RVV}0 vectors in expression, result is ambiguous (%1 and %2)",
| |
| [g]={{nil,nil,{"cannot combine fixed-length and sizeless ",{"SVE","RVV"}," vectors in expression, result is ambiguous (B and C)"}}},
| |
| [b]=k,
| |
| [e]="cannot combine fixed\\-length and sizeless (?:SVE|RVV) vectors in expression, result is ambiguous \\((.*?) and (.*?)\\)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={ab,1625925174,bb,cb},
| |
| [j]={{n,11066,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n // ...\n if (IsSveRVVConversion(LHSType, RHSType, SVEorRVV) || IsSveRVVConversion(RHSType, LHSType, SVEorRVV)) {\n Diag(Loc, diag::err_typecheck_sve_rvv_ambiguous) << SVEorRVV << LHSType << RHSType;"}},
| |
| [l]={
| |
| ["clang/test/Sema/attr-arm-sve-vector-bits.c"]={"clang/test/Sema/attr-arm-sve-vector-bits.c:131:11: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:132:11: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:141:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:144:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:150:7: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:153:7: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:159:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:162:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:168:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:171:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))"}
| |
| }
| |
| },
| |
| ["err_typecheck_sve_rvv_gnu_ambiguous"]={
| |
| [i]="err_typecheck_sve_rvv_gnu_ambiguous",
| |
| [h]="cannot combine GNU and %select{SVE|RVV}0 vectors in expression, result is ambiguous (%1 and %2)",
| |
| [g]={{nil,nil,{"cannot combine GNU and ",{"SVE","RVV"}," vectors in expression, result is ambiguous (B and C)"}}},
| |
| [b]=k,
| |
| [e]="cannot combine GNU and (?:SVE|RVV) vectors in expression, result is ambiguous \\((.*?) and (.*?)\\)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={ab,1625925174,bb,cb},
| |
| [j]={{n,11073,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n // ...\n if (IsSveRVVGnuConversion(LHSType, RHSType, SVEorRVV) || IsSveRVVGnuConversion(RHSType, LHSType, SVEorRVV)) {\n Diag(Loc, diag::err_typecheck_sve_rvv_gnu_ambiguous) << SVEorRVV << LHSType << RHSType;"}},
| |
| [l]={
| |
| ["clang/test/Sema/attr-arm-sve-vector-bits.c"]={"clang/test/Sema/attr-arm-sve-vector-bits.c:134:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:135:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:137:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:138:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:142:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:145:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:147:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:148:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:151:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:154:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:156:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:157:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:160:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:163:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:165:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:166:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:169:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:172:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:174:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:175:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))"}
| |
| }
| |
| },
| |
| ["err_typecheck_three_way_comparison_of_pointer_and_zero"]={
| |
| [i]={{nil,p,"err_typecheck_three_way_comparison_of_pointer_and_zero"}},
| |
| [h]={{nil,p,"three-way comparison between pointer and zero"}},
| |
| [g]={{nil,p,"three-way comparison between pointer and zero"}},
| |
| [b]=k,
| |
| [e]="three\\-way comparison between pointer and zero",
| |
| [f]=a,
| |
| [d]={{nil,p,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"},
| |
| [j]={{n,13037,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n auto computeResultTy = [&]() {\n // ...\n if (CompositeTy->isPointerType() && LHSIsNull != RHSIsNull) {\n // ...\n Diag(Loc, diag::err_typecheck_three_way_comparison_of_pointer_and_zero) << (LHSIsNull ? LHS.get()->getSourceRange() : RHS.get()->getSourceRange());"}}
| |
| },
| |
| ["err_typecheck_unary_expr"]={
| |
| [i]="err_typecheck_unary_expr",
| |
| [h]="invalid argument type %0 to unary expression",
| |
| [g]="invalid argument type A to unary expression",
| |
| [b]=k,
| |
| [e]="invalid argument type (.*?) to unary expression",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{n,16161,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n if (getLangOpts().OpenCL) {\n // ...\n // The only legal unary operation for atomics is \'&\'.\n if ((Opc != UO_AddrOf && Ty->isAtomicType()) ||\n // ...\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << InputExpr->getType() << Input.get()->getSourceRange());"},{n,16237,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n case UO_Plus:\n case UO_Minus:\n // ...\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{n,16249,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n case UO_Not: // bitwise complement\n // ...\n // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n if (resultType->isComplexType() || resultType->isComplexIntegerType())\n // ...\n else if (resultType->hasIntegerRepresentation())\n // ...\n else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {\n // ...\n if (!T->isIntegerType())\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{n,16269,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n case UO_Not: // bitwise complement\n // ...\n // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n if (resultType->isComplexType() || resultType->isComplexIntegerType())\n // ...\n else if (resultType->hasIntegerRepresentation())\n // ...\n else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {\n // ...\n } else {\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{n,16287,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n case UO_LNot: // logical negation\n // ...\n // WebAsembly tables can\'t be used in unary expressions.\n if (resultType->isPointerType() && resultType->getPointeeType().isWebAssemblyReferenceType()) {\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{n,16297,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n case UO_LNot: // logical negation\n // ...\n if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n // C99 6.5.3.3p1: ok, fallthrough;\n if (Context.getLangOpts().CPlusPlus) {\n // ...\n } else if (Context.getLangOpts().OpenCL && Context.getLangOpts().OpenCLVersion < 120) {\n // OpenCL v1.1 6.3.h: The logical operator not (!) does not\n // operate on scalar float types.\n if (!resultType->isIntegerType() && !resultType->isPointerType())\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{n,16306,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n case UO_LNot: // logical negation\n // ...\n if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n // ...\n } else if (resultType->isExtVectorType()) {\n if (Context.getLangOpts().OpenCL && Context.getLangOpts().getOpenCLCompatibleVersion() < 120) {\n // ...\n if (!T->isIntegerType())\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{n,16313,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n case UO_LNot: // logical negation\n // ...\n if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n // ...\n } else if (resultType->isExtVectorType()) {\n // ...\n } else if (Context.getLangOpts().CPlusPlus && resultType->isVectorType()) {\n // ...\n if (VTy->getVectorKind() != VectorType::GenericVector)\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{n,16580,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n case UO_LNot: // logical negation\n // ...\n if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n // ...\n } else if (resultType->isExtVectorType()) {\n // ...\n } else if (Context.getLangOpts().CPlusPlus && resultType->isVectorType()) {\n // ...\n } else {\n return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"}},
| |
| [l]={
| |
| ["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:13:10: error: invalid argument type \'v2f\' (vector of 2 \'float\' values) to unary expression"}
| |
| }
| |
| },
| |
| ["err_typecheck_vector_lengths_not_equal"]={
| |
| [i]="err_typecheck_vector_lengths_not_equal",
| |
| [h]="vector operands do not have the same number of elements (%0 and %1)",
| |
| [g]="vector operands do not have the same number of elements (A and B)",
| |
| [b]=k,
| |
| [e]="vector operands do not have the same number of elements \\((.*?) and (.*?)\\)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands","OpenCL: handle shift operator with vector operands\n\nIntroduce a number of checks:\n1. If LHS is a scalar, then RHS cannot be a vector.\n2. Operands must be of integer type.\n3. If both are vectors, then the number of elements must match.\n\nRelax the requirement for \"usual arithmetic conversions\":\nWhen LHS is a vector, a scalar RHS can simply be expanded into a\nvector; OpenCL does not require that its rank be lower than the LHS.\nFor example, the following code is not an error even if the implicit\ntype of the constant literal is \"int\".\n\n char2 foo(char2 v) { return v << 1; }\n\nConsolidate existing tests under CodeGenOpenCL, and add more tests\nunder SemaOpenCL.\n\nllvm-svn: 228382"},
| |
| [j]={{n,11239,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n // ...\n if (LHSType->isVLSTBuiltinType() && RHSType->isVLSTBuiltinType() && Context.getBuiltinVectorTypeInfo(LHSBuiltinTy).EC != Context.getBuiltinVectorTypeInfo(RHSBuiltinTy).EC) {\n Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,12149,"/// Return the resulting type when a vector is shifted\n/// by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n if (!LHSVecTy) {\n // ...\n } else if (RHSVecTy) {\n // OpenCL v1.1 s6.3.j says that for vector types, the operators\n // are applied component-wise. So if RHS is a vector, then ensure\n // that the number of elements is the same as LHS...\n if (RHSVecTy->getNumElements() != LHSVecTy->getNumElements()) {\n S.Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,12323,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n if (!LHSType->isVLSTBuiltinType()) {\n // ...\n } else if (RHSBuiltinTy && RHSBuiltinTy->isVLSTBuiltinType()) {\n if (S.Context.getTypeSize(RHSBuiltinTy) != S.Context.getTypeSize(LHSBuiltinTy)) {\n S.Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/Sema/shift.c"]={"clang/test/Sema/shift.c:82:11: error: vector operands do not have the same number of elements (\'vec16\' (vector of 4 \'unsigned int\' values) and \'vec8\' (vector of 2 \'unsigned int\' values))"}
| |
| }
| |
| },
| |
| ["err_typecheck_vector_not_convertable"]={
| |
| [i]="err_typecheck_vector_not_convertable",
| |
| [h]="cannot convert between vector values of different size (%0 and %1)",
| |
| [g]="cannot convert between vector values of different size (A and B)",
| |
| [b]=k,
| |
| [e]="cannot convert between vector values of different size \\((.*?) and (.*?)\\)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={K,1236199783,J,I},
| |
| [j]={{n,11109,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n // ...\n unsigned DiagID = diag::err_typecheck_vector_not_convertable;"}},
| |
| [l]={
| |
| ["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:25:10: error: cannot convert between vector values of different size (\'float3\' (vector of 3 \'float\' values) and \'float2\' (vector of 2 \'float\' values))","clang/test/Sema/ext_vector_casts.c:26:10: error: cannot convert between vector values of different size (\'float4\' (vector of 4 \'float\' values) and \'float3\' (vector of 3 \'float\' values))","clang/test/Sema/ext_vector_casts.c:49:11: error: cannot convert between vector values of different size (\'int4\' (vector of 4 \'int\' values) and \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/ext_vector_casts.c:107:11: error: cannot convert between vector values of different size (\'short8\' (vector of 8 \'short\' values) and \'float\')","clang/test/Sema/ext_vector_casts.c:111:11: error: cannot convert between vector values of different size (\'int4\' (vector of 4 \'int\' values) and \'double\')"}
| |
| }
| |
| },
| |
| ["err_typecheck_vector_not_convertable_implict_truncation"]={
| |
| [i]={{nil,o,"err_typecheck_vector_not_convertable_implict_truncation"}},
| |
| [h]={{nil,o,"cannot convert between %select{scalar|vector}0 type %1 and vector type %2 as implicit conversion would cause truncation"}},
| |
| [g]={{nil,o,{"cannot convert between ",{"scalar","vector"}," type B and vector type C as implicit conversion would cause truncation"}}},
| |
| [b]=k,
| |
| [e]="cannot convert between (?:scalar|vector) type (.*?) and vector type (.*?) as implicit conversion would cause truncation",
| |
| [f]=a,
| |
| [d]={{nil,o,m}},
| |
| [c]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions","[Sema] Support implicit scalar to vector conversions\n\nThis patch teaches clang to perform implicit scalar to vector conversions\nwhen one of the operands of a binary vector expression is a scalar which\ncan be converted to the element type of the vector without truncation\nfollowing GCC\'s implementation.\n\nIf the (constant) scalar is can be casted safely, it is implicitly casted to the\nvector elements type and splatted to produce a vector of the same type.\n\nContributions from: Petar Jovanovic\n\nReviewers: bruno, vkalintiris\n\nDifferential Revision: https://reviews.llvm.org/D25866\n\nllvm-svn: 302935"},
| |
| [j]={{n,11194,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n // ...\n // If there is a vector type that is not a ExtVector and a scalar, we reach\n // this point if scalar could not be converted to the vector\'s element type\n // without truncation.\n if ((RHSVecType && !isa<ExtVectorType>(RHSVecType)) || (LHSVecType && !isa<ExtVectorType>(LHSVecType))) {\n // ...\n Diag(Loc, diag::err_typecheck_vector_not_convertable_implict_truncation) << ScalarOrVector << Scalar << Vector;"},{n,11272,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n // ...\n if (LHSType->isVLSTBuiltinType() || RHSType->isVLSTBuiltinType()) {\n // ...\n Diag(Loc, diag::err_typecheck_vector_not_convertable_implict_truncation) << ScalarOrVector << Scalar << Vector;"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/vector-no-lax.cpp"]={"clang/test/SemaCXX/vector-no-lax.cpp:7:5: error: cannot convert between vector type \'vUInt32\' (vector of 4 \'unsigned int\' values) and vector type \'vSInt32\' (vector of 4 \'int\' values) as implicit conversion would cause truncation"}
| |
| }
| |
| },
| |
| ["err_typecheck_vector_not_convertable_non_scalar"]={
| |
| [i]="err_typecheck_vector_not_convertable_non_scalar",
| |
| [h]="cannot convert between vector and non-scalar values (%0 and %1)",
| |
| [g]="cannot convert between vector and non-scalar values (A and B)",
| |
| [b]=k,
| |
| [e]="cannot convert between vector and non\\-scalar values \\((.*?) and (.*?)\\)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"d07dcdb9588b",1389081571,"For areVectorOperandsLaxBitCastable(), only return false if both opearands are vector types","For areVectorOperandsLaxBitCastable(), only return false if both opearands are vector types\nand add a diagnostic when the operand is a vector and non-scalar value.\n\nrdar://15722301\n\nllvm-svn: 198680"},
| |
| [j]={{n,11147,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n // ...\n // If there\'s a non-vector, non-real operand, diagnose that.\n if ((!RHSVecType && !RHSType->isRealType()) || (!LHSVecType && !LHSType->isRealType())) {\n Diag(Loc, diag::err_typecheck_vector_not_convertable_non_scalar) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,11227,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n // ...\n if ((!LHSType->isVLSTBuiltinType() && !LHSType->isRealType()) || (!RHSType->isVLSTBuiltinType() && !RHSType->isRealType())) {\n Diag(Loc, diag::err_typecheck_vector_not_convertable_non_scalar) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:62:11: error: cannot convert between vector and non-scalar values (\'__v2si\' (vector of 2 \'int\' values) and \'testvec\')","clang/test/SemaCXX/vector-casts.cpp:65:11: error: cannot convert between vector and non-scalar values (\'__v2si\' (vector of 2 \'int\' values) and \'testvec\')"}
| |
| }
| |
| },
| |
| ["err_typecheck_wasm_table_must_have_zero_length"]={
| |
| [i]="err_typecheck_wasm_table_must_have_zero_length",
| |
| [h]="only zero-length WebAssembly tables are currently supported",
| |
| [g]="only zero-length WebAssembly tables are currently supported",
| |
| [b]=k,
| |
| [e]="only zero\\-length WebAssembly tables are currently supported",
| |
| [f]=a,
| |
| [d]=a,
| |
| [c]={ab,1625925174,bb,cb},
| |
| [j]={{w,8671,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n // WebAssembly tables must be static with a zero length and can\'t be\n // declared within functions.\n if (T->isWebAssemblyTableType()) {\n // ...\n if (!ATy || ATy->getSize().getSExtValue() != 0) {\n Diag(NewVD->getLocation(), diag::err_typecheck_wasm_table_must_have_zero_length);"}},
| |
| [l]={
| |
| ["clang/test/Sema/wasm-refs-and-tables.c"]={"clang/test/Sema/wasm-refs-and-tables.c:15:22: error: only zero-length WebAssembly tables are currently supported","clang/test/Sema/wasm-refs-and-tables.c:16:22: error: only zero-length WebAssembly tables are currently supported","clang/test/Sema/wasm-refs-and-tables.c:17:22: error: only zero-length WebAssembly tables are currently supported","clang/test/Sema/wasm-refs-and-tables.c:24:22: error: only zero-length WebAssembly tables are currently supported"}
| |
| }
| |
| },
| |
| ["err_typecheck_zero_array_size"]={
| |
| [i]="err_typecheck_zero_array_size",
| |
| [h]={{nil,C,"zero-length arrays are not permitted in %select{C++|SYCL device code}0"},{F,nil,"zero-length arrays are not permitted in C++"}},
| |
| [g]={{nil,C,{"zero-length arrays are not permitted in ",{"C++","SYCL device code"}}},{F,nil,"zero-length arrays are not permitted in C++"}},
| |
| [b]=k,
| |
| [e]="zero\\-length arrays are not permitted in (?:C\\+\\+|SYCL device code)",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"d5cb1ddb2cf4",1269744163,"After performing template argument deduction for a function template,","After performing template argument deduction for a function template,\ncheck deduced non-type template arguments and template template\narguments against the template parameters for which they were deduced,\nperforming conversions as appropriate so that deduced template\narguments get the same treatment as explicitly-specified template\narguments. This is the bulk of PR6723.\n\nAlso keep track of whether deduction of a non-type template argument\ncame from an array bound (vs. anywhere else). With this information,\nwe enforce C++ [temp.deduct.type]p17, which requires exact type\nmatches when deduction deduces a non-type template argument from\nsomething that is not an array bound.\n\nFinally, when in a SFINAE context, translate the \"zero sized\narrays are an extension\" extension diagnostic into a hard error (for\nbetter standard conformance), which was a minor part of PR6723.\n\nllvm-svn: 99734"},
| |
| [j]={{"clang/lib/Sema/SemaSYCL.cpp",55,"void Sema::deepTypeCheckForSYCLDevice(SourceLocation UsedAt, llvm::DenseSet<QualType> Visited, ValueDecl *DeclToCheck) {\n // ...\n auto Check = [&](QualType TypeToCheck, const ValueDecl *D) {\n // ...\n if (isZeroSizedArray(*this, TypeToCheck)) {\n SYCLDiagIfDeviceCode(UsedAt, diag::err_typecheck_zero_array_size) << 1;"},{R,2648,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n // ...\n if (!ArraySize) {\n // ...\n } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n // ...\n } else {\n // ...\n if (!R.isUsable()) {\n // ...\n } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n // ...\n } else {\n // ...\n if (ConstVal == 0 && !T.isWebAssemblyReferenceType()) {\n // ...\n Diag(ArraySize->getBeginLoc(), isSFINAEContext() ? diag::err_typecheck_zero_array_size : diag::ext_typecheck_zero_array_size) << 0 << ArraySize->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaSYCL/zero-length-arrays.cpp"]={Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,"clang/test/SemaSYCL/zero-length-arrays.cpp:69:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:70:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:72:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:77:26: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:14: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:16: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:89:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:89:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:99:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:99:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:101:13: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:101:13: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:108:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:108:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:53:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:53:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:19:8: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:19:8: error: zero-length arrays are not permitted in SYCL device code"}
| |
| }
| |
| },
| |
| ["err_typedef_changes_linkage"]={
| |
| [i]="err_typedef_changes_linkage",
| |
| [h]={{nil,q,"unsupported: anonymous 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"},{p,nil,"unsupported: typedef changes linkage of anonymous type, but linkage was already computed"}},
| |
| [g]={{nil,q,{"unsupported: anonymous type given name for linkage purposes by ",{Rc,"alias"}," declaration after its linkage was computed; add a tag name here to establish linkage prior to definition"}},{p,nil,"unsupported: typedef changes linkage of anonymous type, but linkage was already computed"}},
| |
| [b]=k,
| |
| [e]="unsupported\\: anonymous 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",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"2575d8805927",1391044373,"Diagnose typedef names for linkage purposes that would change","Diagnose typedef names for linkage purposes that would change\na previously-computed linkage as an unsupportable error condition.\n\nPer discussion on cfe-commits, this appears to be a\ndifficult-to-resolve flaw in our implementation approach;\nwe may pursue this as a language defect, but for now it\'s\nbetter to diagnose it as unsupported than to produce\ninconsistent results (or assertions). Anything that we can\ndo to limit how often this diagnostic fires, such as the\nchanges in r200380, is probably for the best, though.\n\nllvm-svn: 200438"},
| |
| [j]={{w,5015,"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 DiagID = diag::err_typedef_changes_linkage;"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/anonymous-struct.cpp"]={"clang/test/SemaCXX/anonymous-struct.cpp:115:17: error: unsupported: anonymous type given name for linkage purposes by typedef declaration after its linkage was computed; add a tag name here to establish linkage prior to definition","clang/test/SemaCXX/anonymous-struct.cpp:131:17: error: unsupported: anonymous type given name for linkage purposes by typedef declaration after its linkage was computed; add a tag name here to establish linkage prior to definition"}
| |
| }
| |
| },
| |
| ["err_typedef_not_bitfield"]={
| |
| [i]="err_typedef_not_bitfield",
| |
| [h]="typedef member %0 cannot be a bit-field",
| |
| [g]="typedef member A cannot be a bit-field",
| |
| [b]=k,
| |
| [e]="typedef member (.*?) cannot be a bit\\-field",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={u,1237025389,s,t},
| |
| [j]={{H,3630,"/// 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 Diag(Loc, diag::err_typedef_not_bitfield) << Name << BitWidth->getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/class.cpp"]={"clang/test/SemaCXX/class.cpp:33:15: error: typedef member \'E\' cannot be a bit-field"}
| |
| }
| |
| },
| |
| ["err_typedef_not_identifier"]={
| |
| [i]="err_typedef_not_identifier",
| |
| [h]="typedef name must be an identifier",
| |
| [g]="typedef name must be an identifier",
| |
| [b]=k,
| |
| [e]="typedef name must be an identifier",
| |
| [f]=a,
| |
| [d]=m,
| |
| [c]={"d8f446f1b2db",1279003021,"Diagnose typedef of an operator name. Fixes PR7462","Diagnose typedef of an operator name. Fixes PR7462\n\nllvm-svn: 108233"},
| |
| [j]={{w,6684,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n // ...\n if (D.getName().getKind() != UnqualifiedIdKind::IK_Identifier) {\n if (D.getName().getKind() == UnqualifiedIdKind::IK_DeductionGuideName)\n // ...\n else\n Diag(D.getName().StartLocation, diag::err_typedef_not_identifier) << D.getName().getSourceRange();"}},
| |
| [l]={
| |
| ["clang/test/SemaCXX/typedef-redecl.cpp"]={"clang/test/SemaCXX/typedef-redecl.cpp:54:15: error: typedef name must be an identifier"}
| |
| }
| |
| },
| |
| ["err_typename_identifiers_only"]={
| |
| [i]="err_typename_identifiers_only",
| |
| [h]="typename is allowed for identifiers only",
| |
| [g]="typename is allowed for identifiers only",
| |
| [b]=k,
| |
| [e]="typename is allowed for identifiers only",
| |
| [f]=a,
| |
| [d]=x,
| |
| [c]={"882a61a64035",1317047428,"Diagnose attempts to use \'using typename\' with a non-identifier name,","Diagnose attempts to use \'using typename\' with a non-identifier name,\nfrom Stepan Dyatkovskiy. Fixes PR10925.\n\nllvm-svn: 140528"},
| |
| [j]={{Qb,830,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n/// using-declaration: [C++ 7.3.p3: namespace.udecl]\n/// \'using\' using-declarator-list[opt] ;\n///\n/// using-declarator-list: [C++1z]\n/// using-declarator \'...\'[opt]\n/// using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n/// using-declarator-list: [C++98-14]\n/// using-declarator\n///\n/// alias-declaration: C++11 [dcl.dcl]p1\n/// \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n/// using-enum-declaration: [C++20, dcl.enum]\n/// \'using\' elaborated-enum-specifier ;\n/// The terminal name of the elaborated-enum-specifier undergoes\n/// ordinary lookup\n///\n/// elaborated-enum-specifier:\n/// \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n // ...\n while (true) {\n // ...\n if (InvalidDeclarator)\n // ...\n else {\n // \"typename\" keyword is allowed for identifiers only,\n // because it may be a type definition.\n if (D.TypenameLoc.isValid() && D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n Diag(D.Name.getSourceRange().getBegin(), diag::err_typename_identifiers_only) << FixItHint::CreateRemoval(SourceRange(D.TypenameLoc));"}},
| |
| [l]={
| |
| ["clang/test/SemaTemplate/typename-specifier.cpp"]={"clang/test/SemaTemplate/typename-specifier.cpp:136:47: error: typename is allowed for identifiers only"}
| |
| }
| |
| },
| |
| ["err_typename_invalid_constexpr"]={
| |
| [i]="err_typename_invalid_constexpr",
| |
| [h]={{nil,p,"type name does not allow %select{<ERROR>|constexpr|consteval|constinit}0 specifier to be specified"},{D,D,"type name does not allow %select{constexpr|consteval}0 specifier to be specified"},{E,nil,"type name does not allow constexpr specifier to be specified"}},
| |
| [g]={{nil,p,{"type name does not allow ",{"constexpr","consteval","constinit"}," specifier to be specified"}},{D,D,{"type name does not allow ",{"constexpr","consteval"}," specifier to be specified"}},{E,nil,"type name does not allow constexpr specifier to be specified"}},
| |
| [b]=k,
| |
| [e]="type name does not allow (?:constexpr|consteval|constinit) specifier to be specified",
| |
| [f]=a,
| |
| [d]=x,
| |
| [c]={"c5b05520550a",1331538975,"Fix parsing of type-specifier-seq\'s. Types are syntactically allowed to be","Fix parsing of type-specifier-seq\'s. Types are syntactically allowed to be\ndefined here, but not semantically, so\n\n new struct S {};\n\nis always ill-formed, even if there is a struct S in scope.\n\nWe also had a couple of bugs in ParseOptionalTypeSpecifier caused by it being\nunder-loved (due to it only being used in a few places) so merge it into\nParseDeclarationSpecifiers with a new DeclSpecContext. To avoid regressing, this\nrequired improving ParseDeclarationSpecifiers\' diagnostics in some cases. This\nalso required teaching ParseSpecifierQualifierList about constexpr... which\nincidentally fixes an issue where we\'d allow the constexpr specifier in other\nbad places.\n\nllvm-svn: 152549"},
| |
| [j]={{jb,2688,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // ...\n // Issue diagnostic and remove constexpr specifier if present.\n if (DS.hasConstexprSpecifier() && DSC != DeclSpecContext::DSC_condition) {\n Diag(DS.getConstexprSpecLoc(), diag::err_typename_invalid_constexpr) << static_cast<int>(DS.getConstexprSpecifier());"}},
| |
| [l]={
| |
| [dd]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:20:13: error: type name does not allow constexpr specifier to be specified"}
| |
| }
| |
| },
| |
| ["err_typename_invalid_functionspec"]={
| |
| [i]="err_typename_invalid_functionspec",
| |
| [h]="type name does not allow function specifier to be specified",
| |
| [g]="type name does not allow function specifier to be specified",
| |
| [b]=k,
| |
| [e]="type name does not allow function specifier to be specified",
| |
| [f]=a,
| |
| [d]=x,
| |
| [c]={K,1236199783,J,I},
| |
| [j]={{jb,2676,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // ...\n // Issue diagnostic and remove function specifier if present.\n if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n if (DS.isInlineSpecified())\n Diag(DS.getInlineSpecLoc(), diag::err_typename_invalid_functionspec);"},{jb,2678,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // ...\n // Issue diagnostic and remove function specifier if present.\n if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n // ...\n if (DS.isVirtualSpecified())\n Diag(DS.getVirtualSpecLoc(), diag::err_typename_invalid_functionspec);"},{jb,2680,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // ...\n // Issue diagnostic and remove function specifier if present.\n if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n // ...\n if (DS.hasExplicitSpecifier())\n Diag(DS.getExplicitSpecLoc(), diag::err_typename_invalid_functionspec);"},{jb,2682,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // ...\n // Issue diagnostic and remove function specifier if present.\n if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n // ...\n if (DS.isNoreturnSpecified())\n Diag(DS.getNoreturnSpecLoc(), diag::err_typename_invalid_functionspec);"}},
| |
| [l]={
| |
| [dd]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:14:13: error: type name does not allow function specifier to be specified","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:15:13: error: type name does not allow function specifier to be specified","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:16:13: error: type name does not allow function specifier to be specified"}
| |
| }
| |
| },
| |
| ["err_typename_invalid_storageclass"]={
| |
| [i]="err_typename_invalid_storageclass",
| |
| [h]="type name does not allow storage class to be specified",
| |
| [g]="type name does not allow storage class to be specified",
| |
| [b]=k,
| |
| [e]="type name does not allow storage class to be specified",
| |
| [f]=a,
| |
| [d]=x,
| |
| [c]={K,1236199783,J,I},
| |
| [j]={{jb,2666,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // ...\n // Issue diagnostic and remove storage class if present.\n if (Specs & DeclSpec::PQ_StorageClassSpecifier) {\n if (DS.getStorageClassSpecLoc().isValid())\n Diag(DS.getStorageClassSpecLoc(), diag::err_typename_invalid_storageclass);"},{jb,2669,"/// ParseSpecifierQualifierList\n/// specifier-qualifier-list:\n/// type-specifier specifier-qualifier-list[opt]\n/// type-qualifier specifier-qualifier-list[opt]\n/// [GNU] attributes specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n // ...\n // Issue diagnostic and remove storage class if present.\n if (Specs & DeclSpec::PQ_StorageClassSpecifier) {\n if (DS.getStorageClassSpecLoc().isValid())\n // ...\n else\n Diag(DS.getThreadStorageClassSpecLoc(), diag::err_typename_invalid_storageclass);"}},
| |
| [l]={
| |
| [dd]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:19:13: error: type name does not allow storage class to be specified"}
| |
| }
| |
| },
| |
| ["err_typename_missing"]={
| |
| [i]="err_typename_missing",
| |
| [h]="missing \'typename\' prior to dependent type name \'%0%1\'",
| |
| [g]="missing \'typename\' prior to dependent type name \'AB\'",
| |
| [b]=k,
| |
| [e]="missing \'typename\' prior to dependent type name \'(.*?)(.*?)\'",
| |
| [f]=a, | | [f]=a, |
| [d]=m,
| | [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"}, |
| [c]={"15e5602e5998",1255476442,"Improve diagnostics when the parser encounters a declarator with an","Improve diagnostics when the parser encounters a declarator with an\nunknown type name, e.g.,\n\n foo::bar x;\n\nwhen \"bar\" does not refer to a type in \"foo\". \n\nWith this change, the parser now calls into the action to perform\ndiagnostics and can try to recover by substituting in an appropriate\ntype. For example, this allows us to easily diagnose some missing\n\"typename\" specifiers, which we now do:\n\n test/SemaCXX/unknown-type-name.cpp:29:1: error: missing \'typename\'\n prior to dependent type name \'A<T>::type\'\n A<T>::type A<T>::f() { return type(); }\n ^~~~~~~~~~\n typename \n\nFixes PR3990.\n\nllvm-svn: 84053"}, | | [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]={{w,819,"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 // ...\n else if (SS->isValid() && SS->getScopeRep()->containsErrors()) {\n // ...\n } else if (isDependentScopeSpecifier(*SS)) {\n unsigned DiagID = diag::err_typename_missing;"},{n,2878,"/// 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 (const TypeDecl *TD = R.getAsSingle<TypeDecl>()) {\n // ...\n unsigned DiagID = diag::err_typename_missing;"}}, | |
| [l]={ | | [l]={ |
| ["clang/test/SemaCXX/PR11358.cpp"]={"clang/test/SemaCXX/PR11358.cpp:15:7: error: missing \'typename\' prior to dependent type name \'Container::iterator\'","clang/test/SemaCXX/PR11358.cpp:31:10: error: missing \'typename\' prior to dependent type name \'hash_map<KeyType, ValueType>::const_iterator\'","clang/test/SemaCXX/PR11358.cpp:47:7: error: missing \'typename\' prior to dependent type name \'Container::iterator\'"} | | [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\'"} |
| } | | } |
| } | | } |
| }; | | }; |