Module:ClangDiags/DiagsLongData0: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
No edit summary
Line 11: Line 11:
local k="Semantic Issue";
local k="Semantic Issue";
local l="clang/lib/Sema/SemaDeclAttr.cpp";
local l="clang/lib/Sema/SemaDeclAttr.cpp";
local m="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local m="clang/lib/Sema/SemaDecl.cpp";
local n="clang/lib/Sema/SemaDecl.cpp";
local n="clang/lib/Sema/SemaType.cpp";
local o="clang/lib/Sema/SemaType.cpp";
local o="clang/lib/Sema/SemaChecking.cpp";
local p="clang/lib/Sema/SemaChecking.cpp";
local p="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local q="5a8987ca5113";
local q="5a8987ca5113";
local r="clang/lib/Sema/SemaDeclCXX.cpp";
local r="Update tablegen diagnostic files to be in sync with the def files.";
local s="clang/lib/Sema/SemaCast.cpp";
local s="clang/lib/Sema/SemaDeclCXX.cpp";
local t="clang/lib/Sema/SemaExprCXX.cpp";
local t="clang/lib/Sema/SemaCast.cpp";
local u="clang/lib/Sema/SemaExpr.cpp";
local u="clang/lib/Sema/SemaExprCXX.cpp";
local v="Parse Issue";
local v="clang/lib/Sema/SemaExpr.cpp";
local w="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 w="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 x="b1c4d5507fad";
local x="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local y="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local y="b1c4d5507fad";
local z="Inline Assembly Issue";
local z="Parse Issue";
local A="clang/lib/Parse/ParseDecl.cpp";
local A="Inline Assembly Issue";
local B="clang/lib/Sema/SemaStmtAsm.cpp";
local B="clang/lib/Parse/ParseDecl.cpp";
local C="clang/lib/Sema/SemaExprObjC.cpp";
local C="clang/lib/Sema/SemaExprObjC.cpp";
local D="clang/lib/Sema/SemaInit.cpp";
local D="clang/lib/Sema/SemaStmtAsm.cpp";
local E="31168b077c36";
local E="clang/lib/Sema/SemaInit.cpp";
local F="Automatic Reference Counting.\n\nLanguage-design credit goes to a lot of people, but I particularly wa...";
local F="31168b077c36";
local G="clang/lib/Sema/SemaDeclObjC.cpp";
local G="clang/lib/Sema/SemaDeclObjC.cpp";
local H="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";
local H="Automatic Reference Counting.";
local I="clang/lib/Parse/ParseDeclCXX.cpp";
local I="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";
local J="ARC Semantic Issue";
local J="clang/lib/Parse/ParseDeclCXX.cpp";
local K="Implement P2361 Unevaluated string literals\n\nThis patch proposes to handle in an uniform fashion\nthe...";
local K="ARC Semantic Issue";
local L="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 L="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 M="95f50964fbf5";
local M="Implement P2361 Unevaluated string literals";
local N="clang/test/Sema/asm.c";
local N="95f50964fbf5";
local O="clang/lib/Frontend/CompilerInvocation.cpp";
local O="clang/test/Sema/asm.c";
local P="clang/lib/Sema/SemaObjCProperty.cpp";
local P="clang/lib/Frontend/CompilerInvocation.cpp";
local Q="clang/lib/Sema/SemaStmt.cpp";
local Q="clang/lib/Sema/SemaObjCProperty.cpp";
local R="clang/lib/Sema/SemaOverload.cpp";
local R="clang/lib/Sema/SemaStmt.cpp";
local S="[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 S="clang/lib/Sema/SemaOverload.cpp";
local T="Implement the C++0x deduced \'auto\' feature.\n\nThis fixes PR 8738, 9060 and 9132.\n\nllvm-svn: 126069";
local T="14f6bfcb52e7";
local U="clang/lib/Sema/SemaAccess.cpp";
local U="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local V="Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545";
local V="[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 W="[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the n...";
local W="clang/lib/Sema/SemaAccess.cpp";
local X="14f6bfcb52e7";
local X="[WebAssembly] Improve clang diagnostics for wasm attributes";
local Y="[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 Y="[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 Z="[WebAssembly] Improve clang diagnostics for wasm attributes\n\nThis patch addresses the review comment...";
local Z="931fcd3ba011";
local ab="931fcd3ba011";
local ab="clang/lib/ARCMigrate/TransProperties.cpp";
local bb="clang/lib/ARCMigrate/TransProperties.cpp";
local bb="cff00d9c127c";
local cb="Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet...";
local cb="Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet...";
local db="cff00d9c127c";
local db="Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifetime\'.\n\nrdar://9477613.\n\nllvm-svn: 133779";
local eb="Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifetime\'.\n\nrdar://9477613.\n\nllvm-svn: 133779";
local eb="constexpr: semantic checking for constexpr functions and constructors. Based in\npart on patches by Peter Collingbourne.\n\nWe diverge from the C++11 standard in a few areas, mostly related to checking\nconstexpr function declarations, and not just definitions. See WG21 paper\nN3308=11-0078 for details.\n\nFunction invocation substitution is not available in this patch; constexpr\nfunctions cannot yet be used from within constant expressions.\n\nllvm-svn: 140926";
local fb="61d065e21ff3";
local fb="Let clang atomic builtins fetch add/sub support floating point types";
local gb="clang/lib/ARCMigrate/TransUnbridgedCasts.cpp";
local gb="f9c3310d32c6";
local hb="constexpr: semantic checking for constexpr functions and constructors. Based in\npart on patches by Peter Collingbourne.\n\nWe diverge from the C++11 standard in a few areas, mostly related to checking\nconstexpr function declarations, and not just definitions. See WG21 paper\nN3308=11-0078 for details.\n\nFunction invocation substitution is not available in this patch; constexpr\nfunctions cannot yet be used from within constant expressions.\n\nllvm-svn: 140926";
local hb="[OPENMP]Fix PR49366: crash on VLAs in task untied regions.";
local ib="eb3c10c248ac";
local ib="[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 jb="Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to ...";
local jb="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 kb="constexpr: semantic checking for constexpr functions and constructors. Based in\npart on patches by P...";
local kb="61d065e21ff3";
local lb="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 lb="clang/lib/ARCMigrate/TransUnbridgedCasts.cpp";
local mb="Lexical or Preprocessor Issue";
local mb="Lexical or Preprocessor Issue";
local nb="f9c3310d32c6";
local nb="eb3c10c248ac";
local ob="[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables i...";
local ob="constexpr: semantic checking for constexpr functions and constructors. Based in";
local pb="[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 pb="clang/test/Sema/builtins.c";
local qb="ac991bbb4456";
local qb="ARC Restrictions";
local rb="Emit !callback metadata and introduce the callback attribute\n\n  With commit r351627, LLVM gained the...";
local rb="clang/lib/Sema/SemaLambda.cpp";
local sb="clang/lib/Sema/SemaLambda.cpp";
local sb="clang/lib/AST/Stmt.cpp";
local tb="2a7d481faf54";
local tb="clang/lib/Parse/ParseExpr.cpp";
local ub="clang/test/Sema/builtins.c";
local ub="clang/test/SemaObjC/arc.m";
local vb="Implement most of N3638 (return type deduction for normal functions).\nMissing (somewhat ironically) is support for the new deduction rules\nin lambda functions, plus PCH support for return type patching.\n\nllvm-svn: 181108";
local vb="ac991bbb4456";
local wb="clang/lib/AST/Stmt.cpp";
local wb="Emit !callback metadata and introduce the callback attribute";
local xb="ARC Restrictions";
local xb="Emit !callback metadata and introduce the callback attribute\n\n  With commit r351627, LLVM gained the ability to apply (existing) IPO\n  optimizations on indirections through callbacks, or transitive calls.\n  The general idea is that we use an abstraction to hide the middle man\n  and represent the callback call in the context of the initial caller.\n  It is described in more detail in the commit message of the LLVM patch\n  r351627, the llvm::AbstractCallSite class description, and the\n  language reference section on callback-metadata.\n\n  This commit enables clang to emit !callback metadata that is\n  understood by LLVM. It does so in three different cases:\n    1) For known broker functions declarations that are directly\n      generated, e.g., __kmpc_fork_call for the OpenMP pragma parallel.\n    2) For known broker functions that are identified by their name and\n      source location through the builtin detection, e.g.,\n      pthread_create from the POSIX thread API.\n    3) For user annotated functions that carry the \"callback(callee, ...)\"\n      attribute. The attribute has to include the name, or index, of\n      the callback callee and how the passed arguments can be\n      identified (as many as the callback callee has). See the callback\n      attribute documentation for detailed information.\n\nDifferential Revision: https://reviews.llvm.org/D55483\n\nllvm-svn: 351629";
local yb="Emit !callback metadata and introduce the callback attribute\n\n  With commit r351627, LLVM gained the ability to apply (existing) IPO\n  optimizations on indirections through callbacks, or transitive calls.\n  The general idea is that we use an abstraction to hide the middle man\n  and represent the callback call in the context of the initial caller.\n  It is described in more detail in the commit message of the LLVM patch\n  r351627, the llvm::AbstractCallSite class description, and the\n  language reference section on callback-metadata.\n\n  This commit enables clang to emit !callback metadata that is\n  understood by LLVM. It does so in three different cases:\n    1) For known broker functions declarations that are directly\n      generated, e.g., __kmpc_fork_call for the OpenMP pragma parallel.\n    2) For known broker functions that are identified by their name and\n      source location through the builtin detection, e.g.,\n      pthread_create from the POSIX thread API.\n    3) For user annotated functions that carry the \"callback(callee, ...)\"\n      attribute. The attribute has to include the name, or index, of\n      the callback callee and how the passed arguments can be\n      identified (as many as the callback callee has). See the callback\n      attribute documentation for detailed information.\n\nDifferential Revision: https://reviews.llvm.org/D55483\n\nllvm-svn: 351629";
local yb="2a7d481faf54";
local zb="clang/test/SemaObjC/arc.m";
local zb="clang/test/SemaCXX/dynamic-cast.cpp";
local Ab="clang/test/SemaCXX/dynamic-cast.cpp";
local Ab="Implement most of N3638 (return type deduction for normal functions).";
local Bb="Implement most of N3638 (return type deduction for normal functions).\nMissing (somewhat ironically) ...";
local Bb="Implement most of N3638 (return type deduction for normal functions).\nMissing (somewhat ironically) is support for the new deduction rules\nin lambda functions, plus PCH support for return type patching.\n\nllvm-svn: 181108";
local Cb="clang/lib/Parse/ParseExpr.cpp";
local Cb="AMDGPU: Teach toolchain to link rocm device libs";
local Db="1064d7ef2992";
local Db="1064d7ef2992";
local Eb="Perform access control for the implicit base and member destructor calls\nrequired when emitting a de...";
local Eb="Perform access control for the implicit base and member destructor calls";
local Fb="Perform access control for the implicit base and member destructor calls\nrequired when emitting a destructor definition.\n\nllvm-svn: 98609";
local Fb="Perform access control for the implicit base and member destructor calls\nrequired when emitting a destructor definition.\n\nllvm-svn: 98609";
local Gb="Improve handling of vector casts in C++.\n\nllvm-svn: 82072";
local Gb="clang/test/Sema/attr-callback-broken.c";
local Hb="clang/test/SemaCXX/conversion-function.cpp";
local Hb="Implement the C++0x deduced \'auto\' feature.";
local Ib="30482bc78659";
local Ib="clang/lib/Sema/SemaTemplateDeduction.cpp";
local Jb="clang/lib/Lex/Lexer.cpp";
local Jb="30482bc78659";
local Kb="clang/test/Parser/cxx2a-concept-declaration.cpp";
local Kb="4593e4131aff";
local Lb="clang/lib/Sema/SemaTemplateDeduction.cpp";
local Lb="f881267db9a9";
local Mb="f881267db9a9";
local Mb="Mass-rename the handful of error_* diagnostics to err_*.";
local Nb="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).";
local Nb="clang/test/Parser/cxx2a-concept-declaration.cpp";
local Ob="AMDGPU: Teach toolchain to link rocm device libs\n\nCurrently the library is separately linked, but th...";
local Ob="Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545";
local Pb="4593e4131aff";
local Pb="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).";
local Qb="clang/test/Sema/attr-callback-broken.c";
local Qb="Implement the C++0x deduced \'auto\' feature.\n\nThis fixes PR 8738, 9060 and 9132.\n\nllvm-svn: 126069";
local Rb="ARC Weak References";
local Rb="clang/lib/Lex/Lexer.cpp";
local Sb="[ObjC] Implement @available in the Parser and AST\n\nThis patch adds a new AST node: ObjCAvailabilityCheckExpr, and teaches the\nParser and Sema to generate it. This node represents an availability check of\nthe form:\n\n  @available(macos 10.10, *);\n\nWhich will eventually compile to a runtime check of the host\'s OS version. This\nis the first patch of the feature I proposed here:\nhttp://lists.llvm.org/pipermail/cfe-dev/2016-July/049851.html\n\nDifferential Revision: https://reviews.llvm.org/D22171\n\nllvm-svn: 275654";
local Sb="clang/test/SemaCXX/conversion-function.cpp";
local Tb="3dbcea8b957a";
local Tb="ARC Weak References";
local Ub="Reland [clang] Check unsupported types in expressions\n\nThis was committed as ec6c847179fd, but then ...";
local Ub="clang/lib/Parse/ParseTemplate.cpp";
local Vb="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 Vb="fatal error\\: ";
local Wb="clang/test/ARCMT/checking.m";
local Wb="clang/lib/Lex/Pragma.cpp";
local Xb="clang/lib/Lex/Pragma.cpp";
local Xb="[ObjC] Implement @available in the Parser and AST\n\nThis patch adds a new AST node: ObjCAvailabilityCheckExpr, and teaches the\nParser and Sema to generate it. This node represents an availability check of\nthe form:\n\n  @available(macos 10.10, *);\n\nWhich will eventually compile to a runtime check of the host\'s OS version. This\nis the first patch of the feature I proposed here:\nhttp://lists.llvm.org/pipermail/cfe-dev/2016-July/049851.html\n\nDifferential Revision: https://reviews.llvm.org/D22171\n\nllvm-svn: 275654";
local Yb="clang/lib/Sema/SemaTemplate.cpp";
local Yb="[ObjC] Implement @available in the Parser and AST";
local Zb="[ObjC] Implement @available in the Parser and AST\n\nThis patch adds a new AST node: ObjCAvailabilityC...";
local Zb="29099ded0c15";
local ac="clang/lib/Parse/Parser.cpp";
local ac="clang/lib/Sema/SemaTemplate.cpp";
local bc="clang/lib/Parse/ParseTemplate.cpp";
local bc="clang/test/ARCMT/checking.m";
local cc="fatal error\\: ";
local cc="Reland [clang] Check unsupported types in expressions";
local dc="29099ded0c15";
local dc="3dbcea8b957a";
local ec="clang/lib/Parse/Parser.cpp";
local fc="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";


return {
return {
Line 117: Line 119:
[f]=" \\[(?:\\-Werror,)?\\-Wbackslash\\-newline\\-escape[^\\]]*\\]",
[f]=" \\[(?:\\-Werror,)?\\-Wbackslash\\-newline\\-escape[^\\]]*\\]",
[g]=mb,
[g]=mb,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{Jb,1359,"/// getCharAndSizeSlow - Peek a single \'character\' from the specified buffer,\n/// get its size, and return it.  This is tricky in several cases:\n///  1. If currently at the start of a trigraph, we warn about the trigraph,\n///      then either return the trigraph (skipping 3 chars) or the \'?\',\n///      depending on whether trigraphs are enabled or not.\n///  2. If this is an escaped newline (potentially with whitespace between\n///      the backslash and newline), implicitly skip the newline and return\n///      the char after it.\n///\n/// This handles the slow/uncommon case of the getCharAndSize method.  Here we\n/// know that we can accumulate into Size, and that we have already incremented\n/// Ptr by Size bytes.\n///\n/// NOTE: When this method is updated, getCharAndSizeSlowNoWarn (below) should\n/// be updated to match.\nchar Lexer::getCharAndSizeSlow(const char *Ptr, unsigned &Size, Token *Tok) {\n  // ...\n  Slash:\n    // ...\n    // See if we have optional whitespace characters between the slash and\n    // newline.\n    if (unsigned EscapedNewLineSize = getEscapedNewLineSize(Ptr)) {\n      // ...\n      // Warn if there was whitespace between the backslash and newline.\n      if (Ptr[0] != \'\\n\' && Ptr[0] != \'\\r\' && Tok && !isLexingRawMode())\n        Diag(Ptr, diag::backslash_newline_space);"},{Jb,2511,"/// We have just read the // characters from input.  Skip until we find the\n/// newline character that terminates the comment.  Then update BufferPtr and\n/// return.\n///\n/// If we\'re in KeepCommentMode or any CommentHandler has inserted\n/// some tokens, this will store the first token and return true.\nbool Lexer::SkipLineComment(Token &Result, const char *CurPtr, bool &TokAtPhysicalStartOfLine) {\n  // ...\n  while (true) {\n    // ...\n    if (C != 0) {\n      // ...\n      // If there was space between the backslash and newline, warn about it.\n      if (HasSpace && !isLexingRawMode())\n        Diag(EscapePtr, diag::backslash_newline_space);"},{Jb,2699,"/// isBlockCommentEndOfEscapedNewLine - Return true if the specified newline\n/// character (either \\\\n or \\\\r) is part of an escaped newline sequence.  Issue\n/// a diagnostic if so.  We know that the newline is inside of a block comment.\nstatic bool isEndOfBlockCommentWithEscapedNewLine(const char *CurPtr, Lexer *L, bool Trigraphs) {\n  // ...\n  // If there was space between the backslash and newline, warn about it.\n  if (SpacePos && !L->isLexingRawMode())\n    L->Diag(SpacePos, diag::backslash_newline_space);"}},
[h]={{Rb,1359,"/// getCharAndSizeSlow - Peek a single \'character\' from the specified buffer,\n/// get its size, and return it.  This is tricky in several cases:\n///  1. If currently at the start of a trigraph, we warn about the trigraph,\n///      then either return the trigraph (skipping 3 chars) or the \'?\',\n///      depending on whether trigraphs are enabled or not.\n///  2. If this is an escaped newline (potentially with whitespace between\n///      the backslash and newline), implicitly skip the newline and return\n///      the char after it.\n///\n/// This handles the slow/uncommon case of the getCharAndSize method.  Here we\n/// know that we can accumulate into Size, and that we have already incremented\n/// Ptr by Size bytes.\n///\n/// NOTE: When this method is updated, getCharAndSizeSlowNoWarn (below) should\n/// be updated to match.\nchar Lexer::getCharAndSizeSlow(const char *Ptr, unsigned &Size, Token *Tok) {\n  // ...\n  Slash:\n    // ...\n    // See if we have optional whitespace characters between the slash and\n    // newline.\n    if (unsigned EscapedNewLineSize = getEscapedNewLineSize(Ptr)) {\n      // ...\n      // Warn if there was whitespace between the backslash and newline.\n      if (Ptr[0] != \'\\n\' && Ptr[0] != \'\\r\' && Tok && !isLexingRawMode())\n        Diag(Ptr, diag::backslash_newline_space);"},{Rb,2511,"/// We have just read the // characters from input.  Skip until we find the\n/// newline character that terminates the comment.  Then update BufferPtr and\n/// return.\n///\n/// If we\'re in KeepCommentMode or any CommentHandler has inserted\n/// some tokens, this will store the first token and return true.\nbool Lexer::SkipLineComment(Token &Result, const char *CurPtr, bool &TokAtPhysicalStartOfLine) {\n  // ...\n  while (true) {\n    // ...\n    if (C != 0) {\n      // ...\n      // If there was space between the backslash and newline, warn about it.\n      if (HasSpace && !isLexingRawMode())\n        Diag(EscapePtr, diag::backslash_newline_space);"},{Rb,2699,"/// isBlockCommentEndOfEscapedNewLine - Return true if the specified newline\n/// character (either \\\\n or \\\\r) is part of an escaped newline sequence.  Issue\n/// a diagnostic if so.  We know that the newline is inside of a block comment.\nstatic bool isEndOfBlockCommentWithEscapedNewLine(const char *CurPtr, Lexer *L, bool Trigraphs) {\n  // ...\n  // If there was space between the backslash and newline, warn about it.\n  if (SpacePos && !L->isLexingRawMode())\n    L->Diag(SpacePos, diag::backslash_newline_space);"}},
[j]={
[j]={
["clang/test/Preprocessor/c99-6_10_3_4_p6.c"]={"clang/test/Preprocessor/c99-6_10_3_4_p6.c:7:57: warning: backslash and newline separated by space [-Wbackslash-newline-escape]"}
["clang/test/Preprocessor/c99-6_10_3_4_p6.c"]={"clang/test/Preprocessor/c99-6_10_3_4_p6.c:7:57: warning: backslash and newline separated by space [-Wbackslash-newline-escape]"}
Line 130: Line 132:
[g]=k,
[g]=k,
[b]={"51738f834ed9",1524773686,"[X86] Make __builtin_ia32_readeflags_u32 and __builtin_ia32_writeeflags_u32 only available on 32-bit...","[X86] Make __builtin_ia32_readeflags_u32 and __builtin_ia32_writeeflags_u32 only available on 32-bit targets.\n\nThese builtins can\'t be handled by the backend on 64-bit targets. So error up front instead of throwing an isel error.\n\nFixes PR37225\n\nDifferential Revision: https://reviews.llvm.org/D46132\n\nllvm-svn: 330987"},
[b]={"51738f834ed9",1524773686,"[X86] Make __builtin_ia32_readeflags_u32 and __builtin_ia32_writeeflags_u32 only available on 32-bit...","[X86] Make __builtin_ia32_readeflags_u32 and __builtin_ia32_writeeflags_u32 only available on 32-bit targets.\n\nThese builtins can\'t be handled by the backend on 64-bit targets. So error up front instead of throwing an isel error.\n\nFixes PR37225\n\nDifferential Revision: https://reviews.llvm.org/D46132\n\nllvm-svn: 330987"},
[h]={{p,5982,"bool Sema::CheckX86BuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (TT.getArch() != llvm::Triple::x86 && isX86_32Builtin(BuiltinID))\n    return Diag(TheCall->getCallee()->getBeginLoc(), diag::err_32_bit_builtin_64_bit_tgt);"}},
[h]={{o,5982,"bool Sema::CheckX86BuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (TT.getArch() != llvm::Triple::x86 && isX86_32Builtin(BuiltinID))\n    return Diag(TheCall->getCallee()->getBeginLoc(), diag::err_32_bit_builtin_64_bit_tgt);"}},
[j]={
[j]={
["clang/test/Sema/builtins-x86.c"]={"clang/test/Sema/builtins-x86.c:20:9: error: this builtin is only available on 32-bit targets","clang/test/Sema/builtins-x86.c:21:9: error: this builtin is only available on 32-bit targets"}
["clang/test/Sema/builtins-x86.c"]={"clang/test/Sema/builtins-x86.c:20:9: error: this builtin is only available on 32-bit targets","clang/test/Sema/builtins-x86.c:21:9: error: this builtin is only available on 32-bit targets"}
Line 141: Line 143:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"239eec732ebf",1428623896,"Add Clang support for remaining integer divide and permute instructions from ISA 2.06\n\nThis patch co...","Add Clang support for remaining integer divide and permute instructions from ISA 2.06\n\nThis patch corresponds to review:\nhttp://reviews.llvm.org/D8398\n\nIt adds some builtin functions to access the extended divide and bit permute instructions.\n\nllvm-svn: 234547"},
[b]={"239eec732ebf",1428623896,"Add Clang support for remaining integer divide and permute instructions from ISA 2.06","Add Clang support for remaining integer divide and permute instructions from ISA 2.06\n\nThis patch corresponds to review:\nhttp://reviews.llvm.org/D8398\n\nIt adds some builtin functions to access the extended divide and bit permute instructions.\n\nllvm-svn: 234547"},
[h]={{p,4249,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (isPPC_64Builtin(BuiltinID) && !IsTarget64Bit)\n    return Diag(TheCall->getBeginLoc(), diag::err_64_bit_builtin_32_bit_tgt) << TheCall->getSourceRange();"}},
[h]={{o,4249,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (isPPC_64Builtin(BuiltinID) && !IsTarget64Bit)\n    return Diag(TheCall->getBeginLoc(), diag::err_64_bit_builtin_32_bit_tgt) << TheCall->getSourceRange();"}},
[j]={
[j]={
["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:87:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:91:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:95:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:99:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:103:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:107:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:111:3: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:115:3: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:118:3: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:122:3: error: this builtin is only available on 64-bit targets"}
["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:87:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:91:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:95:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:99:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:103:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:107:10: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:111:3: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:115:3: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:118:3: error: this builtin is only available on 64-bit targets","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:122:3: error: this builtin is only available on 64-bit targets"}
Line 153: Line 155:
[f]=a,
[f]=a,
[g]=mb,
[g]=mb,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{Xb,219,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::l_paren)) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"},{Xb,226,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  // ...\n  if (!tok::isStringLiteral(Tok.getKind())) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"},{Xb,254,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::r_paren)) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"},{Xb,270,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  // ...\n  if (Invalid) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"},{Xb,370,"/// HandleMicrosoft__pragma - Like Handle_Pragma except the pragma text\n/// is not enclosed within a string literal.\nvoid Preprocessor::HandleMicrosoft__pragma(Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::l_paren)) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"}},
[h]={{Wb,219,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::l_paren)) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"},{Wb,226,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  // ...\n  if (!tok::isStringLiteral(Tok.getKind())) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"},{Wb,254,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::r_paren)) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"},{Wb,270,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  // ...\n  if (Invalid) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"},{Wb,370,"/// HandleMicrosoft__pragma - Like Handle_Pragma except the pragma text\n/// is not enclosed within a string literal.\nvoid Preprocessor::HandleMicrosoft__pragma(Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::l_paren)) {\n    Diag(PragmaLoc, diag::err__Pragma_malformed);"}},
[j]={
[j]={
["clang/test/Preprocessor/_Pragma.c"]={"clang/test/Preprocessor/_Pragma.c:15:1: error: _Pragma takes a parenthesized string literal","clang/test/Preprocessor/_Pragma.c:17:1: error: _Pragma takes a parenthesized string literal","clang/test/Preprocessor/_Pragma.c:19:1: error: _Pragma takes a parenthesized string literal"}
["clang/test/Preprocessor/_Pragma.c"]={"clang/test/Preprocessor/_Pragma.c:15:1: error: _Pragma takes a parenthesized string literal","clang/test/Preprocessor/_Pragma.c:17:1: error: _Pragma takes a parenthesized string literal","clang/test/Preprocessor/_Pragma.c:19:1: error: _Pragma takes a parenthesized string literal"}
Line 165: Line 167:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"bf17ecf59a9b",1457537453,"[GCC] PR23529 Sema part of attrbute abi_tag support\n\nOriginal patch by Stefan Bühler http://reviews...","[GCC] PR23529 Sema part of attrbute abi_tag support\n\nOriginal patch by Stefan Bühler http://reviews.llvm.org/D12834\n\nDifference between original and this one:\n- fixed all comments in original code review\n- added more tests, all new diagnostics now covered by tests\n- moved abi_tag on re-declaration checks to Sema::mergeDeclAttributes\n  where they actually may work as designed\n- clang-format + other stylistic changes\n\nMangle part will be sent for review as a separate patch.\n\nDifferential Revision: http://reviews.llvm.org/D17567\n\nllvm-svn: 263015"},
[b]={"bf17ecf59a9b",1457537453,"[GCC] PR23529 Sema part of attrbute abi_tag support","[GCC] PR23529 Sema part of attrbute abi_tag support\n\nOriginal patch by Stefan Bühler http://reviews.llvm.org/D12834\n\nDifference between original and this one:\n- fixed all comments in original code review\n- added more tests, all new diagnostics now covered by tests\n- moved abi_tag on re-declaration checks to Sema::mergeDeclAttributes\n  where they actually may work as designed\n- clang-format + other stylistic changes\n\nMangle part will be sent for review as a separate patch.\n\nDifferential Revision: http://reviews.llvm.org/D17567\n\nllvm-svn: 263015"},
[h]={{n,3263,"/// 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    // ...\n    } else {\n      Diag(NewAbiTagAttr->getLocation(), diag::err_abi_tag_on_redeclaration);"}},
[h]={{m,3263,"/// 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    // ...\n    } else {\n      Diag(NewAbiTagAttr->getLocation(), diag::err_abi_tag_on_redeclaration);"}},
[j]={
[j]={
["clang/test/SemaCXX/attr-abi-tag-syntax.cpp"]={"clang/test/SemaCXX/attr-abi-tag-syntax.cpp:32:16: error: cannot add \'abi_tag\' attribute in a redeclaration"}
["clang/test/SemaCXX/attr-abi-tag-syntax.cpp"]={"clang/test/SemaCXX/attr-abi-tag-syntax.cpp:32:16: error: cannot add \'abi_tag\' attribute in a redeclaration"}
Line 177: Line 179:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"576cc6f725a8",1237753097,"Disallow abstract types where appropriate.\n\nllvm-svn: 67476","Disallow abstract types where appropriate.\n\nllvm-svn: 67476"},
[b]={"576cc6f725a8",1237753097,"Disallow abstract types where appropriate.","Disallow abstract types where appropriate.\n\nllvm-svn: 67476"},
[h]={{p,16642,"/// 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))) {"},{n,13209,"/// 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 (RequireNonAbstractType(VDecl->getLocation(), VDecl->getType(), diag::err_abstract_type_in_decl, AbstractVariableType))"},{n,13643,"/// 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 (RequireNonAbstractType(VD->getLocation(), Ty, diag::err_abstract_type_in_decl, AbstractVariableType)) {"},{n,13776,"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->isInvalidDecl() && RequireNonAbstractType(Var->getLocation(), Type, diag::err_abstract_type_in_decl, AbstractVariableType))"},{n,13868,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    if (RequireNonAbstractType(Var->getLocation(), Type, diag::err_abstract_type_in_decl, AbstractVariableType)) {"},{n,15350,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // ...\n  if (!ResultType->isDependentType() && !ResultType->isVoidType() && !FD->isInvalidDecl() && BodyKind != FnBodyKind::Delete && (RequireCompleteType(FD->getLocation(), ResultType, diag::err_func_def_incomplete_result) || RequireNonAbstractType(FD->getLocation(), FD->getReturnType(), diag::err_abstract_type_in_decl, AbstractReturnType)))"},{n,18166,"/// 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  if (!InvalidDecl && RequireNonAbstractType(Loc, T, diag::err_abstract_type_in_decl, AbstractFieldType))"},{n,18876,"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      if (isa<ObjCContainerDecl>(EnclosingDecl) && RequireNonAbstractType(FD->getLocation(), FD->getType(), diag::err_abstract_type_in_decl, AbstractIvarType)) {"},{r,6098,"#include \"clang/AST/TypeLocNodes.def\"\n  // ...\n  CheckPolymorphic(PointerTypeLoc) CheckPolymorphic(ReferenceTypeLoc) CheckPolymorphic(MemberPointerTypeLoc) CheckPolymorphic(BlockPointerTypeLoc) CheckPolymorphic(AtomicTypeLoc)\n    // ...\n    // It matched; do some magic.\n    // FIXME: These should be at most warnings. See P0929R2, CWG1640, CWG1646.\n    if (Sel == Sema::AbstractArrayType) {\n    // ...\n    } else {\n      Info.S.Diag(Ctx->getLocation(), diag::err_abstract_type_in_decl) << Sel << T << TL.getSourceRange();"},{r,16661,"/// 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  if (!Invalid && !ExDeclType->isDependentType() && RequireNonAbstractType(Loc, ExDeclType, diag::err_abstract_type_in_decl, AbstractVariableType))"},{P,1326,"/// 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 (RequireNonAbstractType(PropertyIvarLoc, PropertyIvarType, diag::err_abstract_type_in_decl, AbstractSynthesizedIvarType)) {"}},
[h]={{o,16642,"/// 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))) {"},{m,13209,"/// 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 (RequireNonAbstractType(VDecl->getLocation(), VDecl->getType(), diag::err_abstract_type_in_decl, AbstractVariableType))"},{m,13643,"/// 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 (RequireNonAbstractType(VD->getLocation(), Ty, diag::err_abstract_type_in_decl, AbstractVariableType)) {"},{m,13776,"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->isInvalidDecl() && RequireNonAbstractType(Var->getLocation(), Type, diag::err_abstract_type_in_decl, AbstractVariableType))"},{m,13868,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    if (RequireNonAbstractType(Var->getLocation(), Type, diag::err_abstract_type_in_decl, AbstractVariableType)) {"},{m,15350,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // ...\n  if (!ResultType->isDependentType() && !ResultType->isVoidType() && !FD->isInvalidDecl() && BodyKind != FnBodyKind::Delete && (RequireCompleteType(FD->getLocation(), ResultType, diag::err_func_def_incomplete_result) || RequireNonAbstractType(FD->getLocation(), FD->getReturnType(), diag::err_abstract_type_in_decl, AbstractReturnType)))"},{m,18166,"/// 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  if (!InvalidDecl && RequireNonAbstractType(Loc, T, diag::err_abstract_type_in_decl, AbstractFieldType))"},{m,18876,"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      if (isa<ObjCContainerDecl>(EnclosingDecl) && RequireNonAbstractType(FD->getLocation(), FD->getType(), diag::err_abstract_type_in_decl, AbstractIvarType)) {"},{s,6098,"#include \"clang/AST/TypeLocNodes.def\"\n  // ...\n  CheckPolymorphic(PointerTypeLoc) CheckPolymorphic(ReferenceTypeLoc) CheckPolymorphic(MemberPointerTypeLoc) CheckPolymorphic(BlockPointerTypeLoc) CheckPolymorphic(AtomicTypeLoc)\n    // ...\n    // It matched; do some magic.\n    // FIXME: These should be at most warnings. See P0929R2, CWG1640, CWG1646.\n    if (Sel == Sema::AbstractArrayType) {\n    // ...\n    } else {\n      Info.S.Diag(Ctx->getLocation(), diag::err_abstract_type_in_decl) << Sel << T << TL.getSourceRange();"},{s,16661,"/// 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  if (!Invalid && !ExDeclType->isDependentType() && RequireNonAbstractType(Loc, ExDeclType, diag::err_abstract_type_in_decl, AbstractVariableType))"},{Q,1326,"/// 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 (RequireNonAbstractType(PropertyIvarLoc, PropertyIvarType, diag::err_abstract_type_in_decl, AbstractSynthesizedIvarType)) {"}},
[j]={
[j]={
["clang/test/CXX/class.derived/class.abstract/p3.cpp"]={"clang/test/CXX/class.derived/class.abstract/p3.cpp:19:3: error: variable type \'B\' (aka \'SecretlyAbstract<int>\') is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:20:3: error: variable type \'SecretlyAbstract<char>\' is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:38:8: error: parameter type \'A\' is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:40:8: error: parameter type \'B\' (aka \'SecretlyAbstract<int>\') is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:44:8: error: parameter type \'SecretlyAbstract<char>\' is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:50:3: error: return type \'A\' is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:52:3: error: return type \'B\' (aka \'SecretlyAbstract<int>\') is an abstract class"}
["clang/test/CXX/class.derived/class.abstract/p3.cpp"]={"clang/test/CXX/class.derived/class.abstract/p3.cpp:19:3: error: variable type \'B\' (aka \'SecretlyAbstract<int>\') is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:20:3: error: variable type \'SecretlyAbstract<char>\' is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:38:8: error: parameter type \'A\' is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:40:8: error: parameter type \'B\' (aka \'SecretlyAbstract<int>\') is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:44:8: error: parameter type \'SecretlyAbstract<char>\' is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:50:3: error: return type \'A\' is an abstract class","clang/test/CXX/class.derived/class.abstract/p3.cpp:52:3: error: return type \'B\' (aka \'SecretlyAbstract<int>\') is an abstract class"}
Line 190: Line 192:
[g]=k,
[g]=k,
[b]={Db,1268716967,Eb,Fb},
[b]={Db,1268716967,Eb,Fb},
[h]={{U,1568,"Sema::AccessResult Sema::CheckUnresolvedLookupAccess(UnresolvedLookupExpr *E, DeclAccessPair Found) {\n  // ...\n  Entity.setDiag(diag::err_access) << E->getSourceRange();"},{U,1587,"/// Perform access-control checking on a previously-unresolved member\n/// access which has now been resolved to a member.\nSema::AccessResult Sema::CheckUnresolvedMemberAccess(UnresolvedMemberExpr *E, DeclAccessPair Found) {\n  // ...\n  Entity.setDiag(diag::err_access) << E->getSourceRange();"},{U,1741,"/// Checks access to an overloaded operator new or delete.\nSema::AccessResult Sema::CheckAllocationAccess(SourceLocation OpLoc, SourceRange PlacementRange, CXXRecordDecl *NamingClass, DeclAccessPair Found, bool Diagnose) {\n  // ...\n  if (Diagnose)\n    Entity.setDiag(diag::err_access) << PlacementRange;"},{U,1790,"Sema::AccessResult Sema::CheckMemberOperatorAccess(SourceLocation OpLoc, Expr *ObjectExpr, const SourceRange &Range, DeclAccessPair Found) {\n  // ...\n  Entity.setDiag(diag::err_access) << ObjectExpr->getSourceRange() << Range;"},{U,1863,"Sema::AccessResult Sema::CheckAddressOfMemberAccess(Expr *OvlExpr, DeclAccessPair Found) {\n  // ...\n  Entity.setDiag(diag::err_access) << Ovl->getSourceRange();"},{U,1920,"/// Checks access to all the declarations in the given result set.\nvoid Sema::CheckLookupAccess(const LookupResult &R) {\n  // ...\n  for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {\n    if (I.getAccess() != AS_public) {\n      // ...\n      Entity.setDiag(diag::err_access);"}},
[h]={{W,1568,"Sema::AccessResult Sema::CheckUnresolvedLookupAccess(UnresolvedLookupExpr *E, DeclAccessPair Found) {\n  // ...\n  Entity.setDiag(diag::err_access) << E->getSourceRange();"},{W,1587,"/// Perform access-control checking on a previously-unresolved member\n/// access which has now been resolved to a member.\nSema::AccessResult Sema::CheckUnresolvedMemberAccess(UnresolvedMemberExpr *E, DeclAccessPair Found) {\n  // ...\n  Entity.setDiag(diag::err_access) << E->getSourceRange();"},{W,1741,"/// Checks access to an overloaded operator new or delete.\nSema::AccessResult Sema::CheckAllocationAccess(SourceLocation OpLoc, SourceRange PlacementRange, CXXRecordDecl *NamingClass, DeclAccessPair Found, bool Diagnose) {\n  // ...\n  if (Diagnose)\n    Entity.setDiag(diag::err_access) << PlacementRange;"},{W,1790,"Sema::AccessResult Sema::CheckMemberOperatorAccess(SourceLocation OpLoc, Expr *ObjectExpr, const SourceRange &Range, DeclAccessPair Found) {\n  // ...\n  Entity.setDiag(diag::err_access) << ObjectExpr->getSourceRange() << Range;"},{W,1863,"Sema::AccessResult Sema::CheckAddressOfMemberAccess(Expr *OvlExpr, DeclAccessPair Found) {\n  // ...\n  Entity.setDiag(diag::err_access) << Ovl->getSourceRange();"},{W,1920,"/// Checks access to all the declarations in the given result set.\nvoid Sema::CheckLookupAccess(const LookupResult &R) {\n  // ...\n  for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {\n    if (I.getAccess() != AS_public) {\n      // ...\n      Entity.setDiag(diag::err_access);"}},
[j]={
[j]={
["clang/test/SemaCXX/access-control-check.cpp"]={"clang/test/SemaCXX/access-control-check.cpp:14:21: error: \'iP\' is a private member of \'P\'","clang/test/SemaCXX/access-control-check.cpp:14:26: error: \'PPR\' is a private member of \'P\'"}
["clang/test/SemaCXX/access-control-check.cpp"]={"clang/test/SemaCXX/access-control-check.cpp:14:21: error: \'iP\' is a private member of \'P\'","clang/test/SemaCXX/access-control-check.cpp:14:26: error: \'PPR\' is a private member of \'P\'"}
Line 201: Line 203:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"80f00ff95d3b",1305054494,"Re-do R131114 without breaking code.\n\nI\'ve edited one diagnostic which would print \"copy constructor...","Re-do R131114 without breaking code.\n\nI\'ve edited one diagnostic which would print \"copy constructor\" for copy\nconstructors and \"constructor\" for any other constructor. If anyone is\nextremely enamored with this, it can be reinstated with a simple boolean\nflag rather than calling getSpecialMember, which is inappropriate.\n\nllvm-svn: 131143"},
[b]={"80f00ff95d3b",1305054494,"Re-do R131114 without breaking code.","Re-do R131114 without breaking code.\n\nI\'ve edited one diagnostic which would print \"copy constructor\" for copy\nconstructors and \"constructor\" for any other constructor. If anyone is\nextremely enamored with this, it can be reinstated with a simple boolean\nflag rather than calling getSpecialMember, which is inappropriate.\n\nllvm-svn: 131143"},
[h]={{U,1660,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n  // ...\n  case InitializedEntity::EK_Base:\n    PD = PDiag(diag::err_access_base_ctor);"}},
[h]={{W,1660,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n  // ...\n  case InitializedEntity::EK_Base:\n    PD = PDiag(diag::err_access_base_ctor);"}},
[j]={
[j]={
["clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p18.cpp"]={"clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p18.cpp:43:18: error: base class \'B\' has private constructor"}
["clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p18.cpp"]={"clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p18.cpp:43:18: error: base class \'B\' has private constructor"}
Line 214: Line 216:
[g]=k,
[g]=k,
[b]={Db,1268716967,Eb,Fb},
[b]={Db,1268716967,Eb,Fb},
[h]={{U,1655,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n  // ...\n  default:\n    PD = PDiag(IsCopyBindingRefToTemp ? diag::ext_rvalue_to_reference_access_ctor : diag::err_access_ctor);"}},
[h]={{W,1655,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n  // ...\n  default:\n    PD = PDiag(IsCopyBindingRefToTemp ? diag::ext_rvalue_to_reference_access_ctor : diag::err_access_ctor);"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.unary/expr.new/p17.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p17.cpp:12:7: error: calling a private constructor of class \'ctor\'"}
["clang/test/CXX/expr/expr.unary/expr.new/p17.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p17.cpp:12:7: error: calling a private constructor of class \'ctor\'"}
Line 225: Line 227:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"f026b600992d",1371089537,"In C++11, promote access declaration diagnostic from warning to error. There\ndoesn\'t seem to be any ...","In C++11, promote access declaration diagnostic from warning to error. There\ndoesn\'t seem to be any value in even adding a -W flag for this.\n\nllvm-svn: 183882"},
[b]={"f026b600992d",1371089537,"In C++11, promote access declaration diagnostic from warning to error. There","In C++11, promote access declaration diagnostic from warning to error. There\ndoesn\'t seem to be any value in even adding a -W flag for this.\n\nllvm-svn: 183882"},
[h]={{r,12068,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n  // ...\n  // Warn about access declarations.\n  if (UsingLoc.isInvalid()) {\n    Diag(Name.getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::err_access_decl : diag::warn_access_decl_deprecated) << FixItHint::CreateInsertion(SS.getRange().getBegin(), \"using \");"}},
[h]={{s,12068,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n  // ...\n  // Warn about access declarations.\n  if (UsingLoc.isInvalid()) {\n    Diag(Name.getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::err_access_decl : diag::warn_access_decl_deprecated) << FixItHint::CreateInsertion(SS.getRange().getBegin(), \"using \");"}},
[j]={
[j]={
["clang/test/CXX/class.access/class.access.dcl/p1.cpp"]={"clang/test/CXX/class.access/class.access.dcl/p1.cpp:29:15: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:36:15: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:43:15: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:50:15: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:71:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:77:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:84:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:91:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:98:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:142:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:149:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:156:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:163:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:170:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:216:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:223:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:230:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:237:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:244:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:300:14: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:307:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:314:16: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:321:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:329:15: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:341:8: error: ISO C++11 does not allow access declarations; use using declarations instead"}
["clang/test/CXX/class.access/class.access.dcl/p1.cpp"]={"clang/test/CXX/class.access/class.access.dcl/p1.cpp:29:15: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:36:15: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:43:15: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:50:15: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:71:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:77:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:84:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:91:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:98:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:142:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:149:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:156:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:163:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:170:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:216:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:223:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:230:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:237:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:244:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:300:14: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:307:11: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:314:16: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:321:8: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:329:15: error: ISO C++11 does not allow access declarations; use using declarations instead","clang/test/CXX/class.access/class.access.dcl/p1.cpp:341:8: error: ISO C++11 does not allow access declarations; use using declarations instead"}
Line 237: Line 239:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"fa7781384ebb",1296575411,"Implement access checking for the \"delete\" operator. Fixes PR9050,\nfrom Alex Miller!\n\nllvm-svn: 1246...","Implement access checking for the \"delete\" operator. Fixes PR9050,\nfrom Alex Miller!\n\nllvm-svn: 124663"},
[b]={"fa7781384ebb",1296575411,"Implement access checking for the \"delete\" operator. Fixes PR9050,","Implement access checking for the \"delete\" operator. Fixes PR9050,\nfrom Alex Miller!\n\nllvm-svn: 124663"},
[h]={{t,3775,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  // ...\n  if (!Ex.get()->isTypeDependent()) {\n    // ...\n    if (PointeeRD) {\n      if (CXXDestructorDecl *Dtor = LookupDestructor(PointeeRD)) {\n        CheckDestructorAccess(Ex.get()->getExprLoc(), Dtor, PDiag(diag::err_access_dtor) << PointeeElem);"}},
[h]={{u,3775,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  // ...\n  if (!Ex.get()->isTypeDependent()) {\n    // ...\n    if (PointeeRD) {\n      if (CXXDestructorDecl *Dtor = LookupDestructor(PointeeRD)) {\n        CheckDestructorAccess(Ex.get()->getExprLoc(), Dtor, PDiag(diag::err_access_dtor) << PointeeElem);"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.unary/expr.delete/p5.cpp"]={"clang/test/CXX/expr/expr.unary/expr.delete/p5.cpp:31:12: error: calling a private destructor of class \'T3_A\'"}
["clang/test/CXX/expr/expr.unary/expr.delete/p5.cpp"]={"clang/test/CXX/expr/expr.unary/expr.delete/p5.cpp:31:12: error: calling a private destructor of class \'T3_A\'"}
Line 250: Line 252:
[g]=k,
[g]=k,
[b]={Db,1268716967,Eb,Fb},
[b]={Db,1268716967,Eb,Fb},
[h]={{r,5847,"void Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location, CXXRecordDecl *ClassDecl) {\n  // ...\n  // Bases.\n  for (const auto &Base : ClassDecl->bases()) {\n    // ...\n    CheckDestructorAccess(Base.getBeginLoc(), Dtor, PDiag(diag::err_access_dtor_base) << Base.getType() << Base.getSourceRange(), Context.getTypeDeclType(ClassDecl));"}},
[h]={{s,5847,"void Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location, CXXRecordDecl *ClassDecl) {\n  // ...\n  // Bases.\n  for (const auto &Base : ClassDecl->bases()) {\n    // ...\n    CheckDestructorAccess(Base.getBeginLoc(), Dtor, PDiag(diag::err_access_dtor_base) << Base.getType() << Base.getSourceRange(), Context.getTypeDeclType(ClassDecl));"}},
[j]={
[j]={
["clang/test/SemaObjCXX/ivar-construct.mm"]={"clang/test/SemaObjCXX/ivar-construct.mm:10:12: error: base class \'Y\' has private destructor","clang/test/SemaObjCXX/ivar-construct.mm:10:12: error: base class \'Y\' has private destructor"}
["clang/test/SemaObjCXX/ivar-construct.mm"]={"clang/test/SemaObjCXX/ivar-construct.mm:10:12: error: base class \'Y\' has private destructor","clang/test/SemaObjCXX/ivar-construct.mm:10:12: error: base class \'Y\' has private destructor"}
Line 261: Line 263:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"442612c2853f",1278542113,"Do not use CXXZeroValueInitExpr for class types. Instead, use\nCXXConstructExpr/CXXTemporaryObjectExp...","Do not use CXXZeroValueInitExpr for class types. Instead, use\nCXXConstructExpr/CXXTemporaryObjectExpr/CXXNewExpr as\nappropriate. Fixes PR7556, and provides a slide codegen improvement\nwhen copy-initializing a POD class type from a value-initialized\ntemporary. Previously, we weren\'t eliding the copy.\n\nllvm-svn: 107827"},
[b]={"442612c2853f",1278542113,"Do not use CXXZeroValueInitExpr for class types. Instead, use","Do not use CXXZeroValueInitExpr for class types. Instead, use\nCXXConstructExpr/CXXTemporaryObjectExpr/CXXNewExpr as\nappropriate. Fixes PR7556, and provides a slide codegen improvement\nwhen copy-initializing a POD class type from a value-initialized\ntemporary. Previously, we weren\'t eliding the copy.\n\nllvm-svn: 107827"},
[h]={{t,1033,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  // ...\n  // If the class has a destructor, we must be able to call it.\n  if (!RD->hasIrrelevantDestructor()) {\n    if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {\n      // ...\n      CheckDestructorAccess(E->getExprLoc(), Destructor, PDiag(diag::err_access_dtor_exception) << Ty);"}},
[h]={{u,1033,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  // ...\n  // If the class has a destructor, we must be able to call it.\n  if (!RD->hasIrrelevantDestructor()) {\n    if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {\n      // ...\n      CheckDestructorAccess(E->getExprLoc(), Destructor, PDiag(diag::err_access_dtor_exception) << Ty);"}},
[j]={
[j]={
["clang/test/SemaCXX/defaulted-private-dtor.cpp"]={"clang/test/SemaCXX/defaulted-private-dtor.cpp:13:9: error: exception object of type \'BadDtor\' has private destructor"}
["clang/test/SemaCXX/defaulted-private-dtor.cpp"]={"clang/test/SemaCXX/defaulted-private-dtor.cpp:13:9: error: exception object of type \'BadDtor\' has private destructor"}
Line 274: Line 276:
[g]=k,
[g]=k,
[b]={Db,1268716967,Eb,Fb},
[b]={Db,1268716967,Eb,Fb},
[h]={{r,5797,"void Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location, CXXRecordDecl *ClassDecl) {\n  // ...\n  // Non-static data members.\n  for (auto *Field : ClassDecl->fields()) {\n    // ...\n    CheckDestructorAccess(Field->getLocation(), Dtor, PDiag(diag::err_access_dtor_field) << Field->getDeclName() << FieldType);"}},
[h]={{s,5797,"void Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location, CXXRecordDecl *ClassDecl) {\n  // ...\n  // Non-static data members.\n  for (auto *Field : ClassDecl->fields()) {\n    // ...\n    CheckDestructorAccess(Field->getLocation(), Dtor, PDiag(diag::err_access_dtor_field) << Field->getDeclName() << FieldType);"}},
[j]={
[j]={
["clang/test/SemaCXX/defaulted-private-dtor.cpp"]={"clang/test/SemaCXX/defaulted-private-dtor.cpp:28:11: error: field of type \'BadDtor\' has private destructor"}
["clang/test/SemaCXX/defaulted-private-dtor.cpp"]={"clang/test/SemaCXX/defaulted-private-dtor.cpp:28:11: error: field of type \'BadDtor\' has private destructor"}
Line 285: Line 287:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"527786ea3a6a",1274322262,"Various small fixes for construction/destruction of Objective-C++\ninstance variables:\n  - Use isReco...","Various small fixes for construction/destruction of Objective-C++\ninstance variables:\n  - Use isRecordType() rather than isa<RecordType>(), so that we see\n  through typedefs in ivar types.\n  - Mark the destructor as referenced\n  - Perform C++ access control on the destructor\n\nllvm-svn: 104206"},
[b]={"527786ea3a6a",1274322262,"Various small fixes for construction/destruction of Objective-C++","Various small fixes for construction/destruction of Objective-C++\ninstance variables:\n  - Use isRecordType() rather than isa<RecordType>(), so that we see\n  through typedefs in ivar types.\n  - Mark the destructor as referenced\n  - Perform C++ access control on the destructor\n\nllvm-svn: 104206"},
[h]={{r,18491,"/// SetIvarInitializers - This routine builds initialization ASTs for the\n/// Objective-C implementation whose ivars need be initialized.\nvoid Sema::SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation) {\n  // ...\n  if (ObjCInterfaceDecl *OID = ObjCImplementation->getClassInterface()) {\n    // ...\n    for (unsigned i = 0; i < ivars.size(); i++) {\n      // ...\n      // Be sure that the destructor is accessible and is marked as referenced.\n      if (const RecordType *RecordTy = Context.getBaseElementType(Field->getType())->getAs<RecordType>()) {\n        // ...\n        if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {\n          // ...\n          CheckDestructorAccess(Field->getLocation(), Destructor, PDiag(diag::err_access_dtor_ivar) << Context.getBaseElementType(Field->getType()));"}},
[h]={{s,18491,"/// SetIvarInitializers - This routine builds initialization ASTs for the\n/// Objective-C implementation whose ivars need be initialized.\nvoid Sema::SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation) {\n  // ...\n  if (ObjCInterfaceDecl *OID = ObjCImplementation->getClassInterface()) {\n    // ...\n    for (unsigned i = 0; i < ivars.size(); i++) {\n      // ...\n      // Be sure that the destructor is accessible and is marked as referenced.\n      if (const RecordType *RecordTy = Context.getBaseElementType(Field->getType())->getAs<RecordType>()) {\n        // ...\n        if (CXXDestructorDecl *Destructor = LookupDestructor(RD)) {\n          // ...\n          CheckDestructorAccess(Field->getLocation(), Destructor, PDiag(diag::err_access_dtor_ivar) << Context.getBaseElementType(Field->getType()));"}},
[j]={
[j]={
["clang/test/SemaObjCXX/ivar-construct.mm"]={"clang/test/SemaObjCXX/ivar-construct.mm:16:5: error: instance variable of type \'Y\' has private destructor"}
["clang/test/SemaObjCXX/ivar-construct.mm"]={"clang/test/SemaObjCXX/ivar-construct.mm:16:5: error: instance variable of type \'Y\' has private destructor"}
Line 297: Line 299:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"8e36d53e34be",1270600906,"Check access for the implicit calls to destructors that occur when we\nhave a temporary object in C++...","Check access for the implicit calls to destructors that occur when we\nhave a temporary object in C++.\n\nAlso fix a tag mismatch that Doug noticed.\n\nllvm-svn: 100593"},
[b]={"8e36d53e34be",1270600906,"Check access for the implicit calls to destructors that occur when we","Check access for the implicit calls to destructors that occur when we\nhave a temporary object in C++.\n\nAlso fix a tag mismatch that Doug noticed.\n\nllvm-svn: 100593"},
[h]={{t,7334,"ExprResult Sema::MaybeBindToTemporary(Expr *E) {\n  // ...\n  if (Destructor) {\n    // ...\n    CheckDestructorAccess(E->getExprLoc(), Destructor, PDiag(diag::err_access_dtor_temp) << E->getType());"},{t,7505,"/// Process the expression contained within a decltype. For such expressions,\n/// certain semantic checks on temporaries are delayed until this point, and\n/// are omitted for the \'topmost\' call in the decltype expression. If the\n/// topmost call bound a temporary, strip that temporary off the expression.\nExprResult Sema::ActOnDecltypeExpression(Expr *E) {\n  // ...\n  // Now all relevant types are complete, check the destructors are accessible\n  // and non-deleted, and annotate them on the temporaries.\n  for (unsigned I = 0, N = ExprEvalContexts.back().DelayedDecltypeBinds.size(); I != N; ++I) {\n    // ...\n    CheckDestructorAccess(Bind->getExprLoc(), Destructor, PDiag(diag::err_access_dtor_temp) << Bind->getType());"},{D,1932,"/// Check if the type of a class element has an accessible destructor, and marks\n/// it referenced. Returns true if we shouldn\'t form a reference to the\n/// destructor.\n///\n/// Aggregate initialization requires a class element\'s destructor be\n/// accessible per 11.6.1 [dcl.init.aggr]:\n///\n/// The destructor for each element of class type is potentially invoked\n/// (15.4 [class.dtor]) from the context where the aggregate initialization\n/// occurs.\nstatic bool checkDestructorReference(QualType ElementType, SourceLocation Loc, Sema &SemaRef) {\n  // ...\n  SemaRef.CheckDestructorAccess(Loc, Destructor, SemaRef.PDiag(diag::err_access_dtor_temp) << ElementType);"},{D,8929,"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_UserConversion: {\n      // ...\n      if (shouldBindAsTemporary(Entity))\n      // ...\n      else if (CreatedObject && shouldDestroyEntity(Entity)) {\n        // ...\n        if (const RecordType *Record = T->getAs<RecordType>()) {\n          // ...\n          S.CheckDestructorAccess(CurInit.get()->getBeginLoc(), Destructor, S.PDiag(diag::err_access_dtor_temp) << T);"}},
[h]={{u,7334,"ExprResult Sema::MaybeBindToTemporary(Expr *E) {\n  // ...\n  if (Destructor) {\n    // ...\n    CheckDestructorAccess(E->getExprLoc(), Destructor, PDiag(diag::err_access_dtor_temp) << E->getType());"},{u,7505,"/// Process the expression contained within a decltype. For such expressions,\n/// certain semantic checks on temporaries are delayed until this point, and\n/// are omitted for the \'topmost\' call in the decltype expression. If the\n/// topmost call bound a temporary, strip that temporary off the expression.\nExprResult Sema::ActOnDecltypeExpression(Expr *E) {\n  // ...\n  // Now all relevant types are complete, check the destructors are accessible\n  // and non-deleted, and annotate them on the temporaries.\n  for (unsigned I = 0, N = ExprEvalContexts.back().DelayedDecltypeBinds.size(); I != N; ++I) {\n    // ...\n    CheckDestructorAccess(Bind->getExprLoc(), Destructor, PDiag(diag::err_access_dtor_temp) << Bind->getType());"},{E,1932,"/// Check if the type of a class element has an accessible destructor, and marks\n/// it referenced. Returns true if we shouldn\'t form a reference to the\n/// destructor.\n///\n/// Aggregate initialization requires a class element\'s destructor be\n/// accessible per 11.6.1 [dcl.init.aggr]:\n///\n/// The destructor for each element of class type is potentially invoked\n/// (15.4 [class.dtor]) from the context where the aggregate initialization\n/// occurs.\nstatic bool checkDestructorReference(QualType ElementType, SourceLocation Loc, Sema &SemaRef) {\n  // ...\n  SemaRef.CheckDestructorAccess(Loc, Destructor, SemaRef.PDiag(diag::err_access_dtor_temp) << ElementType);"},{E,8929,"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_UserConversion: {\n      // ...\n      if (shouldBindAsTemporary(Entity))\n      // ...\n      else if (CreatedObject && shouldDestroyEntity(Entity)) {\n        // ...\n        if (const RecordType *Record = T->getAs<RecordType>()) {\n          // ...\n          S.CheckDestructorAccess(CurInit.get()->getBeginLoc(), Destructor, S.PDiag(diag::err_access_dtor_temp) << T);"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.unary/expr.new/p17.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p17.cpp:13:7: error: temporary of type \'dtor\' has private destructor","clang/test/CXX/expr/expr.unary/expr.new/p17.cpp:14:7: error: temporary of type \'dtor\' has private destructor","clang/test/CXX/expr/expr.unary/expr.new/p17.cpp:15:7: error: temporary of type \'dtor\' has private destructor"}
["clang/test/CXX/expr/expr.unary/expr.new/p17.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p17.cpp:13:7: error: temporary of type \'dtor\' has private destructor","clang/test/CXX/expr/expr.unary/expr.new/p17.cpp:14:7: error: temporary of type \'dtor\' has private destructor","clang/test/CXX/expr/expr.unary/expr.new/p17.cpp:15:7: error: temporary of type \'dtor\' has private destructor"}
Line 310: Line 312:
[g]=k,
[g]=k,
[b]={Db,1268716967,Eb,Fb},
[b]={Db,1268716967,Eb,Fb},
[h]={{r,15869,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n  // ...\n  // If this is an array, we\'ll require the destructor during initialization, so\n  // we can skip over this. We still want to emit exit-time destructor warnings\n  // though.\n  if (!VD->getType()->isArrayType()) {\n    // ...\n    CheckDestructorAccess(VD->getLocation(), Destructor, PDiag(diag::err_access_dtor_var) << VD->getDeclName() << VD->getType());"}},
[h]={{s,15869,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n  // ...\n  // If this is an array, we\'ll require the destructor during initialization, so\n  // we can skip over this. We still want to emit exit-time destructor warnings\n  // though.\n  if (!VD->getType()->isArrayType()) {\n    // ...\n    CheckDestructorAccess(VD->getLocation(), Destructor, PDiag(diag::err_access_dtor_var) << VD->getDeclName() << VD->getType());"}},
[j]={
[j]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.simple/p5-cxx0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.simple/p5-cxx0x.cpp:46:11: error: variable of type \'decltype(pd() , pd())\' (aka \'PD\') has private destructor","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.simple/p5-cxx0x.cpp:61:18: error: variable of type \'decltype(pd_ref)\' (aka \'PD\') has private destructor"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.simple/p5-cxx0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.simple/p5-cxx0x.cpp:46:11: error: variable of type \'decltype(pd() , pd())\' (aka \'PD\') has private destructor","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.simple/p5-cxx0x.cpp:61:18: error: variable of type \'decltype(pd_ref)\' (aka \'PD\') has private destructor"}
Line 322: Line 324:
[g]=k,
[g]=k,
[b]={Db,1268716967,Eb,Fb},
[b]={Db,1268716967,Eb,Fb},
[h]={{r,5885,"void Sema::MarkVirtualBaseDestructorsReferenced(SourceLocation Location, CXXRecordDecl *ClassDecl, llvm::SmallPtrSetImpl<const RecordType *> *DirectVirtualBases) {\n  // Virtual bases.\n  for (const auto &VBase : ClassDecl->vbases()) {\n    // ...\n    if (CheckDestructorAccess(ClassDecl->getLocation(), Dtor, PDiag(diag::err_access_dtor_vbase) << Context.getTypeDeclType(ClassDecl) << VBase.getType(), Context.getTypeDeclType(ClassDecl)) == AR_accessible) {"},{r,5891,"void Sema::MarkVirtualBaseDestructorsReferenced(SourceLocation Location, CXXRecordDecl *ClassDecl, llvm::SmallPtrSetImpl<const RecordType *> *DirectVirtualBases) {\n  // Virtual bases.\n  for (const auto &VBase : ClassDecl->vbases()) {\n    // ...\n    if (CheckDestructorAccess(ClassDecl->getLocation(), Dtor, PDiag(diag::err_access_dtor_vbase) << Context.getTypeDeclType(ClassDecl) << VBase.getType(), Context.getTypeDeclType(ClassDecl)) == AR_accessible) {\n      CheckDerivedToBaseConversion(Context.getTypeDeclType(ClassDecl), VBase.getType(), diag::err_access_dtor_vbase, 0, ClassDecl->getLocation(), SourceRange(), DeclarationName(), nullptr);"}},
[h]={{s,5885,"void Sema::MarkVirtualBaseDestructorsReferenced(SourceLocation Location, CXXRecordDecl *ClassDecl, llvm::SmallPtrSetImpl<const RecordType *> *DirectVirtualBases) {\n  // Virtual bases.\n  for (const auto &VBase : ClassDecl->vbases()) {\n    // ...\n    if (CheckDestructorAccess(ClassDecl->getLocation(), Dtor, PDiag(diag::err_access_dtor_vbase) << Context.getTypeDeclType(ClassDecl) << VBase.getType(), Context.getTypeDeclType(ClassDecl)) == AR_accessible) {"},{s,5891,"void Sema::MarkVirtualBaseDestructorsReferenced(SourceLocation Location, CXXRecordDecl *ClassDecl, llvm::SmallPtrSetImpl<const RecordType *> *DirectVirtualBases) {\n  // Virtual bases.\n  for (const auto &VBase : ClassDecl->vbases()) {\n    // ...\n    if (CheckDestructorAccess(ClassDecl->getLocation(), Dtor, PDiag(diag::err_access_dtor_vbase) << Context.getTypeDeclType(ClassDecl) << VBase.getType(), Context.getTypeDeclType(ClassDecl)) == AR_accessible) {\n      CheckDerivedToBaseConversion(Context.getTypeDeclType(ClassDecl), VBase.getType(), diag::err_access_dtor_vbase, 0, ClassDecl->getLocation(), SourceRange(), DeclarationName(), nullptr);"}},
[j]={
[j]={
["clang/test/SemaCXX/ms-implicit-complete-dtor.cpp"]={"clang/test/SemaCXX/ms-implicit-complete-dtor.cpp:46:8: error: inherited virtual base class \'Base<2>\' has private destructor"}
["clang/test/SemaCXX/ms-implicit-complete-dtor.cpp"]={"clang/test/SemaCXX/ms-implicit-complete-dtor.cpp:46:8: error: inherited virtual base class \'Base<2>\' has private destructor"}
Line 333: Line 335:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"80f00ff95d3b",1305054494,"Re-do R131114 without breaking code.\n\nI\'ve edited one diagnostic which would print \"copy constructor...","Re-do R131114 without breaking code.\n\nI\'ve edited one diagnostic which would print \"copy constructor\" for copy\nconstructors and \"constructor\" for any other constructor. If anyone is\nextremely enamored with this, it can be reinstated with a simple boolean\nflag rather than calling getSpecialMember, which is inappropriate.\n\nllvm-svn: 131143"},
[b]={"80f00ff95d3b",1305054494,"Re-do R131114 without breaking code.","Re-do R131114 without breaking code.\n\nI\'ve edited one diagnostic which would print \"copy constructor\" for copy\nconstructors and \"constructor\" for any other constructor. If anyone is\nextremely enamored with this, it can be reinstated with a simple boolean\nflag rather than calling getSpecialMember, which is inappropriate.\n\nllvm-svn: 131143"},
[h]={{U,1668,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n  // ...\n  case InitializedEntity::EK_Member:\n  case InitializedEntity::EK_ParenAggInitMember: {\n    // ...\n    PD = PDiag(diag::err_access_field_ctor);"}},
[h]={{W,1668,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n  // ...\n  case InitializedEntity::EK_Member:\n  case InitializedEntity::EK_ParenAggInitMember: {\n    // ...\n    PD = PDiag(diag::err_access_field_ctor);"}},
[j]={
[j]={
["clang/test/CXX/dcl.decl/dcl.init/p14-0x.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/p14-0x.cpp:36:15: error: field of type \'Private\' has private constructor"}
["clang/test/CXX/dcl.decl/dcl.init/p14-0x.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/p14-0x.cpp:36:15: error: field of type \'Private\' has private constructor"}
Line 345: Line 347:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"a0a96895501e",1344568535,"Check access to friend declarations.  There\'s a number of different\nthings going on here that were p...","Check access to friend declarations.  There\'s a number of different\nthings going on here that were problematic:\n  - We were missing the actual access check, or rather, it was suppressed\n    on account of being a redeclaration lookup.\n  - The access check would naturally happen during delay, which isn\'t\n    appropriate in this case.\n  - We weren\'t actually emitting dependent diagnostics associated with\n    class templates, which was unfortunate.\n  - Access was being propagated incorrectly for friend method declarations\n    that couldn\'t be matched at parse-time.\n\nllvm-svn: 161652"},
[b]={"a0a96895501e",1344568535,"Check access to friend declarations.  There\'s a number of different","Check access to friend declarations.  There\'s a number of different\nthings going on here that were problematic:\n  - We were missing the actual access check, or rather, it was suppressed\n    on account of being a redeclaration lookup.\n  - The access check would naturally happen during delay, which isn\'t\n    appropriate in this case.\n  - We weren\'t actually emitting dependent diagnostics associated with\n    class templates, which was unfortunate.\n  - Access was being propagated incorrectly for friend method declarations\n    that couldn\'t be matched at parse-time.\n\nllvm-svn: 161652"},
[h]={{U,1836,"/// Checks access to the target of a friend declaration.\nSema::AccessResult Sema::CheckFriendAccess(NamedDecl *target) {\n  // ...\n  entity.setDiag(diag::err_access_friend_function) << (method->getQualifier() ? method->getQualifierLoc().getSourceRange() : method->getNameInfo().getSourceRange());"}},
[h]={{W,1836,"/// Checks access to the target of a friend declaration.\nSema::AccessResult Sema::CheckFriendAccess(NamedDecl *target) {\n  // ...\n  entity.setDiag(diag::err_access_friend_function) << (method->getQualifier() ? method->getQualifierLoc().getSourceRange() : method->getNameInfo().getSourceRange());"}},
[j]={
[j]={
["clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp"]={"clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp:16:20: error: friend function \'f\' is a private member of \'test0::X\'","clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp:27:20: error: friend function \'f\' is a private member of \'test1::X\'","clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp:57:20: error: friend function \'f\' is a private member of \'test3::X\'","clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp:81:23: error: friend function \'f\' is a private member of \'test5::X<int>\'","clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp:97:23: error: friend function \'f\' is a private member of \'test6::X<int>\'"}
["clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp"]={"clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp:16:20: error: friend function \'f\' is a private member of \'test0::X\'","clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp:27:20: error: friend function \'f\' is a private member of \'test1::X\'","clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp:57:20: error: friend function \'f\' is a private member of \'test3::X\'","clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp:81:23: error: friend function \'f\' is a private member of \'test5::X<int>\'","clang/test/CXX/class.access/class.friend/p9-cxx0x.cpp:97:23: error: friend function \'f\' is a private member of \'test6::X<int>\'"}
Line 357: Line 359:
[f]=a,
[f]=a,
[g]="Lambda Issue",
[g]="Lambda Issue",
[b]={"19666fb1aa7d",1329325046,"Introduce a new initialization entity for lambda captures, and\nspecialize location information and d...","Introduce a new initialization entity for lambda captures, and\nspecialize location information and diagnostics for this entity.\n\nllvm-svn: 150588"},
[b]={"19666fb1aa7d",1329325046,"Introduce a new initialization entity for lambda captures, and","Introduce a new initialization entity for lambda captures, and\nspecialize location information and diagnostics for this entity.\n\nllvm-svn: 150588"},
[h]={{U,1675,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n  // ...\n  case InitializedEntity::EK_LambdaCapture: {\n    // ...\n    PD = PDiag(diag::err_access_lambda_capture);"}},
[h]={{W,1675,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n  // ...\n  case InitializedEntity::EK_LambdaCapture: {\n    // ...\n    PD = PDiag(diag::err_access_lambda_capture);"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp:17:10: error: capture of variable \'nc\' as type \'NonCopyable\' calls private copy constructor","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp:18:10: error: capture of variable \'ncr\' as type \'NonCopyable\' calls private copy constructor"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp:17:10: error: capture of variable \'nc\' as type \'NonCopyable\' calls private copy constructor","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp:18:10: error: capture of variable \'ncr\' as type \'NonCopyable\' calls private copy constructor"}
Line 368: Line 370:
[e]="interface types cannot specify \'(?:private|protected)\' access",
[e]="interface types cannot specify \'(?:private|protected)\' access",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"db632ac004ae",1348558359,"Fix for r163013 regression and further __interface enhancement.\nPatch by Andy Gibbs!\n\nllvm-svn: 1645...","Fix for r163013 regression and further __interface enhancement.\nPatch by Andy Gibbs!\n\nllvm-svn: 164590"},
[b]={"db632ac004ae",1348558359,"Fix for r163013 regression and further __interface enhancement.","Fix for r163013 regression and further __interface enhancement.\nPatch by Andy Gibbs!\n\nllvm-svn: 164590"},
[h]={{I,3403,"Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(AccessSpecifier &AS, ParsedAttributes &AccessAttrs, DeclSpec::TST TagType, Decl *TagDecl) {\n  // ...\n  case tok::kw_public:\n  case tok::kw_protected: {\n    // ...\n    // The Microsoft extension __interface does not permit non-public\n    // access specifiers.\n    if (TagType == DeclSpec::TST_interface && AS != AS_public) {\n      Diag(ASLoc, diag::err_access_specifier_interface) << (AS == AS_protected);"}},
[h]={{J,3403,"Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(AccessSpecifier &AS, ParsedAttributes &AccessAttrs, DeclSpec::TST TagType, Decl *TagDecl) {\n  // ...\n  case tok::kw_public:\n  case tok::kw_protected: {\n    // ...\n    // The Microsoft extension __interface does not permit non-public\n    // access specifiers.\n    if (TagType == DeclSpec::TST_interface && AS != AS_public) {\n      Diag(ASLoc, diag::err_access_specifier_interface) << (AS == AS_protected);"}},
[j]={
[j]={
["clang/test/SemaCXX/ms-interface.cpp"]={"clang/test/SemaCXX/ms-interface.cpp:18:1: error: interface types cannot specify \'protected\' access","clang/test/SemaCXX/ms-interface.cpp:21:1: error: interface types cannot specify \'private\' access","clang/test/SemaCXX/ms-interface.cpp:30:1: error: interface types cannot specify \'private\' access","clang/test/SemaCXX/ms-interface.cpp:33:1: error: interface types cannot specify \'protected\' access"}
["clang/test/SemaCXX/ms-interface.cpp"]={"clang/test/SemaCXX/ms-interface.cpp:18:1: error: interface types cannot specify \'protected\' access","clang/test/SemaCXX/ms-interface.cpp:21:1: error: interface types cannot specify \'private\' access","clang/test/SemaCXX/ms-interface.cpp:30:1: error: interface types cannot specify \'private\' access","clang/test/SemaCXX/ms-interface.cpp:33:1: error: interface types cannot specify \'protected\' access"}
Line 381: Line 383:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"b257e4fff8a9",1247096032,"Implement the simple form of overload resolution used when taking the\naddress of an overloaded funct...","Implement the simple form of overload resolution used when taking the\naddress of an overloaded function (which may involve both functions\nand function templates). \n\nllvm-svn: 75069"},
[b]={"b257e4fff8a9",1247096032,"Implement the simple form of overload resolution used when taking the","Implement the simple form of overload resolution used when taking the\naddress of an overloaded function (which may involve both functions\nand function templates). \n\nllvm-svn: 75069"},
[h]={{R,12563,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  // ...\n  void EliminateAllExceptMostSpecializedTemplate() {\n    // ...\n    UnresolvedSetIterator Result = S.getMostSpecialized(MatchesCopy.begin(), MatchesCopy.end(), FailedCandidates, SourceExpr->getBeginLoc(), S.PDiag(), S.PDiag(diag::err_addr_ovl_ambiguous) << Matches[0].second->getDeclName(), S.PDiag(diag::note_ovl_candidate) << (unsigned)oc_function << (unsigned)ocs_described_template, Complain, TargetFunctionType);"},{R,12651,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  // ...\n  void ComplainMultipleMatchesFound() const {\n    // ...\n    S.Diag(OvlExpr->getBeginLoc(), diag::err_addr_ovl_ambiguous) << OvlExpr->getName() << OvlExpr->getSourceRange();"},{R,12905,"/// Given an expression that refers to an overloaded function, try to\n/// resolve that overloaded function expression down to a single function.\n///\n/// This routine can only resolve template-ids that refer to a single function\n/// template, where that template-id refers to a single template whose template\n/// arguments are either provided by the template-id or have defaults,\n/// as described in C++0x [temp.arg.explicit]p3.\n///\n/// If no template-ids are found, no diagnostics are emitted and NULL is\n/// returned.\nFunctionDecl *Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl, bool Complain, DeclAccessPair *FoundResult, TemplateSpecCandidateSet *FailedTSC) {\n  // ...\n  for (UnresolvedSetIterator I = ovl->decls_begin(), E = ovl->decls_end(); I != E; ++I) {\n    // ...\n    // Multiple matches; we can\'t resolve to a single declaration.\n    if (Matched) {\n      if (Complain) {\n        Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous) << ovl->getName();"}},
[h]={{S,12563,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  // ...\n  void EliminateAllExceptMostSpecializedTemplate() {\n    // ...\n    UnresolvedSetIterator Result = S.getMostSpecialized(MatchesCopy.begin(), MatchesCopy.end(), FailedCandidates, SourceExpr->getBeginLoc(), S.PDiag(), S.PDiag(diag::err_addr_ovl_ambiguous) << Matches[0].second->getDeclName(), S.PDiag(diag::note_ovl_candidate) << (unsigned)oc_function << (unsigned)ocs_described_template, Complain, TargetFunctionType);"},{S,12651,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  // ...\n  void ComplainMultipleMatchesFound() const {\n    // ...\n    S.Diag(OvlExpr->getBeginLoc(), diag::err_addr_ovl_ambiguous) << OvlExpr->getName() << OvlExpr->getSourceRange();"},{S,12905,"/// Given an expression that refers to an overloaded function, try to\n/// resolve that overloaded function expression down to a single function.\n///\n/// This routine can only resolve template-ids that refer to a single function\n/// template, where that template-id refers to a single template whose template\n/// arguments are either provided by the template-id or have defaults,\n/// as described in C++0x [temp.arg.explicit]p3.\n///\n/// If no template-ids are found, no diagnostics are emitted and NULL is\n/// returned.\nFunctionDecl *Sema::ResolveSingleFunctionTemplateSpecialization(OverloadExpr *ovl, bool Complain, DeclAccessPair *FoundResult, TemplateSpecCandidateSet *FailedTSC) {\n  // ...\n  for (UnresolvedSetIterator I = ovl->decls_begin(), E = ovl->decls_end(); I != E; ++I) {\n    // ...\n    // Multiple matches; we can\'t resolve to a single declaration.\n    if (Matched) {\n      if (Complain) {\n        Diag(ovl->getExprLoc(), diag::err_addr_ovl_ambiguous) << ovl->getName();"}},
[j]={
[j]={
["clang/test/CXX/over/over.over/p4.cpp"]={"clang/test/CXX/over/over.over/p4.cpp:18:21: error: address of overloaded function \'f0\' is ambiguous"}
["clang/test/CXX/over/over.over/p4.cpp"]={"clang/test/CXX/over/over.over/p4.cpp:18:21: error: address of overloaded function \'f0\' is ambiguous"}
Line 393: Line 395:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"24d189484b44",1282690359,"When trying to resolve the address of an overloaded expression,\nonly form pointers-to-member if the ...","When trying to resolve the address of an overloaded expression,\nonly form pointers-to-member if the expression has the appropriate\nform.  This avoids assertions later on on invalid code, but also\nallows us to properly resolve mixed-staticity overloads.\n\nllvm-svn: 111987"},
[b]={"24d189484b44",1282690359,"When trying to resolve the address of an overloaded expression,","When trying to resolve the address of an overloaded expression,\nonly form pointers-to-member if the expression has the appropriate\nform.  This avoids assertions later on on invalid code, but also\nallows us to properly resolve mixed-staticity overloads.\n\nllvm-svn: 111987"},
[h]={{R,12630,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  // ...\n  void ComplainIsInvalidFormOfPointerToMemberFunction() const {\n    // ...\n    S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier) << TargetType << OvlExpr->getSourceRange();"}},
[h]={{S,12630,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  // ...\n  void ComplainIsInvalidFormOfPointerToMemberFunction() const {\n    // ...\n    S.Diag(OvlExpr->getNameLoc(), diag::err_addr_ovl_no_qualifier) << TargetType << OvlExpr->getSourceRange();"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.unary/expr.unary.op/p4.cpp"]={"clang/test/CXX/expr/expr.unary/expr.unary.op/p4.cpp:10:12: error: cannot form member pointer of type \'void (test0::A::*)(int)\' without \'&\' and class name"}
["clang/test/CXX/expr/expr.unary/expr.unary.op/p4.cpp"]={"clang/test/CXX/expr/expr.unary/expr.unary.op/p4.cpp:10:12: error: cannot form member pointer of type \'void (test0::A::*)(int)\' without \'&\' and class name"}
Line 405: Line 407:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"064fdb2fe844",1271286681,"Always diagnose and complain about problems in\nResolveAddressOfOverloadedFunction when asked to comp...","Always diagnose and complain about problems in\nResolveAddressOfOverloadedFunction when asked to complain. Previously,\nwe had some weird handshake where ResolveAddressOfOverloadedFunction\nexpected its caller to handle some of the diagnostics but not others,\nand yet there was no way for the caller to know which case we were\nin. Eliminate this madness, fixing <rdar://problem/7765884>.\n\nllvm-svn: 101312"},
[b]={"064fdb2fe844",1271286681,"Always diagnose and complain about problems in","Always diagnose and complain about problems in\nResolveAddressOfOverloadedFunction when asked to complain. Previously,\nwe had some weird handshake where ResolveAddressOfOverloadedFunction\nexpected its caller to handle some of the diagnostics but not others,\nand yet there was no way for the caller to know which case we were\nin. Eliminate this madness, fixing <rdar://problem/7765884>.\n\nllvm-svn: 101312"},
[h]={{R,12599,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  // ...\n  void ComplainNoMatchesFound() const {\n    // ...\n    S.Diag(OvlExpr->getBeginLoc(), diag::err_addr_ovl_no_viable) << OvlExpr->getName() << TargetFunctionType << OvlExpr->getSourceRange();"}},
[h]={{S,12599,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  // ...\n  void ComplainNoMatchesFound() const {\n    // ...\n    S.Diag(OvlExpr->getBeginLoc(), diag::err_addr_ovl_no_viable) << OvlExpr->getName() << TargetFunctionType << OvlExpr->getSourceRange();"}},
[j]={
[j]={
["clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.type/p5-0x.cpp"]={"clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.type/p5-0x.cpp:37:69: error: address of overloaded function \'has_non_trailing_pack_and_more\' does not match required type \'void (float, double, int)\'"}
["clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.type/p5-0x.cpp"]={"clang/test/CXX/temp/temp.fct.spec/temp.deduct/temp.deduct.type/p5-0x.cpp:37:69: error: address of overloaded function \'has_non_trailing_pack_and_more\' does not match required type \'void (float, double, int)\'"}
Line 417: Line 419:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"064fdb2fe844",1271286681,"Always diagnose and complain about problems in\nResolveAddressOfOverloadedFunction when asked to comp...","Always diagnose and complain about problems in\nResolveAddressOfOverloadedFunction when asked to complain. Previously,\nwe had some weird handshake where ResolveAddressOfOverloadedFunction\nexpected its caller to handle some of the diagnostics but not others,\nand yet there was no way for the caller to know which case we were\nin. Eliminate this madness, fixing <rdar://problem/7765884>.\n\nllvm-svn: 101312"},
[b]={"064fdb2fe844",1271286681,"Always diagnose and complain about problems in","Always diagnose and complain about problems in\nResolveAddressOfOverloadedFunction when asked to complain. Previously,\nwe had some weird handshake where ResolveAddressOfOverloadedFunction\nexpected its caller to handle some of the diagnostics but not others,\nand yet there was no way for the caller to know which case we were\nin. Eliminate this madness, fixing <rdar://problem/7765884>.\n\nllvm-svn: 101312"},
[h]={{R,12645,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  // ...\n  void ComplainOfInvalidConversion() const { S.Diag(OvlExpr->getBeginLoc(), diag::err_addr_ovl_not_func_ptrref) << OvlExpr->getName() << TargetType; }"}}
[h]={{S,12645,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  // ...\n  void ComplainOfInvalidConversion() const { S.Diag(OvlExpr->getBeginLoc(), diag::err_addr_ovl_not_func_ptrref) << OvlExpr->getName() << TargetType; }"}}
},
},
["err_address_of_function_with_pass_object_size_params"]={
["err_address_of_function_with_pass_object_size_params"]={
Line 426: Line 428:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang.\n\n`pass_object_size` is our way of enabling `__builtin...","Add the `pass_object_size` attribute to clang.\n\n`pass_object_size` is our way of enabling `__builtin_object_size` to\nproduce high quality results without requiring inlining to happen\neverywhere.\n\nA link to the design doc for this attribute is available at the\nDifferential review link below.\n\nDifferential Revision: http://reviews.llvm.org/D13263\n\nllvm-svn: 254554"},
[b]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang.","Add the `pass_object_size` attribute to clang.\n\n`pass_object_size` is our way of enabling `__builtin_object_size` to\nproduce high quality results without requiring inlining to happen\neverywhere.\n\nA link to the design doc for this attribute is available at the\nDifferential review link below.\n\nDifferential Revision: http://reviews.llvm.org/D13263\n\nllvm-svn: 254554"},
[h]={{R,10609,"/// Returns true if we can take the address of the function.\n///\n/// \\param Complain - If true, we\'ll emit a diagnostic\n/// \\param InOverloadResolution - For the purposes of emitting a diagnostic, are\n///  we in overload resolution?\n/// \\param Loc - The location of the statement we\'re complaining about. Ignored\n///  if we\'re not complaining, or if we\'re in overload resolution.\nstatic bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, bool Complain, bool InOverloadResolution, SourceLocation Loc) {\n  // ...\n  if (Complain) {\n    // ...\n    if (InOverloadResolution)\n    // ...\n    else\n      S.Diag(Loc, diag::err_address_of_function_with_pass_object_size_params) << FD << ParamNo;"}},
[h]={{S,10609,"/// Returns true if we can take the address of the function.\n///\n/// \\param Complain - If true, we\'ll emit a diagnostic\n/// \\param InOverloadResolution - For the purposes of emitting a diagnostic, are\n///  we in overload resolution?\n/// \\param Loc - The location of the statement we\'re complaining about. Ignored\n///  if we\'re not complaining, or if we\'re in overload resolution.\nstatic bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, bool Complain, bool InOverloadResolution, SourceLocation Loc) {\n  // ...\n  if (Complain) {\n    // ...\n    if (InOverloadResolution)\n    // ...\n    else\n      S.Diag(Loc, diag::err_address_of_function_with_pass_object_size_params) << FD << ParamNo;"}},
[j]={
[j]={
["clang/test/Sema/pass-object-size.c"]={"clang/test/Sema/pass-object-size.c:44:23: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:45:25: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:53:10: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:54:11: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:56:13: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:57:14: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:60:5: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute"}
["clang/test/Sema/pass-object-size.c"]={"clang/test/Sema/pass-object-size.c:44:23: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:45:25: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:53:10: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:54:11: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:56:13: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:57:14: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute","clang/test/Sema/pass-object-size.c:60:5: error: cannot take address of function \'NotOverloaded\' because parameter 1 has pass_object_size attribute"}
Line 437: Line 439:
[e]="use of address\\-of\\-label extension outside of a function body",
[e]="use of address\\-of\\-label extension outside of a function body",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"9ba479bd2c2c",1298063799,"fix rdar://9024687, a crash on invalid that we used to silently ignore.\n\nllvm-svn: 125962","fix rdar://9024687, a crash on invalid that we used to silently ignore.\n\nllvm-svn: 125962"},
[b]={"9ba479bd2c2c",1298063799,"fix rdar://9024687, a crash on invalid that we used to silently ignore.","fix rdar://9024687, a crash on invalid that we used to silently ignore.\n\nllvm-svn: 125962"},
[h]={{Cb,1460,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::ampamp: { // unary-expression: \'&&\' identifier\n    // ...\n    if (getCurScope()->getFnParent() == nullptr)\n      return ExprError(Diag(Tok, diag::err_address_of_label_outside_fn));"}},
[h]={{tb,1460,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::ampamp: { // unary-expression: \'&&\' identifier\n    // ...\n    if (getCurScope()->getFnParent() == nullptr)\n      return ExprError(Diag(Tok, diag::err_address_of_label_outside_fn));"}},
[j]={
[j]={
["clang/test/Sema/scope-check.c"]={"clang/test/Sema/scope-check.c:235:26: error: use of address-of-label extension outside of a function body"}
["clang/test/Sema/scope-check.c"]={"clang/test/Sema/scope-check.c:235:26: error: use of address-of-label extension outside of a function body"}
Line 450: Line 452:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"12e3a8af81da",1544029342,"[OpenCL] Diagnose conflicting address spaces in templates.\n\nAdded new diagnostic when templates are ...","[OpenCL] Diagnose conflicting address spaces in templates.\n\nAdded new diagnostic when templates are instantiated with\ndifferent address space from the one provided in its definition.\n\nThis also prevents deducing generic address space in pointer\ntype of templates to allow giving them concrete address space\nduring instantiation.\n\nDifferential Revision: https://reviews.llvm.org/D55127\n\nllvm-svn: 348382"},
[b]={"12e3a8af81da",1544029342,"[OpenCL] Diagnose conflicting address spaces in templates.","[OpenCL] Diagnose conflicting address spaces in templates.\n\nAdded new diagnostic when templates are instantiated with\ndifferent address space from the one provided in its definition.\n\nThis also prevents deducing generic address space in pointer\ntype of templates to allow giving them concrete address space\nduring instantiation.\n\nDifferential Revision: https://reviews.llvm.org/D55127\n\nllvm-svn: 348382"},
[j]={
[j]={
["clang/test/SemaOpenCLCXX/address-space-templates.clcpp"]={"clang/test/SemaOpenCLCXX/address-space-templates.clcpp:22:13: error: conflicting address space qualifiers are provided between types \'__private T\' and \'__global int\'"}
["clang/test/SemaOpenCLCXX/address-space-templates.clcpp"]={"clang/test/SemaOpenCLCXX/address-space-templates.clcpp:22:13: error: conflicting address space qualifiers are provided between types \'__private T\' and \'__global int\'"}
Line 461: Line 463:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"39d1a0973db9",1302896780,"Forbid the use of C++ new/delete to allocate/free objects within an\naddress space. I could see that ...","Forbid the use of C++ new/delete to allocate/free objects within an\naddress space. I could see that this functionality would be useful,\nbut not in its current form (where the address space is ignored):\nrather, we\'d want to encode the address space into the parameter list\npassed to operator new/operator delete somehow, which would require a\nbunch more semantic analysis.\n\nllvm-svn: 129593"},
[b]={"39d1a0973db9",1302896780,"Forbid the use of C++ new/delete to allocate/free objects within an","Forbid the use of C++ new/delete to allocate/free objects within an\naddress space. I could see that this functionality would be useful,\nbut not in its current form (where the address space is ignored):\nrather, we\'d want to encode the address space into the parameter list\npassed to operator new/operator delete somehow, which would require a\nbunch more semantic analysis.\n\nllvm-svn: 129593"},
[h]={{t,3677,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  // ...\n  if (!Ex.get()->isTypeDependent()) {\n    // ...\n    if (Pointee.getAddressSpace() != LangAS::Default && !getLangOpts().OpenCLCPlusPlus)\n      return Diag(Ex.get()->getBeginLoc(), diag::err_address_space_qualified_delete) << Pointee.getUnqualifiedType() << Pointee.getQualifiers().getAddressSpaceAttributePrintValue();"}},
[h]={{u,3677,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  // ...\n  if (!Ex.get()->isTypeDependent()) {\n    // ...\n    if (Pointee.getAddressSpace() != LangAS::Default && !getLangOpts().OpenCLCPlusPlus)\n      return Diag(Ex.get()->getBeginLoc(), diag::err_address_space_qualified_delete) << Pointee.getUnqualifiedType() << Pointee.getQualifiers().getAddressSpaceAttributePrintValue();"}},
[j]={
[j]={
["clang/test/SemaCXX/address-space-newdelete.cpp"]={"clang/test/SemaCXX/address-space-newdelete.cpp:22:10: error: \'delete\' cannot delete objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:23:13: error: \'delete\' cannot delete objects of type \'int\' in address space \'1\'"}
["clang/test/SemaCXX/address-space-newdelete.cpp"]={"clang/test/SemaCXX/address-space-newdelete.cpp:22:10: error: \'delete\' cannot delete objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:23:13: error: \'delete\' cannot delete objects of type \'int\' in address space \'1\'"}
Line 473: Line 475:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"39d1a0973db9",1302896780,"Forbid the use of C++ new/delete to allocate/free objects within an\naddress space. I could see that ...","Forbid the use of C++ new/delete to allocate/free objects within an\naddress space. I could see that this functionality would be useful,\nbut not in its current form (where the address space is ignored):\nrather, we\'d want to encode the address space into the parameter list\npassed to operator new/operator delete somehow, which would require a\nbunch more semantic analysis.\n\nllvm-svn: 129593"},
[b]={"39d1a0973db9",1302896780,"Forbid the use of C++ new/delete to allocate/free objects within an","Forbid the use of C++ new/delete to allocate/free objects within an\naddress space. I could see that this functionality would be useful,\nbut not in its current form (where the address space is ignored):\nrather, we\'d want to encode the address space into the parameter list\npassed to operator new/operator delete somehow, which would require a\nbunch more semantic analysis.\n\nllvm-svn: 129593"},
[h]={{t,2475,"/// 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  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //  abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n  // ...\n  else if (AllocType->isReferenceType())\n  // ...\n  else if (!AllocType->isDependentType() && RequireCompleteSizedType(Loc, AllocType, diag::err_new_incomplete_or_sizeless_type, R))\n  // ...\n  else if (RequireNonAbstractType(Loc, AllocType, diag::err_allocation_of_abstract_type))\n  // ...\n  else if (AllocType->isVariablyModifiedType())\n  // ...\n  else if (AllocType.getAddressSpace() != LangAS::Default && !getLangOpts().OpenCLCPlusPlus)\n    return Diag(Loc, diag::err_address_space_qualified_new) << AllocType.getUnqualifiedType() << AllocType.getQualifiers().getAddressSpaceAttributePrintValue();"}},
[h]={{u,2475,"/// 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  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //  abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n  // ...\n  else if (AllocType->isReferenceType())\n  // ...\n  else if (!AllocType->isDependentType() && RequireCompleteSizedType(Loc, AllocType, diag::err_new_incomplete_or_sizeless_type, R))\n  // ...\n  else if (RequireNonAbstractType(Loc, AllocType, diag::err_allocation_of_abstract_type))\n  // ...\n  else if (AllocType->isVariablyModifiedType())\n  // ...\n  else if (AllocType.getAddressSpace() != LangAS::Default && !getLangOpts().OpenCLCPlusPlus)\n    return Diag(Loc, diag::err_address_space_qualified_new) << AllocType.getUnqualifiedType() << AllocType.getQualifiers().getAddressSpaceAttributePrintValue();"}},
[j]={
[j]={
["clang/test/SemaCXX/address-space-newdelete.cpp"]={"clang/test/SemaCXX/address-space-newdelete.cpp:9:13: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:10:47: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:11:13: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:12:47: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:15:17: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:16:51: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:17:17: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:18:51: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'"}
["clang/test/SemaCXX/address-space-newdelete.cpp"]={"clang/test/SemaCXX/address-space-newdelete.cpp:9:13: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:10:47: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:11:13: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:12:47: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:15:17: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:16:51: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:17:17: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'","clang/test/SemaCXX/address-space-newdelete.cpp:18:51: error: \'new\' cannot allocate objects of type \'int\' in address space \'1\'"}
Line 485: Line 487:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension.\n\nGCC supports the conditional operator on V...","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"},
[b]={"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"},
[h]={{R,10587,"/// Returns true if we can take the address of the function.\n///\n/// \\param Complain - If true, we\'ll emit a diagnostic\n/// \\param InOverloadResolution - For the purposes of emitting a diagnostic, are\n///  we in overload resolution?\n/// \\param Loc - The location of the statement we\'re complaining about. Ignored\n///  if we\'re not complaining, or if we\'re in overload resolution.\nstatic bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, bool Complain, bool InOverloadResolution, SourceLocation Loc) {\n  // ...\n  if (FD->getTrailingRequiresClause()) {\n    // ...\n    if (!Satisfaction.IsSatisfied) {\n      if (Complain) {\n        if (InOverloadResolution) {\n        // ...\n        } else\n          S.Diag(Loc, diag::err_addrof_function_constraints_not_satisfied) << FD;"}}
[h]={{S,10587,"/// Returns true if we can take the address of the function.\n///\n/// \\param Complain - If true, we\'ll emit a diagnostic\n/// \\param InOverloadResolution - For the purposes of emitting a diagnostic, are\n///  we in overload resolution?\n/// \\param Loc - The location of the statement we\'re complaining about. Ignored\n///  if we\'re not complaining, or if we\'re in overload resolution.\nstatic bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, bool Complain, bool InOverloadResolution, SourceLocation Loc) {\n  // ...\n  if (FD->getTrailingRequiresClause()) {\n    // ...\n    if (!Satisfaction.IsSatisfied) {\n      if (Complain) {\n        if (InOverloadResolution) {\n        // ...\n        } else\n          S.Diag(Loc, diag::err_addrof_function_constraints_not_satisfied) << FD;"}}
},
},
["err_addrof_function_disabled_by_enable_if_attr"]={
["err_addrof_function_disabled_by_enable_if_attr"]={
Line 494: Line 496:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang.\n\n`pass_object_size` is our way of enabling `__builtin...","Add the `pass_object_size` attribute to clang.\n\n`pass_object_size` is our way of enabling `__builtin_object_size` to\nproduce high quality results without requiring inlining to happen\neverywhere.\n\nA link to the design doc for this attribute is available at the\nDifferential review link below.\n\nDifferential Revision: http://reviews.llvm.org/D13263\n\nllvm-svn: 254554"},
[b]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang.","Add the `pass_object_size` attribute to clang.\n\n`pass_object_size` is our way of enabling `__builtin_object_size` to\nproduce high quality results without requiring inlining to happen\neverywhere.\n\nA link to the design doc for this attribute is available at the\nDifferential review link below.\n\nDifferential Revision: http://reviews.llvm.org/D13263\n\nllvm-svn: 254554"},
[h]={{R,10563,"/// Returns true if we can take the address of the function.\n///\n/// \\param Complain - If true, we\'ll emit a diagnostic\n/// \\param InOverloadResolution - For the purposes of emitting a diagnostic, are\n///  we in overload resolution?\n/// \\param Loc - The location of the statement we\'re complaining about. Ignored\n///  if we\'re not complaining, or if we\'re in overload resolution.\nstatic bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, bool Complain, bool InOverloadResolution, SourceLocation Loc) {\n  if (!isFunctionAlwaysEnabled(S.Context, FD)) {\n    if (Complain) {\n      if (InOverloadResolution)\n      // ...\n      else\n        S.Diag(Loc, diag::err_addrof_function_disabled_by_enable_if_attr) << FD;"}},
[h]={{S,10563,"/// Returns true if we can take the address of the function.\n///\n/// \\param Complain - If true, we\'ll emit a diagnostic\n/// \\param InOverloadResolution - For the purposes of emitting a diagnostic, are\n///  we in overload resolution?\n/// \\param Loc - The location of the statement we\'re complaining about. Ignored\n///  if we\'re not complaining, or if we\'re in overload resolution.\nstatic bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, bool Complain, bool InOverloadResolution, SourceLocation Loc) {\n  if (!isFunctionAlwaysEnabled(S.Context, FD)) {\n    if (Complain) {\n      if (InOverloadResolution)\n      // ...\n      else\n        S.Diag(Loc, diag::err_addrof_function_disabled_by_enable_if_attr) << FD;"}},
[j]={
[j]={
["clang/test/SemaCXX/unaddressable-functions.cpp"]={"clang/test/SemaCXX/unaddressable-functions.cpp:58:8: error: cannot take address of function \'foo\' because it has one or more non-tautological enable_if conditions","clang/test/SemaCXX/unaddressable-functions.cpp:63:15: error: cannot take address of function \'foo\' because it has one or more non-tautological enable_if conditions"}
["clang/test/SemaCXX/unaddressable-functions.cpp"]={"clang/test/SemaCXX/unaddressable-functions.cpp:58:8: error: cannot take address of function \'foo\' because it has one or more non-tautological enable_if conditions","clang/test/SemaCXX/unaddressable-functions.cpp:63:15: error: cannot take address of function \'foo\' because it has one or more non-tautological enable_if conditions"}
Line 506: Line 508:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={Tb,1615397021,Ub,Vb},
[b]={dc,1615397021,cc,fc},
[h]={{l,2044,"static void handleTLSModelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (S.Context.getTargetInfo().getTriple().isOSAIX() && Model != \"global-dynamic\" && Model != \"local-exec\") {\n    S.Diag(LiteralLoc, diag::err_aix_attr_unsupported_tls_model) << Model;"}}
[h]={{l,2044,"static void handleTLSModelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (S.Context.getTargetInfo().getTriple().isOSAIX() && Model != \"global-dynamic\" && Model != \"local-exec\") {\n    S.Diag(LiteralLoc, diag::err_aix_attr_unsupported_tls_model) << Model;"}}
},
},
Line 515: Line 517:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.\n\nThis is sup...","[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.\n\nThis is support for the user-facing options to create importable header units\nfrom headers in the user or system search paths (or to be given an absolute path).\n\nThis means that an incomplete header path will be passed by the driver and the\nlookup carried out using the search paths present when the front end is run.\n\nTo support this, we introduce file fypes for c++-{user,system,header-unit}-header.\nThese terms are the same as the ones used by GCC, to minimise the differences for\ntooling (and users).\n\nThe preprocessor checks for headers before issuing a warning for\n\"#pragma once\" in a header build.  We ensure that the importable header units\nare recognised as headers in order to avoid such warnings.\n\nDifferential Revision: https://reviews.llvm.org/D121096"},
[b]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.","[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.\n\nThis is support for the user-facing options to create importable header units\nfrom headers in the user or system search paths (or to be given an absolute path).\n\nThis means that an incomplete header path will be passed by the driver and the\nlookup carried out using the search paths present when the front end is run.\n\nTo support this, we introduce file fypes for c++-{user,system,header-unit}-header.\nThese terms are the same as the ones used by GCC, to minimise the differences for\ntooling (and users).\n\nThe preprocessor checks for headers before issuing a warning for\n\"#pragma once\" in a header build.  We ensure that the importable header units\nare recognised as headers in order to avoid such warnings.\n\nDifferential Revision: https://reviews.llvm.org/D121096"},
[h]={{O,1892,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_ftlsmodel_EQ)) {\n    if (T.isOSAIX()) {\n      // ...\n      if (Name != \"global-dynamic\" && Name != \"local-exec\")\n        Diags.Report(diag::err_aix_unsupported_tls_model) << Name;"}},
[h]={{P,1892,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_ftlsmodel_EQ)) {\n    if (T.isOSAIX()) {\n      // ...\n      if (Name != \"global-dynamic\" && Name != \"local-exec\")\n        Diags.Report(diag::err_aix_unsupported_tls_model) << Name;"}},
[j]={
[j]={
["clang/test/Sema/aix-attr-tls_model.c"]={"clang/test/Sema/aix-attr-tls_model.c:9:46: error: TLS model \'local-dynamic\' is not yet supported on AIX","clang/test/Sema/aix-attr-tls_model.c:10:46: error: TLS model \'initial-exec\' is not yet supported on AIX"}
["clang/test/Sema/aix-attr-tls_model.c"]={"clang/test/Sema/aix-attr-tls_model.c:9:46: error: TLS model \'local-dynamic\' is not yet supported on AIX","clang/test/Sema/aix-attr-tls_model.c:10:46: error: TLS model \'initial-exec\' is not yet supported on AIX"}
Line 527: Line 529:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"d53ffa0a70d8",1382477943,"Treat aliases as definitions.\n\nThis fixes pr17639.\n\nBefore this patch clang would consider\n\nvoid foo...","Treat aliases as definitions.\n\nThis fixes pr17639.\n\nBefore this patch clang would consider\n\nvoid foo(void) __attribute((alias(\"__foo\")));\n\na declaration. It now correctly handles it as a definition.\n\nInitial patch by Alp Toker. I added support for variables.\n\nllvm-svn: 193200"},
[b]={"d53ffa0a70d8",1382477943,"Treat aliases as definitions.","Treat aliases as definitions.\n\nThis fixes pr17639.\n\nBefore this patch clang would consider\n\nvoid foo(void) __attribute((alias(\"__foo\")));\n\na declaration. It now correctly handles it as a definition.\n\nInitial patch by Alp Toker. I added support for variables.\n\nllvm-svn: 193200"},
[h]={{n,3041,"/// 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;"}},
[h]={{m,3041,"/// 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;"}},
[j]={
[j]={
["clang/test/Sema/alias-redefinition.c"]={"clang/test/Sema/alias-redefinition.c:32:12: error: alias definition of \'var4\' after tentative definition"}
["clang/test/Sema/alias-redefinition.c"]={"clang/test/Sema/alias-redefinition.c:32:12: error: alias definition of \'var4\' after tentative definition"}
Line 538: Line 540:
[e]="name defined in alias declaration must be an identifier",
[e]="name defined in alias declaration must be an identifier",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"dda56e4b4a9c",1302877477,"Support for C++11 (non-template) alias declarations.\n\nllvm-svn: 129567","Support for C++11 (non-template) alias declarations.\n\nllvm-svn: 129567"},
[b]={"dda56e4b4a9c",1302877477,"Support for C++11 (non-template) alias declarations.","Support for C++11 (non-template) alias declarations.\n\nllvm-svn: 129567"},
[h]={{I,905,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // ...\n  // Name must be an identifier.\n  if (D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n    Diag(D.Name.StartLocation, diag::err_alias_declaration_not_identifier);"},{I,910,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // ...\n  // Name must be an identifier.\n  if (D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n  // ...\n  } else if (D.TypenameLoc.isValid())\n    Diag(D.TypenameLoc, diag::err_alias_declaration_not_identifier) << FixItHint::CreateRemoval(SourceRange(D.TypenameLoc, D.SS.isNotEmpty() ? D.SS.getEndLoc() : D.TypenameLoc));"},{I,915,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // ...\n  // Name must be an identifier.\n  if (D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n  // ...\n  } else if (D.TypenameLoc.isValid())\n  // ...\n  else if (D.SS.isNotEmpty())\n    Diag(D.SS.getBeginLoc(), diag::err_alias_declaration_not_identifier) << FixItHint::CreateRemoval(D.SS.getRange());"}},
[h]={{J,905,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // ...\n  // Name must be an identifier.\n  if (D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n    Diag(D.Name.StartLocation, diag::err_alias_declaration_not_identifier);"},{J,910,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // ...\n  // Name must be an identifier.\n  if (D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n  // ...\n  } else if (D.TypenameLoc.isValid())\n    Diag(D.TypenameLoc, diag::err_alias_declaration_not_identifier) << FixItHint::CreateRemoval(SourceRange(D.TypenameLoc, D.SS.isNotEmpty() ? D.SS.getEndLoc() : D.TypenameLoc));"},{J,915,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // ...\n  // Name must be an identifier.\n  if (D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n  // ...\n  } else if (D.TypenameLoc.isValid())\n  // ...\n  else if (D.SS.isNotEmpty())\n    Diag(D.SS.getBeginLoc(), diag::err_alias_declaration_not_identifier) << FixItHint::CreateRemoval(D.SS.getRange());"}},
[j]={
[j]={
["clang/test/CXX/temp/temp.decls/p3.cpp"]={"clang/test/CXX/temp/temp.decls/p3.cpp:7:7: error: name defined in alias declaration must be an identifier"}
["clang/test/CXX/temp/temp.decls/p3.cpp"]={"clang/test/CXX/temp/temp.decls/p3.cpp:7:7: error: name defined in alias declaration must be an identifier"}
Line 550: Line 552:
[e]="alias declaration cannot be a pack expansion",
[e]="alias declaration cannot be a pack expansion",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"22a250cd5d8e",1482120533,"[c++1z] P0195R2: Support pack-expansion of using-declarations.\n\nThis change introduces UsingPackDecl...","[c++1z] P0195R2: Support pack-expansion of using-declarations.\n\nThis change introduces UsingPackDecl as a marker for the set of UsingDecls\nproduced by pack expansion of a single (unresolved) using declaration. This is\nnot strictly necessary (we just need to be able to map from the original using\ndeclaration to its expansions somehow), but it\'s useful to maintain the\ninvariant that each declaration reference instantiates to refer to one\ndeclaration.\n\nllvm-svn: 290080"},
[b]={"22a250cd5d8e",1482120533,"[c++1z] P0195R2: Support pack-expansion of using-declarations.","[c++1z] P0195R2: Support pack-expansion of using-declarations.\n\nThis change introduces UsingPackDecl as a marker for the set of UsingDecls\nproduced by pack expansion of a single (unresolved) using declaration. This is\nnot strictly necessary (we just need to be able to map from the original using\ndeclaration to its expansions somehow), but it\'s useful to maintain the\ninvariant that each declaration reference instantiates to refer to one\ndeclaration.\n\nllvm-svn: 290080"},
[h]={{I,918,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // ...\n  if (D.EllipsisLoc.isValid())\n    Diag(D.EllipsisLoc, diag::err_alias_declaration_pack_expansion) << FixItHint::CreateRemoval(SourceRange(D.EllipsisLoc));"}}
[h]={{J,918,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // ...\n  if (D.EllipsisLoc.isValid())\n    Diag(D.EllipsisLoc, diag::err_alias_declaration_pack_expansion) << FixItHint::CreateRemoval(SourceRange(D.EllipsisLoc));"}}
},
},
["err_alias_declaration_specialization"]={
["err_alias_declaration_specialization"]={
Line 559: Line 561:
[e]="(?:partial specialization|explicit specialization|explicit instantiation) of alias templates is not permitted",
[e]="(?:partial specialization|explicit specialization|explicit instantiation) of alias templates is not permitted",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates.\n\nllvm-svn: 130953","Implement support for C++0x alias templates.\n\nllvm-svn: 130953"},
[b]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates.","Implement support for C++0x alias templates.\n\nllvm-svn: 130953"},
[h]={{I,897,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // ...\n  if (SpecKind != -1) {\n    // ...\n    Diag(Range.getBegin(), diag::err_alias_declaration_specialization) << SpecKind << Range;"}},
[h]={{J,897,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n  // ...\n  if (SpecKind != -1) {\n    // ...\n    Diag(Range.getBegin(), diag::err_alias_declaration_specialization) << SpecKind << Range;"}},
[j]={
[j]={
["clang/test/CXX/temp/temp.decls/p3.cpp"]={"clang/test/CXX/temp/temp.decls/p3.cpp:4:29: error: partial specialization of alias templates is not permitted","clang/test/CXX/temp/temp.decls/p3.cpp:5:1: error: explicit specialization of alias templates is not permitted","clang/test/CXX/temp/temp.decls/p3.cpp:6:1: error: explicit instantiation of alias templates is not permitted"}
["clang/test/CXX/temp/temp.decls/p3.cpp"]={"clang/test/CXX/temp/temp.decls/p3.cpp:4:29: error: partial specialization of alias templates is not permitted","clang/test/CXX/temp/temp.decls/p3.cpp:5:1: error: explicit specialization of alias templates is not permitted","clang/test/CXX/temp/temp.decls/p3.cpp:6:1: error: explicit instantiation of alias templates is not permitted"}
Line 572: Line 574:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"2dc814664385",1421658028,"Sema: Variable definitions cannot be __attribute__((alias))\n\nThings that are OK:\n  extern int var1 _...","Sema: Variable definitions cannot be __attribute__((alias))\n\nThings that are OK:\n  extern int var1 __attribute((alias(\"v1\")));\n  static int var2 __attribute((alias(\"v2\")));\n\nThings that are not OK:\n  int var3 __attribute((alias(\"v3\")));\n  extern int var4 __attribute((alias(\"v4\"))) = 4;\n\nWe choose to accpet:\n  struct S { static int var5 __attribute((alias(\"v5\"))); };\n\n  This code causes assertion failues in GCC 4.8 and ICC 13.0.1, we have\n  no reason to reject it.\n\nThis partially fixes PR22217.\n\nllvm-svn: 226436"},
[b]={"2dc814664385",1421658028,"Sema: Variable definitions cannot be __attribute__((alias))","Sema: Variable definitions cannot be __attribute__((alias))\n\nThings that are OK:\n  extern int var1 __attribute((alias(\"v1\")));\n  static int var2 __attribute((alias(\"v2\")));\n\nThings that are not OK:\n  int var3 __attribute((alias(\"v3\")));\n  extern int var4 __attribute((alias(\"v4\"))) = 4;\n\nWe choose to accpet:\n  struct S { static int var5 __attribute((alias(\"v5\"))); };\n\n  This code causes assertion failues in GCC 4.8 and ICC 13.0.1, we have\n  no reason to reject it.\n\nThis partially fixes PR22217.\n\nllvm-svn: 226436"},
[h]={{n,6968,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // ...\n  if (auto *VD = dyn_cast<VarDecl>(&ND)) {\n    if (VD->hasInit()) {\n      if (const auto *Attr = VD->getAttr<AliasAttr>()) {\n        // ...\n        S.Diag(Attr->getLocation(), diag::err_alias_is_definition) << VD << 0;"},{n,15265,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // ...\n  // Check for defining attributes before the check for redefinition.\n  if (const auto *Attr = FD->getAttr<AliasAttr>()) {\n    Diag(Attr->getLocation(), diag::err_alias_is_definition) << FD << 0;"},{n,15270,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // ...\n  if (const auto *Attr = FD->getAttr<IFuncAttr>()) {\n    Diag(Attr->getLocation(), diag::err_alias_is_definition) << FD << 1;"},{l,1980,"static void handleIFuncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (FD->isThisDeclarationADefinition()) {\n    S.Diag(AL.getLoc(), diag::err_alias_is_definition) << FD << 1;"},{l,2003,"static void handleAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Aliases should be on declarations, not definitions.\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (FD->isThisDeclarationADefinition()) {\n      S.Diag(AL.getLoc(), diag::err_alias_is_definition) << FD << 0;"},{l,2009,"static void handleAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Aliases should be on declarations, not definitions.\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  // ...\n  } else {\n    // ...\n    if (VD->isThisDeclarationADefinition() && VD->isExternallyVisible()) {\n      S.Diag(AL.getLoc(), diag::err_alias_is_definition) << VD << 0;"},{l,7662,"static void handleWebAssemblyExportNameAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (FD->isThisDeclarationADefinition()) {\n    S.Diag(D->getLocation(), diag::err_alias_is_definition) << FD << 0;"}},
[h]={{m,6968,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // ...\n  if (auto *VD = dyn_cast<VarDecl>(&ND)) {\n    if (VD->hasInit()) {\n      if (const auto *Attr = VD->getAttr<AliasAttr>()) {\n        // ...\n        S.Diag(Attr->getLocation(), diag::err_alias_is_definition) << VD << 0;"},{m,15265,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // ...\n  // Check for defining attributes before the check for redefinition.\n  if (const auto *Attr = FD->getAttr<AliasAttr>()) {\n    Diag(Attr->getLocation(), diag::err_alias_is_definition) << FD << 0;"},{m,15270,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // ...\n  if (const auto *Attr = FD->getAttr<IFuncAttr>()) {\n    Diag(Attr->getLocation(), diag::err_alias_is_definition) << FD << 1;"},{l,1980,"static void handleIFuncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (FD->isThisDeclarationADefinition()) {\n    S.Diag(AL.getLoc(), diag::err_alias_is_definition) << FD << 1;"},{l,2003,"static void handleAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Aliases should be on declarations, not definitions.\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (FD->isThisDeclarationADefinition()) {\n      S.Diag(AL.getLoc(), diag::err_alias_is_definition) << FD << 0;"},{l,2009,"static void handleAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Aliases should be on declarations, not definitions.\n  if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n  // ...\n  } else {\n    // ...\n    if (VD->isThisDeclarationADefinition() && VD->isExternallyVisible()) {\n      S.Diag(AL.getLoc(), diag::err_alias_is_definition) << VD << 0;"},{l,7662,"static void handleWebAssemblyExportNameAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (FD->isThisDeclarationADefinition()) {\n    S.Diag(D->getLocation(), diag::err_alias_is_definition) << FD << 0;"}},
[j]={
[j]={
["clang/test/Sema/alias-redefinition.c"]={"clang/test/Sema/alias-redefinition.c:23:19: error: definition \'fun5\' cannot also be an alias","clang/test/Sema/alias-redefinition.c:25:23: error: definition \'var1\' cannot also be an alias","clang/test/Sema/alias-redefinition.c:26:30: error: definition \'var2\' cannot also be an alias"}
["clang/test/Sema/alias-redefinition.c"]={"clang/test/Sema/alias-redefinition.c:23:19: error: definition \'fun5\' cannot also be an alias","clang/test/Sema/alias-redefinition.c:25:23: error: definition \'var1\' cannot also be an alias","clang/test/Sema/alias-redefinition.c:26:30: error: definition \'var2\' cannot also be an alias"}
Line 584: Line 586:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"0017c5fa92ad",1291735403,"Fix PR8720 by printing an error message with a substring that the gcc testsuite searches for.\n\nllvm-...","Fix PR8720 by printing an error message with a substring that the gcc testsuite searches for.\n\nllvm-svn: 121137"},
[b]={"0017c5fa92ad",1291735403,"Fix PR8720 by printing an error message with a substring that the gcc testsuite searches for.","Fix PR8720 by printing an error message with a substring that the gcc testsuite searches for.\n\nllvm-svn: 121137"},
[h]={{l,1993,"static void handleAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (S.Context.getTargetInfo().getTriple().isOSDarwin()) {\n    S.Diag(AL.getLoc(), diag::err_alias_not_supported_on_darwin);"}},
[h]={{l,1993,"static void handleAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (S.Context.getTargetInfo().getTriple().isOSDarwin()) {\n    S.Diag(AL.getLoc(), diag::err_alias_not_supported_on_darwin);"}},
[j]={
[j]={
Line 596: Line 598:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"a8f0254bc1a4",1453584490,"[CUDA] Reject the alias attribute in CUDA device code.\n\nSummary: CUDA (well, strictly speaking, NVPT...","[CUDA] Reject the alias attribute in CUDA device code.\n\nSummary: CUDA (well, strictly speaking, NVPTX) doesn\'t support aliases.\n\nReviewers: echristo\n\nSubscribers: cfe-commits, jhen, tra\n\nDifferential Revision: http://reviews.llvm.org/D16502\n\nllvm-svn: 258641"},
[b]={"a8f0254bc1a4",1453584490,"[CUDA] Reject the alias attribute in CUDA device code.","[CUDA] Reject the alias attribute in CUDA device code.\n\nSummary: CUDA (well, strictly speaking, NVPTX) doesn\'t support aliases.\n\nReviewers: echristo\n\nSubscribers: cfe-commits, jhen, tra\n\nDifferential Revision: http://reviews.llvm.org/D16502\n\nllvm-svn: 258641"},
[h]={{l,1997,"static void handleAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (S.Context.getTargetInfo().getTriple().isNVPTX()) {\n    S.Diag(AL.getLoc(), diag::err_alias_not_supported_on_nvptx);"}},
[h]={{l,1997,"static void handleAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (S.Context.getTargetInfo().getTriple().isNVPTX()) {\n    S.Diag(AL.getLoc(), diag::err_alias_not_supported_on_nvptx);"}},
[j]={
[j]={
Line 608: Line 610:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates.\n\nllvm-svn: 130953","Implement support for C++0x alias templates.\n\nllvm-svn: 130953"},
[b]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates.","Implement support for C++0x alias templates.\n\nllvm-svn: 130953"},
[h]={{r,13299,"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 (TemplateParamLists.size() != 1) {\n      Diag(UsingLoc, diag::err_alias_template_extra_headers) << SourceRange(TemplateParamLists[1]->getTemplateLoc(), TemplateParamLists[TemplateParamLists.size() - 1]->getRAngleLoc());"}},
[h]={{s,13299,"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 (TemplateParamLists.size() != 1) {\n      Diag(UsingLoc, diag::err_alias_template_extra_headers) << SourceRange(TemplateParamLists[1]->getTemplateLoc(), TemplateParamLists[TemplateParamLists.size() - 1]->getRAngleLoc());"}},
[j]={
[j]={
["clang/test/SemaCXX/alias-template.cpp"]={"clang/test/SemaCXX/alias-template.cpp:139:45: error: extraneous template parameter list in alias template declaration"}
["clang/test/SemaCXX/alias-template.cpp"]={"clang/test/SemaCXX/alias-template.cpp:139:45: error: extraneous template parameter list in alias template declaration"}
Line 620: Line 622:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"0fad0d772433",1382449866,"This patch causes clang to reject alias attributes that point to undefined\nnames. For example, with ...","This patch causes clang to reject alias attributes that point to undefined\nnames. For example, with this patch we now reject\n\nvoid f1(void) __attribute__((alias(\"g1\")));\n\nThis patch is implemented in CodeGen. It is quiet a bit simpler and more\ncompatible with gcc than implementing it in Sema. The downside is that the\nerrors only fire during -emit-llvm.\n\nllvm-svn: 193161"},
[b]={"0fad0d772433",1382449866,"This patch causes clang to reject alias attributes that point to undefined","This patch causes clang to reject alias attributes that point to undefined\nnames. For example, with this patch we now reject\n\nvoid f1(void) __attribute__((alias(\"g1\")));\n\nThis patch is implemented in CodeGen. It is quiet a bit simpler and more\ncompatible with gcc than implementing it in Sema. The downside is that the\nerrors only fire during -emit-llvm.\n\nllvm-svn: 193161"},
[h]={{"clang/lib/CodeGen/CodeGenModule.cpp",578,"static bool checkAliasedGlobal(DiagnosticsEngine &Diags, SourceLocation Location, bool IsIFunc, const llvm::GlobalValue *Alias, const llvm::GlobalValue *&GV, const llvm::MapVector<GlobalDecl, StringRef> &MangledDeclNames, SourceRange AliasRange) {\n  // ...\n  if (GV->isDeclaration()) {\n    Diags.Report(Location, diag::err_alias_to_undefined) << IsIFunc << IsIFunc;"},{"clang/lib/CodeGen/CodeGenModule.cpp",602,"static bool checkAliasedGlobal(DiagnosticsEngine &Diags, SourceLocation Location, bool IsIFunc, const llvm::GlobalValue *Alias, const llvm::GlobalValue *&GV, const llvm::MapVector<GlobalDecl, StringRef> &MangledDeclNames, SourceRange AliasRange) {\n  // ...\n  if (IsIFunc) {\n    // ...\n    if (!F) {\n      Diags.Report(Location, diag::err_alias_to_undefined) << IsIFunc << IsIFunc;"}},
[h]={{"clang/lib/CodeGen/CodeGenModule.cpp",578,"static bool checkAliasedGlobal(DiagnosticsEngine &Diags, SourceLocation Location, bool IsIFunc, const llvm::GlobalValue *Alias, const llvm::GlobalValue *&GV, const llvm::MapVector<GlobalDecl, StringRef> &MangledDeclNames, SourceRange AliasRange) {\n  // ...\n  if (GV->isDeclaration()) {\n    Diags.Report(Location, diag::err_alias_to_undefined) << IsIFunc << IsIFunc;"},{"clang/lib/CodeGen/CodeGenModule.cpp",602,"static bool checkAliasedGlobal(DiagnosticsEngine &Diags, SourceLocation Location, bool IsIFunc, const llvm::GlobalValue *Alias, const llvm::GlobalValue *&GV, const llvm::MapVector<GlobalDecl, StringRef> &MangledDeclNames, SourceRange AliasRange) {\n  // ...\n  if (IsIFunc) {\n    // ...\n    if (!F) {\n      Diags.Report(Location, diag::err_alias_to_undefined) << IsIFunc << IsIFunc;"}},
[j]={
[j]={
Line 632: Line 634:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"1b0d24e03abf",1412284885,"Initial support for the align_value attribute\n\nThis adds support for the align_value attribute. This...","Initial support for the align_value attribute\n\nThis adds support for the align_value attribute. This attribute is supported by\nIntel\'s compiler (versions 14.0+), and several of my HPC users have requested\nsupport in Clang. It specifies an alignment assumption on the values to which a\npointer points, and is used by numerical libraries to encourage efficient\ngeneration of vector code.\n\nOf course, we already have an aligned attribute that can specify enhanced\nalignment for a type, so why is this additional attribute important? The\nproblem is that if you want to specify that an input array of T is, say,\n64-byte aligned, you could try this:\n\n  typedef double aligned_double attribute((aligned(64)));\n  void foo(aligned_double *P) {\n    double x = P[0]; // This is fine.\n    double y = P[1]; // What alignment did those doubles have again?\n  }\n\nthe access here to P[1] causes problems. P was specified as a pointer to type\naligned_double, and any object of type aligned_double must be 64-byte aligned.\nBut if P[0] is 64-byte aligned, then P[1] cannot be, and this access causes\nundefined behavior. Getting round this problem requires a lot of awkward\ncasting and hand-unrolling of loops, all of which is bad.\n\nWith the align_value attribute, we can accomplish what we\'d like in a well\ndefined way:\n\n  typedef double *aligned_double_ptr attribute((align_value(64)));\n  void foo(aligned_double_ptr P) {\n    double x = P[0]; // This is fine.\n    double y = P[1]; // This is fine too.\n  }\n\nThis attribute does not create a new type (and so it not part of the type\nsystem), and so will only \"propagate\" through templates, auto, etc. by\noptimizer deduction after inlining. This seems consistent with Intel\'s\nimplementation (thanks to Alexey for confirming the various Intel-compiler\nbehaviors).\n\nAs a final note, I would have chosen to call this aligned_value, not\nalign_value, for better naming consistency with the aligned attribute, but I\nthink it would be more useful to users to adopt Intel\'s name.\n\nllvm-svn: 218910"},
[b]={"1b0d24e03abf",1412284885,"Initial support for the align_value attribute","Initial support for the align_value attribute\n\nThis adds support for the align_value attribute. This attribute is supported by\nIntel\'s compiler (versions 14.0+), and several of my HPC users have requested\nsupport in Clang. It specifies an alignment assumption on the values to which a\npointer points, and is used by numerical libraries to encourage efficient\ngeneration of vector code.\n\nOf course, we already have an aligned attribute that can specify enhanced\nalignment for a type, so why is this additional attribute important? The\nproblem is that if you want to specify that an input array of T is, say,\n64-byte aligned, you could try this:\n\n  typedef double aligned_double attribute((aligned(64)));\n  void foo(aligned_double *P) {\n    double x = P[0]; // This is fine.\n    double y = P[1]; // What alignment did those doubles have again?\n  }\n\nthe access here to P[1] causes problems. P was specified as a pointer to type\naligned_double, and any object of type aligned_double must be 64-byte aligned.\nBut if P[0] is 64-byte aligned, then P[1] cannot be, and this access causes\nundefined behavior. Getting round this problem requires a lot of awkward\ncasting and hand-unrolling of loops, all of which is bad.\n\nWith the align_value attribute, we can accomplish what we\'d like in a well\ndefined way:\n\n  typedef double *aligned_double_ptr attribute((align_value(64)));\n  void foo(aligned_double_ptr P) {\n    double x = P[0]; // This is fine.\n    double y = P[1]; // This is fine too.\n  }\n\nThis attribute does not create a new type (and so it not part of the type\nsystem), and so will only \"propagate\" through templates, auto, etc. by\noptimizer deduction after inlining. This seems consistent with Intel\'s\nimplementation (thanks to Alexey for confirming the various Intel-compiler\nbehaviors).\n\nAs a final note, I would have chosen to call this aligned_value, not\nalign_value, for better naming consistency with the aligned attribute, but I\nthink it would be more useful to users to adopt Intel\'s name.\n\nllvm-svn: 218910"},
[h]={{l,4331,"void Sema::AddAlignValueAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E) {\n  // ...\n  if (!E->isValueDependent()) {\n    // ...\n    ExprResult ICE = VerifyIntegerConstantExpression(E, &Alignment, diag::err_align_value_attribute_argument_not_int);"}},
[h]={{l,4331,"void Sema::AddAlignValueAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E) {\n  // ...\n  if (!E->isValueDependent()) {\n    // ...\n    ExprResult ICE = VerifyIntegerConstantExpression(E, &Alignment, diag::err_align_value_attribute_argument_not_int);"}},
[j]={
[j]={
Line 644: Line 646:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"1dba27cd4942",1359450129,"Implement C++11 [dcl.align]p1 and C11 6.7.5/2 rules for alignas and _Alignas.\n\nllvm-svn: 173779","Implement C++11 [dcl.align]p1 and C11 6.7.5/2 rules for alignas and _Alignas.\n\nllvm-svn: 173779"},
[b]={"1dba27cd4942",1359450129,"Implement C++11 [dcl.align]p1 and C11 6.7.5/2 rules for alignas and _Alignas.","Implement C++11 [dcl.align]p1 and C11 6.7.5/2 rules for alignas and _Alignas.\n\nllvm-svn: 173779"},
[h]={{l,4435,"/// Perform checking of type validity\n///\n/// C++11 [dcl.align]p1:\n///  An alignment-specifier may be applied to a variable or to a class\n///  data member, but it shall not be applied to a bit-field, a function\n///  parameter, the formal parameter of a catch clause, or a variable\n///  declared with the register storage class specifier. An\n///  alignment-specifier may also be applied to the declaration of a class\n///  or enumeration type.\n/// CWG 2354:\n///  CWG agreed to remove permission for alignas to be applied to\n///  enumerations.\n/// C11 6.7.5/2:\n///  An alignment attribute shall not be specified in a declaration of\n///  a typedef, or a bit-field, or a function, or a parameter, or an\n///  object declared with the register storage-class specifier.\nstatic bool validateAlignasAppliedType(Sema &S, Decl *D, const AlignedAttr &Attr, SourceLocation AttrLoc) {\n  // ...\n  if (DiagKind != -1) {\n    return S.Diag(AttrLoc, diag::err_alignas_attribute_wrong_decl_type) << &Attr << DiagKind;"}},
[h]={{l,4435,"/// Perform checking of type validity\n///\n/// C++11 [dcl.align]p1:\n///  An alignment-specifier may be applied to a variable or to a class\n///  data member, but it shall not be applied to a bit-field, a function\n///  parameter, the formal parameter of a catch clause, or a variable\n///  declared with the register storage class specifier. An\n///  alignment-specifier may also be applied to the declaration of a class\n///  or enumeration type.\n/// CWG 2354:\n///  CWG agreed to remove permission for alignas to be applied to\n///  enumerations.\n/// C11 6.7.5/2:\n///  An alignment attribute shall not be specified in a declaration of\n///  a typedef, or a bit-field, or a function, or a parameter, or an\n///  object declared with the register storage-class specifier.\nstatic bool validateAlignasAppliedType(Sema &S, Decl *D, const AlignedAttr &Attr, SourceLocation AttrLoc) {\n  // ...\n  if (DiagKind != -1) {\n    return S.Diag(AttrLoc, diag::err_alignas_attribute_wrong_decl_type) << &Attr << DiagKind;"}},
[j]={
[j]={
Line 656: Line 658:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"bc8caaf05f09",1361508939,"Implement C++11 [dcl.align]p6-p8, and C11 6.7.5/7. This had to be split out of\nthe normal attribute-...","Implement C++11 [dcl.align]p6-p8, and C11 6.7.5/7. This had to be split out of\nthe normal attribute-merging path, because we can\'t merge alignment attributes\nwithout knowing the complete set of alignment attributes which apply to a\nparticular declaration.\n\nllvm-svn: 175861"},
[b]={"bc8caaf05f09",1361508939,"Implement C++11 [dcl.align]p6-p8, and C11 6.7.5/7. This had to be split out of","Implement C++11 [dcl.align]p6-p8, and C11 6.7.5/7. This had to be split out of\nthe normal attribute-merging path, because we can\'t merge alignment attributes\nwithout knowing the complete set of alignment attributes which apply to a\nparticular declaration.\n\nllvm-svn: 175861"},
[h]={{n,2841,"/// Merge alignment attributes from \\p Old to \\p New, taking into account the\n/// special semantics of C11\'s _Alignas specifier and C++11\'s alignas attribute.\n///\n/// \\return \\c true if any attributes were added to \\p New.\nstatic bool mergeAlignedAttrs(Sema &S, NamedDecl *New, Decl *Old) {\n  // ...\n  if (OldAlignasAttr && NewAlignasAttr && OldAlign != NewAlign) {\n    // ...\n    if (OldAlign != NewAlign) {\n      S.Diag(NewAlignasAttr->getLocation(), diag::err_alignas_mismatch) << (unsigned)S.Context.toCharUnitsFromBits(OldAlign).getQuantity() << (unsigned)S.Context.toCharUnitsFromBits(NewAlign).getQuantity();"}},
[h]={{m,2841,"/// Merge alignment attributes from \\p Old to \\p New, taking into account the\n/// special semantics of C11\'s _Alignas specifier and C++11\'s alignas attribute.\n///\n/// \\return \\c true if any attributes were added to \\p New.\nstatic bool mergeAlignedAttrs(Sema &S, NamedDecl *New, Decl *Old) {\n  // ...\n  if (OldAlignasAttr && NewAlignasAttr && OldAlign != NewAlign) {\n    // ...\n    if (OldAlign != NewAlign) {\n      S.Diag(NewAlignasAttr->getLocation(), diag::err_alignas_mismatch) << (unsigned)S.Context.toCharUnitsFromBits(OldAlign).getQuantity() << (unsigned)S.Context.toCharUnitsFromBits(NewAlign).getQuantity();"}},
[j]={
[j]={
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p8.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p8.cpp:6:1: error: redeclaration has different alignment requirement (4 vs 8)"}
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p8.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p8.cpp:6:1: error: redeclaration has different alignment requirement (4 vs 8)"}
Line 668: Line 670:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"bc8caaf05f09",1361508939,"Implement C++11 [dcl.align]p6-p8, and C11 6.7.5/7. This had to be split out of\nthe normal attribute-...","Implement C++11 [dcl.align]p6-p8, and C11 6.7.5/7. This had to be split out of\nthe normal attribute-merging path, because we can\'t merge alignment attributes\nwithout knowing the complete set of alignment attributes which apply to a\nparticular declaration.\n\nllvm-svn: 175861"},
[b]={"bc8caaf05f09",1361508939,"Implement C++11 [dcl.align]p6-p8, and C11 6.7.5/7. This had to be split out of","Implement C++11 [dcl.align]p6-p8, and C11 6.7.5/7. This had to be split out of\nthe normal attribute-merging path, because we can\'t merge alignment attributes\nwithout knowing the complete set of alignment attributes which apply to a\nparticular declaration.\n\nllvm-svn: 175861"},
[h]={{n,2857,"/// Merge alignment attributes from \\p Old to \\p New, taking into account the\n/// special semantics of C11\'s _Alignas specifier and C++11\'s alignas attribute.\n///\n/// \\return \\c true if any attributes were added to \\p New.\nstatic bool mergeAlignedAttrs(Sema &S, NamedDecl *New, Decl *Old) {\n  // ...\n  if (OldAlignasAttr && !NewAlignasAttr && isAttributeTargetADefinition(New)) {\n    // ...\n    S.Diag(New->getLocation(), diag::err_alignas_missing_on_definition) << OldAlignasAttr;"},{n,3085,"/// 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<C11NoReturnAttr>(NewAttribute)) {\n    // ...\n    } else if (isa<UuidAttr>(NewAttribute)) {\n    // ...\n    } else if (const AlignedAttr *AA = dyn_cast<AlignedAttr>(NewAttribute)) {\n      if (AA->isAlignas()) {\n        // ...\n        S.Diag(Def->getLocation(), diag::err_alignas_missing_on_definition) << AA;"}},
[h]={{m,2857,"/// Merge alignment attributes from \\p Old to \\p New, taking into account the\n/// special semantics of C11\'s _Alignas specifier and C++11\'s alignas attribute.\n///\n/// \\return \\c true if any attributes were added to \\p New.\nstatic bool mergeAlignedAttrs(Sema &S, NamedDecl *New, Decl *Old) {\n  // ...\n  if (OldAlignasAttr && !NewAlignasAttr && isAttributeTargetADefinition(New)) {\n    // ...\n    S.Diag(New->getLocation(), diag::err_alignas_missing_on_definition) << OldAlignasAttr;"},{m,3085,"/// 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<C11NoReturnAttr>(NewAttribute)) {\n    // ...\n    } else if (isa<UuidAttr>(NewAttribute)) {\n    // ...\n    } else if (const AlignedAttr *AA = dyn_cast<AlignedAttr>(NewAttribute)) {\n      if (AA->isAlignas()) {\n        // ...\n        S.Diag(Def->getLocation(), diag::err_alignas_missing_on_definition) << AA;"}},
[j]={
[j]={
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:18:5: error: \'alignas\' must be specified on definition if it is specified on any declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:25:5: error: \'alignas\' must be specified on definition if it is specified on any declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:27:5: error: \'alignas\' must be specified on definition if it is specified on any declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:33:8: error: \'alignas\' must be specified on definition if it is specified on any declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:43:8: error: \'alignas\' must be specified on definition if it is specified on any declaration"}
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:18:5: error: \'alignas\' must be specified on definition if it is specified on any declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:25:5: error: \'alignas\' must be specified on definition if it is specified on any declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:27:5: error: \'alignas\' must be specified on definition if it is specified on any declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:33:8: error: \'alignas\' must be specified on definition if it is specified on any declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:43:8: error: \'alignas\' must be specified on definition if it is specified on any declaration"}
Line 680: Line 682:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"848e1f19605a",1359706328,"Implement [dcl.align]p5 and C11 6.7.5/4: alignas cannot underalign.\nAlso support alignas(0), which C...","Implement [dcl.align]p5 and C11 6.7.5/4: alignas cannot underalign.\nAlso support alignas(0), which C++11 and C11 require us to ignore.\n\nllvm-svn: 174157"},
[b]={"848e1f19605a",1359706328,"Implement [dcl.align]p5 and C11 6.7.5/4: alignas cannot underalign.","Implement [dcl.align]p5 and C11 6.7.5/4: alignas cannot underalign.\nAlso support alignas(0), which C++11 and C11 require us to ignore.\n\nllvm-svn: 174157"},
[h]={{l,4616,"void Sema::CheckAlignasUnderalignment(Decl *D) {\n  // ...\n  if (Align && DiagTy->isSizelessType()) {\n  // ...\n  } else if (AlignasAttr && Align) {\n    // ...\n    if (NaturalAlign > RequestedAlign)\n      Diag(AlignasAttr->getLocation(), diag::err_alignas_underaligned) << DiagTy << (unsigned)NaturalAlign.getQuantity();"}},
[h]={{l,4616,"void Sema::CheckAlignasUnderalignment(Decl *D) {\n  // ...\n  if (Align && DiagTy->isSizelessType()) {\n  // ...\n  } else if (AlignasAttr && Align) {\n    // ...\n    if (NaturalAlign > RequestedAlign)\n      Diag(AlignasAttr->getLocation(), diag::err_alignas_underaligned) << DiagTy << (unsigned)NaturalAlign.getQuantity();"}},
[j]={
[j]={
Line 692: Line 694:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e5015abf185b",1533337957,"[Preprocessor] Allow libc++ to detect when aligned allocation is unavailable.\n\nLibc++ needs to know ...","[Preprocessor] Allow libc++ to detect when aligned allocation is unavailable.\n\nLibc++ needs to know when aligned allocation is supported by clang, but is\notherwise unavailable at link time. Otherwise, libc++ will incorrectly end up\ngenerating calls to `__builtin_operator_new`/`__builtin_operator_delete` with\nalignment arguments.\n\nThis patch implements the following changes:\n\n* The `__cpp_aligned_new` feature test macro to no longer be defined when\n  aligned allocation is otherwise enabled but unavailable.\n\n* The Darwin driver no longer passes `-faligned-alloc-unavailable` when the\n  user manually specifies `-faligned-allocation` or `-fno-aligned-allocation`.\n\n* Instead of a warning Clang now generates a hard error when an aligned\n  allocation or deallocation function is referenced but unavailable.\n\nPatch by Eric Fiselier.\n\nReviewers: rsmith, vsapsai, erik.pilkington, ahatanak, dexonsmith\n\nReviewed By: rsmith\n\nSubscribers: Quuxplusone, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D45015\n\nllvm-svn: 338934"},
[b]={"e5015abf185b",1533337957,"[Preprocessor] Allow libc++ to detect when aligned allocation is unavailable.","[Preprocessor] Allow libc++ to detect when aligned allocation is unavailable.\n\nLibc++ needs to know when aligned allocation is supported by clang, but is\notherwise unavailable at link time. Otherwise, libc++ will incorrectly end up\ngenerating calls to `__builtin_operator_new`/`__builtin_operator_delete` with\nalignment arguments.\n\nThis patch implements the following changes:\n\n* The `__cpp_aligned_new` feature test macro to no longer be defined when\n  aligned allocation is otherwise enabled but unavailable.\n\n* The Darwin driver no longer passes `-faligned-alloc-unavailable` when the\n  user manually specifies `-faligned-allocation` or `-fno-aligned-allocation`.\n\n* Instead of a warning Clang now generates a hard error when an aligned\n  allocation or deallocation function is referenced but unavailable.\n\nPatch by Eric Fiselier.\n\nReviewers: rsmith, vsapsai, erik.pilkington, ahatanak, dexonsmith\n\nReviewed By: rsmith\n\nSubscribers: Quuxplusone, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D45015\n\nllvm-svn: 338934"},
[h]={{t,1968,"// Emit a diagnostic if an aligned allocation/deallocation function that is not\n// implemented in the standard library is selected.\nvoid Sema::diagnoseUnavailableAlignedAllocation(const FunctionDecl &FD, SourceLocation Loc) {\n  if (isUnavailableAlignedAllocationFunction(FD)) {\n    // ...\n    Diag(Loc, diag::err_aligned_allocation_unavailable) << IsDelete << FD.getType().getAsString() << OSName << OSVersion.getAsString() << OSVersion.empty();"}},
[h]={{u,1968,"// Emit a diagnostic if an aligned allocation/deallocation function that is not\n// implemented in the standard library is selected.\nvoid Sema::diagnoseUnavailableAlignedAllocation(const FunctionDecl &FD, SourceLocation Loc) {\n  if (isUnavailableAlignedAllocationFunction(FD)) {\n    // ...\n    Diag(Loc, diag::err_aligned_allocation_unavailable) << IsDelete << FD.getType().getAsString() << OSName << OSVersion.getAsString() << OSVersion.empty();"}},
[j]={
[j]={
["clang/test/SemaCXX/unavailable_aligned_allocation.cpp"]={"clang/test/SemaCXX/unavailable_aligned_allocation.cpp:52:13: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:52:13: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:53:7: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:53:7: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:54:3: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:55:7: error: aligned allocation function of type \'void *(std::size_t, std::align_val_t, const std::nothrow_t &) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:55:7: error: aligned deallocation function of type \'void (void *, std::align_val_t, const std::nothrow_t &) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:57:14: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:57:14: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:58:8: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:58:8: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:59:3: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:60:8: error: aligned allocation function of type \'void *(std::size_t, std::align_val_t, const std::nothrow_t &) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:60:8: error: aligned deallocation function of type \'void (void *, std::align_val_t, const std::nothrow_t &) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:107:13: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:107:13: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:140:16: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:173:13: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:174:3: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:175:7: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:176:3: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:177:7: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:178:3: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS"}
["clang/test/SemaCXX/unavailable_aligned_allocation.cpp"]={"clang/test/SemaCXX/unavailable_aligned_allocation.cpp:52:13: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:52:13: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:53:7: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:53:7: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:54:3: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:55:7: error: aligned allocation function of type \'void *(std::size_t, std::align_val_t, const std::nothrow_t &) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:55:7: error: aligned deallocation function of type \'void (void *, std::align_val_t, const std::nothrow_t &) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:57:14: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:57:14: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:58:8: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:58:8: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:59:3: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:60:8: error: aligned allocation function of type \'void *(std::size_t, std::align_val_t, const std::nothrow_t &) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:60:8: error: aligned deallocation function of type \'void (void *, std::align_val_t, const std::nothrow_t &) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:107:13: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:107:13: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:140:16: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:173:13: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:174:3: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:175:7: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:176:3: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:177:7: error: aligned allocation function of type \'void *(unsigned long, enum std::align_val_t)\' is not available on z/OS","clang/test/SemaCXX/unavailable_aligned_allocation.cpp:178:3: error: aligned deallocation function of type \'void (void *, enum std::align_val_t) noexcept\' is not available on z/OS"}
Line 704: Line 706:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e2b3744890f6",1336171132,"Move Sema::VerifyIntegerConstantExpression() and\nSema::ConvertToIntegralOrEnumerationType() from Par...","Move Sema::VerifyIntegerConstantExpression() and\nSema::ConvertToIntegralOrEnumerationType() from PartialDiagnostics to\nabstract \"diagnoser\" classes. Not much of a win here, but we\'re\n-several PartialDiagnostics.\n\nllvm-svn: 156217"},
[b]={"e2b3744890f6",1336171132,"Move Sema::VerifyIntegerConstantExpression() and","Move Sema::VerifyIntegerConstantExpression() and\nSema::ConvertToIntegralOrEnumerationType() from PartialDiagnostics to\nabstract \"diagnoser\" classes. Not much of a win here, but we\'re\n-several PartialDiagnostics.\n\nllvm-svn: 156217"},
[h]={{l,4473,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  // ...\n  ExprResult ICE = VerifyIntegerConstantExpression(E, &Alignment, diag::err_aligned_attribute_argument_not_int);"}},
[h]={{l,4473,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  // ...\n  ExprResult ICE = VerifyIntegerConstantExpression(E, &Alignment, diag::err_aligned_attribute_argument_not_int);"}},
[j]={
[j]={
Line 716: Line 718:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"26a1e0ef760a",1428374229,"[Sema] Don\'t permit dependent alignments on non-dependent typedef-names\n\nA dependent alignment attri...","[Sema] Don\'t permit dependent alignments on non-dependent typedef-names\n\nA dependent alignment attribute (like __attribute__((aligned(...))) or\n__declspec(align(...))) on a non-dependent typedef or using declaration\nposes a considerable challenge: the type is _not_ dependent, the size\n_may_ be dependent if the type is used as an array type, the alignment\n_is_ dependent.\n\nIt is reasonable for a compiler to be able to query the size and\nalignment of a complete type.  Let\'s help that become an invariant.\n\nThis fixes PR22042.\n\nDifferential Revision: http://reviews.llvm.org/D8693\n\nllvm-svn: 234280"},
[b]={"26a1e0ef760a",1428374229,"[Sema] Don\'t permit dependent alignments on non-dependent typedef-names","[Sema] Don\'t permit dependent alignments on non-dependent typedef-names\n\nA dependent alignment attribute (like __attribute__((aligned(...))) or\n__declspec(align(...))) on a non-dependent typedef or using declaration\nposes a considerable challenge: the type is _not_ dependent, the size\n_may_ be dependent if the type is used as an array type, the alignment\n_is_ dependent.\n\nIt is reasonable for a compiler to be able to query the size and\nalignment of a complete type.  Let\'s help that become an invariant.\n\nThis fixes PR22042.\n\nDifferential Revision: http://reviews.llvm.org/D8693\n\nllvm-svn: 234280"},
[h]={{l,4457,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  // ...\n  if (E->isValueDependent()) {\n    // We can\'t support a dependent alignment on a non-dependent type,\n    // because we have no way to model that a type is \"alignment-dependent\"\n    // but not dependent in any other way.\n    if (const auto *TND = dyn_cast<TypedefNameDecl>(D)) {\n      if (!TND->getUnderlyingType()->isDependentType()) {\n        Diag(AttrLoc, diag::err_alignment_dependent_typedef_name) << E->getSourceRange();"},{l,4547,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, TypeSourceInfo *TS, bool IsPackExpansion) {\n  // ...\n  if (TS->getType()->isDependentType()) {\n    // We can\'t support a dependent alignment on a non-dependent type,\n    // because we have no way to model that a type is \"type-dependent\"\n    // but not dependent in any other way.\n    if (const auto *TND = dyn_cast<TypedefNameDecl>(D)) {\n      if (!TND->getUnderlyingType()->isDependentType()) {\n        Diag(AttrLoc, diag::err_alignment_dependent_typedef_name) << TS->getTypeLoc().getSourceRange();"}},
[h]={{l,4457,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  // ...\n  if (E->isValueDependent()) {\n    // We can\'t support a dependent alignment on a non-dependent type,\n    // because we have no way to model that a type is \"alignment-dependent\"\n    // but not dependent in any other way.\n    if (const auto *TND = dyn_cast<TypedefNameDecl>(D)) {\n      if (!TND->getUnderlyingType()->isDependentType()) {\n        Diag(AttrLoc, diag::err_alignment_dependent_typedef_name) << E->getSourceRange();"},{l,4547,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, TypeSourceInfo *TS, bool IsPackExpansion) {\n  // ...\n  if (TS->getType()->isDependentType()) {\n    // We can\'t support a dependent alignment on a non-dependent type,\n    // because we have no way to model that a type is \"type-dependent\"\n    // but not dependent in any other way.\n    if (const auto *TND = dyn_cast<TypedefNameDecl>(D)) {\n      if (!TND->getUnderlyingType()->isDependentType()) {\n        Diag(AttrLoc, diag::err_alignment_dependent_typedef_name) << TS->getTypeLoc().getSourceRange();"}},
[j]={
[j]={
Line 728: Line 730:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"bcc06085a894",1410130694,"Add __builtin_assume and __builtin_assume_aligned using @llvm.assume.\n\nThis makes use of the recentl...","Add __builtin_assume and __builtin_assume_aligned using @llvm.assume.\n\nThis makes use of the recently-added @llvm.assume intrinsic to implement a\n__builtin_assume(bool) intrinsic (to provide additional information to the\noptimizer). This hooks up __assume in MS-compatibility mode to mirror\n__builtin_assume (the semantics have been intentionally kept compatible), and\nimplements GCC\'s __builtin_assume_aligned as assume((p - o) & mask == 0). LLVM\nnow contains special logic to deal with assumptions of this form.\n\nllvm-svn: 217349"},
[b]={"bcc06085a894",1410130694,"Add __builtin_assume and __builtin_assume_aligned using @llvm.assume.","Add __builtin_assume and __builtin_assume_aligned using @llvm.assume.\n\nThis makes use of the recently-added @llvm.assume intrinsic to implement a\n__builtin_assume(bool) intrinsic (to provide additional information to the\noptimizer). This hooks up __assume in MS-compatibility mode to mirror\n__builtin_assume (the semantics have been intentionally kept compatible), and\nimplements GCC\'s __builtin_assume_aligned as assume((p - o) & mask == 0). LLVM\nnow contains special logic to deal with assumptions of this form.\n\nllvm-svn: 217349"},
[h]={{p,339,"/// 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  // We can\'t check validity of alignment if it is value dependent.\n  if (!AlignOp->isValueDependent() && AlignOp->EvaluateAsInt(AlignResult, S.Context, Expr::SE_AllowSideEffects)) {\n    // ...\n    if (!AlignValue.isPowerOf2()) {\n      S.Diag(AlignOp->getExprLoc(), diag::err_alignment_not_power_of_two);"},{p,8631,"/// Handle __builtin_alloca_with_align. This is declared\n/// as (size_t, size_t) where the second size_t must be a power of 2 greater\n/// than 8.\nbool Sema::SemaBuiltinAllocaWithAlign(CallExpr *TheCall) {\n  // ...\n  // We can\'t check the value of a dependent argument.\n  if (!Arg->isTypeDependent() && !Arg->isValueDependent()) {\n    // ...\n    if (!Result.isPowerOf2())\n      return Diag(TheCall->getBeginLoc(), diag::err_alignment_not_power_of_two) << Arg->getSourceRange();"},{p,8674,"/// Handle __builtin_assume_aligned. This is declared\n/// as (const void*, size_t, ...) and can take one optional constant int arg.\nbool Sema::SemaBuiltinAssumeAligned(CallExpr *TheCall) {\n  // ...\n  // We can\'t check the value of a dependent argument.\n  if (!SecondArg->isValueDependent()) {\n    // ...\n    if (!Result.isPowerOf2())\n      return Diag(TheCall->getBeginLoc(), diag::err_alignment_not_power_of_two) << SecondArg->getSourceRange();"},{l,1711,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  // ...\n  if (!E->isValueDependent()) {\n    // ...\n    if (!I->isPowerOf2()) {\n      Diag(AttrLoc, diag::err_alignment_not_power_of_two) << E->getSourceRange();"},{l,4336,"void Sema::AddAlignValueAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E) {\n  // ...\n  if (!E->isValueDependent()) {\n    // ...\n    if (!Alignment.isPowerOf2()) {\n      Diag(AttrLoc, diag::err_alignment_not_power_of_two) << E->getSourceRange();"},{l,4494,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  // ...\n  // C++11 [dcl.align]p2:\n  //  -- if the constant expression evaluates to zero, the alignment\n  //      specifier shall have no effect\n  // C11 6.7.5p6:\n  //  An alignment specification of zero has no effect.\n  if (!(TmpAttr.isAlignas() && !Alignment)) {\n    if (!llvm::isPowerOf2_64(AlignVal)) {\n      Diag(AttrLoc, diag::err_alignment_not_power_of_two) << E->getSourceRange();"}},
[h]={{o,339,"/// 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  // We can\'t check validity of alignment if it is value dependent.\n  if (!AlignOp->isValueDependent() && AlignOp->EvaluateAsInt(AlignResult, S.Context, Expr::SE_AllowSideEffects)) {\n    // ...\n    if (!AlignValue.isPowerOf2()) {\n      S.Diag(AlignOp->getExprLoc(), diag::err_alignment_not_power_of_two);"},{o,8631,"/// Handle __builtin_alloca_with_align. This is declared\n/// as (size_t, size_t) where the second size_t must be a power of 2 greater\n/// than 8.\nbool Sema::SemaBuiltinAllocaWithAlign(CallExpr *TheCall) {\n  // ...\n  // We can\'t check the value of a dependent argument.\n  if (!Arg->isTypeDependent() && !Arg->isValueDependent()) {\n    // ...\n    if (!Result.isPowerOf2())\n      return Diag(TheCall->getBeginLoc(), diag::err_alignment_not_power_of_two) << Arg->getSourceRange();"},{o,8674,"/// Handle __builtin_assume_aligned. This is declared\n/// as (const void*, size_t, ...) and can take one optional constant int arg.\nbool Sema::SemaBuiltinAssumeAligned(CallExpr *TheCall) {\n  // ...\n  // We can\'t check the value of a dependent argument.\n  if (!SecondArg->isValueDependent()) {\n    // ...\n    if (!Result.isPowerOf2())\n      return Diag(TheCall->getBeginLoc(), diag::err_alignment_not_power_of_two) << SecondArg->getSourceRange();"},{l,1711,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  // ...\n  if (!E->isValueDependent()) {\n    // ...\n    if (!I->isPowerOf2()) {\n      Diag(AttrLoc, diag::err_alignment_not_power_of_two) << E->getSourceRange();"},{l,4336,"void Sema::AddAlignValueAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E) {\n  // ...\n  if (!E->isValueDependent()) {\n    // ...\n    if (!Alignment.isPowerOf2()) {\n      Diag(AttrLoc, diag::err_alignment_not_power_of_two) << E->getSourceRange();"},{l,4494,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  // ...\n  // C++11 [dcl.align]p2:\n  //  -- if the constant expression evaluates to zero, the alignment\n  //      specifier shall have no effect\n  // C11 6.7.5p6:\n  //  An alignment specification of zero has no effect.\n  if (!(TmpAttr.isAlignas() && !Alignment)) {\n    if (!llvm::isPowerOf2_64(AlignVal)) {\n      Diag(AttrLoc, diag::err_alignment_not_power_of_two) << E->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/align_value.c"]={"clang/test/Sema/align_value.c:8:33: error: requested alignment is not a power of 2","clang/test/Sema/align_value.c:11:33: error: requested alignment is not a power of 2"}
["clang/test/Sema/align_value.c"]={"clang/test/Sema/align_value.c:8:33: error: requested alignment is not a power of 2","clang/test/Sema/align_value.c:11:33: error: requested alignment is not a power of 2"}
Line 740: Line 742:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"5116993f8ea7",1477892268,"Add support for __builtin_alloca_with_align\n\n__builtin_alloca always uses __BIGGEST_ALIGNMENT__ for ...","Add support for __builtin_alloca_with_align\n\n__builtin_alloca always uses __BIGGEST_ALIGNMENT__ for the alignment of\nthe allocation.  __builtin_alloca_with_align allows the programmer to\nspecify the alignment of the allocation.\n\nThis fixes PR30658.\n\nllvm-svn: 285544"},
[b]={"5116993f8ea7",1477892268,"Add support for __builtin_alloca_with_align","Add support for __builtin_alloca_with_align\n\n__builtin_alloca always uses __BIGGEST_ALIGNMENT__ for the alignment of\nthe allocation.  __builtin_alloca_with_align allows the programmer to\nspecify the alignment of the allocation.\n\nThis fixes PR30658.\n\nllvm-svn: 285544"},
[h]={{p,334,"/// 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  // We can\'t check validity of alignment if it is value dependent.\n  if (!AlignOp->isValueDependent() && AlignOp->EvaluateAsInt(AlignResult, S.Context, Expr::SE_AllowSideEffects)) {\n    // ...\n    if (llvm::APSInt::compareValues(AlignValue, MaxValue) > 0) {\n      S.Diag(AlignOp->getExprLoc(), diag::err_alignment_too_big) << toString(MaxValue, 10);"},{p,8639,"/// Handle __builtin_alloca_with_align. This is declared\n/// as (size_t, size_t) where the second size_t must be a power of 2 greater\n/// than 8.\nbool Sema::SemaBuiltinAllocaWithAlign(CallExpr *TheCall) {\n  // ...\n  // We can\'t check the value of a dependent argument.\n  if (!Arg->isTypeDependent() && !Arg->isValueDependent()) {\n    // ...\n    if (Result > std::numeric_limits<int32_t>::max())\n      return Diag(TheCall->getBeginLoc(), diag::err_alignment_too_big) << std::numeric_limits<int32_t>::max() << Arg->getSourceRange();"}},
[h]={{o,334,"/// 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  // We can\'t check validity of alignment if it is value dependent.\n  if (!AlignOp->isValueDependent() && AlignOp->EvaluateAsInt(AlignResult, S.Context, Expr::SE_AllowSideEffects)) {\n    // ...\n    if (llvm::APSInt::compareValues(AlignValue, MaxValue) > 0) {\n      S.Diag(AlignOp->getExprLoc(), diag::err_alignment_too_big) << toString(MaxValue, 10);"},{o,8639,"/// Handle __builtin_alloca_with_align. This is declared\n/// as (size_t, size_t) where the second size_t must be a power of 2 greater\n/// than 8.\nbool Sema::SemaBuiltinAllocaWithAlign(CallExpr *TheCall) {\n  // ...\n  // We can\'t check the value of a dependent argument.\n  if (!Arg->isTypeDependent() && !Arg->isValueDependent()) {\n    // ...\n    if (Result > std::numeric_limits<int32_t>::max())\n      return Diag(TheCall->getBeginLoc(), diag::err_alignment_too_big) << std::numeric_limits<int32_t>::max() << Arg->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/builtin-align.c"]={"clang/test/Sema/builtin-align.c:93:26: error: requested alignment must be 128 or smaller","clang/test/Sema/builtin-align.c:99:33: error: requested alignment must be 2147483648 or smaller","clang/test/Sema/builtin-align.c:100:33: error: requested alignment must be 2147483648 or smaller","clang/test/Sema/builtin-align.c:101:42: error: requested alignment must be 9223372036854775808 or smaller","clang/test/Sema/builtin-align.c:102:46: error: requested alignment must be 9223372036854775808 or smaller"}
["clang/test/Sema/builtin-align.c"]={"clang/test/Sema/builtin-align.c:93:26: error: requested alignment must be 128 or smaller","clang/test/Sema/builtin-align.c:99:33: error: requested alignment must be 2147483648 or smaller","clang/test/Sema/builtin-align.c:100:33: error: requested alignment must be 2147483648 or smaller","clang/test/Sema/builtin-align.c:101:42: error: requested alignment must be 9223372036854775808 or smaller","clang/test/Sema/builtin-align.c:102:46: error: requested alignment must be 9223372036854775808 or smaller"}
Line 752: Line 754:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"5116993f8ea7",1477892268,"Add support for __builtin_alloca_with_align\n\n__builtin_alloca always uses __BIGGEST_ALIGNMENT__ for ...","Add support for __builtin_alloca_with_align\n\n__builtin_alloca always uses __BIGGEST_ALIGNMENT__ for the alignment of\nthe allocation.  __builtin_alloca_with_align allows the programmer to\nspecify the alignment of the allocation.\n\nThis fixes PR30658.\n\nllvm-svn: 285544"},
[b]={"5116993f8ea7",1477892268,"Add support for __builtin_alloca_with_align","Add support for __builtin_alloca_with_align\n\n__builtin_alloca always uses __BIGGEST_ALIGNMENT__ for the alignment of\nthe allocation.  __builtin_alloca_with_align allows the programmer to\nspecify the alignment of the allocation.\n\nThis fixes PR30658.\n\nllvm-svn: 285544"},
[h]={{p,330,"/// 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  // We can\'t check validity of alignment if it is value dependent.\n  if (!AlignOp->isValueDependent() && AlignOp->EvaluateAsInt(AlignResult, S.Context, Expr::SE_AllowSideEffects)) {\n    // ...\n    if (AlignValue < 1) {\n      S.Diag(AlignOp->getExprLoc(), diag::err_alignment_too_small) << 1;"},{p,8635,"/// Handle __builtin_alloca_with_align. This is declared\n/// as (size_t, size_t) where the second size_t must be a power of 2 greater\n/// than 8.\nbool Sema::SemaBuiltinAllocaWithAlign(CallExpr *TheCall) {\n  // ...\n  // We can\'t check the value of a dependent argument.\n  if (!Arg->isTypeDependent() && !Arg->isValueDependent()) {\n    // ...\n    if (Result < Context.getCharWidth())\n      return Diag(TheCall->getBeginLoc(), diag::err_alignment_too_small) << (unsigned)Context.getCharWidth() << Arg->getSourceRange();"}},
[h]={{o,330,"/// 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  // We can\'t check validity of alignment if it is value dependent.\n  if (!AlignOp->isValueDependent() && AlignOp->EvaluateAsInt(AlignResult, S.Context, Expr::SE_AllowSideEffects)) {\n    // ...\n    if (AlignValue < 1) {\n      S.Diag(AlignOp->getExprLoc(), diag::err_alignment_too_small) << 1;"},{o,8635,"/// Handle __builtin_alloca_with_align. This is declared\n/// as (size_t, size_t) where the second size_t must be a power of 2 greater\n/// than 8.\nbool Sema::SemaBuiltinAllocaWithAlign(CallExpr *TheCall) {\n  // ...\n  // We can\'t check the value of a dependent argument.\n  if (!Arg->isTypeDependent() && !Arg->isValueDependent()) {\n    // ...\n    if (Result < Context.getCharWidth())\n      return Diag(TheCall->getBeginLoc(), diag::err_alignment_too_small) << (unsigned)Context.getCharWidth() << Arg->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCXX/builtin-align-cxx.cpp"]={"clang/test/SemaCXX/builtin-align-cxx.cpp:47:64: error: requested alignment must be 1 or greater"}
["clang/test/SemaCXX/builtin-align-cxx.cpp"]={"clang/test/SemaCXX/builtin-align-cxx.cpp:47:64: error: requested alignment must be 1 or greater"}
Line 764: Line 766:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"768439eb2e7e",1367826034,"Require the containing type to be complete when we see\n__alignof__ of a field.\n\nThis problem can onl...","Require the containing type to be complete when we see\n__alignof__ of a field.\n\nThis problem can only happen in C++11.\n\nAlso do some petty optimizations.\n\nrdar://13784901\n\nllvm-svn: 181185"},
[b]={"768439eb2e7e",1367826034,"Require the containing type to be complete when we see","Require the containing type to be complete when we see\n__alignof__ of a field.\n\nThis problem can only happen in C++11.\n\nAlso do some petty optimizations.\n\nrdar://13784901\n\nllvm-svn: 181185"},
[h]={{u,4687,"static bool CheckAlignOfExpr(Sema &S, Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // ...\n  // If it\'s a field, require the containing struct to have a\n  // complete definition so that we can compute the layout.\n  //\n  // This can happen in C++11 onwards, either by naming the member\n  // in a way that is not transformed into a member access expression\n  // (in an unevaluated operand, for instance), or by naming the member\n  // in a trailing-return-type.\n  //\n  // For the record, since __alignof__ on expressions is a GCC\n  // extension, GCC seems to permit this but always gives the\n  // nonsensical answer 0.\n  //\n  // We don\'t really need the layout here --- we could instead just\n  // directly check for all the appropriate alignment-lowing\n  // attributes --- but that would require duplicating a lot of\n  // logic that just isn\'t worth duplicating for such a marginal\n  // use-case.\n  if (FieldDecl *FD = dyn_cast_or_null<FieldDecl>(D)) {\n    // Fast path this check, since we at least know the record has a\n    // definition if we can find a member of it.\n    if (!FD->getParent()->isCompleteDefinition()) {\n      S.Diag(E->getExprLoc(), diag::err_alignof_member_of_incomplete_type) << E->getSourceRange();"}},
[h]={{v,4687,"static bool CheckAlignOfExpr(Sema &S, Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // ...\n  // If it\'s a field, require the containing struct to have a\n  // complete definition so that we can compute the layout.\n  //\n  // This can happen in C++11 onwards, either by naming the member\n  // in a way that is not transformed into a member access expression\n  // (in an unevaluated operand, for instance), or by naming the member\n  // in a trailing-return-type.\n  //\n  // For the record, since __alignof__ on expressions is a GCC\n  // extension, GCC seems to permit this but always gives the\n  // nonsensical answer 0.\n  //\n  // We don\'t really need the layout here --- we could instead just\n  // directly check for all the appropriate alignment-lowing\n  // attributes --- but that would require duplicating a lot of\n  // logic that just isn\'t worth duplicating for such a marginal\n  // use-case.\n  if (FieldDecl *FD = dyn_cast_or_null<FieldDecl>(D)) {\n    // Fast path this check, since we at least know the record has a\n    // definition if we can find a member of it.\n    if (!FD->getParent()->isCompleteDefinition()) {\n      S.Diag(E->getExprLoc(), diag::err_alignof_member_of_incomplete_type) << E->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCXX/alignof.cpp"]={"clang/test/SemaCXX/alignof.cpp:7:39: error: invalid application of \'alignof\' to a field of a class still being defined","clang/test/SemaCXX/alignof.cpp:8:39: error: invalid application of \'alignof\' to a field of a class still being defined","clang/test/SemaCXX/alignof.cpp:9:38: error: invalid application of \'alignof\' to a field of a class still being defined"}
["clang/test/SemaCXX/alignof.cpp"]={"clang/test/SemaCXX/alignof.cpp:7:39: error: invalid application of \'alignof\' to a field of a class still being defined","clang/test/SemaCXX/alignof.cpp:8:39: error: invalid application of \'alignof\' to a field of a class still being defined","clang/test/SemaCXX/alignof.cpp:9:38: error: invalid application of \'alignof\' to a field of a class still being defined"}
Line 776: Line 778:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"0d5ca29b7836",1237830550,"It\'s an error to try to allocate an abstract object using new.\n\nllvm-svn: 67542","It\'s an error to try to allocate an abstract object using new.\n\nllvm-svn: 67542"},
[b]={"0d5ca29b7836",1237830550,"It\'s an error to try to allocate an abstract object using new.","It\'s an error to try to allocate an abstract object using new.\n\nllvm-svn: 67542"},
[h]={{s,1885,"/// TryStaticImplicitCast - Tests whether a conversion according to C++ 5.2.9p2\n/// is valid:\n///\n///  An expression e can be explicitly converted to a type T using a\n///  @c static_cast if the declaration \"T t(e);\" is well-formed [...].\nTryCastResult TryStaticImplicitCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, bool ListInitialization) {\n  if (DestType->isRecordType()) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_bad_cast_incomplete) || Self.RequireNonAbstractType(OpRange.getBegin(), DestType, diag::err_allocation_of_abstract_type)) {"},{t,2468,"/// 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 (RequireNonAbstractType(Loc, AllocType, diag::err_allocation_of_abstract_type))"},{t,4120,"static ExprResult BuildCXXCastArgument(Sema &S, SourceLocation CastLoc, QualType Ty, CastKind Kind, CXXMethodDecl *Method, DeclAccessPair FoundDecl, bool HadMultipleCandidates, Expr *From) {\n  // ...\n  case CK_ConstructorConversion: {\n    // ...\n    if (S.RequireNonAbstractType(CastLoc, Ty, diag::err_allocation_of_abstract_type))"},{D,8719,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  // C++ [class.abstract]p2:\n  //  no objects of an abstract class can be created except as subobjects\n  //  of a class derived from it\n  auto checkAbstractType = [&](QualType T) -> bool {\n    // ...\n    return S.RequireNonAbstractType(Kind.getLocation(), T, diag::err_allocation_of_abstract_type);"}},
[h]={{t,1885,"/// TryStaticImplicitCast - Tests whether a conversion according to C++ 5.2.9p2\n/// is valid:\n///\n///  An expression e can be explicitly converted to a type T using a\n///  @c static_cast if the declaration \"T t(e);\" is well-formed [...].\nTryCastResult TryStaticImplicitCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, bool ListInitialization) {\n  if (DestType->isRecordType()) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_bad_cast_incomplete) || Self.RequireNonAbstractType(OpRange.getBegin(), DestType, diag::err_allocation_of_abstract_type)) {"},{u,2468,"/// 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 (RequireNonAbstractType(Loc, AllocType, diag::err_allocation_of_abstract_type))"},{u,4120,"static ExprResult BuildCXXCastArgument(Sema &S, SourceLocation CastLoc, QualType Ty, CastKind Kind, CXXMethodDecl *Method, DeclAccessPair FoundDecl, bool HadMultipleCandidates, Expr *From) {\n  // ...\n  case CK_ConstructorConversion: {\n    // ...\n    if (S.RequireNonAbstractType(CastLoc, Ty, diag::err_allocation_of_abstract_type))"},{E,8719,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  // C++ [class.abstract]p2:\n  //  no objects of an abstract class can be created except as subobjects\n  //  of a class derived from it\n  auto checkAbstractType = [&](QualType T) -> bool {\n    // ...\n    return S.RequireNonAbstractType(Kind.getLocation(), T, diag::err_allocation_of_abstract_type);"}},
[j]={
[j]={
["clang/test/CXX/class.derived/class.abstract/p2.cpp"]={"clang/test/CXX/class.derived/class.abstract/p2.cpp:16:5: error: allocating an object of abstract class type \'A\'","clang/test/CXX/class.derived/class.abstract/p2.cpp:17:5: error: allocating an object of abstract class type \'A\'","clang/test/CXX/class.derived/class.abstract/p2.cpp:18:5: error: allocating an object of abstract class type \'A\'"}
["clang/test/CXX/class.derived/class.abstract/p2.cpp"]={"clang/test/CXX/class.derived/class.abstract/p2.cpp:16:5: error: allocating an object of abstract class type \'A\'","clang/test/CXX/class.derived/class.abstract/p2.cpp:17:5: error: allocating an object of abstract class type \'A\'","clang/test/CXX/class.derived/class.abstract/p2.cpp:18:5: error: allocating an object of abstract class type \'A\'"}
Line 788: Line 790:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"a96114ed087b",1249840544,"AltiVec-style vector initializer syntax, vec4 a = (vec4)(a, b, c, d);\n\nIn addition to being defined ...","AltiVec-style vector initializer syntax, vec4 a = (vec4)(a, b, c, d);\n\nIn addition to being defined by the AltiVec PIM, this is also the vector\ninitializer syntax used by OpenCL, so that vector literals are compatible\nwith macro arguments.\n\nllvm-svn: 78535"},
[b]={"a96114ed087b",1249840544,"AltiVec-style vector initializer syntax, vec4 a = (vec4)(a, b, c, d);","AltiVec-style vector initializer syntax, vec4 a = (vec4)(a, b, c, d);\n\nIn addition to being defined by the AltiVec PIM, this is also the vector\ninitializer syntax used by OpenCL, so that vector literals are compatible\nwith macro arguments.\n\nllvm-svn: 78535"},
[h]={{u,8445,"ExprResult Sema::ActOnCastExpr(Scope *S, SourceLocation LParenLoc, Declarator &D, ParsedType &Ty, SourceLocation RParenLoc, Expr *CastExpr) {\n  // ...\n  if ((getLangOpts().AltiVec || getLangOpts().ZVector || getLangOpts().OpenCL) && castType->isVectorType() && (PE || PLE)) {\n    if (PLE && PLE->getNumExprs() == 0) {\n      Diag(PLE->getExprLoc(), diag::err_altivec_empty_initializer);"}}
[h]={{v,8445,"ExprResult Sema::ActOnCastExpr(Scope *S, SourceLocation LParenLoc, Declarator &D, ParsedType &Ty, SourceLocation RParenLoc, Expr *CastExpr) {\n  // ...\n  if ((getLangOpts().AltiVec || getLangOpts().ZVector || getLangOpts().OpenCL) && castType->isVectorType() && (PE || PLE)) {\n    if (PLE && PLE->getNumExprs() == 0) {\n      Diag(PLE->getExprLoc(), diag::err_altivec_empty_initializer);"}}
},
},
["err_ambiguous_base_to_derived_cast"]={
["err_ambiguous_base_to_derived_cast"]={
Line 797: Line 799:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{s,1714,"/// 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.isAmbiguous(SrcType.getUnqualifiedType())) {\n    // ...\n    Self.Diag(OpRange.getBegin(), diag::err_ambiguous_base_to_derived_cast) << QualType(SrcType).getUnqualifiedType() << QualType(DestType).getUnqualifiedType() << PathDisplayStr << OpRange;"}},
[h]={{t,1714,"/// 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.isAmbiguous(SrcType.getUnqualifiedType())) {\n    // ...\n    Self.Diag(OpRange.getBegin(), diag::err_ambiguous_base_to_derived_cast) << QualType(SrcType).getUnqualifiedType() << QualType(DestType).getUnqualifiedType() << PathDisplayStr << OpRange;"}},
[j]={
[j]={
["clang/test/SemaCXX/cstyle-cast.cpp"]={"clang/test/SemaCXX/cstyle-cast.cpp:130:9: error: ambiguous cast from base \'A\' to derived \'H\':","clang/test/SemaCXX/cstyle-cast.cpp:131:9: error: ambiguous cast from base \'A\' to derived \'H\':"}
["clang/test/SemaCXX/cstyle-cast.cpp"]={"clang/test/SemaCXX/cstyle-cast.cpp:130:9: error: ambiguous cast from base \'A\' to derived \'H\':","clang/test/SemaCXX/cstyle-cast.cpp:131:9: error: ambiguous cast from base \'A\' to derived \'H\':"}
Line 809: Line 811:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"c34c179f4bcd",1253035307,"Perform overload resolution when selecting a pointer conversion\nfunction for delete of a class expre...","Perform overload resolution when selecting a pointer conversion\nfunction for delete of a class expression and issue\ngood diagnostic when result is ambiguous.\n\nllvm-svn: 81870"},
[b]={"c34c179f4bcd",1253035307,"Perform overload resolution when selecting a pointer conversion","Perform overload resolution when selecting a pointer conversion\nfunction for delete of a class expression and issue\ngood diagnostic when result is ambiguous.\n\nllvm-svn: 81870"},
[h]={{t,3646,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  // ...\n  if (!Ex.get()->isTypeDependent()) {\n    // ...\n    class DeleteConverter : public ContextualImplicitConverter {\n      // ...\n      SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_ambiguous_delete_operand) << T; }"}},
[h]={{u,3646,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  // ...\n  if (!Ex.get()->isTypeDependent()) {\n    // ...\n    class DeleteConverter : public ContextualImplicitConverter {\n      // ...\n      SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_ambiguous_delete_operand) << T; }"}},
[j]={
[j]={
["clang/test/SemaCXX/conversion-delete-expr.cpp"]={"clang/test/SemaCXX/conversion-delete-expr.cpp:14:4: error: ambiguous conversion of delete expression of type \'D\' to a pointer","clang/test/SemaCXX/conversion-delete-expr.cpp:42:4: error: ambiguous conversion of delete expression of type \'D2\' to a pointer","clang/test/SemaCXX/conversion-delete-expr.cpp:59:4: error: ambiguous conversion of delete expression of type \'D3\' to a pointer"}
["clang/test/SemaCXX/conversion-delete-expr.cpp"]={"clang/test/SemaCXX/conversion-delete-expr.cpp:14:4: error: ambiguous conversion of delete expression of type \'D\' to a pointer","clang/test/SemaCXX/conversion-delete-expr.cpp:42:4: error: ambiguous conversion of delete expression of type \'D2\' to a pointer","clang/test/SemaCXX/conversion-delete-expr.cpp:59:4: error: ambiguous conversion of delete expression of type \'D3\' to a pointer"}
Line 821: Line 823:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{r,3167,"bool Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base, SourceLocation Loc, SourceRange Range, CXXCastPath *BasePath, bool IgnoreAccess) { return CheckDerivedToBaseConversion(Derived, Base, diag::err_upcast_to_inaccessible_base, diag::err_ambiguous_derived_to_base_conv, Loc, Range, DeclarationName(), BasePath, IgnoreAccess); }"},{R,3147,"/// CheckPointerConversion - Check the pointer conversion from the\n/// expression From to the type ToType. This routine checks for\n/// ambiguous or inaccessible derived-to-base pointer\n/// conversions for which IsPointerConversion has already returned\n/// true. It returns true and produces a diagnostic if there was an\n/// error, or returns false otherwise.\nbool Sema::CheckPointerConversion(Expr *From, QualType ToType, CastKind &Kind, CXXCastPath &BasePath, bool IgnoreBaseAccess, bool Diagnose) {\n  // ...\n  if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {\n    if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {\n      // ...\n      if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() && !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {\n        // ...\n        if (Diagnose) {\n          // ...\n          AmbiguousID = diag::err_ambiguous_derived_to_base_conv;"}},
[h]={{s,3167,"bool Sema::CheckDerivedToBaseConversion(QualType Derived, QualType Base, SourceLocation Loc, SourceRange Range, CXXCastPath *BasePath, bool IgnoreAccess) { return CheckDerivedToBaseConversion(Derived, Base, diag::err_upcast_to_inaccessible_base, diag::err_ambiguous_derived_to_base_conv, Loc, Range, DeclarationName(), BasePath, IgnoreAccess); }"},{S,3147,"/// CheckPointerConversion - Check the pointer conversion from the\n/// expression From to the type ToType. This routine checks for\n/// ambiguous or inaccessible derived-to-base pointer\n/// conversions for which IsPointerConversion has already returned\n/// true. It returns true and produces a diagnostic if there was an\n/// error, or returns false otherwise.\nbool Sema::CheckPointerConversion(Expr *From, QualType ToType, CastKind &Kind, CXXCastPath &BasePath, bool IgnoreBaseAccess, bool Diagnose) {\n  // ...\n  if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {\n    if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {\n      // ...\n      if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() && !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {\n        // ...\n        if (Diagnose) {\n          // ...\n          AmbiguousID = diag::err_ambiguous_derived_to_base_conv;"}},
[j]={
[j]={
[Ab]={"clang/test/SemaCXX/dynamic-cast.cpp:62:9: error: ambiguous conversion from derived class \'F\' to base class \'A\':","clang/test/SemaCXX/dynamic-cast.cpp:63:9: error: ambiguous conversion from derived class \'F\' to base class \'A\':"}
[zb]={"clang/test/SemaCXX/dynamic-cast.cpp:62:9: error: ambiguous conversion from derived class \'F\' to base class \'A\':","clang/test/SemaCXX/dynamic-cast.cpp:63:9: error: ambiguous conversion from derived class \'F\' to base class \'A\':"}
}
}
},
},
Line 833: Line 835:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={M,1625925174,K,L},
[b]={N,1625925174,M,L},
[h]={{n,18540,"/// [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_Ambiguous:\n    Msg = diag::err_ambiguous_destructor;"}},
[h]={{m,18540,"/// [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_Ambiguous:\n    Msg = diag::err_ambiguous_destructor;"}},
[j]={
[j]={
["clang/test/CXX/class/class.dtor/p4.cpp"]={"clang/test/CXX/class/class.dtor/p4.cpp:62:17: error: destructor of class \'D<1>\' is ambiguous"}
["clang/test/CXX/class/class.dtor/p4.cpp"]={"clang/test/CXX/class/class.dtor/p4.cpp:62:17: error: destructor of class \'D<1>\' is ambiguous"}
Line 845: Line 847:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"5179eb78210a",1467140637,"P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991:\n\nReplace inheriting constru...","P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991:\n\nReplace inheriting constructors implementation with new approach, voted into\nC++ last year as a DR against C++11.\n\nInstead of synthesizing a set of derived class constructors for each inherited\nbase class constructor, we make the constructors of the base class visible to\nconstructor lookup in the derived class, using the normal rules for\nusing-declarations.\n\nFor constructors, UsingShadowDecl now has a ConstructorUsingShadowDecl derived\nclass that tracks the requisite additional information. We create shadow\nconstructors (not found by name lookup) in the derived class to model the\nactual initialization, and have a new expression node,\nCXXInheritedCtorInitExpr, to model the initialization of a base class from such\na constructor. (This initialization is special because it performs real perfect\nforwarding of arguments.)\n\nIn cases where argument forwarding is not possible (for inalloca calls,\nvariadic calls, and calls with callee parameter cleanup), the shadow inheriting\nconstructor is not emitted and instead we directly emit the initialization code\ninto the caller of the inherited constructor.\n\nNote that this new model is not perfectly compatible with the old model in some\ncorner cases. In particular:\n * if B inherits a private constructor from A, and C uses that constructor to\n  construct a B, then we previously required that A befriends B and B\n  befriends C, but the new rules require A to befriend C directly, and\n * if a derived class has its own constructors (and so its implicit default\n  constructor is suppressed), it may still inherit a default constructor from\n  a base class\n\nllvm-svn: 274049"},
[b]={"5179eb78210a",1467140637,"P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991:","P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991:\n\nReplace inheriting constructors implementation with new approach, voted into\nC++ last year as a DR against C++11.\n\nInstead of synthesizing a set of derived class constructors for each inherited\nbase class constructor, we make the constructors of the base class visible to\nconstructor lookup in the derived class, using the normal rules for\nusing-declarations.\n\nFor constructors, UsingShadowDecl now has a ConstructorUsingShadowDecl derived\nclass that tracks the requisite additional information. We create shadow\nconstructors (not found by name lookup) in the derived class to model the\nactual initialization, and have a new expression node,\nCXXInheritedCtorInitExpr, to model the initialization of a base class from such\na constructor. (This initialization is special because it performs real perfect\nforwarding of arguments.)\n\nIn cases where argument forwarding is not possible (for inalloca calls,\nvariadic calls, and calls with callee parameter cleanup), the shadow inheriting\nconstructor is not emitted and instead we directly emit the initialization code\ninto the caller of the inherited constructor.\n\nNote that this new model is not perfectly compatible with the old model in some\ncorner cases. In particular:\n * if B inherits a private constructor from A, and C uses that constructor to\n  construct a B, then we previously required that A befriends B and B\n  befriends C, but the new rules require A to befriend C directly, and\n * if a derived class has its own constructors (and so its implicit default\n  constructor is suppressed), it may still inherit a default constructor from\n  a base class\n\nllvm-svn: 274049"},
[h]={{r,7302,"class Sema::InheritedConstructorInfo {\n  // ...\n  InheritedConstructorInfo(Sema &S, SourceLocation UseLoc, ConstructorUsingShadowDecl *Shadow) : S(S), UseLoc(UseLoc) {\n    // ...\n    // Find the set of such base class subobjects and check that there\'s a\n    // unique constructed subobject.\n    for (auto *D : Shadow->redecls()) {\n      // ...\n      // [class.inhctor.init]p2:\n      //  If the constructor was inherited from multiple base class subobjects\n      //  of type B, the program is ill-formed.\n      if (!ConstructedBase) {\n      // ...\n      } else if (ConstructedBase != DConstructedBase && !Shadow->isInvalidDecl()) {\n        if (!DiagnosedMultipleConstructedBases) {\n          S.Diag(UseLoc, diag::err_ambiguous_inherited_constructor) << Shadow->getTargetDecl();"}},
[h]={{s,7302,"class Sema::InheritedConstructorInfo {\n  // ...\n  InheritedConstructorInfo(Sema &S, SourceLocation UseLoc, ConstructorUsingShadowDecl *Shadow) : S(S), UseLoc(UseLoc) {\n    // ...\n    // Find the set of such base class subobjects and check that there\'s a\n    // unique constructed subobject.\n    for (auto *D : Shadow->redecls()) {\n      // ...\n      // [class.inhctor.init]p2:\n      //  If the constructor was inherited from multiple base class subobjects\n      //  of type B, the program is ill-formed.\n      if (!ConstructedBase) {\n      // ...\n      } else if (ConstructedBase != DConstructedBase && !Shadow->isInvalidDecl()) {\n        if (!DiagnosedMultipleConstructedBases) {\n          S.Diag(UseLoc, diag::err_ambiguous_inherited_constructor) << Shadow->getTargetDecl();"}},
[j]={
[j]={
["clang/test/CXX/special/class.init/class.inhctor.init/p2.cpp"]={"clang/test/CXX/special/class.init/class.inhctor.init/p2.cpp:23:6: error: constructor of \'A\' inherited from multiple base class subobjects"}
["clang/test/CXX/special/class.init/class.inhctor.init/p2.cpp"]={"clang/test/CXX/special/class.init/class.inhctor.init/p2.cpp:23:6: error: constructor of \'A\' inherited from multiple base class subobjects"}
Line 857: Line 859:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{"clang/lib/Sema/SemaLookup.cpp",2812,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  // ...\n  case LookupResult::AmbiguousBaseSubobjectTypes: {\n    Diag(NameLoc, diag::err_ambiguous_member_multiple_subobject_types) << Name << LookupRange;"}},
[h]={{"clang/lib/Sema/SemaLookup.cpp",2812,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  // ...\n  case LookupResult::AmbiguousBaseSubobjectTypes: {\n    Diag(NameLoc, diag::err_ambiguous_member_multiple_subobject_types) << Name << LookupRange;"}},
[j]={
[j]={
Line 869: Line 871:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{"clang/lib/Sema/SemaLookup.cpp",2798,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  // ...\n  case LookupResult::AmbiguousBaseSubobjects: {\n    // ...\n    Diag(NameLoc, diag::err_ambiguous_member_multiple_subobjects) << Name << SubobjectType << getAmbiguousPathsDisplayString(*Paths) << LookupRange;"}},
[h]={{"clang/lib/Sema/SemaLookup.cpp",2798,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  // ...\n  case LookupResult::AmbiguousBaseSubobjects: {\n    // ...\n    Diag(NameLoc, diag::err_ambiguous_member_multiple_subobjects) << Name << SubobjectType << getAmbiguousPathsDisplayString(*Paths) << LookupRange;"}},
[j]={
[j]={
Line 881: Line 883:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{s,1816,"/// 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  // B is a base of D. But is it an allowed base? If not, it\'s a hard error.\n  if (Paths.isAmbiguous(Self.Context.getCanonicalType(DestClass))) {\n    // ...\n    Self.Diag(OpRange.getBegin(), diag::err_ambiguous_memptr_conv) << 1 << SrcClass << DestClass << PathDisplayStr << OpRange;"},{R,3278,"/// 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 (Paths.isAmbiguous(Context.getCanonicalType(FromClass).getUnqualifiedType())) {\n    // ...\n    Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv) << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();"}},
[h]={{t,1816,"/// 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  // B is a base of D. But is it an allowed base? If not, it\'s a hard error.\n  if (Paths.isAmbiguous(Self.Context.getCanonicalType(DestClass))) {\n    // ...\n    Self.Diag(OpRange.getBegin(), diag::err_ambiguous_memptr_conv) << 1 << SrcClass << DestClass << PathDisplayStr << OpRange;"},{S,3278,"/// 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 (Paths.isAmbiguous(Context.getCanonicalType(FromClass).getUnqualifiedType())) {\n    // ...\n    Diag(From->getExprLoc(), diag::err_ambiguous_memptr_conv) << 0 << FromClass << ToClass << PathDisplayStr << From->getSourceRange();"}},
[j]={
[j]={
["clang/test/CXX/conv/conv.mem/p4.cpp"]={"clang/test/CXX/conv/conv.mem/p4.cpp:33:25: error: ambiguous conversion from pointer to member of base class \'Base\' to pointer to member of derived class \'test2::Derived\':","clang/test/CXX/conv/conv.mem/p4.cpp:34:27: error: ambiguous conversion from pointer to member of base class \'Base\' to pointer to member of derived class \'test2::Derived\':","clang/test/CXX/conv/conv.mem/p4.cpp:52:25: error: ambiguous conversion from pointer to member of base class \'Base\' to pointer to member of derived class \'test4::Derived\':","clang/test/CXX/conv/conv.mem/p4.cpp:53:27: error: ambiguous conversion from pointer to member of base class \'Base\' to pointer to member of derived class \'test4::Derived\':"}
["clang/test/CXX/conv/conv.mem/p4.cpp"]={"clang/test/CXX/conv/conv.mem/p4.cpp:33:25: error: ambiguous conversion from pointer to member of base class \'Base\' to pointer to member of derived class \'test2::Derived\':","clang/test/CXX/conv/conv.mem/p4.cpp:34:27: error: ambiguous conversion from pointer to member of base class \'Base\' to pointer to member of derived class \'test2::Derived\':","clang/test/CXX/conv/conv.mem/p4.cpp:52:25: error: ambiguous conversion from pointer to member of base class \'Base\' to pointer to member of derived class \'test4::Derived\':","clang/test/CXX/conv/conv.mem/p4.cpp:53:27: error: ambiguous conversion from pointer to member of base class \'Base\' to pointer to member of derived class \'test4::Derived\':"}
Line 893: Line 895:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{"clang/lib/Sema/SemaLookup.cpp",2863,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  // ...\n  case LookupResult::AmbiguousReference: {\n    Diag(NameLoc, diag::err_ambiguous_reference) << Name << LookupRange;"}},
[h]={{"clang/lib/Sema/SemaLookup.cpp",2863,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  // ...\n  case LookupResult::AmbiguousReference: {\n    Diag(NameLoc, diag::err_ambiguous_reference) << Name << LookupRange;"}},
[j]={
[j]={
Line 905: Line 907:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"66a8759400a9",1280881886,"Look through using declarations when deciding whether to use an operator\ndelete for a virtual destru...","Look through using declarations when deciding whether to use an operator\ndelete for a virtual destructor.  Diagnose ambiguities.\n\nFixes PR7803.\n\nllvm-svn: 110173"},
[b]={"66a8759400a9",1280881886,"Look through using declarations when deciding whether to use an operator","Look through using declarations when deciding whether to use an operator\ndelete for a virtual destructor.  Diagnose ambiguities.\n\nFixes PR7803.\n\nllvm-svn: 110173"},
[h]={{t,3300,"bool Sema::FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD, DeclarationName Name, FunctionDecl *&Operator, bool Diagnose, bool WantSize, bool WantAligned) {\n  // ...\n  // We found multiple suitable operators; complain about the ambiguity.\n  // FIXME: The standard doesn\'t say to do this; it appears that the intent\n  // is that this should never happen.\n  if (!Matches.empty()) {\n    if (Diagnose) {\n      Diag(StartLoc, diag::err_ambiguous_suitable_delete_member_function_found) << Name << RD;"}},
[h]={{u,3300,"bool Sema::FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD, DeclarationName Name, FunctionDecl *&Operator, bool Diagnose, bool WantSize, bool WantAligned) {\n  // ...\n  // We found multiple suitable operators; complain about the ambiguity.\n  // FIXME: The standard doesn\'t say to do this; it appears that the intent\n  // is that this should never happen.\n  if (!Matches.empty()) {\n    if (Diagnose) {\n      Diag(StartLoc, diag::err_ambiguous_suitable_delete_member_function_found) << Name << RD;"}},
[j]={
[j]={
["clang/test/CXX/special/class.dtor/p9.cpp"]={"clang/test/CXX/special/class.dtor/p9.cpp:65:6: error: multiple suitable \'operator delete\' functions in \'D\'"}
["clang/test/CXX/special/class.dtor/p9.cpp"]={"clang/test/CXX/special/class.dtor/p9.cpp:65:6: error: multiple suitable \'operator delete\' functions in \'D\'"}
Line 917: Line 919:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"6538c930503a",1255153699,"Qualified lookup through using declarations.  Diagnose a new type of ambiguity.\nSplit the various am...","Qualified lookup through using declarations.  Diagnose a new type of ambiguity.\nSplit the various ambiguous result enumerators into their own enum.  Tests\nfor most of C++ [namespace.qual].\n\nllvm-svn: 83700"},
[b]={"6538c930503a",1255153699,"Qualified lookup through using declarations.  Diagnose a new type of ambiguity.","Qualified lookup through using declarations.  Diagnose a new type of ambiguity.\nSplit the various ambiguous result enumerators into their own enum.  Tests\nfor most of C++ [namespace.qual].\n\nllvm-svn: 83700"},
[h]={{"clang/lib/Sema/SemaLookup.cpp",2838,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  // ...\n  case LookupResult::AmbiguousTagHiding: {\n    Diag(NameLoc, diag::err_ambiguous_tag_hiding) << Name << LookupRange;"}},
[h]={{"clang/lib/Sema/SemaLookup.cpp",2838,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  // ...\n  case LookupResult::AmbiguousTagHiding: {\n    Diag(NameLoc, diag::err_ambiguous_tag_hiding) << Name << LookupRange;"}},
[j]={
[j]={
Line 929: Line 931:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={Pb,1534346725,Ob,Nb},
[b]={Kb,1534346725,Cb,Pb},
[h]={{"clang/lib/StaticAnalyzer/Checkers/ContainerModeling.cpp",1064,"bool ento::shouldRegisterContainerModeling(const CheckerManager &mgr) {\n  // ...\n  if (!mgr.getAnalyzerOptions().ShouldAggressivelySimplifyBinaryOperation) {\n    mgr.getASTContext().getDiagnostics().Report(diag::err_analyzer_checker_incompatible_analyzer_option) << \"aggressive-binary-operation-simplification\""}},
[h]={{"clang/lib/StaticAnalyzer/Checkers/ContainerModeling.cpp",1064,"bool ento::shouldRegisterContainerModeling(const CheckerManager &mgr) {\n  // ...\n  if (!mgr.getAnalyzerOptions().ShouldAggressivelySimplifyBinaryOperation) {\n    mgr.getASTContext().getDiagnostics().Report(diag::err_analyzer_checker_incompatible_analyzer_option) << \"aggressive-binary-operation-simplification\""}},
[j]={
[j]={
Line 941: Line 943:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={Pb,1534346725,Ob,Nb},
[b]={Kb,1534346725,Cb,Pb},
[h]={{"clang/lib/StaticAnalyzer/Core/CheckerManager.cpp",66,"void CheckerManager::reportInvalidCheckerOptionValue(const CheckerBase *C, StringRef OptionName, StringRef ExpectedValueDesc) const { getDiagnostics().Report(diag::err_analyzer_checker_option_invalid_input) << (llvm::Twine() + C->getTagDescription() + \":\" + OptionName).str() << ExpectedValueDesc; }"},{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",366,"/// Insert the checker/package option to AnalyzerOptions\' config table, and\n/// validate it, if the user supplied it on the command line.\nstatic void insertAndValidate(StringRef FullName, const CmdLineOption &Option, AnalyzerOptions &AnOpts, DiagnosticsEngine &Diags) {\n  // ...\n  if (Option.OptionType == \"bool\") {\n    if (SuppliedValue != \"true\" && SuppliedValue != \"false\") {\n      if (AnOpts.ShouldEmitErrorsOnInvalidConfigValue) {\n        Diags.Report(diag::err_analyzer_checker_option_invalid_input) << FullOption << \"a boolean value\";"},{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",380,"/// Insert the checker/package option to AnalyzerOptions\' config table, and\n/// validate it, if the user supplied it on the command line.\nstatic void insertAndValidate(StringRef FullName, const CmdLineOption &Option, AnalyzerOptions &AnOpts, DiagnosticsEngine &Diags) {\n  // ...\n  if (Option.OptionType == \"int\") {\n    // ...\n    if (HasFailed) {\n      if (AnOpts.ShouldEmitErrorsOnInvalidConfigValue) {\n        Diags.Report(diag::err_analyzer_checker_option_invalid_input) << FullOption << \"an integer value\";"}}
[h]={{"clang/lib/StaticAnalyzer/Core/CheckerManager.cpp",66,"void CheckerManager::reportInvalidCheckerOptionValue(const CheckerBase *C, StringRef OptionName, StringRef ExpectedValueDesc) const { getDiagnostics().Report(diag::err_analyzer_checker_option_invalid_input) << (llvm::Twine() + C->getTagDescription() + \":\" + OptionName).str() << ExpectedValueDesc; }"},{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",366,"/// Insert the checker/package option to AnalyzerOptions\' config table, and\n/// validate it, if the user supplied it on the command line.\nstatic void insertAndValidate(StringRef FullName, const CmdLineOption &Option, AnalyzerOptions &AnOpts, DiagnosticsEngine &Diags) {\n  // ...\n  if (Option.OptionType == \"bool\") {\n    if (SuppliedValue != \"true\" && SuppliedValue != \"false\") {\n      if (AnOpts.ShouldEmitErrorsOnInvalidConfigValue) {\n        Diags.Report(diag::err_analyzer_checker_option_invalid_input) << FullOption << \"a boolean value\";"},{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",380,"/// Insert the checker/package option to AnalyzerOptions\' config table, and\n/// validate it, if the user supplied it on the command line.\nstatic void insertAndValidate(StringRef FullName, const CmdLineOption &Option, AnalyzerOptions &AnOpts, DiagnosticsEngine &Diags) {\n  // ...\n  if (Option.OptionType == \"int\") {\n    // ...\n    if (HasFailed) {\n      if (AnOpts.ShouldEmitErrorsOnInvalidConfigValue) {\n        Diags.Report(diag::err_analyzer_checker_option_invalid_input) << FullOption << \"an integer value\";"}}
},
},
Line 950: Line 952:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={Pb,1534346725,Ob,Nb},
[b]={Kb,1534346725,Cb,Pb},
[h]={{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",484,"static void isOptionContainedIn(const CmdLineOptionList &OptionList, StringRef SuppliedChecker, StringRef SuppliedOption, const AnalyzerOptions &AnOpts, DiagnosticsEngine &Diags) {\n  // ...\n  if (llvm::none_of(OptionList, SameOptName)) {\n    Diags.Report(diag::err_analyzer_checker_option_unknown) << SuppliedChecker << SuppliedOption;"}}
[h]={{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",484,"static void isOptionContainedIn(const CmdLineOptionList &OptionList, StringRef SuppliedChecker, StringRef SuppliedOption, const AnalyzerOptions &AnOpts, DiagnosticsEngine &Diags) {\n  // ...\n  if (llvm::none_of(OptionList, SameOptName)) {\n    Diags.Report(diag::err_analyzer_checker_option_unknown) << SuppliedChecker << SuppliedOption;"}}
},
},
Line 959: Line 961:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={Pb,1534346725,Ob,Nb},
[b]={Kb,1534346725,Cb,Pb},
[h]={{O,1106,"static void initOption(AnalyzerOptions::ConfigTable &Config, DiagnosticsEngine *Diags, bool &OptionField, StringRef Name, bool DefaultVal) {\n  // ...\n  if (!PossiblyInvalidVal) {\n    if (Diags)\n      Diags->Report(diag::err_analyzer_config_invalid_input) << Name << \"a boolean\";"},{O,1123,"static void initOption(AnalyzerOptions::ConfigTable &Config, DiagnosticsEngine *Diags, unsigned &OptionField, StringRef Name, unsigned DefaultVal) {\n  // ...\n  if (Diags && HasFailed)\n    Diags->Report(diag::err_analyzer_config_invalid_input) << Name << \"an unsigned\";"},{O,1181,"#include \"clang/StaticAnalyzer/Core/AnalyzerOptions.def\"\n  // ...\n  if (AnOpts.ShouldTrackConditionsDebug && !AnOpts.ShouldTrackConditions)\n    Diags->Report(diag::err_analyzer_config_invalid_input) << \"track-conditions-debug\""},{O,1185,"#include \"clang/StaticAnalyzer/Core/AnalyzerOptions.def\"\n  // ...\n  if (!AnOpts.CTUDir.empty() && !llvm::sys::fs::is_directory(AnOpts.CTUDir))\n    Diags->Report(diag::err_analyzer_config_invalid_input) << \"ctu-dir\""},{O,1190,"#include \"clang/StaticAnalyzer/Core/AnalyzerOptions.def\"\n  // ...\n  if (!AnOpts.ModelPath.empty() && !llvm::sys::fs::is_directory(AnOpts.ModelPath))\n    Diags->Report(diag::err_analyzer_config_invalid_input) << \"model-path\""}}
[h]={{P,1106,"static void initOption(AnalyzerOptions::ConfigTable &Config, DiagnosticsEngine *Diags, bool &OptionField, StringRef Name, bool DefaultVal) {\n  // ...\n  if (!PossiblyInvalidVal) {\n    if (Diags)\n      Diags->Report(diag::err_analyzer_config_invalid_input) << Name << \"a boolean\";"},{P,1123,"static void initOption(AnalyzerOptions::ConfigTable &Config, DiagnosticsEngine *Diags, unsigned &OptionField, StringRef Name, unsigned DefaultVal) {\n  // ...\n  if (Diags && HasFailed)\n    Diags->Report(diag::err_analyzer_config_invalid_input) << Name << \"an unsigned\";"},{P,1181,"#include \"clang/StaticAnalyzer/Core/AnalyzerOptions.def\"\n  // ...\n  if (AnOpts.ShouldTrackConditionsDebug && !AnOpts.ShouldTrackConditions)\n    Diags->Report(diag::err_analyzer_config_invalid_input) << \"track-conditions-debug\""},{P,1185,"#include \"clang/StaticAnalyzer/Core/AnalyzerOptions.def\"\n  // ...\n  if (!AnOpts.CTUDir.empty() && !llvm::sys::fs::is_directory(AnOpts.CTUDir))\n    Diags->Report(diag::err_analyzer_config_invalid_input) << \"ctu-dir\""},{P,1190,"#include \"clang/StaticAnalyzer/Core/AnalyzerOptions.def\"\n  // ...\n  if (!AnOpts.ModelPath.empty() && !llvm::sys::fs::is_directory(AnOpts.ModelPath))\n    Diags->Report(diag::err_analyzer_config_invalid_input) << \"model-path\""}}
},
},
["err_analyzer_config_multiple_values"]={
["err_analyzer_config_multiple_values"]={
Line 968: Line 970:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"fb5351eed39a",1346219700,"Add new -cc1 driver option -analyzer-config, which allows one to specify\na comma separated collectio...","Add new -cc1 driver option -analyzer-config, which allows one to specify\na comma separated collection of key:value pairs (which are strings).  This\nallows a general way to provide analyzer configuration data from the command line.\n\nNo clients yet.\n\nllvm-svn: 162827"},
[b]={"fb5351eed39a",1346219700,"Add new -cc1 driver option -analyzer-config, which allows one to specify","Add new -cc1 driver option -analyzer-config, which allows one to specify\na comma separated collection of key:value pairs (which are strings).  This\nallows a general way to provide analyzer configuration data from the command line.\n\nNo clients yet.\n\nllvm-svn: 162827"},
[h]={{O,1045,"#include \"clang/StaticAnalyzer/Core/Analyses.def\"\n  // ...\n  // Go through the analyzer configuration options.\n  for (const auto *A : Args.filtered(OPT_analyzer_config)) {\n    // ...\n    for (const auto &configVal : configVals) {\n      // ...\n      if (val.contains(\'=\')) {\n        Diags.Report(SourceLocation(), diag::err_analyzer_config_multiple_values) << configVal;"}}
[h]={{P,1045,"#include \"clang/StaticAnalyzer/Core/Analyses.def\"\n  // ...\n  // Go through the analyzer configuration options.\n  for (const auto *A : Args.filtered(OPT_analyzer_config)) {\n    // ...\n    for (const auto &configVal : configVals) {\n      // ...\n      if (val.contains(\'=\')) {\n        Diags.Report(SourceLocation(), diag::err_analyzer_config_multiple_values) << configVal;"}}
},
},
["err_analyzer_config_no_value"]={
["err_analyzer_config_no_value"]={
Line 977: Line 979:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"fb5351eed39a",1346219700,"Add new -cc1 driver option -analyzer-config, which allows one to specify\na comma separated collectio...","Add new -cc1 driver option -analyzer-config, which allows one to specify\na comma separated collection of key:value pairs (which are strings).  This\nallows a general way to provide analyzer configuration data from the command line.\n\nNo clients yet.\n\nllvm-svn: 162827"},
[b]={"fb5351eed39a",1346219700,"Add new -cc1 driver option -analyzer-config, which allows one to specify","Add new -cc1 driver option -analyzer-config, which allows one to specify\na comma separated collection of key:value pairs (which are strings).  This\nallows a general way to provide analyzer configuration data from the command line.\n\nNo clients yet.\n\nllvm-svn: 162827"},
[h]={{O,1040,"#include \"clang/StaticAnalyzer/Core/Analyses.def\"\n  // ...\n  // Go through the analyzer configuration options.\n  for (const auto *A : Args.filtered(OPT_analyzer_config)) {\n    // ...\n    for (const auto &configVal : configVals) {\n      // ...\n      if (val.empty()) {\n        Diags.Report(SourceLocation(), diag::err_analyzer_config_no_value) << configVal;"}}
[h]={{P,1040,"#include \"clang/StaticAnalyzer/Core/Analyses.def\"\n  // ...\n  // Go through the analyzer configuration options.\n  for (const auto *A : Args.filtered(OPT_analyzer_config)) {\n    // ...\n    for (const auto &configVal : configVals) {\n      // ...\n      if (val.empty()) {\n        Diags.Report(SourceLocation(), diag::err_analyzer_config_no_value) << configVal;"}}
},
},
["err_analyzer_config_unknown"]={
["err_analyzer_config_unknown"]={
Line 986: Line 988:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={Pb,1534346725,Ob,Nb},
[b]={Kb,1534346725,Cb,Pb},
[h]={{O,1054,"#include \"clang/StaticAnalyzer/Core/Analyses.def\"\n  // ...\n  // Go through the analyzer configuration options.\n  for (const auto *A : Args.filtered(OPT_analyzer_config)) {\n    // ...\n    for (const auto &configVal : configVals) {\n      // ...\n      // TODO: Check checker options too, possibly in CheckerRegistry.\n      // Leave unknown non-checker configs unclaimed.\n      if (!key.contains(\":\") && Opts.isUnknownAnalyzerConfig(key)) {\n        if (Opts.ShouldEmitErrorsOnInvalidConfigValue)\n          Diags.Report(diag::err_analyzer_config_unknown) << key;"}}
[h]={{P,1054,"#include \"clang/StaticAnalyzer/Core/Analyses.def\"\n  // ...\n  // Go through the analyzer configuration options.\n  for (const auto *A : Args.filtered(OPT_analyzer_config)) {\n    // ...\n    for (const auto &configVal : configVals) {\n      // ...\n      // TODO: Check checker options too, possibly in CheckerRegistry.\n      // Leave unknown non-checker configs unclaimed.\n      if (!key.contains(\":\") && Opts.isUnknownAnalyzerConfig(key)) {\n        if (Opts.ShouldEmitErrorsOnInvalidConfigValue)\n          Diags.Report(diag::err_analyzer_config_unknown) << key;"}}
},
},
["err_analyzer_not_built_with_z3"]={
["err_analyzer_not_built_with_z3"]={
Line 995: Line 997:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.\n\nThis is sup...","[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.\n\nThis is support for the user-facing options to create importable header units\nfrom headers in the user or system search paths (or to be given an absolute path).\n\nThis means that an incomplete header path will be passed by the driver and the\nlookup carried out using the search paths present when the front end is run.\n\nTo support this, we introduce file fypes for c++-{user,system,header-unit}-header.\nThese terms are the same as the ones used by GCC, to minimise the differences for\ntooling (and users).\n\nThe preprocessor checks for headers before issuing a warning for\n\"#pragma once\" in a header build.  We ensure that the importable header units\nare recognised as headers in order to avoid such warnings.\n\nDifferential Revision: https://reviews.llvm.org/D121096"},
[b]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.","[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.\n\nThis is support for the user-facing options to create importable header units\nfrom headers in the user or system search paths (or to be given an absolute path).\n\nThis means that an incomplete header path will be passed by the driver and the\nlookup carried out using the search paths present when the front end is run.\n\nTo support this, we introduce file fypes for c++-{user,system,header-unit}-header.\nThese terms are the same as the ones used by GCC, to minimise the differences for\ntooling (and users).\n\nThe preprocessor checks for headers before issuing a warning for\n\"#pragma once\" in a header build.  We ensure that the importable header units\nare recognised as headers in order to avoid such warnings.\n\nDifferential Revision: https://reviews.llvm.org/D121096"},
[h]={{O,960,"#ifndef LLVM_WITH_Z3\n      if (Value == AnalysisConstraints::Z3ConstraintsModel) {\n        Diags.Report(diag::err_analyzer_not_built_with_z3);"}}
[h]={{P,960,"#ifndef LLVM_WITH_Z3\n      if (Value == AnalysisConstraints::Z3ConstraintsModel) {\n        Diags.Report(diag::err_analyzer_not_built_with_z3);"}}
},
},
["err_anon_bitfield_has_negative_width"]={
["err_anon_bitfield_has_negative_width"]={
Line 1,004: Line 1,006:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"f9b00eb7dc88",1240248578,"clean up anonymous bitfield diagnostics, PR4017\n\nllvm-svn: 69608","clean up anonymous bitfield diagnostics, PR4017\n\nllvm-svn: 69608"},
[b]={"f9b00eb7dc88",1240248578,"clean up anonymous bitfield diagnostics, PR4017","clean up anonymous bitfield diagnostics, PR4017\n\nllvm-svn: 69608"},
[h]={{n,17926,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  if (Value.isSigned() && Value.isNegative()) {\n    // ...\n    return Diag(FieldLoc, diag::err_anon_bitfield_has_negative_width) << toString(Value, 10);"}},
[h]={{m,17926,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  if (Value.isSigned() && Value.isNegative()) {\n    // ...\n    return Diag(FieldLoc, diag::err_anon_bitfield_has_negative_width) << toString(Value, 10);"}},
[j]={
[j]={
["clang/test/Sema/bitfield.c"]={"clang/test/Sema/bitfield.c:26:3: error: anonymous bit-field has negative width (-2)"}
["clang/test/Sema/bitfield.c"]={"clang/test/Sema/bitfield.c:26:3: error: anonymous bit-field has negative width (-2)"}
Line 1,015: Line 1,017:
[e]="anonymous bit\\-field cannot have a default member initializer",
[e]="anonymous bit\\-field cannot have a default member initializer",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"2e204e23911b",1601401476,"[clang] Enable support for #pragma STDC FENV_ACCESS\n\nReviewers: rjmccall, rsmith, sepavloff\n\nDiffere...","[clang] Enable support for #pragma STDC FENV_ACCESS\n\nReviewers: rjmccall, rsmith, sepavloff\n\nDifferential Revision: https://reviews.llvm.org/D87528"},
[b]={"2e204e23911b",1601401476,"[clang] Enable support for #pragma STDC FENV_ACCESS","[clang] Enable support for #pragma STDC FENV_ACCESS\n\nReviewers: rjmccall, rsmith, sepavloff\n\nDifferential Revision: https://reviews.llvm.org/D87528"},
[h]={{I,3021,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  // ...\n  while (true) {\n    // ...\n    if (Tok.isOneOf(tok::equal, tok::l_brace) && PureSpecLoc.isInvalid()) {\n      // DRXXXX: Anonymous bit-fields cannot have a brace-or-equal-initializer.\n      if (BitfieldSize.isUsable() && !DeclaratorInfo.hasName()) {\n        // ...\n        Diag(Tok, diag::err_anon_bitfield_member_init);"}},
[h]={{J,3021,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  // ...\n  while (true) {\n    // ...\n    if (Tok.isOneOf(tok::equal, tok::l_brace) && PureSpecLoc.isInvalid()) {\n      // DRXXXX: Anonymous bit-fields cannot have a brace-or-equal-initializer.\n      if (BitfieldSize.isUsable() && !DeclaratorInfo.hasName()) {\n        // ...\n        Diag(Tok, diag::err_anon_bitfield_member_init);"}},
[j]={
[j]={
["clang/test/CXX/class/class.bit/p1.cpp"]={"clang/test/CXX/class/class.bit/p1.cpp:10:11: error: anonymous bit-field cannot have a default member initializer","clang/test/CXX/class/class.bit/p1.cpp:11:11: error: anonymous bit-field cannot have a default member initializer","clang/test/CXX/class/class.bit/p1.cpp:13:11: error: anonymous bit-field cannot have a default member initializer"}
["clang/test/CXX/class/class.bit/p1.cpp"]={"clang/test/CXX/class/class.bit/p1.cpp:10:11: error: anonymous bit-field cannot have a default member initializer","clang/test/CXX/class/class.bit/p1.cpp:11:11: error: anonymous bit-field cannot have a default member initializer","clang/test/CXX/class/class.bit/p1.cpp:13:11: error: anonymous bit-field cannot have a default member initializer"}
Line 1,028: Line 1,030:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"33e90d160b1b",1521320920,"Implement DR2229, which prohibits unnamed bit-fields from having qualifiers in C++.\n\nllvm-svn: 32778...","Implement DR2229, which prohibits unnamed bit-fields from having qualifiers in C++.\n\nllvm-svn: 327781"},
[b]={"33e90d160b1b",1521320920,"Implement DR2229, which prohibits unnamed bit-fields from having qualifiers in C++.","Implement DR2229, which prohibits unnamed bit-fields from having qualifiers in C++.\n\nllvm-svn: 327781"},
[h]={{n,18153,"/// 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  // Anonymous bit-fields cannot be cv-qualified (CWG 2229).\n  if (!InvalidDecl && getLangOpts().CPlusPlus && !II && BitWidth && T.hasQualifiers()) {\n    // ...\n    Diag(Loc, diag::err_anon_bitfield_qualifiers);"}},
[h]={{m,18153,"/// 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  // Anonymous bit-fields cannot be cv-qualified (CWG 2229).\n  if (!InvalidDecl && getLangOpts().CPlusPlus && !II && BitWidth && T.hasQualifiers()) {\n    // ...\n    Diag(Loc, diag::err_anon_bitfield_qualifiers);"}},
[j]={
[j]={
["clang/test/CXX/class/class.bit/p2.cpp"]={"clang/test/CXX/class/class.bit/p2.cpp:12:13: error: anonymous bit-field cannot have qualifiers"}
["clang/test/CXX/class/class.bit/p2.cpp"]={"clang/test/CXX/class/class.bit/p2.cpp:12:13: error: anonymous bit-field cannot have qualifiers"}
Line 1,039: Line 1,041:
[e]="declaration of anonymous (.*?) must be a definition",
[e]="declaration of anonymous (.*?) must be a definition",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{I,1949,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  if (!Name && !TemplateId && (DS.getTypeSpecType() == DeclSpec::TST_error || TUK != Sema::TUK_Definition)) {\n    if (DS.getTypeSpecType() != DeclSpec::TST_error) {\n      // ...\n      Diag(StartLoc, diag::err_anon_type_definition) << DeclSpec::getSpecifierName(TagType, Policy);"}},
[h]={{J,1949,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  if (!Name && !TemplateId && (DS.getTypeSpecType() == DeclSpec::TST_error || TUK != Sema::TUK_Definition)) {\n    if (DS.getTypeSpecType() != DeclSpec::TST_error) {\n      // ...\n      Diag(StartLoc, diag::err_anon_type_definition) << DeclSpec::getSpecifierName(TagType, Policy);"}},
[j]={
[j]={
["clang/test/Sema/decl-invalid.c"]={"clang/test/Sema/decl-invalid.c:4:9: error: declaration of anonymous union must be a definition","clang/test/Sema/decl-invalid.c:19:1: error: declaration of anonymous struct must be a definition"}
["clang/test/Sema/decl-invalid.c"]={"clang/test/Sema/decl-invalid.c:4:9: error: declaration of anonymous union must be a definition","clang/test/Sema/decl-invalid.c:19:1: error: declaration of anonymous struct must be a definition"}
Line 1,051: Line 1,053:
[e]="ISO C\\+\\+ only allows \'\\:\' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit\\-field",
[e]="ISO C\\+\\+ only allows \'\\:\' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit\\-field",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"c90e19810743",1588991058,"Fix parsing of enum-base to follow C++11 rules.\n\nPreviously we implemented non-standard disambiguati...","Fix parsing of enum-base to follow C++11 rules.\n\nPreviously we implemented non-standard disambiguation rules to\ndistinguish an enum-base from a bit-field but otherwise treated a :\nafter an elaborated-enum-specifier as introducing an enum-base. That\nmisparses various examples (anywhere an elaborated-type-specifier can\nappear followed by a colon, such as within a ternary operator or\n_Generic).\n\nWe now implement the C++11 rules, with the old cases accepted as\nextensions where that seemed reasonable. These amount to:\n * an enum-base must always be accompanied by an enum definition (except\n  in a standalone declaration of the form \'enum E : T;\')\n * in a member-declaration, \'enum E :\' always introduces an enum-base,\n  never a bit-field\n * in a type-specifier (or similar context), \'enum E :\' is not\n  permitted; the colon means whatever else it would mean in that\n  context.\n\nFixed underlying types for enums are also permitted in Objective-C and\nunder MS extensions, plus as a language extension in all other modes.\nThe behavior in ObjC and MS extensions modes is unchanged (but the\nbit-field disambiguation is a bit better); remaining language modes\nfollow the C++11 rules.\n\nFixes PR45726, PR39979, PR19810, PR44941, and most of PR24297, plus C++\ncore issues 1514 and 1966."},
[b]={"c90e19810743",1588991058,"Fix parsing of enum-base to follow C++11 rules.","Fix parsing of enum-base to follow C++11 rules.\n\nPreviously we implemented non-standard disambiguation rules to\ndistinguish an enum-base from a bit-field but otherwise treated a :\nafter an elaborated-enum-specifier as introducing an enum-base. That\nmisparses various examples (anywhere an elaborated-type-specifier can\nappear followed by a colon, such as within a ternary operator or\n_Generic).\n\nWe now implement the C++11 rules, with the old cases accepted as\nextensions where that seemed reasonable. These amount to:\n * an enum-base must always be accompanied by an enum definition (except\n  in a standalone declaration of the form \'enum E : T;\')\n * in a member-declaration, \'enum E :\' always introduces an enum-base,\n  never a bit-field\n * in a type-specifier (or similar context), \'enum E :\' is not\n  permitted; the colon means whatever else it would mean in that\n  context.\n\nFixed underlying types for enums are also permitted in Objective-C and\nunder MS extensions, plus as a language extension in all other modes.\nThe behavior in ObjC and MS extensions modes is unchanged (but the\nbit-field disambiguation is a bit better); remaining language modes\nfollow the C++11 rules.\n\nFixes PR45726, PR39979, PR19810, PR44941, and most of PR24297, plus C++\ncore issues 1514 and 1966."},
[h]={{A,4919,"/// 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  // Parse the fixed underlying type.\n  if (Tok.is(tok::colon)) {\n    // ...\n    if (CanBeBitfield && !isEnumBase(CanBeOpaqueEnumDeclaration)) {\n      // Outside C++11, do not interpret the tokens as an enum-base if they do\n      // not make sense as one. In C++11, it\'s an error if this happens.\n      if (getLangOpts().CPlusPlus11)\n        Diag(Tok.getLocation(), diag::err_anonymous_enum_bitfield);"}},
[h]={{B,4919,"/// 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  // Parse the fixed underlying type.\n  if (Tok.is(tok::colon)) {\n    // ...\n    if (CanBeBitfield && !isEnumBase(CanBeOpaqueEnumDeclaration)) {\n      // Outside C++11, do not interpret the tokens as an enum-base if they do\n      // not make sense as one. In C++11, it\'s an error if this happens.\n      if (getLangOpts().CPlusPlus11)\n        Diag(Tok.getLocation(), diag::err_anonymous_enum_bitfield);"}},
[j]={
[j]={
["clang/test/SemaCXX/enum-bitfield.cpp"]={"clang/test/SemaCXX/enum-bitfield.cpp:9:10: error: ISO C++ only allows \':\' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit-field","clang/test/SemaCXX/enum-bitfield.cpp:16:10: error: ISO C++ only allows \':\' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit-field","clang/test/SemaCXX/enum-bitfield.cpp:17:10: error: ISO C++ only allows \':\' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit-field"}
["clang/test/SemaCXX/enum-bitfield.cpp"]={"clang/test/SemaCXX/enum-bitfield.cpp:9:10: error: ISO C++ only allows \':\' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit-field","clang/test/SemaCXX/enum-bitfield.cpp:16:10: error: ISO C++ only allows \':\' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit-field","clang/test/SemaCXX/enum-bitfield.cpp:17:10: error: ISO C++ only allows \':\' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit-field"}
Line 1,064: Line 1,066:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"5e77d76c953d",1366097310,"Basic support for Microsoft property declarations and\nreferences thereto.\n\nPatch by Tong Shen!\n\nllvm...","Basic support for Microsoft property declarations and\nreferences thereto.\n\nPatch by Tong Shen!\n\nllvm-svn: 179585"},
[b]={"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"},
[h]={{r,18817,"/// HandleMSProperty - Analyze a __delcspec(property) field of a C++ class.\n///\nMSPropertyDecl *Sema::HandleMSProperty(Scope *S, RecordDecl *Record, SourceLocation DeclStart, Declarator &D, Expr *BitWidth, InClassInitStyle InitStyle, AccessSpecifier AS, const ParsedAttr &MSPropertyAttr) {\n  // ...\n  if (!II) {\n    Diag(DeclStart, diag::err_anonymous_property);"}},
[h]={{s,18817,"/// HandleMSProperty - Analyze a __delcspec(property) field of a C++ class.\n///\nMSPropertyDecl *Sema::HandleMSProperty(Scope *S, RecordDecl *Record, SourceLocation DeclStart, Declarator &D, Expr *BitWidth, InClassInitStyle InitStyle, AccessSpecifier AS, const ParsedAttr &MSPropertyAttr) {\n  // ...\n  if (!II) {\n    Diag(DeclStart, diag::err_anonymous_property);"}},
[j]={
[j]={
["clang/test/SemaCXX/MicrosoftExtensions.cpp"]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:410:38: error: anonymous property is not supported"}
["clang/test/SemaCXX/MicrosoftExtensions.cpp"]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:410:38: error: anonymous property is not supported"}
Line 1,076: Line 1,078:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{n,5645,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      // ...\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      // ...\n      } else if (Mem->isImplicit()) {\n      // ...\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      // ...\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      // ...\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      // ...\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      // ...\n      } else {\n        // ...\n        unsigned DK = diag::err_anonymous_record_bad_member;"}}
[h]={{m,5645,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      // ...\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      // ...\n      } else if (Mem->isImplicit()) {\n      // ...\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      // ...\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      // ...\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      // ...\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      // ...\n      } else {\n        // ...\n        unsigned DK = diag::err_anonymous_record_bad_member;"}}
},
},
["err_anonymous_record_member_redecl"]={
["err_anonymous_record_member_redecl"]={
Line 1,085: Line 1,087:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC\n\nllvm-svn: 253315","[Sema] Combine similar diagnostics using %select. NFC\n\nllvm-svn: 253315"},
[b]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC","[Sema] Combine similar diagnostics using %select. NFC\n\nllvm-svn: 253315"},
[h]={{n,5358,"/// We are trying to inject an anonymous member into the given scope;\n/// check if there\'s an existing declaration that can\'t be overloaded.\n///\n/// \\return true if this is a forbidden redeclaration\nstatic bool CheckAnonMemberRedeclaration(Sema &SemaRef, Scope *S, DeclContext *Owner, DeclarationName Name, SourceLocation NameLoc, bool IsUnion) {\n  // ...\n  SemaRef.Diag(NameLoc, diag::err_anonymous_record_member_redecl) << IsUnion << Name;"}},
[h]={{m,5358,"/// We are trying to inject an anonymous member into the given scope;\n/// check if there\'s an existing declaration that can\'t be overloaded.\n///\n/// \\return true if this is a forbidden redeclaration\nstatic bool CheckAnonMemberRedeclaration(Sema &SemaRef, Scope *S, DeclContext *Owner, DeclarationName Name, SourceLocation NameLoc, bool IsUnion) {\n  // ...\n  SemaRef.Diag(NameLoc, diag::err_anonymous_record_member_redecl) << IsUnion << Name;"}},
[j]={
[j]={
["clang/test/Sema/anonymous-struct-union.c"]={"clang/test/Sema/anonymous-struct-union.c:44:9: error: member of anonymous union redeclares \'x\'","clang/test/Sema/anonymous-struct-union.c:88:9: error: member of anonymous union redeclares \'f0\'"}
["clang/test/Sema/anonymous-struct-union.c"]={"clang/test/Sema/anonymous-struct-union.c:44:9: error: member of anonymous union redeclares \'x\'","clang/test/Sema/anonymous-struct-union.c:88:9: error: member of anonymous union redeclares \'f0\'"}
Line 1,097: Line 1,099:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{n,5598,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      // ...\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n        // ...\n        if (FD->getAccess() != AS_public) {\n          Diag(FD->getLocation(), diag::err_anonymous_record_nonpublic_member) << Record->isUnion() << (FD->getAccess() == AS_protected);"}},
[h]={{m,5598,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      // ...\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n        // ...\n        if (FD->getAccess() != AS_public) {\n          Diag(FD->getLocation(), diag::err_anonymous_record_nonpublic_member) << Record->isUnion() << (FD->getAccess() == AS_protected);"}},
[j]={
[j]={
["clang/test/SemaCXX/anonymous-union.cpp"]={"clang/test/SemaCXX/anonymous-union.cpp:116:16: error: anonymous union cannot contain a private data member","clang/test/SemaCXX/anonymous-union.cpp:117:20: error: anonymous union cannot contain a protected data member"}
["clang/test/SemaCXX/anonymous-union.cpp"]={"clang/test/SemaCXX/anonymous-union.cpp:116:16: error: anonymous union cannot contain a private data member","clang/test/SemaCXX/anonymous-union.cpp:117:20: error: anonymous union cannot contain a protected data member"}
Line 1,109: Line 1,111:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{n,5649,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      // ...\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      // ...\n      } else if (Mem->isImplicit()) {\n      // ...\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      // ...\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      // ...\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      // ...\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      // ...\n      } else {\n        // ...\n        if (isa<TypeDecl>(Mem))\n        // ...\n        else if (isa<FunctionDecl>(Mem))\n          DK = diag::err_anonymous_record_with_function;"}},
[h]={{m,5649,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      // ...\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      // ...\n      } else if (Mem->isImplicit()) {\n      // ...\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      // ...\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      // ...\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      // ...\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      // ...\n      } else {\n        // ...\n        if (isa<TypeDecl>(Mem))\n        // ...\n        else if (isa<FunctionDecl>(Mem))\n          DK = diag::err_anonymous_record_with_function;"}},
[j]={
[j]={
["clang/test/SemaCXX/anonymous-union.cpp"]={"clang/test/SemaCXX/anonymous-union.cpp:115:10: error: functions cannot be declared in an anonymous union"}
["clang/test/SemaCXX/anonymous-union.cpp"]={"clang/test/SemaCXX/anonymous-union.cpp:115:10: error: functions cannot be declared in an anonymous union"}
Line 1,121: Line 1,123:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{n,5651,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      // ...\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      // ...\n      } else if (Mem->isImplicit()) {\n      // ...\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      // ...\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      // ...\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      // ...\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      // ...\n      } else {\n        // ...\n        if (isa<TypeDecl>(Mem))\n        // ...\n        else if (isa<FunctionDecl>(Mem))\n        // ...\n        else if (isa<VarDecl>(Mem))\n          DK = diag::err_anonymous_record_with_static;"}}
[h]={{m,5651,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      // ...\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      // ...\n      } else if (Mem->isImplicit()) {\n      // ...\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      // ...\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      // ...\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      // ...\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      // ...\n      } else {\n        // ...\n        if (isa<TypeDecl>(Mem))\n        // ...\n        else if (isa<FunctionDecl>(Mem))\n        // ...\n        else if (isa<VarDecl>(Mem))\n          DK = diag::err_anonymous_record_with_static;"}}
},
},
["err_anonymous_record_with_type"]={
["err_anonymous_record_with_type"]={
Line 1,130: Line 1,132:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{n,5626,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      // ...\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      // ...\n      } else if (Mem->isImplicit()) {\n      // ...\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      // ...\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n        if (!MemRecord->isAnonymousStructOrUnion() && MemRecord->getDeclName()) {\n          // Visual C++ allows type definition in anonymous struct or union.\n          if (getLangOpts().MicrosoftExt)\n          // ...\n          else {\n            // ...\n            Diag(MemRecord->getLocation(), diag::err_anonymous_record_with_type) << Record->isUnion();"},{n,5647,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      // ...\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      // ...\n      } else if (Mem->isImplicit()) {\n      // ...\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      // ...\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      // ...\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      // ...\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      // ...\n      } else {\n        // ...\n        if (isa<TypeDecl>(Mem))\n          DK = diag::err_anonymous_record_with_type;"},{n,5655,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      // ...\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      // ...\n      } else if (Mem->isImplicit()) {\n      // ...\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      // ...\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      // ...\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      // ...\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      // ...\n      } else {\n        // ...\n        if (getLangOpts().MicrosoftExt && DK == diag::err_anonymous_record_with_type)"}},
[h]={{m,5626,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      // ...\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      // ...\n      } else if (Mem->isImplicit()) {\n      // ...\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      // ...\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n        if (!MemRecord->isAnonymousStructOrUnion() && MemRecord->getDeclName()) {\n          // Visual C++ allows type definition in anonymous struct or union.\n          if (getLangOpts().MicrosoftExt)\n          // ...\n          else {\n            // ...\n            Diag(MemRecord->getLocation(), diag::err_anonymous_record_with_type) << Record->isUnion();"},{m,5647,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      // ...\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      // ...\n      } else if (Mem->isImplicit()) {\n      // ...\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      // ...\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      // ...\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      // ...\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      // ...\n      } else {\n        // ...\n        if (isa<TypeDecl>(Mem))\n          DK = diag::err_anonymous_record_with_type;"},{m,5655,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    // C++ [class.union]p2:\n    //  The member-specification of an anonymous union shall only\n    //  define non-static data members. [Note: nested types and\n    //  functions cannot be declared within an anonymous union. ]\n    for (auto *Mem : Record->decls()) {\n      // ...\n      if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n      // ...\n      } else if (Mem->isImplicit()) {\n      // ...\n      } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n      // ...\n      } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n      // ...\n      } else if (isa<AccessSpecDecl>(Mem)) {\n      // ...\n      } else if (isa<StaticAssertDecl>(Mem)) {\n      // ...\n      } else {\n        // ...\n        if (getLangOpts().MicrosoftExt && DK == diag::err_anonymous_record_with_type)"}},
[j]={
[j]={
["clang/test/SemaCXX/anonymous-union.cpp"]={"clang/test/SemaCXX/anonymous-union.cpp:112:12: error: types cannot be declared in an anonymous union"}
["clang/test/SemaCXX/anonymous-union.cpp"]={"clang/test/SemaCXX/anonymous-union.cpp:112:12: error: types cannot be declared in an anonymous union"}
Line 1,142: Line 1,144:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{n,5675,"/// 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 (!Record->isUnion() && !Owner->isRecord()) {\n    Diag(Record->getLocation(), diag::err_anonymous_struct_not_member) << getLangOpts().CPlusPlus;"}},
[h]={{m,5675,"/// 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 (!Record->isUnion() && !Owner->isRecord()) {\n    Diag(Record->getLocation(), diag::err_anonymous_struct_not_member) << getLangOpts().CPlusPlus;"}},
[j]={
[j]={
["clang/test/CXX/module/module.interface/p3.cpp"]={"clang/test/CXX/module/module.interface/p3.cpp:19:8: error: anonymous structs and classes must be class members"}
["clang/test/CXX/module/module.interface/p3.cpp"]={"clang/test/CXX/module/module.interface/p3.cpp:19:8: error: anonymous structs and classes must be class members"}
Line 1,154: Line 1,156:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{n,5530,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    if (Record->isUnion()) {\n      // ...\n      if (DS.getStorageClassSpec() != DeclSpec::SCS_static && (OwnerScope->isTranslationUnit() || (OwnerScope->isNamespace() && !cast<NamespaceDecl>(OwnerScope)->isAnonymousNamespace()))) {\n        Diag(Record->getLocation(), diag::err_anonymous_union_not_static) << FixItHint::CreateInsertion(Record->getLocation(), \"static \");"}},
[h]={{m,5530,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    if (Record->isUnion()) {\n      // ...\n      if (DS.getStorageClassSpec() != DeclSpec::SCS_static && (OwnerScope->isTranslationUnit() || (OwnerScope->isNamespace() && !cast<NamespaceDecl>(OwnerScope)->isAnonymousNamespace()))) {\n        Diag(Record->getLocation(), diag::err_anonymous_union_not_static) << FixItHint::CreateInsertion(Record->getLocation(), \"static \");"}},
[j]={
[j]={
["clang/test/CXX/module/module.interface/p3.cpp"]={"clang/test/CXX/module/module.interface/p3.cpp:21:8: error: anonymous unions at namespace or global scope must be declared \'static\'"}
["clang/test/CXX/module/module.interface/p3.cpp"]={"clang/test/CXX/module/module.interface/p3.cpp:21:8: error: anonymous unions at namespace or global scope must be declared \'static\'"}
Line 1,166: Line 1,168:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{n,5543,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    if (Record->isUnion()) {\n      // ...\n      }\n      // C++ [class.union]p6:\n      //  A storage class is not allowed in a declaration of an\n      //  anonymous union in a class scope.\n      else if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified && isa<RecordDecl>(Owner)) {\n        Diag(DS.getStorageClassSpecLoc(), diag::err_anonymous_union_with_storage_spec) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}},
[h]={{m,5543,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    if (Record->isUnion()) {\n      // ...\n      }\n      // C++ [class.union]p6:\n      //  A storage class is not allowed in a declaration of an\n      //  anonymous union in a class scope.\n      else if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified && isa<RecordDecl>(Owner)) {\n        Diag(DS.getStorageClassSpecLoc(), diag::err_anonymous_union_with_storage_spec) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}},
[j]={
[j]={
["clang/test/SemaCXX/anonymous-union.cpp"]={"clang/test/SemaCXX/anonymous-union.cpp:27:3: error: anonymous union at class scope must not have a storage specifier"}
["clang/test/SemaCXX/anonymous-union.cpp"]={"clang/test/SemaCXX/anonymous-union.cpp:27:3: error: anonymous union at class scope must not have a storage specifier"}
Line 1,178: Line 1,180:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"d51e9933b6aa",1452830791,"[X86] Support \'interrupt\' attribute for x86\nThis attribute may be attached to a function definition ...","[X86] Support \'interrupt\' attribute for x86\nThis attribute may be attached to a function definition and instructs the backend to generate appropriate function entry/exit code so that\nit can be used directly as an interrupt handler.\nThe IRET instruction, instead of the RET instruction, is used to return from interrupt or exception handlers. All registers, except for the EFLAGS register which is restored by the IRET instruction, are preserved by the compiler.\nAny interruptible-without-stack-switch code must be compiled with -mno-red-zone since interrupt handlers can and will, because of the hardware design, touch\nthe red zone.\n\ninterrupt handler must be declared with a mandatory pointer argument:\nstruct interrupt_frame;\n\n__attribute__ ((interrupt))\nvoid f (struct interrupt_frame *frame) {\n    ...\n}\nand user must properly define the structure the pointer pointing to.\n\nexception handler: \n\nThe exception handler is very similar to the interrupt handler with a different mandatory function signature:\n#ifdef __x86_64__\ntypedef unsigned long long int uword_t;\n#else\ntypedef unsigned int uword_t;\n#endif\n\nstruct interrupt_frame;\n\n__attribute__ ((interrupt))\nvoid f (struct interrupt_frame *frame, uword_t error_code) {\n    ...\n}\nand compiler pops the error code off stack before the IRET instruction.\n\nThe exception handler should only be used for exceptions which push an error code and all other exceptions must use the interrupt handler.\nThe system will crash if the wrong handler is used.\nDifferential Revision: http://reviews.llvm.org/D15709\n\nllvm-svn: 257867"},
[b]={"d51e9933b6aa",1452830791,"[X86] Support \'interrupt\' attribute for x86","[X86] Support \'interrupt\' attribute for x86\nThis attribute may be attached to a function definition and instructs the backend to generate appropriate function entry/exit code so that\nit can be used directly as an interrupt handler.\nThe IRET instruction, instead of the RET instruction, is used to return from interrupt or exception handlers. All registers, except for the EFLAGS register which is restored by the IRET instruction, are preserved by the compiler.\nAny interruptible-without-stack-switch code must be compiled with -mno-red-zone since interrupt handlers can and will, because of the hardware design, touch\nthe red zone.\n\ninterrupt handler must be declared with a mandatory pointer argument:\nstruct interrupt_frame;\n\n__attribute__ ((interrupt))\nvoid f (struct interrupt_frame *frame) {\n    ...\n}\nand user must properly define the structure the pointer pointing to.\n\nexception handler: \n\nThe exception handler is very similar to the interrupt handler with a different mandatory function signature:\n#ifdef __x86_64__\ntypedef unsigned long long int uword_t;\n#else\ntypedef unsigned int uword_t;\n#endif\n\nstruct interrupt_frame;\n\n__attribute__ ((interrupt))\nvoid f (struct interrupt_frame *frame, uword_t error_code) {\n    ...\n}\nand compiler pops the error code off stack before the IRET instruction.\n\nThe exception handler should only be used for exceptions which push an error code and all other exceptions must use the interrupt handler.\nThe system will crash if the wrong handler is used.\nDifferential Revision: http://reviews.llvm.org/D15709\n\nllvm-svn: 257867"},
[h]={{l,7536,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Interrupt handler must have void return type.\n  if (!getFunctionOrMethodResultType(D)->isVoidType()) {\n    S.Diag(getFunctionOrMethodResultSourceRange(D).getBegin(), diag::err_anyx86_interrupt_attribute) << (S.Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86 ? 0 : 1) << 0;"},{l,7546,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (NumParams < 1 || NumParams > 2) {\n    S.Diag(D->getBeginLoc(), diag::err_anyx86_interrupt_attribute) << (S.Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86 ? 0 : 1) << 1;"},{l,7556,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // The first argument must be a pointer.\n  if (!getFunctionOrMethodParamType(D, 0)->isPointerType()) {\n    S.Diag(getFunctionOrMethodParamRange(D, 0).getBegin(), diag::err_anyx86_interrupt_attribute) << (S.Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86 ? 0 : 1) << 2;"},{l,7572,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (NumParams == 2 && (!getFunctionOrMethodParamType(D, 1)->isUnsignedIntegerType() || S.Context.getTypeSize(getFunctionOrMethodParamType(D, 1)) != TypeSize)) {\n    S.Diag(getFunctionOrMethodParamRange(D, 1).getBegin(), diag::err_anyx86_interrupt_attribute) << (S.Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86 ? 0 : 1) << 3 << S.Context.getIntTypeForBitwidth(TypeSize, /*Signed=*/false);"}},
[h]={{l,7536,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Interrupt handler must have void return type.\n  if (!getFunctionOrMethodResultType(D)->isVoidType()) {\n    S.Diag(getFunctionOrMethodResultSourceRange(D).getBegin(), diag::err_anyx86_interrupt_attribute) << (S.Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86 ? 0 : 1) << 0;"},{l,7546,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (NumParams < 1 || NumParams > 2) {\n    S.Diag(D->getBeginLoc(), diag::err_anyx86_interrupt_attribute) << (S.Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86 ? 0 : 1) << 1;"},{l,7556,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // The first argument must be a pointer.\n  if (!getFunctionOrMethodParamType(D, 0)->isPointerType()) {\n    S.Diag(getFunctionOrMethodParamRange(D, 0).getBegin(), diag::err_anyx86_interrupt_attribute) << (S.Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86 ? 0 : 1) << 2;"},{l,7572,"static void handleAnyX86InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (NumParams == 2 && (!getFunctionOrMethodParamType(D, 1)->isUnsignedIntegerType() || S.Context.getTypeSize(getFunctionOrMethodParamType(D, 1)) != TypeSize)) {\n    S.Diag(getFunctionOrMethodParamRange(D, 1).getBegin(), diag::err_anyx86_interrupt_attribute) << (S.Context.getTargetInfo().getTriple().getArch() == llvm::Triple::x86 ? 0 : 1) << 3 << S.Context.getIntTypeForBitwidth(TypeSize, /*Signed=*/false);"}},
[j]={
[j]={
Line 1,190: Line 1,192:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"d51e9933b6aa",1452830791,"[X86] Support \'interrupt\' attribute for x86\nThis attribute may be attached to a function definition ...","[X86] Support \'interrupt\' attribute for x86\nThis attribute may be attached to a function definition and instructs the backend to generate appropriate function entry/exit code so that\nit can be used directly as an interrupt handler.\nThe IRET instruction, instead of the RET instruction, is used to return from interrupt or exception handlers. All registers, except for the EFLAGS register which is restored by the IRET instruction, are preserved by the compiler.\nAny interruptible-without-stack-switch code must be compiled with -mno-red-zone since interrupt handlers can and will, because of the hardware design, touch\nthe red zone.\n\ninterrupt handler must be declared with a mandatory pointer argument:\nstruct interrupt_frame;\n\n__attribute__ ((interrupt))\nvoid f (struct interrupt_frame *frame) {\n    ...\n}\nand user must properly define the structure the pointer pointing to.\n\nexception handler: \n\nThe exception handler is very similar to the interrupt handler with a different mandatory function signature:\n#ifdef __x86_64__\ntypedef unsigned long long int uword_t;\n#else\ntypedef unsigned int uword_t;\n#endif\n\nstruct interrupt_frame;\n\n__attribute__ ((interrupt))\nvoid f (struct interrupt_frame *frame, uword_t error_code) {\n    ...\n}\nand compiler pops the error code off stack before the IRET instruction.\n\nThe exception handler should only be used for exceptions which push an error code and all other exceptions must use the interrupt handler.\nThe system will crash if the wrong handler is used.\nDifferential Revision: http://reviews.llvm.org/D15709\n\nllvm-svn: 257867"},
[b]={"d51e9933b6aa",1452830791,"[X86] Support \'interrupt\' attribute for x86","[X86] Support \'interrupt\' attribute for x86\nThis attribute may be attached to a function definition and instructs the backend to generate appropriate function entry/exit code so that\nit can be used directly as an interrupt handler.\nThe IRET instruction, instead of the RET instruction, is used to return from interrupt or exception handlers. All registers, except for the EFLAGS register which is restored by the IRET instruction, are preserved by the compiler.\nAny interruptible-without-stack-switch code must be compiled with -mno-red-zone since interrupt handlers can and will, because of the hardware design, touch\nthe red zone.\n\ninterrupt handler must be declared with a mandatory pointer argument:\nstruct interrupt_frame;\n\n__attribute__ ((interrupt))\nvoid f (struct interrupt_frame *frame) {\n    ...\n}\nand user must properly define the structure the pointer pointing to.\n\nexception handler: \n\nThe exception handler is very similar to the interrupt handler with a different mandatory function signature:\n#ifdef __x86_64__\ntypedef unsigned long long int uword_t;\n#else\ntypedef unsigned int uword_t;\n#endif\n\nstruct interrupt_frame;\n\n__attribute__ ((interrupt))\nvoid f (struct interrupt_frame *frame, uword_t error_code) {\n    ...\n}\nand compiler pops the error code off stack before the IRET instruction.\n\nThe exception handler should only be used for exceptions which push an error code and all other exceptions must use the interrupt handler.\nThe system will crash if the wrong handler is used.\nDifferential Revision: http://reviews.llvm.org/D15709\n\nllvm-svn: 257867"},
[h]={{u,7356,"/// 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  // Functions with \'interrupt\' attribute cannot be called directly.\n  if (FDecl && FDecl->hasAttr<AnyX86InterruptAttr>()) {\n    Diag(Fn->getExprLoc(), diag::err_anyx86_interrupt_called);"}},
[h]={{v,7356,"/// 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  // Functions with \'interrupt\' attribute cannot be called directly.\n  if (FDecl && FDecl->hasAttr<AnyX86InterruptAttr>()) {\n    Diag(Fn->getExprLoc(), diag::err_anyx86_interrupt_called);"}},
[j]={
[j]={
["clang/test/SemaCXX/attr-x86-interrupt.cpp"]={"clang/test/SemaCXX/attr-x86-interrupt.cpp:62:3: error: interrupt service routine cannot be called directly","clang/test/SemaCXX/attr-x86-interrupt.cpp:68:3: error: interrupt service routine cannot be called directly","clang/test/SemaCXX/attr-x86-interrupt.cpp:48:3: error: interrupt service routine cannot be called directly"}
["clang/test/SemaCXX/attr-x86-interrupt.cpp"]={"clang/test/SemaCXX/attr-x86-interrupt.cpp:62:3: error: interrupt service routine cannot be called directly","clang/test/SemaCXX/attr-x86-interrupt.cpp:68:3: error: interrupt service routine cannot be called directly","clang/test/SemaCXX/attr-x86-interrupt.cpp:48:3: error: interrupt service routine cannot be called directly"}
Line 1,201: Line 1,203:
[e]="must explicitly describe intended ownership of an object array parameter",
[e]="must explicitly describe intended ownership of an object array parameter",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={db,1308874139,cb,eb},
[b]={bb,1308874139,cb,db},
[h]={{n,14905,"ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc, SourceLocation NameLoc, IdentifierInfo *Name, QualType T, TypeSourceInfo *TSInfo, StorageClass SC) {\n  // In ARC, infer a lifetime qualifier for appropriate parameter types.\n  if (getLangOpts().ObjCAutoRefCount && T.getObjCLifetime() == Qualifiers::OCL_None && T->isObjCLifetimeType()) {\n    // ...\n    // Special cases for arrays:\n    //  - if it\'s const, use __unsafe_unretained\n    //  - otherwise, it\'s an error\n    if (T->isArrayType()) {\n      if (!T.isConstQualified()) {\n        if (DelayedDiagnostics.shouldDelayDiagnostics())\n          DelayedDiagnostics.add(sema::DelayedDiagnostic::makeForbiddenType(NameLoc, diag::err_arc_array_param_no_ownership, T, false));"},{n,14907,"ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc, SourceLocation NameLoc, IdentifierInfo *Name, QualType T, TypeSourceInfo *TSInfo, StorageClass SC) {\n  // In ARC, infer a lifetime qualifier for appropriate parameter types.\n  if (getLangOpts().ObjCAutoRefCount && T.getObjCLifetime() == Qualifiers::OCL_None && T->isObjCLifetimeType()) {\n    // ...\n    // Special cases for arrays:\n    //  - if it\'s const, use __unsafe_unretained\n    //  - otherwise, it\'s an error\n    if (T->isArrayType()) {\n      if (!T.isConstQualified()) {\n        if (DelayedDiagnostics.shouldDelayDiagnostics())\n        // ...\n        else\n          Diag(NameLoc, diag::err_arc_array_param_no_ownership) << TSInfo->getTypeLoc().getSourceRange();"},{l,9835,"/// Handle a delayed forbidden-type diagnostic.\nstatic void handleDelayedForbiddenType(Sema &S, DelayedDiagnostic &DD, Decl *D) {\n  // ...\n  if (S.getLangOpts().ObjCAutoRefCount)\n    if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n      // ...\n      if (FD->hasAttr<UnavailableAttr>() && DD.getForbiddenTypeDiagnostic() == diag::err_arc_array_param_no_ownership) {"}},
[h]={{m,14905,"ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc, SourceLocation NameLoc, IdentifierInfo *Name, QualType T, TypeSourceInfo *TSInfo, StorageClass SC) {\n  // In ARC, infer a lifetime qualifier for appropriate parameter types.\n  if (getLangOpts().ObjCAutoRefCount && T.getObjCLifetime() == Qualifiers::OCL_None && T->isObjCLifetimeType()) {\n    // ...\n    // Special cases for arrays:\n    //  - if it\'s const, use __unsafe_unretained\n    //  - otherwise, it\'s an error\n    if (T->isArrayType()) {\n      if (!T.isConstQualified()) {\n        if (DelayedDiagnostics.shouldDelayDiagnostics())\n          DelayedDiagnostics.add(sema::DelayedDiagnostic::makeForbiddenType(NameLoc, diag::err_arc_array_param_no_ownership, T, false));"},{m,14907,"ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc, SourceLocation NameLoc, IdentifierInfo *Name, QualType T, TypeSourceInfo *TSInfo, StorageClass SC) {\n  // In ARC, infer a lifetime qualifier for appropriate parameter types.\n  if (getLangOpts().ObjCAutoRefCount && T.getObjCLifetime() == Qualifiers::OCL_None && T->isObjCLifetimeType()) {\n    // ...\n    // Special cases for arrays:\n    //  - if it\'s const, use __unsafe_unretained\n    //  - otherwise, it\'s an error\n    if (T->isArrayType()) {\n      if (!T.isConstQualified()) {\n        if (DelayedDiagnostics.shouldDelayDiagnostics())\n        // ...\n        else\n          Diag(NameLoc, diag::err_arc_array_param_no_ownership) << TSInfo->getTypeLoc().getSourceRange();"},{l,9835,"/// Handle a delayed forbidden-type diagnostic.\nstatic void handleDelayedForbiddenType(Sema &S, DelayedDiagnostic &DD, Decl *D) {\n  // ...\n  if (S.getLangOpts().ObjCAutoRefCount)\n    if (const auto *FD = dyn_cast<FunctionDecl>(D)) {\n      // ...\n      if (FD->hasAttr<UnavailableAttr>() && DD.getForbiddenTypeDiagnostic() == diag::err_arc_array_param_no_ownership) {"}},
[j]={
[j]={
["clang/test/SemaObjCXX/arc-0x.mm"]={"clang/test/SemaObjCXX/arc-0x.mm:110:16: error: must explicitly describe intended ownership of an object array parameter","clang/test/SemaObjCXX/arc-0x.mm:111:15: error: must explicitly describe intended ownership of an object array parameter"}
["clang/test/SemaObjCXX/arc-0x.mm"]={"clang/test/SemaObjCXX/arc-0x.mm:110:16: error: must explicitly describe intended ownership of an object array parameter","clang/test/SemaObjCXX/arc-0x.mm:111:15: error: must explicitly describe intended ownership of an object array parameter"}
Line 1,214: Line 1,216:
[f]=a,
[f]=a,
[g]="ARC and @properties",
[g]="ARC and @properties",
[b]={db,1308874139,cb,eb},
[b]={bb,1308874139,cb,db},
[h]={{bb,208,"class PropertiesRewriter {\n  // ...\n  void removeAssignForDefaultStrong(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{bb,237,"class PropertiesRewriter {\n  // ...\n  void rewriteAssign(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      // ...\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{bb,262,"class PropertiesRewriter {\n  // ...\n  void maybeAddWeakOrUnsafeUnretainedAttr(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      // ...\n      if (I->ImplD) {\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{P,777,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n  // ...\n  case Qualifiers::OCL_ExplicitNone:\n    S.Diag(ivar->getLocation(), diag::err_arc_assign_property_ownership) << property->getDeclName() << ivar->getDeclName() << ((property->getPropertyAttributesAsWritten() & ObjCPropertyAttribute::kind_assign) != 0);"}},
[h]={{ab,208,"class PropertiesRewriter {\n  // ...\n  void removeAssignForDefaultStrong(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{ab,237,"class PropertiesRewriter {\n  // ...\n  void rewriteAssign(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      // ...\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{ab,262,"class PropertiesRewriter {\n  // ...\n  void maybeAddWeakOrUnsafeUnretainedAttr(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      // ...\n      if (I->ImplD) {\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{Q,777,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n  // ...\n  case Qualifiers::OCL_ExplicitNone:\n    S.Diag(ivar->getLocation(), diag::err_arc_assign_property_ownership) << property->getDeclName() << ivar->getDeclName() << ((property->getPropertyAttributesAsWritten() & ObjCPropertyAttribute::kind_assign) != 0);"}},
[j]={
[j]={
["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:24:13: error: existing instance variable \'_ub\' for property \'ub\' with unsafe_unretained attribute must be __unsafe_unretained"}
["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:24:13: error: existing instance variable \'_ub\' for property \'ub\' with unsafe_unretained attribute must be __unsafe_unretained"}
Line 1,225: Line 1,227:
[e]="cannot perform atomic operation on a pointer to type (.*?)\\: type has non\\-trivial ownership",
[e]="cannot perform atomic operation on a pointer to type (.*?)\\: type has non\\-trivial ownership",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={db,1308874139,cb,eb},
[b]={bb,1308874139,cb,db},
[h]={{p,3238,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n  // ...\n  case Qualifiers::OCL_Weak:\n  case Qualifiers::OCL_Strong:\n  case Qualifiers::OCL_Autoreleasing:\n    Diag(DRE->getBeginLoc(), diag::err_arc_atomic_ownership) << ValType << PointerArg->getSourceRange();"},{p,7247,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  case Qualifiers::OCL_Weak:\n  case Qualifiers::OCL_Strong:\n  case Qualifiers::OCL_Autoreleasing:\n    // ...\n    Diag(ExprRange.getBegin(), diag::err_arc_atomic_ownership) << ValType << Ptr->getSourceRange();"},{p,7582,"/// 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  case Qualifiers::OCL_Weak:\n  case Qualifiers::OCL_Strong:\n  case Qualifiers::OCL_Autoreleasing:\n    Diag(DRE->getBeginLoc(), diag::err_arc_atomic_ownership) << ValType << FirstArg->getSourceRange();"}},
[h]={{o,3238,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n  // ...\n  case Qualifiers::OCL_Weak:\n  case Qualifiers::OCL_Strong:\n  case Qualifiers::OCL_Autoreleasing:\n    Diag(DRE->getBeginLoc(), diag::err_arc_atomic_ownership) << ValType << PointerArg->getSourceRange();"},{o,7247,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  case Qualifiers::OCL_Weak:\n  case Qualifiers::OCL_Strong:\n  case Qualifiers::OCL_Autoreleasing:\n    // ...\n    Diag(ExprRange.getBegin(), diag::err_arc_atomic_ownership) << ValType << Ptr->getSourceRange();"},{o,7582,"/// 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  case Qualifiers::OCL_Weak:\n  case Qualifiers::OCL_Strong:\n  case Qualifiers::OCL_Autoreleasing:\n    Diag(DRE->getBeginLoc(), diag::err_arc_atomic_ownership) << ValType << FirstArg->getSourceRange();"}},
[j]={
[j]={
[zb]={"clang/test/SemaObjC/arc.m:515:3: error: cannot perform atomic operation on a pointer to type \'__strong id\': type has non-trivial ownership"}
[ub]={"clang/test/SemaObjC/arc.m:515:3: error: cannot perform atomic operation on a pointer to type \'__strong id\': type has non-trivial ownership"}
}
}
},
},
Line 1,237: Line 1,239:
[e]="cannot capture __autoreleasing variable in a (?:block|lambda by copy)",
[e]="cannot capture __autoreleasing variable in a (?:block|lambda by copy)",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={"67cd5e094e43",1333085028,"Forbid the block and lambda copy-capture of __autoreleasing variables\nin ARC, under the usual reason...","Forbid the block and lambda copy-capture of __autoreleasing variables\nin ARC, under the usual reasoning limiting the use of __autoreleasing.\n\nllvm-svn: 153725"},
[b]={"67cd5e094e43",1333085028,"Forbid the block and lambda copy-capture of __autoreleasing variables","Forbid the block and lambda copy-capture of __autoreleasing variables\nin ARC, under the usual reasoning limiting the use of __autoreleasing.\n\nllvm-svn: 153725"},
[h]={{u,19244,"// 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  // Forbid the block-capture of autoreleasing variables.\n  if (!Invalid && CaptureType.getObjCLifetime() == Qualifiers::OCL_Autoreleasing) {\n    if (BuildAndDiagnose) {\n      S.Diag(Loc, diag::err_arc_autoreleasing_capture) << /*block*/ 0;"},{u,19394,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // ...\n  // Compute the type of the field that will capture this variable.\n  if (ByRef) {\n  // ...\n  } else {\n    // ...\n    // Forbid the lambda copy-capture of autoreleasing variables.\n    if (!Invalid && CaptureType.getObjCLifetime() == Qualifiers::OCL_Autoreleasing) {\n      if (BuildAndDiagnose) {\n        S.Diag(Loc, diag::err_arc_autoreleasing_capture) << /*lambda*/ 1;"}},
[h]={{v,19244,"// 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  // Forbid the block-capture of autoreleasing variables.\n  if (!Invalid && CaptureType.getObjCLifetime() == Qualifiers::OCL_Autoreleasing) {\n    if (BuildAndDiagnose) {\n      S.Diag(Loc, diag::err_arc_autoreleasing_capture) << /*block*/ 0;"},{v,19394,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // ...\n  // Compute the type of the field that will capture this variable.\n  if (ByRef) {\n  // ...\n  } else {\n    // ...\n    // Forbid the lambda copy-capture of autoreleasing variables.\n    if (!Invalid && CaptureType.getObjCLifetime() == Qualifiers::OCL_Autoreleasing) {\n      if (BuildAndDiagnose) {\n        S.Diag(Loc, diag::err_arc_autoreleasing_capture) << /*lambda*/ 1;"}},
[j]={
[j]={
["clang/test/SemaObjC/arc-invalid.m"]={"clang/test/SemaObjC/arc-invalid.m:17:23: error: cannot capture __autoreleasing variable in a block"}
["clang/test/SemaObjC/arc-invalid.m"]={"clang/test/SemaObjC/arc-invalid.m:17:23: error: cannot capture __autoreleasing variable in a block"}
Line 1,249: Line 1,251:
[e]="(?:__block variables|global variables|fields|instance variables) cannot have __autoreleasing ownership",
[e]="(?:__block variables|global variables|fields|instance variables) cannot have __autoreleasing ownership",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{n,6876,"bool Sema::inferObjCARCLifetime(ValueDecl *decl) {\n  // ...\n  if (lifetime == Qualifiers::OCL_Autoreleasing) {\n    // ...\n    if (kind != -1U) {\n      Diag(decl->getLocation(), diag::err_arc_autoreleasing_var) << kind;"}},
[h]={{m,6876,"bool Sema::inferObjCARCLifetime(ValueDecl *decl) {\n  // ...\n  if (lifetime == Qualifiers::OCL_Autoreleasing) {\n    // ...\n    if (kind != -1U) {\n      Diag(decl->getLocation(), diag::err_arc_autoreleasing_var) << kind;"}},
[j]={
[j]={
["clang/test/SemaObjC/arc-property-decl-attrs.m"]={"clang/test/SemaObjC/arc-property-decl-attrs.m:8:24: error: instance variables cannot have __autoreleasing ownership","clang/test/SemaObjC/arc-property-decl-attrs.m:19:24: error: instance variables cannot have __autoreleasing ownership","clang/test/SemaObjC/arc-property-decl-attrs.m:30:24: error: instance variables cannot have __autoreleasing ownership"}
["clang/test/SemaObjC/arc-property-decl-attrs.m"]={"clang/test/SemaObjC/arc-property-decl-attrs.m:8:24: error: instance variables cannot have __autoreleasing ownership","clang/test/SemaObjC/arc-property-decl-attrs.m:19:24: error: instance variables cannot have __autoreleasing ownership","clang/test/SemaObjC/arc-property-decl-attrs.m:30:24: error: instance variables cannot have __autoreleasing ownership"}
Line 1,262: Line 1,264:
[f]=a,
[f]=a,
[g]="ARC Casting Rules",
[g]="ARC Casting Rules",
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{C,4728,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  // ...\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  // ...\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n  // ...\n  } else if (T->isCARCBridgableType() && FromType->isObjCARCBridgableType()) {\n  // ...\n  } else {\n    Diag(LParenLoc, diag::err_arc_bridge_cast_incompatible) << FromType << T << Kind << SubExpr->getSourceRange() << TSInfo->getTypeLoc().getSourceRange();"}},
[h]={{C,4728,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  // ...\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  // ...\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n  // ...\n  } else if (T->isCARCBridgableType() && FromType->isObjCARCBridgableType()) {\n  // ...\n  } else {\n    Diag(LParenLoc, diag::err_arc_bridge_cast_incompatible) << FromType << T << Kind << SubExpr->getSourceRange() << TSInfo->getTypeLoc().getSourceRange();"}},
[j]={
[j]={
Line 1,274: Line 1,276:
[f]=a,
[f]=a,
[g]="ARC Casting Rules",
[g]="ARC Casting Rules",
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{C,4665,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  // ...\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  // ...\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n    // ...\n    case OBC_BridgeRetained: {\n      // ...\n      Diag(BridgeKeywordLoc, diag::err_arc_bridge_cast_wrong_kind) << 2 << FromType << (T->isBlockPointerType() ? 1 : 0) << T << SubExpr->getSourceRange() << Kind;"},{C,4708,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  // ...\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  // ...\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n  // ...\n  } else if (T->isCARCBridgableType() && FromType->isObjCARCBridgableType()) {\n    // ...\n    case OBC_BridgeTransfer: {\n      // ...\n      Diag(BridgeKeywordLoc, diag::err_arc_bridge_cast_wrong_kind) << (FromType->isBlockPointerType() ? 1 : 0) << FromType << 2 << T << SubExpr->getSourceRange() << Kind;"}}
[h]={{C,4665,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  // ...\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  // ...\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n    // ...\n    case OBC_BridgeRetained: {\n      // ...\n      Diag(BridgeKeywordLoc, diag::err_arc_bridge_cast_wrong_kind) << 2 << FromType << (T->isBlockPointerType() ? 1 : 0) << T << SubExpr->getSourceRange() << Kind;"},{C,4708,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  // ...\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  // ...\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n  // ...\n  } else if (T->isCARCBridgableType() && FromType->isObjCARCBridgableType()) {\n    // ...\n    case OBC_BridgeTransfer: {\n      // ...\n      Diag(BridgeKeywordLoc, diag::err_arc_bridge_cast_wrong_kind) << (FromType->isBlockPointerType() ? 1 : 0) << FromType << 2 << T << SubExpr->getSourceRange() << Kind;"}}
},
},
Line 1,283: Line 1,285:
[f]=a,
[f]=a,
[g]="ARC Parse Issue",
[g]="ARC Parse Issue",
[b]={"0c07bee8bd2c",1308347772,"Only accept __bridge_retain in system headers, as Doug suggested.\n\nllvm-svn: 133300","Only accept __bridge_retain in system headers, as Doug suggested.\n\nllvm-svn: 133300"},
[b]={"0c07bee8bd2c",1308347772,"Only accept __bridge_retain in system headers, as Doug suggested.","Only accept __bridge_retain in system headers, as Doug suggested.\n\nllvm-svn: 133300"},
[h]={{Cb,2982,"/// 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  } else if (ExprType >= CompoundLiteral && BridgeCast) {\n    // ...\n    if (tokenKind == tok::kw___bridge)\n    // ...\n    else if (tokenKind == tok::kw___bridge_transfer)\n    // ...\n    else if (tokenKind == tok::kw___bridge_retained)\n    // ...\n    else {\n      // ...\n      if (!PP.getSourceManager().isInSystemHeader(BridgeKeywordLoc))\n        Diag(BridgeKeywordLoc, diag::err_arc_bridge_retain) << FixItHint::CreateReplacement(BridgeKeywordLoc, \"__bridge_retained\");"}},
[h]={{tb,2982,"/// 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  } else if (ExprType >= CompoundLiteral && BridgeCast) {\n    // ...\n    if (tokenKind == tok::kw___bridge)\n    // ...\n    else if (tokenKind == tok::kw___bridge_transfer)\n    // ...\n    else if (tokenKind == tok::kw___bridge_retained)\n    // ...\n    else {\n      // ...\n      if (!PP.getSourceManager().isInSystemHeader(BridgeKeywordLoc))\n        Diag(BridgeKeywordLoc, diag::err_arc_bridge_retain) << FixItHint::CreateReplacement(BridgeKeywordLoc, \"__bridge_retained\");"}},
[j]={
[j]={
["clang/test/SemaObjC/arc-bridged-cast.m"]={"clang/test/SemaObjC/arc-bridged-cast.m:35:20: error: unknown cast annotation __bridge_retain; did you mean __bridge_retained?"}
["clang/test/SemaObjC/arc-bridged-cast.m"]={"clang/test/SemaObjC/arc-bridged-cast.m:35:20: error: unknown cast annotation __bridge_retain; did you mean __bridge_retained?"}
Line 1,295: Line 1,297:
[f]=a,
[f]=a,
[g]="ARC Casting Rules",
[g]="ARC Casting Rules",
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{gb,210,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  // ...\n  void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind, Transaction &Trans) {\n    // ...\n    if (!TA.hasDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, E->getBeginLoc())) {"},{gb,227,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  // ...\n  void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind, Transaction &Trans) {\n    // ...\n    TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, E->getBeginLoc());"},{gb,303,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  // ...\n  void rewriteBlockCopyMacro(CastExpr *E) {\n    // ...\n    Pass.TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, OuterRange);"},{gb,313,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  // ...\n  void removeBlockReleaseMacro(CastExpr *E) {\n    // ...\n    Pass.TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, OuterRange);"},{C,3918,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // ...\n  // Bridge from an ARC type to a CF type.\n  if (castACTC == ACTC_retainable && isAnyRetainable(exprACTC)) {\n    S.Diag(loc, diag::err_arc_cast_requires_bridge) << convKindForDiag << 2                                    // of C pointer type"},{C,3960,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // ...\n  // Bridge from a CF type to an ARC type.\n  if (exprACTC == ACTC_retainable && isAnyRetainable(castACTC)) {\n    // ...\n    S.Diag(loc, diag::err_arc_cast_requires_bridge) << convKindForDiag << unsigned(castExprType->isBlockPointerType()) // of ObjC|block type"}},
[h]={{lb,210,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  // ...\n  void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind, Transaction &Trans) {\n    // ...\n    if (!TA.hasDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, E->getBeginLoc())) {"},{lb,227,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  // ...\n  void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind, Transaction &Trans) {\n    // ...\n    TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, E->getBeginLoc());"},{lb,303,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  // ...\n  void rewriteBlockCopyMacro(CastExpr *E) {\n    // ...\n    Pass.TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, OuterRange);"},{lb,313,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  // ...\n  void removeBlockReleaseMacro(CastExpr *E) {\n    // ...\n    Pass.TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, OuterRange);"},{C,3918,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // ...\n  // Bridge from an ARC type to a CF type.\n  if (castACTC == ACTC_retainable && isAnyRetainable(exprACTC)) {\n    S.Diag(loc, diag::err_arc_cast_requires_bridge) << convKindForDiag << 2                                    // of C pointer type"},{C,3960,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // ...\n  // Bridge from a CF type to an ARC type.\n  if (exprACTC == ACTC_retainable && isAnyRetainable(castACTC)) {\n    // ...\n    S.Diag(loc, diag::err_arc_cast_requires_bridge) << convKindForDiag << unsigned(castExprType->isBlockPointerType()) // of ObjC|block type"}},
[j]={
[j]={
["clang/test/SemaObjCXX/objcbridge-static-cast.mm"]={"clang/test/SemaObjCXX/objcbridge-static-cast.mm:30:10: error: cast of C pointer type \'CFTestingRef\' (aka \'__CFError *\') to Objective-C pointer type \'NSString *\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:56:9: error: cast of C pointer type \'CFErrorRef2\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'NSString *\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:60:9: error: cast of C pointer type \'CFErrorRef2\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'NSError *\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:63:9: error: cast of C pointer type \'CFErrorRef2\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'MyError *\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:67:9: error: cast of C pointer type \'CFUColor2Ref\' (aka \'__CFUPrimeColor *\') to Objective-C pointer type \'NSUColor *\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:70:21: error: cast of Objective-C pointer type \'NSError *\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:73:21: error: cast of Objective-C pointer type \'NSString *\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:77:9: error: cast of C pointer type \'CFErrorRef2\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'Class\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:81:21: error: cast of Objective-C pointer type \'Class\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:89:9: error: cast of C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'id\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:92:8: error: cast of C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'id<P1,P2>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:95:8: error: cast of C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'id<P1,P2,P4>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:102:10: error: cast of C pointer type \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') to Objective-C pointer type \'id\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:105:8: error: cast of C pointer type \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') to Objective-C pointer type \'id<P1,P2>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:108:8: error: cast of C pointer type \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') to Objective-C pointer type \'id<P1,P2,P3>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:111:8: error: cast of C pointer type \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') to Objective-C pointer type \'id<P2,P3>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:114:8: error: cast of C pointer type \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') to Objective-C pointer type \'id<P1,P2,P4>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:121:20: error: cast of Objective-C pointer type \'id\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:124:20: error: cast of Objective-C pointer type \'id<P1,P2,P3>\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:127:20: error: cast of Objective-C pointer type \'id<P1,P2,P3,P4>\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:130:20: error: cast of Objective-C pointer type \'id<P1,P2>\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:133:20: error: cast of Objective-C pointer type \'id<P2,P3>\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast"}
["clang/test/SemaObjCXX/objcbridge-static-cast.mm"]={"clang/test/SemaObjCXX/objcbridge-static-cast.mm:30:10: error: cast of C pointer type \'CFTestingRef\' (aka \'__CFError *\') to Objective-C pointer type \'NSString *\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:56:9: error: cast of C pointer type \'CFErrorRef2\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'NSString *\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:60:9: error: cast of C pointer type \'CFErrorRef2\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'NSError *\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:63:9: error: cast of C pointer type \'CFErrorRef2\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'MyError *\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:67:9: error: cast of C pointer type \'CFUColor2Ref\' (aka \'__CFUPrimeColor *\') to Objective-C pointer type \'NSUColor *\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:70:21: error: cast of Objective-C pointer type \'NSError *\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:73:21: error: cast of Objective-C pointer type \'NSString *\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:77:9: error: cast of C pointer type \'CFErrorRef2\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'Class\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:81:21: error: cast of Objective-C pointer type \'Class\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:89:9: error: cast of C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'id\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:92:8: error: cast of C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'id<P1,P2>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:95:8: error: cast of C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') to Objective-C pointer type \'id<P1,P2,P4>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:102:10: error: cast of C pointer type \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') to Objective-C pointer type \'id\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:105:8: error: cast of C pointer type \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') to Objective-C pointer type \'id<P1,P2>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:108:8: error: cast of C pointer type \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') to Objective-C pointer type \'id<P1,P2,P3>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:111:8: error: cast of C pointer type \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') to Objective-C pointer type \'id<P2,P3>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:114:8: error: cast of C pointer type \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') to Objective-C pointer type \'id<P1,P2,P4>\' requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:121:20: error: cast of Objective-C pointer type \'id\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:124:20: error: cast of Objective-C pointer type \'id<P1,P2,P3>\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:127:20: error: cast of Objective-C pointer type \'id<P1,P2,P3,P4>\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:130:20: error: cast of Objective-C pointer type \'id<P1,P2>\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast","clang/test/SemaObjCXX/objcbridge-static-cast.mm:133:20: error: cast of Objective-C pointer type \'id<P2,P3>\' to C pointer type \'CFErrorRef\' (aka \'__CFErrorRef *\') requires a bridged cast"}
Line 1,306: Line 1,308:
[e]="collection expression type (.*?) is a forward declaration",
[e]="collection expression type (.*?) is a forward declaration",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={"538482373bba",1311728835,"Clean up the analysis of the collection operand to ObjC\nfor-in statements;  specifically, make sure ...","Clean up the analysis of the collection operand to ObjC\nfor-in statements;  specifically, make sure to close over any\ntemporaries or cleanups it might require.  In ARC, this has\nimplications for the lifetime of the collection, so emit it\nwith a retain and release it upon exit from the loop.\n\nrdar://problem/9817306\n\nllvm-svn: 136204"},
[b]={"538482373bba",1311728835,"Clean up the analysis of the collection operand to ObjC","Clean up the analysis of the collection operand to ObjC\nfor-in statements;  specifically, make sure to close over any\ntemporaries or cleanups it might require.  In ARC, this has\nimplications for the lifetime of the collection, so emit it\nwith a retain and release it upon exit from the loop.\n\nrdar://problem/9817306\n\nllvm-svn: 136204"},
[h]={{Q,2244,"ExprResult Sema::CheckObjCForCollectionOperand(SourceLocation forLoc, Expr *collection) {\n  // ...\n  if (iface && (getLangOpts().ObjCAutoRefCount ? RequireCompleteType(forLoc, QualType(objectType, 0), diag::err_arc_collection_forward, collection) : !isCompleteType(forLoc, QualType(objectType, 0)))) {"}},
[h]={{R,2244,"ExprResult Sema::CheckObjCForCollectionOperand(SourceLocation forLoc, Expr *collection) {\n  // ...\n  if (iface && (getLangOpts().ObjCAutoRefCount ? RequireCompleteType(forLoc, QualType(objectType, 0), diag::err_arc_collection_forward, collection) : !isCompleteType(forLoc, QualType(objectType, 0)))) {"}},
[j]={
[j]={
[zb]={"clang/test/SemaObjC/arc.m:690:3: error: collection expression type \'Test37\' is a forward declaration"}
[ub]={"clang/test/SemaObjC/arc.m:690:3: error: collection expression type \'Test37\' is a forward declaration"}
}
}
},
},
Line 1,318: Line 1,320:
[e]="(?:implicit conversion|cast) of weak\\-unavailable object of type (.*?) to a __weak object of type (.*?)",
[e]="(?:implicit conversion|cast) of weak\\-unavailable object of type (.*?) to a __weak object of type (.*?)",
[f]=a,
[f]=a,
[g]=Rb,
[g]=Tb,
[b]={"f2913401fc81",1310146902,"objc++-arc: more diagnosis of converting a weak-unavailable\nobject to a __weak object type. // rdar:...","objc++-arc: more diagnosis of converting a weak-unavailable\nobject to a __weak object type. // rdar://9732636\n\nllvm-svn: 134706"},
[b]={"f2913401fc81",1310146902,"objc++-arc: more diagnosis of converting a weak-unavailable","objc++-arc: more diagnosis of converting a weak-unavailable\nobject to a __weak object type. // rdar://9732636\n\nllvm-svn: 134706"},
[h]={{s,3215,"/// 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    // ...\n    } else if (!Self.CheckObjCARCUnavailableWeakConversion(DestType, SrcType)) {\n      Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_arc_convesion_of_weak_unavailable) << 1 << SrcType << DestType << SrcExpr.get()->getSourceRange();"},{t,4497,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType by following the standard\n/// conversion sequence SCS. Returns the converted\n/// expression. Flavor is the context in which we\'re performing this\n/// conversion, for use in error messages.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const StandardConversionSequence &SCS, AssignmentAction Action, CheckedConversionKind CCK) {\n  // ...\n  case ICK_Writeback_Conversion:\n  case ICK_Pointer_Conversion: {\n    if (SCS.IncompatibleObjC && Action != AA_Casting) {\n    // ...\n    } else if (getLangOpts().allowsNonTrivialObjCLifetimeQualifiers() && !CheckObjCARCUnavailableWeakConversion(ToType, From->getType())) {\n      if (Action == AA_Initializing)\n      // ...\n      else\n        Diag(From->getBeginLoc(), diag::err_arc_convesion_of_weak_unavailable) << (Action == AA_Casting) << From->getType() << ToType << From->getSourceRange();"}},
[h]={{t,3215,"/// 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    // ...\n    } else if (!Self.CheckObjCARCUnavailableWeakConversion(DestType, SrcType)) {\n      Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_arc_convesion_of_weak_unavailable) << 1 << SrcType << DestType << SrcExpr.get()->getSourceRange();"},{u,4497,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType by following the standard\n/// conversion sequence SCS. Returns the converted\n/// expression. Flavor is the context in which we\'re performing this\n/// conversion, for use in error messages.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const StandardConversionSequence &SCS, AssignmentAction Action, CheckedConversionKind CCK) {\n  // ...\n  case ICK_Writeback_Conversion:\n  case ICK_Pointer_Conversion: {\n    if (SCS.IncompatibleObjC && Action != AA_Casting) {\n    // ...\n    } else if (getLangOpts().allowsNonTrivialObjCLifetimeQualifiers() && !CheckObjCARCUnavailableWeakConversion(ToType, From->getType())) {\n      if (Action == AA_Initializing)\n      // ...\n      else\n        Diag(From->getBeginLoc(), diag::err_arc_convesion_of_weak_unavailable) << (Action == AA_Casting) << From->getType() << ToType << From->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaObjCXX/arc-unavailable-for-weakref.mm"]={"clang/test/SemaObjCXX/arc-unavailable-for-weakref.mm:35:21: error: cast of weak-unavailable object of type \'NOWEAK *\' to a __weak object of type \'__weak id\'","clang/test/SemaObjCXX/arc-unavailable-for-weakref.mm:48:28: error: cast of weak-unavailable object of type \'NOWEAK<P,P1> *\' to a __weak object of type \'__weak id<P,P1>\'"}
["clang/test/SemaObjCXX/arc-unavailable-for-weakref.mm"]={"clang/test/SemaObjCXX/arc-unavailable-for-weakref.mm:35:21: error: cast of weak-unavailable object of type \'NOWEAK *\' to a __weak object of type \'__weak id\'","clang/test/SemaObjCXX/arc-unavailable-for-weakref.mm:48:28: error: cast of weak-unavailable object of type \'NOWEAK<P,P1> *\' to a __weak object of type \'__weak id<P,P1>\'"}
Line 1,330: Line 1,332:
[e]="method implementation does not match its declaration",
[e]="method implementation does not match its declaration",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{G,2530,"/// In ARC, check whether the conventional meanings of the two methods\n/// match.  If they don\'t, it\'s a hard error.\nstatic bool checkMethodFamilyMismatch(Sema &S, ObjCMethodDecl *impl, ObjCMethodDecl *decl) {\n  // ...\n  if (declFamily == OMF_None) {\n    // ...\n    errorID = diag::err_arc_gained_method_convention;"}},
[h]={{G,2530,"/// In ARC, check whether the conventional meanings of the two methods\n/// match.  If they don\'t, it\'s a hard error.\nstatic bool checkMethodFamilyMismatch(Sema &S, ObjCMethodDecl *impl, ObjCMethodDecl *decl) {\n  // ...\n  if (declFamily == OMF_None) {\n    // ...\n    errorID = diag::err_arc_gained_method_convention;"}},
[j]={
[j]={
[Wb]={"clang/test/ARCMT/checking.m:240:1: error: method implementation does not match its declaration","clang/test/ARCMT/checking.m:261:1: error: method implementation does not match its declaration","clang/test/ARCMT/checking.m:268:1: error: method implementation does not match its declaration"}
[bc]={"clang/test/ARCMT/checking.m:240:1: error: method implementation does not match its declaration","clang/test/ARCMT/checking.m:261:1: error: method implementation does not match its declaration","clang/test/ARCMT/checking.m:268:1: error: method implementation does not match its declaration"}
}
}
},
},
Line 1,342: Line 1,344:
[e]="ARC forbids explicit message send of (.*?)",
[e]="ARC forbids explicit message send of (.*?)",
[f]=a,
[f]=a,
[g]=xb,
[g]=qb,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{"clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp",390,"class RetainReleaseDeallocRemover : public RecursiveASTVisitor<RetainReleaseDeallocRemover> {\n  // ...\n  void clearDiagnostics(SourceLocation loc) const { Pass.TA.clearDiagnostic(diag::err_arc_illegal_explicit_message, diag::err_unavailable, diag::err_unavailable_message, loc); }"},{C,3269,"/// 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  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    // ...\n    case OMF_dealloc:\n    case OMF_retain:\n    case OMF_release:\n    case OMF_autorelease:\n    case OMF_retainCount:\n      Diag(SelLoc, diag::err_arc_illegal_explicit_message) << Sel << RecRange;"}},
[h]={{"clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp",390,"class RetainReleaseDeallocRemover : public RecursiveASTVisitor<RetainReleaseDeallocRemover> {\n  // ...\n  void clearDiagnostics(SourceLocation loc) const { Pass.TA.clearDiagnostic(diag::err_arc_illegal_explicit_message, diag::err_unavailable, diag::err_unavailable_message, loc); }"},{C,3269,"/// 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  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    // ...\n    case OMF_dealloc:\n    case OMF_retain:\n    case OMF_release:\n    case OMF_autorelease:\n    case OMF_retainCount:\n      Diag(SelLoc, diag::err_arc_illegal_explicit_message) << Sel << RecRange;"}},
[j]={
[j]={
[Wb]={"clang/test/ARCMT/checking.m:76:17: error: ARC forbids explicit message send of \'release\'","clang/test/ARCMT/checking.m:78:15: error: ARC forbids explicit message send of \'release\'","clang/test/ARCMT/checking.m:80:23: error: ARC forbids explicit message send of \'retain\'","clang/test/ARCMT/checking.m:84:15: error: ARC forbids explicit message send of \'retain\'","clang/test/ARCMT/checking.m:86:15: error: ARC forbids explicit message send of \'release\'","clang/test/ARCMT/checking.m:90:6: error: ARC forbids explicit message send of \'retainCount\'","clang/test/ARCMT/checking.m:93:6: error: ARC forbids explicit message send of \'autorelease\'","clang/test/ARCMT/checking.m:96:6: error: ARC forbids explicit message send of \'autorelease\'","clang/test/ARCMT/checking.m:307:3: error: ARC forbids explicit message send of \'release\'"}
[bc]={"clang/test/ARCMT/checking.m:76:17: error: ARC forbids explicit message send of \'release\'","clang/test/ARCMT/checking.m:78:15: error: ARC forbids explicit message send of \'release\'","clang/test/ARCMT/checking.m:80:23: error: ARC forbids explicit message send of \'retain\'","clang/test/ARCMT/checking.m:84:15: error: ARC forbids explicit message send of \'retain\'","clang/test/ARCMT/checking.m:86:15: error: ARC forbids explicit message send of \'release\'","clang/test/ARCMT/checking.m:90:6: error: ARC forbids explicit message send of \'retainCount\'","clang/test/ARCMT/checking.m:93:6: error: ARC forbids explicit message send of \'autorelease\'","clang/test/ARCMT/checking.m:96:6: error: ARC forbids explicit message send of \'autorelease\'","clang/test/ARCMT/checking.m:307:3: error: ARC forbids explicit message send of \'release\'"}
}
}
},
},
Line 1,354: Line 1,356:
[e]="ARC forbids (?:implementation|synthesis) of (.*?)",
[e]="ARC forbids (?:implementation|synthesis) of (.*?)",
[f]=a,
[f]=a,
[g]=xb,
[g]=qb,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{G,417,"/// ActOnStartOfObjCMethodDef - This routine sets up parameters; invisible\n/// and user declared, in the method definition\'s AST.\nvoid Sema::ActOnStartOfObjCMethodDef(Scope *FnBodyScope, Decl *D) {\n  // ...\n  // In ARC, disallow definition of retain/release/autorelease/retainCount\n  if (getLangOpts().ObjCAutoRefCount) {\n    // ...\n    case OMF_retain:\n    case OMF_retainCount:\n    case OMF_release:\n    case OMF_autorelease:\n      Diag(MDecl->getLocation(), diag::err_arc_illegal_method_def) << 0 << MDecl->getSelector();"},{P,1491,"/// 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 (ObjCMethodDecl *getterMethod = property->getGetterMethodDecl()) {\n    // ...\n    if (getLangOpts().ObjCAutoRefCount && Synthesize)\n      // ...\n      case OMF_retain:\n      case OMF_retainCount:\n      case OMF_release:\n      case OMF_autorelease:\n        Diag(getterMethod->getLocation(), diag::err_arc_illegal_method_def) << 1 << getterMethod->getSelector();"}},
[h]={{G,417,"/// ActOnStartOfObjCMethodDef - This routine sets up parameters; invisible\n/// and user declared, in the method definition\'s AST.\nvoid Sema::ActOnStartOfObjCMethodDef(Scope *FnBodyScope, Decl *D) {\n  // ...\n  // In ARC, disallow definition of retain/release/autorelease/retainCount\n  if (getLangOpts().ObjCAutoRefCount) {\n    // ...\n    case OMF_retain:\n    case OMF_retainCount:\n    case OMF_release:\n    case OMF_autorelease:\n      Diag(MDecl->getLocation(), diag::err_arc_illegal_method_def) << 0 << MDecl->getSelector();"},{Q,1491,"/// 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 (ObjCMethodDecl *getterMethod = property->getGetterMethodDecl()) {\n    // ...\n    if (getLangOpts().ObjCAutoRefCount && Synthesize)\n      // ...\n      case OMF_retain:\n      case OMF_retainCount:\n      case OMF_release:\n      case OMF_autorelease:\n        Diag(getterMethod->getLocation(), diag::err_arc_illegal_method_def) << 1 << getterMethod->getSelector();"}},
[j]={
[j]={
["clang/test/SemaObjC/arc-property-lifetime.m"]={"clang/test/SemaObjC/arc-property-lifetime.m:199:36: error: ARC forbids synthesis of \'retain\'"}
["clang/test/SemaObjC/arc-property-lifetime.m"]={"clang/test/SemaObjC/arc-property-lifetime.m:199:36: error: ARC forbids synthesis of \'retain\'"}
Line 1,366: Line 1,368:
[e]="ARC forbids use of (.*?) in a @selector",
[e]="ARC forbids use of (.*?) in a @selector",
[f]=a,
[f]=a,
[g]=xb,
[g]=qb,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{C,1364,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n  // ...\n  // In ARC, forbid the user from using @selector for\n  // retain/release/autorelease/dealloc/retainCount.\n  if (getLangOpts().ObjCAutoRefCount) {\n    // ...\n    case OMF_retain:\n    case OMF_release:\n    case OMF_autorelease:\n    case OMF_retainCount:\n    case OMF_dealloc:\n      Diag(AtLoc, diag::err_arc_illegal_selector) << Sel << SourceRange(LParenLoc, RParenLoc);"}},
[h]={{C,1364,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n  // ...\n  // In ARC, forbid the user from using @selector for\n  // retain/release/autorelease/dealloc/retainCount.\n  if (getLangOpts().ObjCAutoRefCount) {\n    // ...\n    case OMF_retain:\n    case OMF_release:\n    case OMF_autorelease:\n    case OMF_retainCount:\n    case OMF_dealloc:\n      Diag(AtLoc, diag::err_arc_illegal_selector) << Sel << SourceRange(LParenLoc, RParenLoc);"}},
[j]={
[j]={
[Wb]={"clang/test/ARCMT/checking.m:110:11: error: ARC forbids use of \'retain\' in a @selector","clang/test/ARCMT/checking.m:111:7: error: ARC forbids use of \'release\' in a @selector","clang/test/ARCMT/checking.m:112:7: error: ARC forbids use of \'autorelease\' in a @selector","clang/test/ARCMT/checking.m:113:7: error: ARC forbids use of \'dealloc\' in a @selector"}
[bc]={"clang/test/ARCMT/checking.m:110:11: error: ARC forbids use of \'retain\' in a @selector","clang/test/ARCMT/checking.m:111:7: error: ARC forbids use of \'release\' in a @selector","clang/test/ARCMT/checking.m:112:7: error: ARC forbids use of \'autorelease\' in a @selector","clang/test/ARCMT/checking.m:113:7: error: ARC forbids use of \'dealloc\' in a @selector"}
}
}
},
},
Line 1,379: Line 1,381:
[f]=a,
[f]=a,
[g]="ARC and @properties",
[g]="ARC and @properties",
[b]={db,1308874139,cb,eb},
[b]={bb,1308874139,cb,db},
[h]={{"clang/lib/ARCMigrate/TransGCAttrs.cpp",291,"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_arc_inconsistent_property_ownership, ATLs[i].second->getLocation());"},{bb,209,"class PropertiesRewriter {\n  // ...\n  void removeAssignForDefaultStrong(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{bb,238,"class PropertiesRewriter {\n  // ...\n  void rewriteAssign(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      // ...\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{bb,263,"class PropertiesRewriter {\n  // ...\n  void maybeAddWeakOrUnsafeUnretainedAttr(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      // ...\n      if (I->ImplD) {\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{P,99,"/// Check the internal consistency of a property declaration with\n/// an explicit ownership qualifier.\nstatic void checkPropertyDeclWithOwnership(Sema &S, ObjCPropertyDecl *property) {\n  // ...\n  S.Diag(property->getLocation(), diag::err_arc_inconsistent_property_ownership) << property->getDeclName() << expectedLifetime << propertyLifetime;"}},
[h]={{"clang/lib/ARCMigrate/TransGCAttrs.cpp",291,"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_arc_inconsistent_property_ownership, ATLs[i].second->getLocation());"},{ab,209,"class PropertiesRewriter {\n  // ...\n  void removeAssignForDefaultStrong(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{ab,238,"class PropertiesRewriter {\n  // ...\n  void rewriteAssign(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      // ...\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{ab,263,"class PropertiesRewriter {\n  // ...\n  void maybeAddWeakOrUnsafeUnretainedAttr(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      // ...\n      if (I->ImplD) {\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{Q,99,"/// Check the internal consistency of a property declaration with\n/// an explicit ownership qualifier.\nstatic void checkPropertyDeclWithOwnership(Sema &S, ObjCPropertyDecl *property) {\n  // ...\n  S.Diag(property->getLocation(), diag::err_arc_inconsistent_property_ownership) << property->getDeclName() << expectedLifetime << propertyLifetime;"}},
[j]={
[j]={
["clang/test/SemaObjC/arc-property-decl-attrs.m"]={"clang/test/SemaObjC/arc-property-decl-attrs.m:40:42: error: strong property \'x\' may not also be declared __unsafe_unretained","clang/test/SemaObjC/arc-property-decl-attrs.m:41:29: error: strong property \'y\' may not also be declared __weak","clang/test/SemaObjC/arc-property-decl-attrs.m:42:38: error: strong property \'z\' may not also be declared __autoreleasing","clang/test/SemaObjC/arc-property-decl-attrs.m:46:42: error: strong property \'x\' may not also be declared __unsafe_unretained","clang/test/SemaObjC/arc-property-decl-attrs.m:47:29: error: strong property \'y\' may not also be declared __weak","clang/test/SemaObjC/arc-property-decl-attrs.m:48:38: error: strong property \'z\' may not also be declared __autoreleasing","clang/test/SemaObjC/arc-property-decl-attrs.m:52:40: error: strong property \'x\' may not also be declared __unsafe_unretained","clang/test/SemaObjC/arc-property-decl-attrs.m:53:27: error: strong property \'y\' may not also be declared __weak","clang/test/SemaObjC/arc-property-decl-attrs.m:54:36: error: strong property \'z\' may not also be declared __autoreleasing","clang/test/SemaObjC/arc-property-decl-attrs.m:59:29: error: unsafe_unretained property \'y\' may not also be declared __weak","clang/test/SemaObjC/arc-property-decl-attrs.m:60:38: error: unsafe_unretained property \'z\' may not also be declared __autoreleasing","clang/test/SemaObjC/arc-property-decl-attrs.m:65:40: error: unsafe_unretained property \'y\' may not also be declared __weak","clang/test/SemaObjC/arc-property-decl-attrs.m:66:49: error: unsafe_unretained property \'z\' may not also be declared __autoreleasing"}
["clang/test/SemaObjC/arc-property-decl-attrs.m"]={"clang/test/SemaObjC/arc-property-decl-attrs.m:40:42: error: strong property \'x\' may not also be declared __unsafe_unretained","clang/test/SemaObjC/arc-property-decl-attrs.m:41:29: error: strong property \'y\' may not also be declared __weak","clang/test/SemaObjC/arc-property-decl-attrs.m:42:38: error: strong property \'z\' may not also be declared __autoreleasing","clang/test/SemaObjC/arc-property-decl-attrs.m:46:42: error: strong property \'x\' may not also be declared __unsafe_unretained","clang/test/SemaObjC/arc-property-decl-attrs.m:47:29: error: strong property \'y\' may not also be declared __weak","clang/test/SemaObjC/arc-property-decl-attrs.m:48:38: error: strong property \'z\' may not also be declared __autoreleasing","clang/test/SemaObjC/arc-property-decl-attrs.m:52:40: error: strong property \'x\' may not also be declared __unsafe_unretained","clang/test/SemaObjC/arc-property-decl-attrs.m:53:27: error: strong property \'y\' may not also be declared __weak","clang/test/SemaObjC/arc-property-decl-attrs.m:54:36: error: strong property \'z\' may not also be declared __autoreleasing","clang/test/SemaObjC/arc-property-decl-attrs.m:59:29: error: unsafe_unretained property \'y\' may not also be declared __weak","clang/test/SemaObjC/arc-property-decl-attrs.m:60:38: error: unsafe_unretained property \'z\' may not also be declared __autoreleasing","clang/test/SemaObjC/arc-property-decl-attrs.m:65:40: error: unsafe_unretained property \'y\' may not also be declared __weak","clang/test/SemaObjC/arc-property-decl-attrs.m:66:49: error: unsafe_unretained property \'z\' may not also be declared __autoreleasing"}
Line 1,390: Line 1,392:
[e]="(?:pointer|reference) to non\\-const type (.*?) with no explicit ownership",
[e]="(?:pointer|reference) to non\\-const type (.*?) with no explicit ownership",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={db,1308874139,cb,eb},
[b]={bb,1308874139,cb,db},
[h]={{o,2073,"/// Given that we\'re building a pointer or reference to the given\nstatic QualType inferARCLifetimeForPointee(Sema &S, QualType type, SourceLocation loc, bool isReference) {\n  // ...\n  // If the object type is const-qualified, we can safely use\n  // __unsafe_unretained.  This is safe (because there are no read\n  // barriers), and it\'ll be safe to coerce anything but __weak* to\n  // the resulting type.\n  if (type.isConstQualified()) {\n  // ...\n  } else if (type->isObjCARCImplicitlyUnretainedType()) {\n  // ...\n  } else if (S.isUnevaluatedContext()) {\n  // ...\n  } else {\n    // These types can show up in private ivars in system headers, so\n    // we need this to not be an error in those cases.  Instead we\n    // want to delay.\n    if (S.DelayedDiagnostics.shouldDelayDiagnostics()) {\n      S.DelayedDiagnostics.add(sema::DelayedDiagnostic::makeForbiddenType(loc, diag::err_arc_indirect_no_ownership, type, isReference));"},{o,2075,"/// Given that we\'re building a pointer or reference to the given\nstatic QualType inferARCLifetimeForPointee(Sema &S, QualType type, SourceLocation loc, bool isReference) {\n  // ...\n  // If the object type is const-qualified, we can safely use\n  // __unsafe_unretained.  This is safe (because there are no read\n  // barriers), and it\'ll be safe to coerce anything but __weak* to\n  // the resulting type.\n  if (type.isConstQualified()) {\n  // ...\n  } else if (type->isObjCARCImplicitlyUnretainedType()) {\n  // ...\n  } else if (S.isUnevaluatedContext()) {\n  // ...\n  } else {\n    // These types can show up in private ivars in system headers, so\n    // we need this to not be an error in those cases.  Instead we\n    // want to delay.\n    if (S.DelayedDiagnostics.shouldDelayDiagnostics()) {\n    // ...\n    } else {\n      S.Diag(loc, diag::err_arc_indirect_no_ownership) << type << isReference;"}},
[h]={{n,2073,"/// Given that we\'re building a pointer or reference to the given\nstatic QualType inferARCLifetimeForPointee(Sema &S, QualType type, SourceLocation loc, bool isReference) {\n  // ...\n  // If the object type is const-qualified, we can safely use\n  // __unsafe_unretained.  This is safe (because there are no read\n  // barriers), and it\'ll be safe to coerce anything but __weak* to\n  // the resulting type.\n  if (type.isConstQualified()) {\n  // ...\n  } else if (type->isObjCARCImplicitlyUnretainedType()) {\n  // ...\n  } else if (S.isUnevaluatedContext()) {\n  // ...\n  } else {\n    // These types can show up in private ivars in system headers, so\n    // we need this to not be an error in those cases.  Instead we\n    // want to delay.\n    if (S.DelayedDiagnostics.shouldDelayDiagnostics()) {\n      S.DelayedDiagnostics.add(sema::DelayedDiagnostic::makeForbiddenType(loc, diag::err_arc_indirect_no_ownership, type, isReference));"},{n,2075,"/// Given that we\'re building a pointer or reference to the given\nstatic QualType inferARCLifetimeForPointee(Sema &S, QualType type, SourceLocation loc, bool isReference) {\n  // ...\n  // If the object type is const-qualified, we can safely use\n  // __unsafe_unretained.  This is safe (because there are no read\n  // barriers), and it\'ll be safe to coerce anything but __weak* to\n  // the resulting type.\n  if (type.isConstQualified()) {\n  // ...\n  } else if (type->isObjCARCImplicitlyUnretainedType()) {\n  // ...\n  } else if (S.isUnevaluatedContext()) {\n  // ...\n  } else {\n    // These types can show up in private ivars in system headers, so\n    // we need this to not be an error in those cases.  Instead we\n    // want to delay.\n    if (S.DelayedDiagnostics.shouldDelayDiagnostics()) {\n    // ...\n    } else {\n      S.Diag(loc, diag::err_arc_indirect_no_ownership) << type << isReference;"}},
[j]={
[j]={
["clang/test/SemaObjCXX/arc-ppe.mm"]={"clang/test/SemaObjCXX/arc-ppe.mm:16:41: error: pointer to non-const type \'id\' with no explicit ownership"}
["clang/test/SemaObjCXX/arc-ppe.mm"]={"clang/test/SemaObjCXX/arc-ppe.mm:16:41: error: pointer to non-const type \'id\' with no explicit ownership"}
Line 1,402: Line 1,404:
[e]="init methods must return a type related to the receiver type",
[e]="init methods must return a type related to the receiver type",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{G,108,"/// Check whether the given method, which must be in the \'init\'\n/// family, is a valid member of that family.\n///\n/// \\param receiverTypeIfCall - if null, check this as if declaring it;\n///  if non-null, check this as if making a call to it with the given\n///  receiver type\n///\n/// \\return true to indicate that there was an error and appropriate\n///  actions were taken\nbool Sema::checkInitMethod(ObjCMethodDecl *method, QualType receiverTypeIfCall) {\n  // ...\n  Diag(loc, diag::err_arc_init_method_unrelated_result_type);"}},
[h]={{G,108,"/// Check whether the given method, which must be in the \'init\'\n/// family, is a valid member of that family.\n///\n/// \\param receiverTypeIfCall - if null, check this as if declaring it;\n///  if non-null, check this as if making a call to it with the given\n///  receiver type\n///\n/// \\return true to indicate that there was an error and appropriate\n///  actions were taken\nbool Sema::checkInitMethod(ObjCMethodDecl *method, QualType receiverTypeIfCall) {\n  // ...\n  Diag(loc, diag::err_arc_init_method_unrelated_result_type);"}},
[j]={
[j]={
[Wb]={"clang/test/ARCMT/checking.m:231:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:232:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:233:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:234:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:235:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:236:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:253:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:254:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:255:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:256:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:257:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:258:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:274:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:275:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:276:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:277:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:278:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:279:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:284:1: error: init methods must return a type related to the receiver type"}
[bc]={"clang/test/ARCMT/checking.m:231:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:232:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:233:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:234:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:235:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:236:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:253:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:254:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:255:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:256:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:257:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:258:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:274:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:275:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:276:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:277:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:278:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:279:1: error: init methods must return a type related to the receiver type","clang/test/ARCMT/checking.m:284:1: error: init methods must return a type related to the receiver type"}
}
}
},
},
Line 1,414: Line 1,416:
[e]="method was declared as (?:an \'alloc\'|a \'copy\'|an \'init\'|a \'new\') method, but its implementation doesn\'t match because (?:its result type is not an object pointer|its result type is unrelated to its receiver type)",
[e]="method was declared as (?:an \'alloc\'|a \'copy\'|an \'init\'|a \'new\') method, but its implementation doesn\'t match because (?:its result type is not an object pointer|its result type is unrelated to its receiver type)",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{G,2525,"/// In ARC, check whether the conventional meanings of the two methods\n/// match.  If they don\'t, it\'s a hard error.\nstatic bool checkMethodFamilyMismatch(Sema &S, ObjCMethodDecl *impl, ObjCMethodDecl *decl) {\n  // ...\n  unsigned errorID = diag::err_arc_lost_method_convention;"}},
[h]={{G,2525,"/// In ARC, check whether the conventional meanings of the two methods\n/// match.  If they don\'t, it\'s a hard error.\nstatic bool checkMethodFamilyMismatch(Sema &S, ObjCMethodDecl *impl, ObjCMethodDecl *decl) {\n  // ...\n  unsigned errorID = diag::err_arc_lost_method_convention;"}},
[j]={
[j]={
[Wb]={"clang/test/ARCMT/checking.m:246:1: error: method was declared as an \'init\' method, but its implementation doesn\'t match because its result type is not an object pointer","clang/test/ARCMT/checking.m:248:1: error: method was declared as an \'init\' method, but its implementation doesn\'t match because its result type is not an object pointer","clang/test/ARCMT/checking.m:249:1: error: method was declared as an \'init\' method, but its implementation doesn\'t match because its result type is not an object pointer","clang/test/ARCMT/checking.m:250:1: error: method was declared as an \'init\' method, but its implementation doesn\'t match because its result type is not an object pointer"}
[bc]={"clang/test/ARCMT/checking.m:246:1: error: method was declared as an \'init\' method, but its implementation doesn\'t match because its result type is not an object pointer","clang/test/ARCMT/checking.m:248:1: error: method was declared as an \'init\' method, but its implementation doesn\'t match because its result type is not an object pointer","clang/test/ARCMT/checking.m:249:1: error: method was declared as an \'init\' method, but its implementation doesn\'t match because its result type is not an object pointer","clang/test/ARCMT/checking.m:250:1: error: method was declared as an \'init\' method, but its implementation doesn\'t match because its result type is not an object pointer"}
}
}
},
},
Line 1,426: Line 1,428:
[e]="no visible @interface for (.*?) declares the selector (.*?)",
[e]="no visible @interface for (.*?) declares the selector (.*?)",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{C,3089,"/// 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) {\n    // ...\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    // ...\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    // ...\n    } else {\n      // ...\n      // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n      // long as one of the protocols implements the selector (if not, warn).\n      // And as long as message is not deprecated/unavailable (warn if it is).\n      if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n      // ...\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n        // ...\n        if (!Method) {\n          // ...\n          if (!Method && getLangOpts().ObjCAutoRefCount) {\n            Diag(SelLoc, diag::err_arc_may_not_respond) << OCIType->getPointeeType() << Sel << RecRange << SourceRange(SelectorLocs.front(), SelectorLocs.back());"}},
[h]={{C,3089,"/// 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) {\n    // ...\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    // ...\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    // ...\n    } else {\n      // ...\n      // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n      // long as one of the protocols implements the selector (if not, warn).\n      // And as long as message is not deprecated/unavailable (warn if it is).\n      if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n      // ...\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n        // ...\n        if (!Method) {\n          // ...\n          if (!Method && getLangOpts().ObjCAutoRefCount) {\n            Diag(SelLoc, diag::err_arc_may_not_respond) << OCIType->getPointeeType() << Sel << RecRange << SourceRange(SelectorLocs.front(), SelectorLocs.back());"}},
[j]={
[j]={
Line 1,438: Line 1,440:
[e]="no known (?:instance|class) method for selector (.*?)",
[e]="no known (?:instance|class) method for selector (.*?)",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{C,1743,"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().ObjCAutoRefCount)\n      DiagID = diag::err_arc_method_not_found;"}},
[h]={{C,1743,"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().ObjCAutoRefCount)\n      DiagID = diag::err_arc_method_not_found;"}},
[j]={
[j]={
Line 1,450: Line 1,452:
[e]="(?:implicit conversion|cast) of (?:(.*?)|a non\\-Objective\\-C pointer type (.*?)|a block pointer|an Objective\\-C pointer|an indirect pointer to an Objective\\-C pointer) to (.*?) is disallowed with ARC",
[e]="(?:implicit conversion|cast) of (?:(.*?)|a non\\-Objective\\-C pointer type (.*?)|a block pointer|an Objective\\-C pointer|an indirect pointer to an Objective\\-C pointer) to (.*?) is disallowed with ARC",
[f]=a,
[f]=a,
[g]=xb,
[g]=qb,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{gb,209,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  // ...\n  void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind, Transaction &Trans) {\n    // ...\n    if (!TA.hasDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, E->getBeginLoc())) {"},{gb,226,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  // ...\n  void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind, Transaction &Trans) {\n    // ...\n    TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, E->getBeginLoc());"},{gb,302,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  // ...\n  void rewriteBlockCopyMacro(CastExpr *E) {\n    // ...\n    Pass.TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, OuterRange);"},{gb,312,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  // ...\n  void removeBlockReleaseMacro(CastExpr *E) {\n    // ...\n    Pass.TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, OuterRange);"},{C,3997,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // ...\n  S.Diag(loc, diag::err_arc_mismatched_cast) << !convKindForDiag << srcKind << castExprType << castType << castRange << castExpr->getSourceRange();"}},
[h]={{lb,209,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  // ...\n  void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind, Transaction &Trans) {\n    // ...\n    if (!TA.hasDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, E->getBeginLoc())) {"},{lb,226,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  // ...\n  void rewriteToBridgedCast(CastExpr *E, ObjCBridgeCastKind Kind, Transaction &Trans) {\n    // ...\n    TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, E->getBeginLoc());"},{lb,302,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  // ...\n  void rewriteBlockCopyMacro(CastExpr *E) {\n    // ...\n    Pass.TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, OuterRange);"},{lb,312,"class UnbridgedCastRewriter : public RecursiveASTVisitor<UnbridgedCastRewriter> {\n  // ...\n  void removeBlockReleaseMacro(CastExpr *E) {\n    // ...\n    Pass.TA.clearDiagnostic(diag::err_arc_mismatched_cast, diag::err_arc_cast_requires_bridge, OuterRange);"},{C,3997,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // ...\n  S.Diag(loc, diag::err_arc_mismatched_cast) << !convKindForDiag << srcKind << castExprType << castType << castRange << castExpr->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaObjC/arc-type-conversion.m"]={"clang/test/SemaObjC/arc-type-conversion.m:10:9: error: cast of an Objective-C pointer to \'int *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:12:9: error: cast of an Objective-C pointer to \'__autoreleasing id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:13:9: error: cast of an Objective-C pointer to \'__strong id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:17:9: error: cast of an Objective-C pointer to \'void **\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:58:9: error: implicit conversion of a non-Objective-C pointer type \'void *\' to \'__strong id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:59:9: error: implicit conversion of a non-Objective-C pointer type \'void *\' to \'__weak id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:60:9: error: implicit conversion of a non-Objective-C pointer type \'void *\' to \'__autoreleasing id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:61:9: error: implicit conversion of a non-Objective-C pointer type \'void *\' to \'__unsafe_unretained id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:86:9: error: cast of an indirect pointer to an Objective-C pointer to \'id\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:87:9: error: cast of an Objective-C pointer to \'__strong id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:88:9: error: cast of an indirect pointer to an Objective-C pointer to \'NSString *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:89:9: error: cast of an Objective-C pointer to \'NSString *__strong *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:90:9: error: cast of an indirect pointer to an Objective-C pointer to \'Block\' (aka \'void (^)(void)\') is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:91:9: error: cast of an Objective-C pointer to \'__strong Block *\' (aka \'void (^__strong *)(void)\') is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:106:7: error: implicit conversion of a non-Objective-C pointer type \'struct S *\' to \'__strong id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:108:7: error: implicit conversion of an indirect pointer to an Objective-C pointer to \'struct S *\' is disallowed with ARC"}
["clang/test/SemaObjC/arc-type-conversion.m"]={"clang/test/SemaObjC/arc-type-conversion.m:10:9: error: cast of an Objective-C pointer to \'int *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:12:9: error: cast of an Objective-C pointer to \'__autoreleasing id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:13:9: error: cast of an Objective-C pointer to \'__strong id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:17:9: error: cast of an Objective-C pointer to \'void **\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:58:9: error: implicit conversion of a non-Objective-C pointer type \'void *\' to \'__strong id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:59:9: error: implicit conversion of a non-Objective-C pointer type \'void *\' to \'__weak id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:60:9: error: implicit conversion of a non-Objective-C pointer type \'void *\' to \'__autoreleasing id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:61:9: error: implicit conversion of a non-Objective-C pointer type \'void *\' to \'__unsafe_unretained id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:86:9: error: cast of an indirect pointer to an Objective-C pointer to \'id\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:87:9: error: cast of an Objective-C pointer to \'__strong id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:88:9: error: cast of an indirect pointer to an Objective-C pointer to \'NSString *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:89:9: error: cast of an Objective-C pointer to \'NSString *__strong *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:90:9: error: cast of an indirect pointer to an Objective-C pointer to \'Block\' (aka \'void (^)(void)\') is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:91:9: error: cast of an Objective-C pointer to \'__strong Block *\' (aka \'void (^__strong *)(void)\') is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:106:7: error: implicit conversion of a non-Objective-C pointer type \'struct S *\' to \'__strong id *\' is disallowed with ARC","clang/test/SemaObjC/arc-type-conversion.m:108:7: error: implicit conversion of an indirect pointer to an Objective-C pointer to \'struct S *\' is disallowed with ARC"}
Line 1,462: Line 1,464:
[e]="multiple methods named (.*?) found with mismatched result, parameter type or attributes",
[e]="multiple methods named (.*?) found with mismatched result, parameter type or attributes",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{G,3635,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n  // ...\n  if (issueDiagnostic) {\n    if (issueError)\n      Diag(R.getBegin(), diag::err_arc_multiple_method_decl) << Sel << R;"}},
[h]={{G,3635,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n  // ...\n  if (issueDiagnostic) {\n    if (issueError)\n      Diag(R.getBegin(), diag::err_arc_multiple_method_decl) << Sel << R;"}},
[j]={
[j]={
[zb]={"clang/test/SemaObjC/arc.m:407:3: error: multiple methods named \'test16_1:\' found with mismatched result, parameter type or attributes","clang/test/SemaObjC/arc.m:408:3: error: multiple methods named \'test16_2:\' found with mismatched result, parameter type or attributes","clang/test/SemaObjC/arc.m:409:3: error: multiple methods named \'test16_3:\' found with mismatched result, parameter type or attributes","clang/test/SemaObjC/arc.m:410:3: error: multiple methods named \'test16_4:\' found with mismatched result, parameter type or attributes","clang/test/SemaObjC/arc.m:411:3: error: multiple methods named \'test16_5:\' found with mismatched result, parameter type or attributes"}
[ub]={"clang/test/SemaObjC/arc.m:407:3: error: multiple methods named \'test16_1:\' found with mismatched result, parameter type or attributes","clang/test/SemaObjC/arc.m:408:3: error: multiple methods named \'test16_2:\' found with mismatched result, parameter type or attributes","clang/test/SemaObjC/arc.m:409:3: error: multiple methods named \'test16_3:\' found with mismatched result, parameter type or attributes","clang/test/SemaObjC/arc.m:410:3: error: multiple methods named \'test16_4:\' found with mismatched result, parameter type or attributes","clang/test/SemaObjC/arc.m:411:3: error: multiple methods named \'test16_5:\' found with mismatched result, parameter type or attributes"}
}
}
},
},
Line 1,474: Line 1,476:
[e]="\'new\' cannot allocate an array of (.*?) with no explicit ownership",
[e]="\'new\' cannot allocate an array of (.*?) with no explicit ownership",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={db,1308874139,cb,eb},
[b]={bb,1308874139,cb,db},
[h]={{t,2483,"/// 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  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //  abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n  // ...\n  else if (AllocType->isReferenceType())\n  // ...\n  else if (!AllocType->isDependentType() && RequireCompleteSizedType(Loc, AllocType, diag::err_new_incomplete_or_sizeless_type, R))\n  // ...\n  else if (RequireNonAbstractType(Loc, AllocType, diag::err_allocation_of_abstract_type))\n  // ...\n  else if (AllocType->isVariablyModifiedType())\n  // ...\n  else if (AllocType.getAddressSpace() != LangAS::Default && !getLangOpts().OpenCLCPlusPlus)\n  // ...\n  else if (getLangOpts().ObjCAutoRefCount) {\n    if (const ArrayType *AT = Context.getAsArrayType(AllocType)) {\n      // ...\n      if (BaseAllocType.getObjCLifetime() == Qualifiers::OCL_None && BaseAllocType->isObjCLifetimeType())\n        return Diag(Loc, diag::err_arc_new_array_without_ownership) << BaseAllocType;"}}
[h]={{u,2483,"/// 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  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //  abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n  // ...\n  else if (AllocType->isReferenceType())\n  // ...\n  else if (!AllocType->isDependentType() && RequireCompleteSizedType(Loc, AllocType, diag::err_new_incomplete_or_sizeless_type, R))\n  // ...\n  else if (RequireNonAbstractType(Loc, AllocType, diag::err_allocation_of_abstract_type))\n  // ...\n  else if (AllocType->isVariablyModifiedType())\n  // ...\n  else if (AllocType.getAddressSpace() != LangAS::Default && !getLangOpts().OpenCLCPlusPlus)\n  // ...\n  else if (getLangOpts().ObjCAutoRefCount) {\n    if (const ArrayType *AT = Context.getAsArrayType(AllocType)) {\n      // ...\n      if (BaseAllocType.getObjCLifetime() == Qualifiers::OCL_None && BaseAllocType->isObjCLifetimeType())\n        return Diag(Loc, diag::err_arc_new_array_without_ownership) << BaseAllocType;"}}
},
},
["err_arc_nolifetime_behavior"]={
["err_arc_nolifetime_behavior"]={
Line 1,483: Line 1,485:
[e]="explicit ownership qualifier on cast result has no effect",
[e]="explicit ownership qualifier on cast result has no effect",
[f]=a,
[f]=a,
[g]=xb,
[g]=qb,
[b]={"2fa646d59623",1319832367,"objective-c arc: type-casting of an objc pointer to\nan rvalue retainable object type with life-time ...","objective-c arc: type-casting of an objc pointer to\nan rvalue retainable object type with life-time qualifier has no\neffect and wil be diagnosed as error. // rdar://10244607\n\nllvm-svn: 143219"},
[b]={"2fa646d59623",1319832367,"objective-c arc: type-casting of an objc pointer to","objective-c arc: type-casting of an objc pointer to\nan rvalue retainable object type with life-time qualifier has no\neffect and wil be diagnosed as error. // rdar://10244607\n\nllvm-svn: 143219"},
[h]={{C,4426,"Sema::ARCConversionResult Sema::CheckObjCConversion(SourceRange castRange, QualType castType, Expr *&castExpr, CheckedConversionKind CCK, bool Diagnose, bool DiagnoseCFAudited, BinaryOperatorKind Opc) {\n  // ...\n  if (exprACTC == castACTC) {\n    // Check for viability and report error if casting an rvalue to a\n    // life-time qualifier.\n    if (castACTC == ACTC_retainable && (CCK == CCK_CStyleCast || CCK == CCK_OtherCast) && castType != castExprType) {\n      // ...\n      if (QDT != castType && QDT.getObjCLifetime() != Qualifiers::OCL_None) {\n        if (Diagnose) {\n          // ...\n          Diag(loc, diag::err_arc_nolifetime_behavior);"}},
[h]={{C,4426,"Sema::ARCConversionResult Sema::CheckObjCConversion(SourceRange castRange, QualType castType, Expr *&castExpr, CheckedConversionKind CCK, bool Diagnose, bool DiagnoseCFAudited, BinaryOperatorKind Opc) {\n  // ...\n  if (exprACTC == castACTC) {\n    // Check for viability and report error if casting an rvalue to a\n    // life-time qualifier.\n    if (castACTC == ACTC_retainable && (CCK == CCK_CStyleCast || CCK == CCK_OtherCast) && castType != castExprType) {\n      // ...\n      if (QDT != castType && QDT.getObjCLifetime() != Qualifiers::OCL_None) {\n        if (Diagnose) {\n          // ...\n          Diag(loc, diag::err_arc_nolifetime_behavior);"}},
[j]={
[j]={
Line 1,495: Line 1,497:
[e]="passing address of (?:non\\-local|non\\-scalar) object to __autoreleasing parameter for write\\-back",
[e]="passing address of (?:non\\-local|non\\-scalar) object to __autoreleasing parameter for write\\-back",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{D,5948,"/// Check whether the given expression is a valid operand for an\n/// indirect copy/restore.\nstatic void checkIndirectCopyRestoreSource(Sema &S, Expr *src) {\n  // ...\n  S.Diag(src->getExprLoc(), diag::err_arc_nonlocal_writeback) << ((unsigned)iik - 1) // shift index into diagnostic explanations"}},
[h]={{E,5948,"/// Check whether the given expression is a valid operand for an\n/// indirect copy/restore.\nstatic void checkIndirectCopyRestoreSource(Sema &S, Expr *src) {\n  // ...\n  S.Diag(src->getExprLoc(), diag::err_arc_nonlocal_writeback) << ((unsigned)iik - 1) // shift index into diagnostic explanations"}},
[j]={
[j]={
["clang/test/SemaObjCXX/arc-overloading.mm"]={"clang/test/SemaObjCXX/arc-overloading.mm:85:17: error: passing address of non-local object to __autoreleasing parameter for write-back"}
["clang/test/SemaObjCXX/arc-overloading.mm"]={"clang/test/SemaObjCXX/arc-overloading.mm:85:17: error: passing address of non-local object to __autoreleasing parameter for write-back"}
Line 1,507: Line 1,509:
[e]="ARC forbids synthesizing a property of an Objective\\-C object with unspecified ownership or storage attribute",
[e]="ARC forbids synthesizing a property of an Objective\\-C object with unspecified ownership or storage attribute",
[f]=a,
[f]=a,
[g]=xb,
[g]=qb,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{bb,266,"class PropertiesRewriter {\n  // ...\n  void maybeAddWeakOrUnsafeUnretainedAttr(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      // ...\n      if (I->ImplD) {\n        // ...\n        Pass.TA.clearDiagnostic(diag::err_arc_objc_property_default_assign_on_object, I->ImplD->getLocation());"},{P,1306,"/// 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      // In ARC, give the ivar a lifetime qualifier based on the\n      // property attributes.\n      if ((getLangOpts().ObjCAutoRefCount || isARCWeak) && !PropertyIvarType.getObjCLifetime() && PropertyIvarType->isObjCRetainableType()) {\n        // It\'s an error if we have to do this and the user didn\'t\n        // explicitly write an ownership attribute on the property.\n        if (!hasWrittenStorageAttribute(property, QueryKind) && !(kind & ObjCPropertyAttribute::kind_strong)) {\n          Diag(PropertyDiagLoc, diag::err_arc_objc_property_default_assign_on_object);"}}
[h]={{ab,266,"class PropertiesRewriter {\n  // ...\n  void maybeAddWeakOrUnsafeUnretainedAttr(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      // ...\n      if (I->ImplD) {\n        // ...\n        Pass.TA.clearDiagnostic(diag::err_arc_objc_property_default_assign_on_object, I->ImplD->getLocation());"},{Q,1306,"/// 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      // In ARC, give the ivar a lifetime qualifier based on the\n      // property attributes.\n      if ((getLangOpts().ObjCAutoRefCount || isARCWeak) && !PropertyIvarType.getObjCLifetime() && PropertyIvarType->isObjCRetainableType()) {\n        // It\'s an error if we have to do this and the user didn\'t\n        // explicitly write an ownership attribute on the property.\n        if (!hasWrittenStorageAttribute(property, QueryKind) && !(kind & ObjCPropertyAttribute::kind_strong)) {\n          Diag(PropertyDiagLoc, diag::err_arc_objc_property_default_assign_on_object);"}}
},
},
["err_arc_perform_selector_retains"]={
["err_arc_perform_selector_retains"]={
Line 1,517: Line 1,519:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"b7a773626fea",1309905539,"objc-arc: enforce performSelector rules in rejecting retaining selectors\npassed to it, and unknown s...","objc-arc: enforce performSelector rules in rejecting retaining selectors\npassed to it, and unknown selectors causing potential leak.\n// rdar://9659270\n\nllvm-svn: 134449"},
[b]={"b7a773626fea",1309905539,"objc-arc: enforce performSelector rules in rejecting retaining selectors","objc-arc: enforce performSelector rules in rejecting retaining selectors\npassed to it, and unknown selectors causing potential leak.\n// rdar://9659270\n\nllvm-svn: 134449"},
[h]={{C,3297,"/// 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  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    // ...\n    case OMF_performSelector:\n      if (Method && NumArgs >= 1) {\n        if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n          // ...\n          if (SelMethod) {\n            // ...\n            case OMF_alloc:\n            case OMF_copy:\n            case OMF_mutableCopy:\n            case OMF_new:\n            case OMF_init:\n              // Issue error, unless ns_returns_not_retained.\n              if (!SelMethod->hasAttr<NSReturnsNotRetainedAttr>()) {\n                // ...\n                Diag(SelLoc, diag::err_arc_perform_selector_retains);"},{C,3307,"/// 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  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    // ...\n    case OMF_performSelector:\n      if (Method && NumArgs >= 1) {\n        if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n          // ...\n          if (SelMethod) {\n            // ...\n            default:\n              // +0 call. OK. unless ns_returns_retained.\n              if (SelMethod->hasAttr<NSReturnsRetainedAttr>()) {\n                // ...\n                Diag(SelLoc, diag::err_arc_perform_selector_retains);"}},
[h]={{C,3297,"/// 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  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    // ...\n    case OMF_performSelector:\n      if (Method && NumArgs >= 1) {\n        if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n          // ...\n          if (SelMethod) {\n            // ...\n            case OMF_alloc:\n            case OMF_copy:\n            case OMF_mutableCopy:\n            case OMF_new:\n            case OMF_init:\n              // Issue error, unless ns_returns_not_retained.\n              if (!SelMethod->hasAttr<NSReturnsNotRetainedAttr>()) {\n                // ...\n                Diag(SelLoc, diag::err_arc_perform_selector_retains);"},{C,3307,"/// 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  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    // ...\n    case OMF_performSelector:\n      if (Method && NumArgs >= 1) {\n        if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n          // ...\n          if (SelMethod) {\n            // ...\n            default:\n              // +0 call. OK. unless ns_returns_retained.\n              if (SelMethod->hasAttr<NSReturnsRetainedAttr>()) {\n                // ...\n                Diag(SelLoc, diag::err_arc_perform_selector_retains);"}},
[j]={
[j]={
Line 1,528: Line 1,530:
[e]="pseudo\\-destructor destroys object of type (.*?) with inconsistently\\-qualified type (.*?)",
[e]="pseudo\\-destructor destroys object of type (.*?) with inconsistently\\-qualified type (.*?)",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{t,7822,"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      // ...\n      } else if (DestructedType.getObjCLifetime() != ObjectType.getObjCLifetime()) {\n        if (DestructedType.getObjCLifetime() == Qualifiers::OCL_None) {\n        // ...\n        } else {\n          Diag(DestructedTypeStart, diag::err_arc_pseudo_dtor_inconstant_quals) << ObjectType << DestructedType << Base->getSourceRange() << DestructedTypeInfo->getTypeLoc().getSourceRange();"}}
[h]={{u,7822,"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      // ...\n      } else if (DestructedType.getObjCLifetime() != ObjectType.getObjCLifetime()) {\n        if (DestructedType.getObjCLifetime() == Qualifiers::OCL_None) {\n        // ...\n        } else {\n          Diag(DestructedTypeStart, diag::err_arc_pseudo_dtor_inconstant_quals) << ObjectType << DestructedType << Base->getSourceRange() << DestructedTypeInfo->getTypeLoc().getSourceRange();"}}
},
},
["err_arc_receiver_forward_class"]={
["err_arc_receiver_forward_class"]={
Line 1,537: Line 1,539:
[e]="receiver (.*?) for class message is a forward declaration",
[e]="receiver (.*?) for class message is a forward declaration",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{C,2663,"/// \\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  // Find the method we are messaging.\n  if (!Method) {\n    // ...\n    if (RequireCompleteType(Loc, Context.getObjCInterfaceType(Class), (getLangOpts().ObjCAutoRefCount ? diag::err_arc_receiver_forward_class : diag::warn_receiver_forward_class), TypeRange)) {"}},
[h]={{C,2663,"/// \\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  // Find the method we are messaging.\n  if (!Method) {\n    // ...\n    if (RequireCompleteType(Loc, Context.getObjCInterfaceType(Class), (getLangOpts().ObjCAutoRefCount ? diag::err_arc_receiver_forward_class : diag::warn_receiver_forward_class), TypeRange)) {"}},
[j]={
[j]={
[zb]={"clang/test/SemaObjC/arc.m:427:4: error: receiver \'Test17\' for class message is a forward declaration"}
[ub]={"clang/test/SemaObjC/arc.m:427:4: error: receiver \'Test17\' for class message is a forward declaration"}
}
}
},
},
Line 1,549: Line 1,551:
[e]="receiver type (.*?) for instance message is a forward declaration",
[e]="receiver type (.*?) for instance message is a forward declaration",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{C,3066,"/// 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) {\n    // ...\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    // ...\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    // ...\n    } else {\n      // ...\n      // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n      // long as one of the protocols implements the selector (if not, warn).\n      // And as long as message is not deprecated/unavailable (warn if it is).\n      if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n      // ...\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n        // ...\n        if (RequireCompleteType(Loc, OCIType->getPointeeType(), getLangOpts().ObjCAutoRefCount ? diag::err_arc_receiver_forward_instance : diag::warn_receiver_forward_instance, RecRange)) {"}},
[h]={{C,3066,"/// 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) {\n    // ...\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    // ...\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    // ...\n    } else {\n      // ...\n      // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n      // long as one of the protocols implements the selector (if not, warn).\n      // And as long as message is not deprecated/unavailable (warn if it is).\n      if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n      // ...\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n        // ...\n        if (RequireCompleteType(Loc, OCIType->getPointeeType(), getLangOpts().ObjCAutoRefCount ? diag::err_arc_receiver_forward_instance : diag::warn_receiver_forward_instance, RecRange)) {"}},
[j]={
[j]={
[zb]={"clang/test/SemaObjC/arc.m:422:4: error: receiver type \'Test17\' for instance message is a forward declaration","clang/test/SemaObjC/arc.m:425:4: error: receiver type \'Test17<Test17p>\' for instance message is a forward declaration"}
[ub]={"clang/test/SemaObjC/arc.m:422:4: error: receiver type \'Test17\' for instance message is a forward declaration","clang/test/SemaObjC/arc.m:425:4: error: receiver type \'Test17<Test17p>\' for instance message is a forward declaration"}
}
}
},
},
Line 1,562: Line 1,564:
[f]=a,
[f]=a,
[g]="ARC and @properties",
[g]="ARC and @properties",
[b]={db,1308874139,cb,eb},
[b]={bb,1308874139,cb,db},
[h]={{bb,207,"class PropertiesRewriter {\n  // ...\n  void removeAssignForDefaultStrong(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{bb,236,"class PropertiesRewriter {\n  // ...\n  void rewriteAssign(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      // ...\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{bb,261,"class PropertiesRewriter {\n  // ...\n  void maybeAddWeakOrUnsafeUnretainedAttr(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      // ...\n      if (I->ImplD) {\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{P,764,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n  // ...\n  case Qualifiers::OCL_Strong:\n    S.Diag(ivar->getLocation(), diag::err_arc_strong_property_ownership) << property->getDeclName() << ivar->getDeclName() << ivarLifetime;"}},
[h]={{ab,207,"class PropertiesRewriter {\n  // ...\n  void removeAssignForDefaultStrong(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{ab,236,"class PropertiesRewriter {\n  // ...\n  void rewriteAssign(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      // ...\n      if (I->ImplD)\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{ab,261,"class PropertiesRewriter {\n  // ...\n  void maybeAddWeakOrUnsafeUnretainedAttr(PropsTy &props, SourceLocation atLoc) const {\n    // ...\n    for (PropsTy::iterator I = props.begin(), E = props.end(); I != E; ++I) {\n      // ...\n      if (I->ImplD) {\n        Pass.TA.clearDiagnostic(diag::err_arc_strong_property_ownership, diag::err_arc_assign_property_ownership, diag::err_arc_inconsistent_property_ownership, I->IvarD->getLocation());"},{Q,764,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n  // ...\n  case Qualifiers::OCL_Strong:\n    S.Diag(ivar->getLocation(), diag::err_arc_strong_property_ownership) << property->getDeclName() << ivar->getDeclName() << ivarLifetime;"}},
[j]={
[j]={
["clang/test/SemaObjC/arc-property-lifetime.m"]={"clang/test/SemaObjC/arc-property-lifetime.m:6:28: error: existing instance variable \'x\' for strong property \'x\' may not be __unsafe_unretained","clang/test/SemaObjC/arc-property-lifetime.m:23:28: error: existing instance variable \'x\' for strong property \'x\' may not be __unsafe_unretained","clang/test/SemaObjC/arc-property-lifetime.m:40:28: error: existing instance variable \'x\' for strong property \'x\' may not be __unsafe_unretained"}
["clang/test/SemaObjC/arc-property-lifetime.m"]={"clang/test/SemaObjC/arc-property-lifetime.m:6:28: error: existing instance variable \'x\' for strong property \'x\' may not be __unsafe_unretained","clang/test/SemaObjC/arc-property-lifetime.m:23:28: error: existing instance variable \'x\' for strong property \'x\' may not be __unsafe_unretained","clang/test/SemaObjC/arc-property-lifetime.m:40:28: error: existing instance variable \'x\' for strong property \'x\' may not be __unsafe_unretained"}
Line 1,573: Line 1,575:
[e]="thread\\-local variable has non\\-trivial ownership\\: type is (.*?)",
[e]="thread\\-local variable has non\\-trivial ownership\\: type is (.*?)",
[f]=a,
[f]=a,
[g]=J,
[g]=K,
[b]={db,1308874139,cb,eb},
[b]={bb,1308874139,cb,db},
[h]={{n,6893,"bool Sema::inferObjCARCLifetime(ValueDecl *decl) {\n  // ...\n  if (VarDecl *var = dyn_cast<VarDecl>(decl)) {\n    // Thread-local variables cannot have lifetime.\n    if (lifetime && lifetime != Qualifiers::OCL_ExplicitNone && var->getTLSKind()) {\n      Diag(var->getLocation(), diag::err_arc_thread_ownership) << var->getType();"}},
[h]={{m,6893,"bool Sema::inferObjCARCLifetime(ValueDecl *decl) {\n  // ...\n  if (VarDecl *var = dyn_cast<VarDecl>(decl)) {\n    // Thread-local variables cannot have lifetime.\n    if (lifetime && lifetime != Qualifiers::OCL_ExplicitNone && var->getTLSKind()) {\n      Diag(var->getLocation(), diag::err_arc_thread_ownership) << var->getType();"}},
[j]={
[j]={
[zb]={"clang/test/SemaObjC/arc.m:448:20: error: thread-local variable has non-trivial ownership: type is \'__strong id\'","clang/test/SemaObjC/arc.m:449:29: error: thread-local variable has non-trivial ownership: type is \'__strong id\'","clang/test/SemaObjC/arc.m:450:27: error: thread-local variable has non-trivial ownership: type is \'__weak id\'","clang/test/SemaObjC/arc.m:451:36: error: thread-local variable has non-trivial ownership: type is \'__autoreleasing id\'","clang/test/SemaObjC/arc.m:454:22: error: thread-local variable has non-trivial ownership: type is \'__strong id\'","clang/test/SemaObjC/arc.m:455:31: error: thread-local variable has non-trivial ownership: type is \'__strong id\'","clang/test/SemaObjC/arc.m:456:29: error: thread-local variable has non-trivial ownership: type is \'__weak id\'","clang/test/SemaObjC/arc.m:457:38: error: thread-local variable has non-trivial ownership: type is \'__autoreleasing id\'"}
[ub]={"clang/test/SemaObjC/arc.m:448:20: error: thread-local variable has non-trivial ownership: type is \'__strong id\'","clang/test/SemaObjC/arc.m:449:29: error: thread-local variable has non-trivial ownership: type is \'__strong id\'","clang/test/SemaObjC/arc.m:450:27: error: thread-local variable has non-trivial ownership: type is \'__weak id\'","clang/test/SemaObjC/arc.m:451:36: error: thread-local variable has non-trivial ownership: type is \'__autoreleasing id\'","clang/test/SemaObjC/arc.m:454:22: error: thread-local variable has non-trivial ownership: type is \'__strong id\'","clang/test/SemaObjC/arc.m:455:31: error: thread-local variable has non-trivial ownership: type is \'__strong id\'","clang/test/SemaObjC/arc.m:456:29: error: thread-local variable has non-trivial ownership: type is \'__weak id\'","clang/test/SemaObjC/arc.m:457:38: error: thread-local variable has non-trivial ownership: type is \'__autoreleasing id\'"}
}
}
},
},
Line 1,586: Line 1,588:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"3a25d0d59395",1375312774,"ObjectiveC ARC: finishing off issuing error when\nretainable pointer is passed to an audited CF funct...","ObjectiveC ARC: finishing off issuing error when\nretainable pointer is passed to an audited CF function\nexpecting CF type. // rdar://14569171\n\nllvm-svn: 187543"},
[b]={"3a25d0d59395",1375312774,"ObjectiveC ARC: finishing off issuing error when","ObjectiveC ARC: finishing off issuing error when\nretainable pointer is passed to an audited CF function\nexpecting CF type. // rdar://14569171\n\nllvm-svn: 187543"},
[h]={{u,17563,"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      DiagKind = diag::err_arc_typecheck_convert_incompatible_pointer;"}},
[h]={{v,17563,"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      DiagKind = diag::err_arc_typecheck_convert_incompatible_pointer;"}},
[j]={
[j]={
["clang/test/SemaObjC/arc-cf.m"]={"clang/test/SemaObjC/arc-cf.m:58:35: error: incompatible pointer types passing retainable parameter of type \'NSString *__strong\'to a CF function expecting \'CFStringRef\' (aka \'const struct __CFString *\') type"}
["clang/test/SemaObjC/arc-cf.m"]={"clang/test/SemaObjC/arc-cf.m:58:35: error: incompatible pointer types passing retainable parameter of type \'NSString *__strong\'to a CF function expecting \'CFStringRef\' (aka \'const struct __CFString *\') type"}
Line 1,598: Line 1,600:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"3deb1ad40ca6",1345517263,"Screw around with ObjCRuntime some more, changing the\ndiagnostics for bad deployment targets and add...","Screw around with ObjCRuntime some more, changing the\ndiagnostics for bad deployment targets and adding a few\nmore predicates.  Includes a patch by Jonathan Schleifer\nto enable ARC for ObjFW.\n\nllvm-svn: 162252"},
[b]={"3deb1ad40ca6",1345517263,"Screw around with ObjCRuntime some more, changing the","Screw around with ObjCRuntime some more, changing the\ndiagnostics for bad deployment targets and adding a few\nmore predicates.  Includes a patch by Jonathan Schleifer\nto enable ARC for ObjFW.\n\nllvm-svn: 162252"},
[h]={{O,3665,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Opts.ObjC) {\n    // ...\n    if (Args.hasArg(OPT_fobjc_gc_only))\n    // ...\n    else if (Args.hasArg(OPT_fobjc_gc))\n    // ...\n    else if (Args.hasArg(OPT_fobjc_arc)) {\n      // ...\n      if (!Opts.ObjCRuntime.allowsARC())\n        Diags.Report(diag::err_arc_unsupported_on_runtime);"}}
[h]={{P,3665,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Opts.ObjC) {\n    // ...\n    if (Args.hasArg(OPT_fobjc_gc_only))\n    // ...\n    else if (Args.hasArg(OPT_fobjc_gc))\n    // ...\n    else if (Args.hasArg(OPT_fobjc_arc)) {\n      // ...\n      if (!Opts.ObjCRuntime.allowsARC())\n        Diags.Report(diag::err_arc_unsupported_on_runtime);"}}
},
},
["err_arc_unsupported_on_toolchain"]={
["err_arc_unsupported_on_toolchain"]={
Line 1,607: Line 1,609:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"3deb1ad40ca6",1345517263,"Screw around with ObjCRuntime some more, changing the\ndiagnostics for bad deployment targets and add...","Screw around with ObjCRuntime some more, changing the\ndiagnostics for bad deployment targets and adding a few\nmore predicates.  Includes a patch by Jonathan Schleifer\nto enable ARC for ObjFW.\n\nllvm-svn: 162252"},
[b]={"3deb1ad40ca6",1345517263,"Screw around with ObjCRuntime some more, changing the","Screw around with ObjCRuntime some more, changing the\ndiagnostics for bad deployment targets and adding a few\nmore predicates.  Includes a patch by Jonathan Schleifer\nto enable ARC for ObjFW.\n\nllvm-svn: 162252"},
[h]={{"clang/lib/Driver/ToolChains/Darwin.cpp",3295,"void Darwin::CheckObjCARC() const {\n  // ...\n  getDriver().Diag(diag::err_arc_unsupported_on_toolchain);"}}
[h]={{"clang/lib/Driver/ToolChains/Darwin.cpp",3295,"void Darwin::CheckObjCARC() const {\n  // ...\n  getDriver().Diag(diag::err_arc_unsupported_on_toolchain);"}}
},
},
Line 1,615: Line 1,617:
[e]="class is incompatible with __weak references",
[e]="class is incompatible with __weak references",
[f]=a,
[f]=a,
[g]=Rb,
[g]=Tb,
[b]={"1f626d6fd1ca",1309980245,"objc-arc: Support objc_arc_weak_unavailable on those\nclasses which are incompatible with weak refere...","objc-arc: Support objc_arc_weak_unavailable on those\nclasses which are incompatible with weak references.\n// rdar://9693477\n\nllvm-svn: 134522"},
[b]={"1f626d6fd1ca",1309980245,"objc-arc: Support objc_arc_weak_unavailable on those","objc-arc: Support objc_arc_weak_unavailable on those\nclasses which are incompatible with weak references.\n// rdar://9693477\n\nllvm-svn: 134522"},
[h]={{"clang/lib/ARCMigrate/TransGCAttrs.cpp",211,"static void checkWeakGCAttrs(MigrationContext &MigrateCtx) {\n  // ...\n  for (unsigned i = 0, e = MigrateCtx.GCAttrs.size(); i != e; ++i) {\n    // ...\n    if (Attr.Kind == MigrationContext::GCAttrOccurrence::Weak) {\n      // ...\n      if (!canApplyWeak(MigrateCtx.Pass.Ctx, Attr.ModifiedType,\n        // ...\n        TA.clearDiagnostic(diag::err_arc_weak_no_runtime, diag::err_arc_unsupported_weak_class, Attr.Loc);"},{o,7074,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  // Forbid __weak for class objects marked as\n  // objc_arc_weak_reference_unavailable\n  if (lifetime == Qualifiers::OCL_Weak) {\n    if (const ObjCObjectPointerType *ObjT = type->getAs<ObjCObjectPointerType>()) {\n      if (ObjCInterfaceDecl *Class = ObjT->getInterfaceDecl()) {\n        if (Class->isArcWeakrefUnavailable()) {\n          S.Diag(AttrLoc, diag::err_arc_unsupported_weak_class);"}},
[h]={{"clang/lib/ARCMigrate/TransGCAttrs.cpp",211,"static void checkWeakGCAttrs(MigrationContext &MigrateCtx) {\n  // ...\n  for (unsigned i = 0, e = MigrateCtx.GCAttrs.size(); i != e; ++i) {\n    // ...\n    if (Attr.Kind == MigrationContext::GCAttrOccurrence::Weak) {\n      // ...\n      if (!canApplyWeak(MigrateCtx.Pass.Ctx, Attr.ModifiedType,\n        // ...\n        TA.clearDiagnostic(diag::err_arc_weak_no_runtime, diag::err_arc_unsupported_weak_class, Attr.Loc);"},{n,7074,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  // Forbid __weak for class objects marked as\n  // objc_arc_weak_reference_unavailable\n  if (lifetime == Qualifiers::OCL_Weak) {\n    if (const ObjCObjectPointerType *ObjT = type->getAs<ObjCObjectPointerType>()) {\n      if (ObjCInterfaceDecl *Class = ObjT->getInterfaceDecl()) {\n        if (Class->isArcWeakrefUnavailable()) {\n          S.Diag(AttrLoc, diag::err_arc_unsupported_weak_class);"}},
[j]={
[j]={
["clang/test/SemaObjCXX/objc-weak.mm"]={"clang/test/SemaObjCXX/objc-weak.mm:21:34: error: class is incompatible with __weak references","clang/test/SemaObjCXX/objc-weak.mm:25:29: error: class is incompatible with __weak references"}
["clang/test/SemaObjCXX/objc-weak.mm"]={"clang/test/SemaObjCXX/objc-weak.mm:21:34: error: class is incompatible with __weak references","clang/test/SemaObjCXX/objc-weak.mm:25:29: error: class is incompatible with __weak references"}
Line 1,627: Line 1,629:
[e]="the result of a delegate init call must be immediately returned or assigned to \'self\'",
[e]="the result of a delegate init call must be immediately returned or assigned to \'self\'",
[f]=a,
[f]=a,
[g]=xb,
[g]=qb,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{"clang/lib/ARCMigrate/TransUnusedInitDelegate.cpp",53,"class UnusedInitRewriter : public RecursiveASTVisitor<UnusedInitRewriter> {\n  // ...\n  bool VisitObjCMessageExpr(ObjCMessageExpr *ME) {\n    if (ME->isDelegateInitCall() && isRemovable(ME) && Pass.TA.hasDiagnostic(diag::err_arc_unused_init_message, ME->getExprLoc())) {"},{"clang/lib/ARCMigrate/TransUnusedInitDelegate.cpp",56,"class UnusedInitRewriter : public RecursiveASTVisitor<UnusedInitRewriter> {\n  // ...\n  bool VisitObjCMessageExpr(ObjCMessageExpr *ME) {\n    if (ME->isDelegateInitCall() && isRemovable(ME) && Pass.TA.hasDiagnostic(diag::err_arc_unused_init_message, ME->getExprLoc())) {\n      // ...\n      Pass.TA.clearDiagnostic(diag::err_arc_unused_init_message, ME->getExprLoc());"},{Q,328,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n  // ...\n  if (const ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(E)) {\n    if (getLangOpts().ObjCAutoRefCount && ME->isDelegateInitCall()) {\n      Diag(Loc, diag::err_arc_unused_init_message) << R1;"}},
[h]={{"clang/lib/ARCMigrate/TransUnusedInitDelegate.cpp",53,"class UnusedInitRewriter : public RecursiveASTVisitor<UnusedInitRewriter> {\n  // ...\n  bool VisitObjCMessageExpr(ObjCMessageExpr *ME) {\n    if (ME->isDelegateInitCall() && isRemovable(ME) && Pass.TA.hasDiagnostic(diag::err_arc_unused_init_message, ME->getExprLoc())) {"},{"clang/lib/ARCMigrate/TransUnusedInitDelegate.cpp",56,"class UnusedInitRewriter : public RecursiveASTVisitor<UnusedInitRewriter> {\n  // ...\n  bool VisitObjCMessageExpr(ObjCMessageExpr *ME) {\n    if (ME->isDelegateInitCall() && isRemovable(ME) && Pass.TA.hasDiagnostic(diag::err_arc_unused_init_message, ME->getExprLoc())) {\n      // ...\n      Pass.TA.clearDiagnostic(diag::err_arc_unused_init_message, ME->getExprLoc());"},{R,328,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n  // ...\n  if (const ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(E)) {\n    if (getLangOpts().ObjCAutoRefCount && ME->isDelegateInitCall()) {\n      Diag(Loc, diag::err_arc_unused_init_message) << R1;"}},
[j]={
[j]={
[zb]={"clang/test/SemaObjC/arc.m:528:3: error: the result of a delegate init call must be immediately returned or assigned to \'self\'"}
[ub]={"clang/test/SemaObjC/arc.m:528:3: error: the result of a delegate init call must be immediately returned or assigned to \'self\'"}
}
}
},
},
Line 1,639: Line 1,641:
[e]="cannot create __weak reference in file using manual reference counting",
[e]="cannot create __weak reference in file using manual reference counting",
[f]=a,
[f]=a,
[g]=Rb,
[g]=Tb,
[b]={"460ce58fa6a1",1445539097,"Define weak and __weak to mean ARC-style weak references, even in MRC.\n\nPreviously, __weak was silen...","Define weak and __weak to mean ARC-style weak references, even in MRC.\n\nPreviously, __weak was silently accepted and ignored in MRC mode.\nThat makes this a potentially source-breaking change that we have to\nroll out cautiously.  Accordingly, for the time being, actual support\nfor __weak references in MRC is experimental, and the compiler will\nreject attempts to actually form such references.  The intent is to\neventually enable the feature by default in all non-GC modes.\n(It is, of course, incompatible with ObjC GC\'s interpretation of\n__weak.)\n\nIf you like, you can enable this feature with\n  -Xclang -fobjc-weak\nbut like any -Xclang option, this option may be removed at any point,\ne.g. if/when it is eventually enabled by default.\n\nThis patch also enables the use of the ARC __unsafe_unretained qualifier\nin MRC.  Unlike __weak, this is being enabled immediately.  Since\nvariables are essentially __unsafe_unretained by default in MRC,\nthe only practical uses are (1) communication and (2) changing the\ndefault behavior of by-value block capture.\n\nAs an implementation matter, this means that the ObjC ownership\nqualifiers may appear in any ObjC language mode, and so this patch\nremoves a number of checks for getLangOpts().ObjCAutoRefCount\nthat were guarding the processing of these qualifiers.  I don\'t\nexpect this to be a significant drain on performance; it may even\nbe faster to just check for these qualifiers directly on a type\n(since it\'s probably in a register anyway) than to do N dependent\nloads to grab the LangOptions.\n\nrdar://9674298\n\nllvm-svn: 251041"},
[b]={"460ce58fa6a1",1445539097,"Define weak and __weak to mean ARC-style weak references, even in MRC.","Define weak and __weak to mean ARC-style weak references, even in MRC.\n\nPreviously, __weak was silently accepted and ignored in MRC mode.\nThat makes this a potentially source-breaking change that we have to\nroll out cautiously.  Accordingly, for the time being, actual support\nfor __weak references in MRC is experimental, and the compiler will\nreject attempts to actually form such references.  The intent is to\neventually enable the feature by default in all non-GC modes.\n(It is, of course, incompatible with ObjC GC\'s interpretation of\n__weak.)\n\nIf you like, you can enable this feature with\n  -Xclang -fobjc-weak\nbut like any -Xclang option, this option may be removed at any point,\ne.g. if/when it is eventually enabled by default.\n\nThis patch also enables the use of the ARC __unsafe_unretained qualifier\nin MRC.  Unlike __weak, this is being enabled immediately.  Since\nvariables are essentially __unsafe_unretained by default in MRC,\nthe only practical uses are (1) communication and (2) changing the\ndefault behavior of by-value block capture.\n\nAs an implementation matter, this means that the ObjC ownership\nqualifiers may appear in any ObjC language mode, and so this patch\nremoves a number of checks for getLangOpts().ObjCAutoRefCount\nthat were guarding the processing of these qualifiers.  I don\'t\nexpect this to be a significant drain on performance; it may even\nbe faster to just check for these qualifiers directly on a type\n(since it\'s probably in a register anyway) than to do N dependent\nloads to grab the LangOptions.\n\nrdar://9674298\n\nllvm-svn: 251041"},
[h]={{l,9802,"/// Is the given declaration allowed to use a forbidden type?\n/// If so, it\'ll still be annotated with an attribute that makes it\n/// illegal to actually use.\nstatic bool isForbiddenTypeAllowed(Sema &S, Decl *D, const DelayedDiagnostic &diag, UnavailableAttr::ImplicitReason &reason) {\n  // ...\n  // Silently accept unsupported uses of __weak in both user and system\n  // declarations when it\'s been disabled, for ease of integration with\n  // -fno-objc-arc files.  We do have to take some care against attempts\n  // to define such things;  for now, we\'ve only done that for ivars\n  // and properties.\n  if ((isa<ObjCIvarDecl>(D) || isa<ObjCPropertyDecl>(D))) {\n    if (diag.getForbiddenTypeDiagnostic() == diag::err_arc_weak_disabled || diag.getForbiddenTypeDiagnostic() == diag::err_arc_weak_no_runtime) {"},{G,3794,"/// Diagnose attempts to define ARC-__weak ivars when __weak is disabled.\nstatic void DiagnoseWeakIvars(Sema &S, ObjCImplementationDecl *ID) {\n  // ...\n  for (auto ivar = ID->getClassInterface()->all_declared_ivar_begin(); ivar; ivar = ivar->getNextIvar()) {\n    // ...\n    if (ivar->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n      if (S.getLangOpts().ObjCWeakRuntime) {\n        S.Diag(ivar->getLocation(), diag::err_arc_weak_disabled);"},{o,7057,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  // Sometimes, __weak isn\'t allowed.\n  if (lifetime == Qualifiers::OCL_Weak && !S.getLangOpts().ObjCWeak && !NonObjCPointer) {\n    // ...\n    unsigned diagnostic = (S.getLangOpts().ObjCWeakRuntime ? diag::err_arc_weak_disabled : diag::err_arc_weak_no_runtime);"}},
[h]={{l,9802,"/// Is the given declaration allowed to use a forbidden type?\n/// If so, it\'ll still be annotated with an attribute that makes it\n/// illegal to actually use.\nstatic bool isForbiddenTypeAllowed(Sema &S, Decl *D, const DelayedDiagnostic &diag, UnavailableAttr::ImplicitReason &reason) {\n  // ...\n  // Silently accept unsupported uses of __weak in both user and system\n  // declarations when it\'s been disabled, for ease of integration with\n  // -fno-objc-arc files.  We do have to take some care against attempts\n  // to define such things;  for now, we\'ve only done that for ivars\n  // and properties.\n  if ((isa<ObjCIvarDecl>(D) || isa<ObjCPropertyDecl>(D))) {\n    if (diag.getForbiddenTypeDiagnostic() == diag::err_arc_weak_disabled || diag.getForbiddenTypeDiagnostic() == diag::err_arc_weak_no_runtime) {"},{G,3794,"/// Diagnose attempts to define ARC-__weak ivars when __weak is disabled.\nstatic void DiagnoseWeakIvars(Sema &S, ObjCImplementationDecl *ID) {\n  // ...\n  for (auto ivar = ID->getClassInterface()->all_declared_ivar_begin(); ivar; ivar = ivar->getNextIvar()) {\n    // ...\n    if (ivar->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n      if (S.getLangOpts().ObjCWeakRuntime) {\n        S.Diag(ivar->getLocation(), diag::err_arc_weak_disabled);"},{n,7057,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  // Sometimes, __weak isn\'t allowed.\n  if (lifetime == Qualifiers::OCL_Weak && !S.getLangOpts().ObjCWeak && !NonObjCPointer) {\n    // ...\n    unsigned diagnostic = (S.getLangOpts().ObjCWeakRuntime ? diag::err_arc_weak_disabled : diag::err_arc_weak_no_runtime);"}},
[j]={
[j]={
["clang/test/SemaObjC/mrc-no-weak.m"]={"clang/test/SemaObjC/mrc-no-weak.m:15:13: error: cannot create __weak reference in file using manual reference counting"}
["clang/test/SemaObjC/mrc-no-weak.m"]={"clang/test/SemaObjC/mrc-no-weak.m:15:13: error: cannot create __weak reference in file using manual reference counting"}
Line 1,652: Line 1,654:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={Mb,1480718311,V,V},
[b]={Lb,1480718311,Mb,Ob},
[h]={{"clang/lib/Sema/SemaExprMember.cpp",1462,"/// 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.getLangOpts().ObjCWeak) {\n      // ...\n      if (DeclRefExpr *DE = dyn_cast<DeclRefExpr>(BaseExp))\n        if (DE->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n          S.Diag(DE->getLocation(), diag::err_arc_weak_ivar_access);"}},
[h]={{"clang/lib/Sema/SemaExprMember.cpp",1462,"/// 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.getLangOpts().ObjCWeak) {\n      // ...\n      if (DeclRefExpr *DE = dyn_cast<DeclRefExpr>(BaseExp))\n        if (DE->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n          S.Diag(DE->getLocation(), diag::err_arc_weak_ivar_access);"}},
[j]={
[j]={
Line 1,663: Line 1,665:
[e]="cannot create __weak reference because the current deployment target does not support weak references",
[e]="cannot create __weak reference because the current deployment target does not support weak references",
[f]=a,
[f]=a,
[g]=Rb,
[g]=Tb,
[b]={E,1308178962,F,H},
[b]={F,1308178962,H,I},
[h]={{"clang/lib/ARCMigrate/TransGCAttrs.cpp",210,"static void checkWeakGCAttrs(MigrationContext &MigrateCtx) {\n  // ...\n  for (unsigned i = 0, e = MigrateCtx.GCAttrs.size(); i != e; ++i) {\n    // ...\n    if (Attr.Kind == MigrationContext::GCAttrOccurrence::Weak) {\n      // ...\n      if (!canApplyWeak(MigrateCtx.Pass.Ctx, Attr.ModifiedType,\n        // ...\n        TA.clearDiagnostic(diag::err_arc_weak_no_runtime, diag::err_arc_unsupported_weak_class, Attr.Loc);"},{l,9803,"/// Is the given declaration allowed to use a forbidden type?\n/// If so, it\'ll still be annotated with an attribute that makes it\n/// illegal to actually use.\nstatic bool isForbiddenTypeAllowed(Sema &S, Decl *D, const DelayedDiagnostic &diag, UnavailableAttr::ImplicitReason &reason) {\n  // ...\n  // Silently accept unsupported uses of __weak in both user and system\n  // declarations when it\'s been disabled, for ease of integration with\n  // -fno-objc-arc files.  We do have to take some care against attempts\n  // to define such things;  for now, we\'ve only done that for ivars\n  // and properties.\n  if ((isa<ObjCIvarDecl>(D) || isa<ObjCPropertyDecl>(D))) {\n    if (diag.getForbiddenTypeDiagnostic() == diag::err_arc_weak_disabled || diag.getForbiddenTypeDiagnostic() == diag::err_arc_weak_no_runtime) {"},{G,3796,"/// Diagnose attempts to define ARC-__weak ivars when __weak is disabled.\nstatic void DiagnoseWeakIvars(Sema &S, ObjCImplementationDecl *ID) {\n  // ...\n  for (auto ivar = ID->getClassInterface()->all_declared_ivar_begin(); ivar; ivar = ivar->getNextIvar()) {\n    // ...\n    if (ivar->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n      if (S.getLangOpts().ObjCWeakRuntime) {\n      // ...\n      } else {\n        S.Diag(ivar->getLocation(), diag::err_arc_weak_no_runtime);"},{o,7058,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  // Sometimes, __weak isn\'t allowed.\n  if (lifetime == Qualifiers::OCL_Weak && !S.getLangOpts().ObjCWeak && !NonObjCPointer) {\n    // ...\n    unsigned diagnostic = (S.getLangOpts().ObjCWeakRuntime ? diag::err_arc_weak_disabled : diag::err_arc_weak_no_runtime);"}},
[h]={{"clang/lib/ARCMigrate/TransGCAttrs.cpp",210,"static void checkWeakGCAttrs(MigrationContext &MigrateCtx) {\n  // ...\n  for (unsigned i = 0, e = MigrateCtx.GCAttrs.size(); i != e; ++i) {\n    // ...\n    if (Attr.Kind == MigrationContext::GCAttrOccurrence::Weak) {\n      // ...\n      if (!canApplyWeak(MigrateCtx.Pass.Ctx, Attr.ModifiedType,\n        // ...\n        TA.clearDiagnostic(diag::err_arc_weak_no_runtime, diag::err_arc_unsupported_weak_class, Attr.Loc);"},{l,9803,"/// Is the given declaration allowed to use a forbidden type?\n/// If so, it\'ll still be annotated with an attribute that makes it\n/// illegal to actually use.\nstatic bool isForbiddenTypeAllowed(Sema &S, Decl *D, const DelayedDiagnostic &diag, UnavailableAttr::ImplicitReason &reason) {\n  // ...\n  // Silently accept unsupported uses of __weak in both user and system\n  // declarations when it\'s been disabled, for ease of integration with\n  // -fno-objc-arc files.  We do have to take some care against attempts\n  // to define such things;  for now, we\'ve only done that for ivars\n  // and properties.\n  if ((isa<ObjCIvarDecl>(D) || isa<ObjCPropertyDecl>(D))) {\n    if (diag.getForbiddenTypeDiagnostic() == diag::err_arc_weak_disabled || diag.getForbiddenTypeDiagnostic() == diag::err_arc_weak_no_runtime) {"},{G,3796,"/// Diagnose attempts to define ARC-__weak ivars when __weak is disabled.\nstatic void DiagnoseWeakIvars(Sema &S, ObjCImplementationDecl *ID) {\n  // ...\n  for (auto ivar = ID->getClassInterface()->all_declared_ivar_begin(); ivar; ivar = ivar->getNextIvar()) {\n    // ...\n    if (ivar->getType().getObjCLifetime() == Qualifiers::OCL_Weak) {\n      if (S.getLangOpts().ObjCWeakRuntime) {\n      // ...\n      } else {\n        S.Diag(ivar->getLocation(), diag::err_arc_weak_no_runtime);"},{n,7058,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  // Sometimes, __weak isn\'t allowed.\n  if (lifetime == Qualifiers::OCL_Weak && !S.getLangOpts().ObjCWeak && !NonObjCPointer) {\n    // ...\n    unsigned diagnostic = (S.getLangOpts().ObjCWeakRuntime ? diag::err_arc_weak_disabled : diag::err_arc_weak_no_runtime);"}},
[j]={
[j]={
["clang/test/SemaObjC/arc-no-runtime.m"]={"clang/test/SemaObjC/arc-no-runtime.m:5:3: error: cannot create __weak reference because the current deployment target does not support weak references"}
["clang/test/SemaObjC/arc-no-runtime.m"]={"clang/test/SemaObjC/arc-no-runtime.m:5:3: error: cannot create __weak reference because the current deployment target does not support weak references"}
Line 1,675: Line 1,677:
[e]="assignment of a weak\\-unavailable object to a __weak object",
[e]="assignment of a weak\\-unavailable object to a __weak object",
[f]=a,
[f]=a,
[g]=Rb,
[g]=Tb,
[b]={"6f472e803bf8",1310064947,"objc-arc: diagnose assignment/cast of a weak-unavailable\nobject to a __weak object/type. // rdar://9...","objc-arc: diagnose assignment/cast of a weak-unavailable\nobject to a __weak object/type. // rdar://9732636.\nThis is objc side of things. objc++ side tbd.\n\nllvm-svn: 134624"},
[b]={"6f472e803bf8",1310064947,"objc-arc: diagnose assignment/cast of a weak-unavailable","objc-arc: diagnose assignment/cast of a weak-unavailable\nobject to a __weak object/type. // rdar://9732636.\nThis is objc side of things. objc++ side tbd.\n\nllvm-svn: 134624"},
[h]={{u,17705,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatibleObjCWeakRef:\n    DiagKind = diag::err_arc_weak_unavailable_assign;"},{t,4495,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType by following the standard\n/// conversion sequence SCS. Returns the converted\n/// expression. Flavor is the context in which we\'re performing this\n/// conversion, for use in error messages.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const StandardConversionSequence &SCS, AssignmentAction Action, CheckedConversionKind CCK) {\n  // ...\n  case ICK_Writeback_Conversion:\n  case ICK_Pointer_Conversion: {\n    if (SCS.IncompatibleObjC && Action != AA_Casting) {\n    // ...\n    } else if (getLangOpts().allowsNonTrivialObjCLifetimeQualifiers() && !CheckObjCARCUnavailableWeakConversion(ToType, From->getType())) {\n      if (Action == AA_Initializing)\n        Diag(From->getBeginLoc(), diag::err_arc_weak_unavailable_assign);"}},
[h]={{v,17705,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatibleObjCWeakRef:\n    DiagKind = diag::err_arc_weak_unavailable_assign;"},{u,4495,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType by following the standard\n/// conversion sequence SCS. Returns the converted\n/// expression. Flavor is the context in which we\'re performing this\n/// conversion, for use in error messages.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const StandardConversionSequence &SCS, AssignmentAction Action, CheckedConversionKind CCK) {\n  // ...\n  case ICK_Writeback_Conversion:\n  case ICK_Pointer_Conversion: {\n    if (SCS.IncompatibleObjC && Action != AA_Casting) {\n    // ...\n    } else if (getLangOpts().allowsNonTrivialObjCLifetimeQualifiers() && !CheckObjCARCUnavailableWeakConversion(ToType, From->getType())) {\n      if (Action == AA_Initializing)\n        Diag(From->getBeginLoc(), diag::err_arc_weak_unavailable_assign);"}},
[j]={
[j]={
["clang/test/SemaObjCXX/objc-weak.mm"]={"clang/test/SemaObjCXX/objc-weak.mm:21:17: error: assignment of a weak-unavailable object to a __weak object","clang/test/SemaObjCXX/objc-weak.mm:25:17: error: assignment of a weak-unavailable object to a __weak object"}
["clang/test/SemaObjCXX/objc-weak.mm"]={"clang/test/SemaObjCXX/objc-weak.mm:21:17: error: assignment of a weak-unavailable object to a __weak object","clang/test/SemaObjCXX/objc-weak.mm:25:17: error: assignment of a weak-unavailable object to a __weak object"}
Line 1,687: Line 1,689:
[e]="synthesizing __weak instance variable of type (.*?), which does not support weak references",
[e]="synthesizing __weak instance variable of type (.*?), which does not support weak references",
[f]=a,
[f]=a,
[g]=Rb,
[g]=Tb,
[b]={"e283346d0bf4",1323460511,"objc-arc: diagnose synthesis of a \'weak unavailable\' property.\n// rdar://10535245\n\nllvm-svn: 146272","objc-arc: diagnose synthesis of a \'weak unavailable\' property.\n// rdar://10535245\n\nllvm-svn: 146272"},
[b]={"e283346d0bf4",1323460511,"objc-arc: diagnose synthesis of a \'weak unavailable\' property.","objc-arc: diagnose synthesis of a \'weak unavailable\' property.\n// rdar://10535245\n\nllvm-svn: 146272"},
[h]={{P,1265,"/// 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        // ...\n        } else {\n          // ...\n          if (const ObjCObjectPointerType *ObjT = PropertyIvarType->getAs<ObjCObjectPointerType>()) {\n            // ...\n            if (ObjI && ObjI->isArcWeakrefUnavailable()) {\n              Diag(property->getLocation(), diag::err_arc_weak_unavailable_property) << PropertyIvarType;"}},
[h]={{Q,1265,"/// 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        // ...\n        } else {\n          // ...\n          if (const ObjCObjectPointerType *ObjT = PropertyIvarType->getAs<ObjCObjectPointerType>()) {\n            // ...\n            if (ObjI && ObjI->isArcWeakrefUnavailable()) {\n              Diag(property->getLocation(), diag::err_arc_weak_unavailable_property) << PropertyIvarType;"}},
[j]={
[j]={
["clang/test/SemaObjC/arc-unavailable-for-weakref.m"]={"clang/test/SemaObjC/arc-unavailable-for-weakref.m:60:26: error: synthesizing __weak instance variable of type \'NSFont *\', which does not support weak references","clang/test/SemaObjC/arc-unavailable-for-weakref.m:69:26: error: synthesizing __weak instance variable of type \'NSFont *\', which does not support weak references","clang/test/SemaObjC/arc-unavailable-for-weakref.m:80:26: error: synthesizing __weak instance variable of type \'NSFont *\', which does not support weak references"}
["clang/test/SemaObjC/arc-unavailable-for-weakref.m"]={"clang/test/SemaObjC/arc-unavailable-for-weakref.m:60:26: error: synthesizing __weak instance variable of type \'NSFont *\', which does not support weak references","clang/test/SemaObjC/arc-unavailable-for-weakref.m:69:26: error: synthesizing __weak instance variable of type \'NSFont *\', which does not support weak references","clang/test/SemaObjC/arc-unavailable-for-weakref.m:80:26: error: synthesizing __weak instance variable of type \'NSFont *\', which does not support weak references"}
Line 1,700: Line 1,702:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"83e57c232702",1501843218,"[Driver] Error if ARM mode was selected explicitly for M-profile CPUs.\n\nSummary:\nM-class profiles do...","[Driver] Error if ARM mode was selected explicitly for M-profile CPUs.\n\nSummary:\nM-class profiles do not support ARM execution mode, so providing\n-marm/-mno-thumb does not make sense in combination with -mcpu/-march\noptions that support the M-profile.\n\nThis is a follow-up patch to D35569 and it seemed pretty clear that we\nshould emit an error in the driver in this case.\n\nWe probably also should warn/error if the provided -mcpu/-march options\ndo not match, e.g. -mcpu=cortex-m0 -march=armv8-a is invalid, as\ncortex-m0 does not support armv8-a. But that should be a separate patch\nI think.\n\n\nReviewers: echristo, richard.barton.arm, rengolin, labrinea, charles.baylis\n\nReviewed By: rengolin\n\nSubscribers: aemerson, javed.absar, kristof.beyls, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D35826\n\nllvm-svn: 310047"},
[b]={"83e57c232702",1501843218,"[Driver] Error if ARM mode was selected explicitly for M-profile CPUs.","[Driver] Error if ARM mode was selected explicitly for M-profile CPUs.\n\nSummary:\nM-class profiles do not support ARM execution mode, so providing\n-marm/-mno-thumb does not make sense in combination with -mcpu/-march\noptions that support the M-profile.\n\nThis is a follow-up patch to D35569 and it seemed pretty clear that we\nshould emit an error in the driver in this case.\n\nWe probably also should warn/error if the provided -mcpu/-march options\ndo not match, e.g. -mcpu=cortex-m0 -march=armv8-a is invalid, as\ncortex-m0 does not support armv8-a. But that should be a separate patch\nI think.\n\n\nReviewers: echristo, richard.barton.arm, rengolin, labrinea, charles.baylis\n\nReviewed By: rengolin\n\nSubscribers: aemerson, javed.absar, kristof.beyls, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D35826\n\nllvm-svn: 310047"},
[h]={{"clang/lib/Driver/ToolChains/Arch/ARM.cpp",267,"void arm::setArchNameInTriple(const Driver &D, const ArgList &Args, types::ID InputType, llvm::Triple &Triple) {\n  // ...\n  if (IsMProfile && ARMModeRequested) {\n    if (MCPU.size())\n    // ...\n    else\n      D.Diag(diag::err_arch_unsupported_isa) << tools::arm::getARMArch(MArch, Triple) << \"ARM\";"}}
[h]={{"clang/lib/Driver/ToolChains/Arch/ARM.cpp",267,"void arm::setArchNameInTriple(const Driver &D, const ArgList &Args, types::ID InputType, llvm::Triple &Triple) {\n  // ...\n  if (IsMProfile && ARMModeRequested) {\n    if (MCPU.size())\n    // ...\n    else\n      D.Diag(diag::err_arch_unsupported_isa) << tools::arm::getARMArch(MArch, Triple) << \"ARM\";"}}
},
},
Line 1,709: Line 1,711:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"42aa21222d37",1390712852,"ARCMigrate: Introduce proper diagnostics for TransformActions\n\nThis starts to switch ARCMT to use pr...","ARCMigrate: Introduce proper diagnostics for TransformActions\n\nThis starts to switch ARCMT to use proper diagnostic messages. The old use was\nbased on incorrect example code from the documentation.\n\nThe logic of the previous report() functions has been retained to support any\nexternal consumers that might be intercepting diagnostic messages through the\nold interface.\n\nNote that the change in test/Misc/warning-flags.c isn\'t a new warning without a\nflag, rather one that was previously invisible to the test. Adding a flag might\nbe a good idea though.\n\nllvm-svn: 200124"},
[b]={"42aa21222d37",1390712852,"ARCMigrate: Introduce proper diagnostics for TransformActions","ARCMigrate: Introduce proper diagnostics for TransformActions\n\nThis starts to switch ARCMT to use proper diagnostic messages. The old use was\nbased on incorrect example code from the documentation.\n\nThe logic of the previous report() functions has been retained to support any\nexternal consumers that might be intercepting diagnostic messages through the\nold interface.\n\nNote that the change in test/Misc/warning-flags.c isn\'t a new warning without a\nflag, rather one that was previously invisible to the test. Adding a flag might\nbe a good idea though.\n\nllvm-svn: 200124"},
[h]={{"clang/lib/ARCMigrate/TransAPIUses.cpp",79,"class APIChecker : public RecursiveASTVisitor<APIChecker> {\n  // ...\n  bool VisitObjCMessageExpr(ObjCMessageExpr *E) {\n    // NSInvocation.\n    if (E->isInstanceMessage() && E->getReceiverInterface() && E->getReceiverInterface()->getName() == \"NSInvocation\") {\n      // ...\n      if (pointee.getObjCLifetime() > Qualifiers::OCL_ExplicitNone)\n        Pass.TA.report(parm->getBeginLoc(), diag::err_arcmt_nsinvocation_ownership, parm->getSourceRange()) << selName;"}},
[h]={{"clang/lib/ARCMigrate/TransAPIUses.cpp",79,"class APIChecker : public RecursiveASTVisitor<APIChecker> {\n  // ...\n  bool VisitObjCMessageExpr(ObjCMessageExpr *E) {\n    // NSInvocation.\n    if (E->isInstanceMessage() && E->getReceiverInterface() && E->getReceiverInterface()->getName() == \"NSInvocation\") {\n      // ...\n      if (pointee.getObjCLifetime() > Qualifiers::OCL_ExplicitNone)\n        Pass.TA.report(parm->getBeginLoc(), diag::err_arcmt_nsinvocation_ownership, parm->getSourceRange()) << selName;"}},
[j]={
[j]={
Line 1,722: Line 1,724:
[g]=k,
[g]=k,
[b]={"fd2dcba7f3a6",1254343663,"Add an error for function parameters that have a qualified address space since this is not allowed b...","Add an error for function parameters that have a qualified address space since this is not allowed by the embedded c extension spec.\n\nllvm-svn: 83165"},
[b]={"fd2dcba7f3a6",1254343663,"Add an error for function parameters that have a qualified address space since this is not allowed b...","Add an error for function parameters that have a qualified address space since this is not allowed by the embedded c extension spec.\n\nllvm-svn: 83165"},
[h]={{n,14958,"ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc, SourceLocation NameLoc, IdentifierInfo *Name, QualType T, TypeSourceInfo *TSInfo, StorageClass SC) {\n  // ...\n  // ISO/IEC TR 18037 S6.7.3: \"The type of an object with automatic storage\n  // duration shall not be qualified by an address-space qualifier.\"\n  // Since all parameters have automatic store duration, they can not have\n  // an address space.\n  if (T.getAddressSpace() != LangAS::Default &&\n    // ...\n    Diag(NameLoc, diag::err_arg_with_address_space);"},{G,5151,"/// Build a type-check a new Objective-C exception variable declaration.\nVarDecl *Sema::BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType T, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, bool Invalid) {\n  // ISO/IEC TR 18037 S6.7.3: \"The type of an object with automatic storage\n  // duration shall not be qualified by an address-space qualifier.\"\n  // Since all parameters have automatic store duration, they can not have\n  // an address space.\n  if (T.getAddressSpace() != LangAS::Default) {\n    Diag(IdLoc, diag::err_arg_with_address_space);"}},
[h]={{m,14958,"ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc, SourceLocation NameLoc, IdentifierInfo *Name, QualType T, TypeSourceInfo *TSInfo, StorageClass SC) {\n  // ...\n  // ISO/IEC TR 18037 S6.7.3: \"The type of an object with automatic storage\n  // duration shall not be qualified by an address-space qualifier.\"\n  // Since all parameters have automatic store duration, they can not have\n  // an address space.\n  if (T.getAddressSpace() != LangAS::Default &&\n    // ...\n    Diag(NameLoc, diag::err_arg_with_address_space);"},{G,5151,"/// Build a type-check a new Objective-C exception variable declaration.\nVarDecl *Sema::BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType T, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, bool Invalid) {\n  // ISO/IEC TR 18037 S6.7.3: \"The type of an object with automatic storage\n  // duration shall not be qualified by an address-space qualifier.\"\n  // Since all parameters have automatic store duration, they can not have\n  // an address space.\n  if (T.getAddressSpace() != LangAS::Default) {\n    Diag(IdLoc, diag::err_arg_with_address_space);"}},
[j]={
[j]={
["clang/test/SemaHLSL/group_shared.hlsl"]={"clang/test/SemaHLSL/group_shared.hlsl:52:32: error: parameter may not be qualified with an address space","clang/test/SemaHLSL/group_shared.hlsl:73:30: error: parameter may not be qualified with an address space","clang/test/SemaHLSL/group_shared.hlsl:107:29: error: parameter may not be qualified with an address space"}
["clang/test/SemaHLSL/group_shared.hlsl"]={"clang/test/SemaHLSL/group_shared.hlsl:52:32: error: parameter may not be qualified with an address space","clang/test/SemaHLSL/group_shared.hlsl:73:30: error: parameter may not be qualified with an address space","clang/test/SemaHLSL/group_shared.hlsl:107:29: error: parameter may not be qualified with an address space"}
Line 1,733: Line 1,735:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{p,8809,"/// SemaBuiltinConstantArgRange - Handle a check if argument ArgNum of CallExpr\n/// TheCall is a constant expression in the range [Low, High].\nbool Sema::SemaBuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, int Low, int High, bool RangeIsError) {\n  // ...\n  if (Result.getSExtValue() < Low || Result.getSExtValue() > High) {\n    if (RangeIsError)\n      return Diag(TheCall->getBeginLoc(), diag::err_argument_invalid_range) << toString(Result, 10) << Low << High << Arg->getSourceRange();"}},
[h]={{o,8809,"/// SemaBuiltinConstantArgRange - Handle a check if argument ArgNum of CallExpr\n/// TheCall is a constant expression in the range [Low, High].\nbool Sema::SemaBuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, int Low, int High, bool RangeIsError) {\n  // ...\n  if (Result.getSExtValue() < Low || Result.getSExtValue() > High) {\n    if (RangeIsError)\n      return Diag(TheCall->getBeginLoc(), diag::err_argument_invalid_range) << toString(Result, 10) << Low << High << Arg->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/builtin-stackaddress.c"]={"clang/test/Sema/builtin-stackaddress.c:13:8: error: argument value 4294967295 is outside the valid range [0, 65535]","clang/test/Sema/builtin-stackaddress.c:18:8: error: argument value 1048575 is outside the valid range [0, 65535]","clang/test/Sema/builtin-stackaddress.c:32:8: error: argument value 4294967295 is outside the valid range [0, 65535]","clang/test/Sema/builtin-stackaddress.c:37:8: error: argument value 1048575 is outside the valid range [0, 65535]"}
["clang/test/Sema/builtin-stackaddress.c"]={"clang/test/Sema/builtin-stackaddress.c:13:8: error: argument value 4294967295 is outside the valid range [0, 65535]","clang/test/Sema/builtin-stackaddress.c:18:8: error: argument value 1048575 is outside the valid range [0, 65535]","clang/test/Sema/builtin-stackaddress.c:32:8: error: argument value 4294967295 is outside the valid range [0, 65535]","clang/test/Sema/builtin-stackaddress.c:37:8: error: argument value 1048575 is outside the valid range [0, 65535]"}
Line 1,745: Line 1,747:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={Tb,1615397021,Ub,Vb},
[b]={dc,1615397021,cc,fc},
[h]={{p,4238,"/// Returns true if the argument consists of one contiguous run of 1s with any\n/// number of 0s on either side. The 1s are allowed to wrap from LSB to MSB, so\n/// 0x000FFF0, 0x0000FFFF, 0xFF0000FF, 0x0 are all runs. 0x0F0F0000 is not,\n/// since all 1s are not contiguous.\nbool Sema::SemaValueIsRunOfOnes(CallExpr *TheCall, unsigned ArgNum) {\n  // ...\n  return Diag(TheCall->getBeginLoc(), diag::err_argument_not_contiguous_bit_field) << ArgNum << Arg->getSourceRange();"}},
[h]={{o,4238,"/// Returns true if the argument consists of one contiguous run of 1s with any\n/// number of 0s on either side. The 1s are allowed to wrap from LSB to MSB, so\n/// 0x000FFF0, 0x0000FFFF, 0xFF0000FF, 0x0 are all runs. 0x0F0F0000 is not,\n/// since all 1s are not contiguous.\nbool Sema::SemaValueIsRunOfOnes(CallExpr *TheCall, unsigned ArgNum) {\n  // ...\n  return Diag(TheCall->getBeginLoc(), diag::err_argument_not_contiguous_bit_field) << ArgNum << Arg->getSourceRange();"}},
[j]={
[j]={
["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:32:9: error: argument 3 value should represent a contiguous bit field","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:40:9: error: argument 3 value should represent a contiguous bit field","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:46:9: error: argument 2 value should represent a contiguous bit field","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:73:10: error: argument 2 value should represent a contiguous bit field"}
["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:32:9: error: argument 3 value should represent a contiguous bit field","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:40:9: error: argument 3 value should represent a contiguous bit field","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:46:9: error: argument 2 value should represent a contiguous bit field","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:73:10: error: argument 2 value should represent a contiguous bit field"}
Line 1,757: Line 1,759:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"1f90f2d33f72",1476899452,"[mips][msa] Range check MSA intrinsics with immediates\n\nThis patch teaches clang to range check imme...","[mips][msa] Range check MSA intrinsics with immediates\n\nThis patch teaches clang to range check immediates for MIPS MSA instrinsics.\nThis checking is done strictly in comparison to some existing GCC\nimplementations. E.g. msa_andvi_b(var, 257) does not result in andvi $wX, 1.\nSimilarily msa_ldi_b takes a range of -128 to 127.\n\nAs part of this effort, correct the existing MSA test as it has both illegal\ntypes and immediates.\n\nReviewers: vkalintiris\n\nDifferential Revision: https://reviews.llvm.org/D25017\n\nllvm-svn: 284620"},
[b]={"1f90f2d33f72",1476899452,"[mips][msa] Range check MSA intrinsics with immediates","[mips][msa] Range check MSA intrinsics with immediates\n\nThis patch teaches clang to range check immediates for MIPS MSA instrinsics.\nThis checking is done strictly in comparison to some existing GCC\nimplementations. E.g. msa_andvi_b(var, 257) does not result in andvi $wX, 1.\nSimilarily msa_ldi_b takes a range of -128 to 127.\n\nAs part of this effort, correct the existing MSA test as it has both illegal\ntypes and immediates.\n\nReviewers: vkalintiris\n\nDifferential Revision: https://reviews.llvm.org/D25017\n\nllvm-svn: 284620"},
[h]={{p,8839,"/// SemaBuiltinConstantArgMultiple - Handle a check if argument ArgNum of CallExpr\n/// TheCall is a constant expression is a multiple of Num..\nbool Sema::SemaBuiltinConstantArgMultiple(CallExpr *TheCall, int ArgNum, unsigned Num) {\n  // ...\n  if (Result.getSExtValue() % Num != 0)\n    return Diag(TheCall->getBeginLoc(), diag::err_argument_not_multiple) << Num << Arg->getSourceRange();"}},
[h]={{o,8839,"/// SemaBuiltinConstantArgMultiple - Handle a check if argument ArgNum of CallExpr\n/// TheCall is a constant expression is a multiple of Num..\nbool Sema::SemaBuiltinConstantArgMultiple(CallExpr *TheCall, int ArgNum, unsigned Num) {\n  // ...\n  if (Result.getSExtValue() % Num != 0)\n    return Diag(TheCall->getBeginLoc(), diag::err_argument_not_multiple) << Num << Arg->getSourceRange();"}},
[j]={
[j]={
["clang/test/CodeGen/hexagon-check-builtins.c"]={"clang/test/CodeGen/hexagon-check-builtins.c:19:10: error: argument should be a multiple of 4","clang/test/CodeGen/hexagon-check-builtins.c:22:10: error: argument should be a multiple of 4","clang/test/CodeGen/hexagon-check-builtins.c:28:10: error: argument should be a multiple of 4"}
["clang/test/CodeGen/hexagon-check-builtins.c"]={"clang/test/CodeGen/hexagon-check-builtins.c:19:10: error: argument should be a multiple of 4","clang/test/CodeGen/hexagon-check-builtins.c:22:10: error: argument should be a multiple of 4","clang/test/CodeGen/hexagon-check-builtins.c:28:10: error: argument should be a multiple of 4"}
Line 1,769: Line 1,771:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"08074cc96557",1567435850,"[clang,ARM] Initial ACLE intrinsics for MVE.\n\nThis commit sets up the infrastructure for auto-genera...","[clang,ARM] Initial ACLE intrinsics for MVE.\n\nThis commit sets up the infrastructure for auto-generating <arm_mve.h>\nand doing clang-side code generation for the builtins it relies on,\nand demonstrates that it works by implementing a representative sample\nof the ACLE intrinsics, more or less matching the ones introduced in\nLLVM IR by D67158,D68699,D68700.\n\nLike NEON, that header file will provide a set of vector types like\nuint16x8_t and C functions with names like vaddq_u32(). Unlike NEON,\nthe ACLE spec for <arm_mve.h> includes a polymorphism system, so that\nyou can write plain vaddq() and disambiguate by the vector types you\npass to it.\n\nUnlike the corresponding NEON code, I\'ve arranged to make every user-\nfacing ACLE intrinsic into a clang builtin, and implement all the code\ngeneration inside clang. So <arm_mve.h> itself contains nothing but\ntypedefs and function declarations, with the latter all using the new\n`__attribute__((__clang_builtin))` system to arrange that the user-\nfacing function names correspond to the right internal BuiltinIDs.\n\nSo the new MveEmitter tablegen system specifies the full sequence of\nIRBuilder operations that each user-facing ACLE intrinsic should\ntranslate into. Where possible, the ACLE intrinsics map to standard IR\noperations such as vector-typed `add` and `fadd`; where no standard\nrepresentation exists, I call down to the sample IR intrinsics\nintroduced in an earlier commit.\n\nDoing it like this means that you get the polymorphism for free just\nby using __attribute__((overloadable)): the clang overload resolution\ndecides which function declaration is the relevant one, and _then_ its\nBuiltinID is looked up, so by the time we\'re doing code generation,\nthat\'s all been resolved by the standard system. It also means that\nyou get really nice error messages if the user passes the wrong\ncombination of types: clang will show the declarations from the header\nfile and explain why each one doesn\'t match.\n\n(The obvious alternative approach would be to have wrapper functions\nin <arm_mve.h> which pass their arguments to the underlying builtins.\nBut that doesn\'t work in the case where one of the arguments has to be\na constant integer: the wrapper function can\'t pass the constantness\nthrough. So you\'d have to do that case using a macro instead, and then\nuse C11 `_Generic` to handle the polymorphism. Then you have to add\nhorrible workarounds because `_Generic` requires even the untaken\nbranches to type-check successfully, and //then// if the user gets the\ntypes wrong, the error message is totally unreadable!)\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: mgorny, javed.absar, kristof.beyls, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67161"},
[b]={"08074cc96557",1567435850,"[clang,ARM] Initial ACLE intrinsics for MVE.","[clang,ARM] Initial ACLE intrinsics for MVE.\n\nThis commit sets up the infrastructure for auto-generating <arm_mve.h>\nand doing clang-side code generation for the builtins it relies on,\nand demonstrates that it works by implementing a representative sample\nof the ACLE intrinsics, more or less matching the ones introduced in\nLLVM IR by D67158,D68699,D68700.\n\nLike NEON, that header file will provide a set of vector types like\nuint16x8_t and C functions with names like vaddq_u32(). Unlike NEON,\nthe ACLE spec for <arm_mve.h> includes a polymorphism system, so that\nyou can write plain vaddq() and disambiguate by the vector types you\npass to it.\n\nUnlike the corresponding NEON code, I\'ve arranged to make every user-\nfacing ACLE intrinsic into a clang builtin, and implement all the code\ngeneration inside clang. So <arm_mve.h> itself contains nothing but\ntypedefs and function declarations, with the latter all using the new\n`__attribute__((__clang_builtin))` system to arrange that the user-\nfacing function names correspond to the right internal BuiltinIDs.\n\nSo the new MveEmitter tablegen system specifies the full sequence of\nIRBuilder operations that each user-facing ACLE intrinsic should\ntranslate into. Where possible, the ACLE intrinsics map to standard IR\noperations such as vector-typed `add` and `fadd`; where no standard\nrepresentation exists, I call down to the sample IR intrinsics\nintroduced in an earlier commit.\n\nDoing it like this means that you get the polymorphism for free just\nby using __attribute__((overloadable)): the clang overload resolution\ndecides which function declaration is the relevant one, and _then_ its\nBuiltinID is looked up, so by the time we\'re doing code generation,\nthat\'s all been resolved by the standard system. It also means that\nyou get really nice error messages if the user passes the wrong\ncombination of types: clang will show the declarations from the header\nfile and explain why each one doesn\'t match.\n\n(The obvious alternative approach would be to have wrapper functions\nin <arm_mve.h> which pass their arguments to the underlying builtins.\nBut that doesn\'t work in the case where one of the arguments has to be\na constant integer: the wrapper function can\'t pass the constantness\nthrough. So you\'d have to do that case using a macro instead, and then\nuse C11 `_Generic` to handle the polymorphism. Then you have to add\nhorrible workarounds because `_Generic` requires even the untaken\nbranches to type-check successfully, and //then// if the user gets the\ntypes wrong, the error message is totally unreadable!)\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: mgorny, javed.absar, kristof.beyls, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67161"},
[h]={{p,8864,"/// SemaBuiltinConstantArgPower2 - Check if argument ArgNum of TheCall is a\n/// constant expression representing a power of 2.\nbool Sema::SemaBuiltinConstantArgPower2(CallExpr *TheCall, int ArgNum) {\n  // ...\n  return Diag(TheCall->getBeginLoc(), diag::err_argument_not_power_of_2) << Arg->getSourceRange();"}},
[h]={{o,8864,"/// SemaBuiltinConstantArgPower2 - Check if argument ArgNum of TheCall is a\n/// constant expression representing a power of 2.\nbool Sema::SemaBuiltinConstantArgPower2(CallExpr *TheCall, int ArgNum) {\n  // ...\n  return Diag(TheCall->getBeginLoc(), diag::err_argument_not_power_of_2) << Arg->getSourceRange();"}},
[j]={
[j]={
["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:80:3: error: argument should be a power of 2","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:82:3: error: argument should be a power of 2"}
["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:80:3: error: argument should be a power of 2","clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-error.c:82:3: error: argument should be a power of 2"}
Line 1,781: Line 1,783:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"08074cc96557",1567435850,"[clang,ARM] Initial ACLE intrinsics for MVE.\n\nThis commit sets up the infrastructure for auto-genera...","[clang,ARM] Initial ACLE intrinsics for MVE.\n\nThis commit sets up the infrastructure for auto-generating <arm_mve.h>\nand doing clang-side code generation for the builtins it relies on,\nand demonstrates that it works by implementing a representative sample\nof the ACLE intrinsics, more or less matching the ones introduced in\nLLVM IR by D67158,D68699,D68700.\n\nLike NEON, that header file will provide a set of vector types like\nuint16x8_t and C functions with names like vaddq_u32(). Unlike NEON,\nthe ACLE spec for <arm_mve.h> includes a polymorphism system, so that\nyou can write plain vaddq() and disambiguate by the vector types you\npass to it.\n\nUnlike the corresponding NEON code, I\'ve arranged to make every user-\nfacing ACLE intrinsic into a clang builtin, and implement all the code\ngeneration inside clang. So <arm_mve.h> itself contains nothing but\ntypedefs and function declarations, with the latter all using the new\n`__attribute__((__clang_builtin))` system to arrange that the user-\nfacing function names correspond to the right internal BuiltinIDs.\n\nSo the new MveEmitter tablegen system specifies the full sequence of\nIRBuilder operations that each user-facing ACLE intrinsic should\ntranslate into. Where possible, the ACLE intrinsics map to standard IR\noperations such as vector-typed `add` and `fadd`; where no standard\nrepresentation exists, I call down to the sample IR intrinsics\nintroduced in an earlier commit.\n\nDoing it like this means that you get the polymorphism for free just\nby using __attribute__((overloadable)): the clang overload resolution\ndecides which function declaration is the relevant one, and _then_ its\nBuiltinID is looked up, so by the time we\'re doing code generation,\nthat\'s all been resolved by the standard system. It also means that\nyou get really nice error messages if the user passes the wrong\ncombination of types: clang will show the declarations from the header\nfile and explain why each one doesn\'t match.\n\n(The obvious alternative approach would be to have wrapper functions\nin <arm_mve.h> which pass their arguments to the underlying builtins.\nBut that doesn\'t work in the case where one of the arguments has to be\na constant integer: the wrapper function can\'t pass the constantness\nthrough. So you\'d have to do that case using a macro instead, and then\nuse C11 `_Generic` to handle the polymorphism. Then you have to add\nhorrible workarounds because `_Generic` requires even the untaken\nbranches to type-check successfully, and //then// if the user gets the\ntypes wrong, the error message is totally unreadable!)\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: mgorny, javed.absar, kristof.beyls, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67161"},
[b]={"08074cc96557",1567435850,"[clang,ARM] Initial ACLE intrinsics for MVE.","[clang,ARM] Initial ACLE intrinsics for MVE.\n\nThis commit sets up the infrastructure for auto-generating <arm_mve.h>\nand doing clang-side code generation for the builtins it relies on,\nand demonstrates that it works by implementing a representative sample\nof the ACLE intrinsics, more or less matching the ones introduced in\nLLVM IR by D67158,D68699,D68700.\n\nLike NEON, that header file will provide a set of vector types like\nuint16x8_t and C functions with names like vaddq_u32(). Unlike NEON,\nthe ACLE spec for <arm_mve.h> includes a polymorphism system, so that\nyou can write plain vaddq() and disambiguate by the vector types you\npass to it.\n\nUnlike the corresponding NEON code, I\'ve arranged to make every user-\nfacing ACLE intrinsic into a clang builtin, and implement all the code\ngeneration inside clang. So <arm_mve.h> itself contains nothing but\ntypedefs and function declarations, with the latter all using the new\n`__attribute__((__clang_builtin))` system to arrange that the user-\nfacing function names correspond to the right internal BuiltinIDs.\n\nSo the new MveEmitter tablegen system specifies the full sequence of\nIRBuilder operations that each user-facing ACLE intrinsic should\ntranslate into. Where possible, the ACLE intrinsics map to standard IR\noperations such as vector-typed `add` and `fadd`; where no standard\nrepresentation exists, I call down to the sample IR intrinsics\nintroduced in an earlier commit.\n\nDoing it like this means that you get the polymorphism for free just\nby using __attribute__((overloadable)): the clang overload resolution\ndecides which function declaration is the relevant one, and _then_ its\nBuiltinID is looked up, so by the time we\'re doing code generation,\nthat\'s all been resolved by the standard system. It also means that\nyou get really nice error messages if the user passes the wrong\ncombination of types: clang will show the declarations from the header\nfile and explain why each one doesn\'t match.\n\n(The obvious alternative approach would be to have wrapper functions\nin <arm_mve.h> which pass their arguments to the underlying builtins.\nBut that doesn\'t work in the case where one of the arguments has to be\na constant integer: the wrapper function can\'t pass the constantness\nthrough. So you\'d have to do that case using a macro instead, and then\nuse C11 `_Generic` to handle the polymorphism. Then you have to add\nhorrible workarounds because `_Generic` requires even the untaken\nbranches to type-check successfully, and //then// if the user gets the\ntypes wrong, the error message is totally unreadable!)\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: mgorny, javed.absar, kristof.beyls, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67161"},
[h]={{p,8913,"/// SemaBuiltinConstantArgShiftedByte - Check if argument ArgNum of TheCall is\n/// a constant expression representing an arbitrary byte value shifted left by\n/// a multiple of 8 bits.\nbool Sema::SemaBuiltinConstantArgShiftedByte(CallExpr *TheCall, int ArgNum, unsigned ArgBits) {\n  // ...\n  return Diag(TheCall->getBeginLoc(), diag::err_argument_not_shifted_byte) << Arg->getSourceRange();"}},
[h]={{o,8913,"/// SemaBuiltinConstantArgShiftedByte - Check if argument ArgNum of TheCall is\n/// a constant expression representing an arbitrary byte value shifted left by\n/// a multiple of 8 bits.\nbool Sema::SemaBuiltinConstantArgShiftedByte(CallExpr *TheCall, int ArgNum, unsigned ArgBits) {\n  // ...\n  return Diag(TheCall->getBeginLoc(), diag::err_argument_not_shifted_byte) << Arg->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/arm-mve-immediates.c"]={"clang/test/Sema/arm-mve-immediates.c:215:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:216:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:228:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:229:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:235:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:236:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:248:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:249:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits"}
["clang/test/Sema/arm-mve-immediates.c"]={"clang/test/Sema/arm-mve-immediates.c:215:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:216:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:228:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:229:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:235:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:236:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:248:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits","clang/test/Sema/arm-mve-immediates.c:249:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits"}
Line 1,793: Line 1,795:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"08074cc96557",1567435850,"[clang,ARM] Initial ACLE intrinsics for MVE.\n\nThis commit sets up the infrastructure for auto-genera...","[clang,ARM] Initial ACLE intrinsics for MVE.\n\nThis commit sets up the infrastructure for auto-generating <arm_mve.h>\nand doing clang-side code generation for the builtins it relies on,\nand demonstrates that it works by implementing a representative sample\nof the ACLE intrinsics, more or less matching the ones introduced in\nLLVM IR by D67158,D68699,D68700.\n\nLike NEON, that header file will provide a set of vector types like\nuint16x8_t and C functions with names like vaddq_u32(). Unlike NEON,\nthe ACLE spec for <arm_mve.h> includes a polymorphism system, so that\nyou can write plain vaddq() and disambiguate by the vector types you\npass to it.\n\nUnlike the corresponding NEON code, I\'ve arranged to make every user-\nfacing ACLE intrinsic into a clang builtin, and implement all the code\ngeneration inside clang. So <arm_mve.h> itself contains nothing but\ntypedefs and function declarations, with the latter all using the new\n`__attribute__((__clang_builtin))` system to arrange that the user-\nfacing function names correspond to the right internal BuiltinIDs.\n\nSo the new MveEmitter tablegen system specifies the full sequence of\nIRBuilder operations that each user-facing ACLE intrinsic should\ntranslate into. Where possible, the ACLE intrinsics map to standard IR\noperations such as vector-typed `add` and `fadd`; where no standard\nrepresentation exists, I call down to the sample IR intrinsics\nintroduced in an earlier commit.\n\nDoing it like this means that you get the polymorphism for free just\nby using __attribute__((overloadable)): the clang overload resolution\ndecides which function declaration is the relevant one, and _then_ its\nBuiltinID is looked up, so by the time we\'re doing code generation,\nthat\'s all been resolved by the standard system. It also means that\nyou get really nice error messages if the user passes the wrong\ncombination of types: clang will show the declarations from the header\nfile and explain why each one doesn\'t match.\n\n(The obvious alternative approach would be to have wrapper functions\nin <arm_mve.h> which pass their arguments to the underlying builtins.\nBut that doesn\'t work in the case where one of the arguments has to be\na constant integer: the wrapper function can\'t pass the constantness\nthrough. So you\'d have to do that case using a macro instead, and then\nuse C11 `_Generic` to handle the polymorphism. Then you have to add\nhorrible workarounds because `_Generic` requires even the untaken\nbranches to type-check successfully, and //then// if the user gets the\ntypes wrong, the error message is totally unreadable!)\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: mgorny, javed.absar, kristof.beyls, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67161"},
[b]={"08074cc96557",1567435850,"[clang,ARM] Initial ACLE intrinsics for MVE.","[clang,ARM] Initial ACLE intrinsics for MVE.\n\nThis commit sets up the infrastructure for auto-generating <arm_mve.h>\nand doing clang-side code generation for the builtins it relies on,\nand demonstrates that it works by implementing a representative sample\nof the ACLE intrinsics, more or less matching the ones introduced in\nLLVM IR by D67158,D68699,D68700.\n\nLike NEON, that header file will provide a set of vector types like\nuint16x8_t and C functions with names like vaddq_u32(). Unlike NEON,\nthe ACLE spec for <arm_mve.h> includes a polymorphism system, so that\nyou can write plain vaddq() and disambiguate by the vector types you\npass to it.\n\nUnlike the corresponding NEON code, I\'ve arranged to make every user-\nfacing ACLE intrinsic into a clang builtin, and implement all the code\ngeneration inside clang. So <arm_mve.h> itself contains nothing but\ntypedefs and function declarations, with the latter all using the new\n`__attribute__((__clang_builtin))` system to arrange that the user-\nfacing function names correspond to the right internal BuiltinIDs.\n\nSo the new MveEmitter tablegen system specifies the full sequence of\nIRBuilder operations that each user-facing ACLE intrinsic should\ntranslate into. Where possible, the ACLE intrinsics map to standard IR\noperations such as vector-typed `add` and `fadd`; where no standard\nrepresentation exists, I call down to the sample IR intrinsics\nintroduced in an earlier commit.\n\nDoing it like this means that you get the polymorphism for free just\nby using __attribute__((overloadable)): the clang overload resolution\ndecides which function declaration is the relevant one, and _then_ its\nBuiltinID is looked up, so by the time we\'re doing code generation,\nthat\'s all been resolved by the standard system. It also means that\nyou get really nice error messages if the user passes the wrong\ncombination of types: clang will show the declarations from the header\nfile and explain why each one doesn\'t match.\n\n(The obvious alternative approach would be to have wrapper functions\nin <arm_mve.h> which pass their arguments to the underlying builtins.\nBut that doesn\'t work in the case where one of the arguments has to be\na constant integer: the wrapper function can\'t pass the constantness\nthrough. So you\'d have to do that case using a macro instead, and then\nuse C11 `_Generic` to handle the polymorphism. Then you have to add\nhorrible workarounds because `_Generic` requires even the untaken\nbranches to type-check successfully, and //then// if the user gets the\ntypes wrong, the error message is totally unreadable!)\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: mgorny, javed.absar, kristof.beyls, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67161"},
[h]={{p,8946,"/// SemaBuiltinConstantArgShiftedByteOr0xFF - Check if argument ArgNum of\n/// TheCall is a constant expression representing either a shifted byte value,\n/// or a value of the form 0x??FF (i.e. a member of the arithmetic progression\n/// 0x00FF, 0x01FF, ..., 0xFFFF). This strange range check is needed for some\n/// Arm MVE intrinsics.\nbool Sema::SemaBuiltinConstantArgShiftedByteOrXXFF(CallExpr *TheCall, int ArgNum, unsigned ArgBits) {\n  // ...\n  return Diag(TheCall->getBeginLoc(), diag::err_argument_not_shifted_byte_or_xxff) << Arg->getSourceRange();"}},
[h]={{o,8946,"/// SemaBuiltinConstantArgShiftedByteOr0xFF - Check if argument ArgNum of\n/// TheCall is a constant expression representing either a shifted byte value,\n/// or a value of the form 0x??FF (i.e. a member of the arithmetic progression\n/// 0x00FF, 0x01FF, ..., 0xFFFF). This strange range check is needed for some\n/// Arm MVE intrinsics.\nbool Sema::SemaBuiltinConstantArgShiftedByteOrXXFF(CallExpr *TheCall, int ArgNum, unsigned ArgBits) {\n  // ...\n  return Diag(TheCall->getBeginLoc(), diag::err_argument_not_shifted_byte_or_xxff) << Arg->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/arm-mve-immediates.c"]={"clang/test/Sema/arm-mve-immediates.c:259:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits, or in the form 0x??FF","clang/test/Sema/arm-mve-immediates.c:273:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits, or in the form 0x??FF","clang/test/Sema/arm-mve-immediates.c:274:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits, or in the form 0x??FF","clang/test/Sema/arm-mve-immediates.c:275:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits, or in the form 0x??FF"}
["clang/test/Sema/arm-mve-immediates.c"]={"clang/test/Sema/arm-mve-immediates.c:259:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits, or in the form 0x??FF","clang/test/Sema/arm-mve-immediates.c:273:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits, or in the form 0x??FF","clang/test/Sema/arm-mve-immediates.c:274:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits, or in the form 0x??FF","clang/test/Sema/arm-mve-immediates.c:275:9: error: argument should be an 8-bit value shifted by a multiple of 8 bits, or in the form 0x??FF"}
Line 1,804: Line 1,806:
[e]="argument required after attribute",
[e]="argument required after attribute",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{A,1569,"void Parser::ParseSwiftNewTypeAttribute(IdentifierInfo &AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  if (Tok.is(tok::r_paren)) {\n    Diag(Tok.getLocation(), diag::err_argument_required_after_attribute);"},{A,7006,"/// ParseFunctionDeclarator - We are after the identifier and have parsed the\n/// declarator D up to a paren, which indicates that we are parsing function\n/// arguments.\n///\n/// If FirstArgAttrs is non-null, then the caller parsed those attributes\n/// immediately after the open paren - they will be applied to the DeclSpec\n/// of the first parameter.\n///\n/// If RequiresArg is true, then the first argument of the function is required\n/// to be present and required to not be an identifier list.\n///\n/// For C++, after the parameter-list, it also parses the cv-qualifier-seq[opt],\n/// (C++11) ref-qualifier[opt], exception-specification[opt],\n/// (C++11) attribute-specifier-seq[opt], (C++11) trailing-return-type[opt] and\n/// (C++2a) the trailing requires-clause.\n///\n/// [C++11] exception-specification:\n///          dynamic-exception-specification\n///          noexcept-specification\n///\nvoid Parser::ParseFunctionDeclarator(Declarator &D, ParsedAttributes &FirstArgAttrs, BalancedDelimiterTracker &Tracker, bool IsAmbiguous, bool RequiresArg) {\n  // ...\n  if (isFunctionDeclaratorIdentifierList()) {\n    if (RequiresArg)\n      Diag(Tok, diag::err_argument_required_after_attribute);"},{A,7023,"/// ParseFunctionDeclarator - We are after the identifier and have parsed the\n/// declarator D up to a paren, which indicates that we are parsing function\n/// arguments.\n///\n/// If FirstArgAttrs is non-null, then the caller parsed those attributes\n/// immediately after the open paren - they will be applied to the DeclSpec\n/// of the first parameter.\n///\n/// If RequiresArg is true, then the first argument of the function is required\n/// to be present and required to not be an identifier list.\n///\n/// For C++, after the parameter-list, it also parses the cv-qualifier-seq[opt],\n/// (C++11) ref-qualifier[opt], exception-specification[opt],\n/// (C++11) attribute-specifier-seq[opt], (C++11) trailing-return-type[opt] and\n/// (C++2a) the trailing requires-clause.\n///\n/// [C++11] exception-specification:\n///          dynamic-exception-specification\n///          noexcept-specification\n///\nvoid Parser::ParseFunctionDeclarator(Declarator &D, ParsedAttributes &FirstArgAttrs, BalancedDelimiterTracker &Tracker, bool IsAmbiguous, bool RequiresArg) {\n  // ...\n  if (isFunctionDeclaratorIdentifierList()) {\n  // ...\n  } else {\n    if (Tok.isNot(tok::r_paren))\n    // ...\n    else if (RequiresArg)\n      Diag(Tok, diag::err_argument_required_after_attribute);"}},
[h]={{B,1569,"void Parser::ParseSwiftNewTypeAttribute(IdentifierInfo &AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  if (Tok.is(tok::r_paren)) {\n    Diag(Tok.getLocation(), diag::err_argument_required_after_attribute);"},{B,7006,"/// ParseFunctionDeclarator - We are after the identifier and have parsed the\n/// declarator D up to a paren, which indicates that we are parsing function\n/// arguments.\n///\n/// If FirstArgAttrs is non-null, then the caller parsed those attributes\n/// immediately after the open paren - they will be applied to the DeclSpec\n/// of the first parameter.\n///\n/// If RequiresArg is true, then the first argument of the function is required\n/// to be present and required to not be an identifier list.\n///\n/// For C++, after the parameter-list, it also parses the cv-qualifier-seq[opt],\n/// (C++11) ref-qualifier[opt], exception-specification[opt],\n/// (C++11) attribute-specifier-seq[opt], (C++11) trailing-return-type[opt] and\n/// (C++2a) the trailing requires-clause.\n///\n/// [C++11] exception-specification:\n///          dynamic-exception-specification\n///          noexcept-specification\n///\nvoid Parser::ParseFunctionDeclarator(Declarator &D, ParsedAttributes &FirstArgAttrs, BalancedDelimiterTracker &Tracker, bool IsAmbiguous, bool RequiresArg) {\n  // ...\n  if (isFunctionDeclaratorIdentifierList()) {\n    if (RequiresArg)\n      Diag(Tok, diag::err_argument_required_after_attribute);"},{B,7023,"/// ParseFunctionDeclarator - We are after the identifier and have parsed the\n/// declarator D up to a paren, which indicates that we are parsing function\n/// arguments.\n///\n/// If FirstArgAttrs is non-null, then the caller parsed those attributes\n/// immediately after the open paren - they will be applied to the DeclSpec\n/// of the first parameter.\n///\n/// If RequiresArg is true, then the first argument of the function is required\n/// to be present and required to not be an identifier list.\n///\n/// For C++, after the parameter-list, it also parses the cv-qualifier-seq[opt],\n/// (C++11) ref-qualifier[opt], exception-specification[opt],\n/// (C++11) attribute-specifier-seq[opt], (C++11) trailing-return-type[opt] and\n/// (C++2a) the trailing requires-clause.\n///\n/// [C++11] exception-specification:\n///          dynamic-exception-specification\n///          noexcept-specification\n///\nvoid Parser::ParseFunctionDeclarator(Declarator &D, ParsedAttributes &FirstArgAttrs, BalancedDelimiterTracker &Tracker, bool IsAmbiguous, bool RequiresArg) {\n  // ...\n  if (isFunctionDeclaratorIdentifierList()) {\n  // ...\n  } else {\n    if (Tok.isNot(tok::r_paren))\n    // ...\n    else if (RequiresArg)\n      Diag(Tok, diag::err_argument_required_after_attribute);"}},
[j]={
[j]={
["clang/test/SemaObjC/attr-swift_newtype.m"]={"clang/test/SemaObjC/attr-swift_newtype.m:5:47: error: argument required after attribute"}
["clang/test/SemaObjC/attr-swift_newtype.m"]={"clang/test/SemaObjC/attr-swift_newtype.m:5:47: error: argument required after attribute"}
Line 1,817: Line 1,819:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"12bdebbbf7ff",1240617008,"reject explicit pointer arithmetic on interface pointers in 64-bit objc ABI\n\nllvm-svn: 70004","reject explicit pointer arithmetic on interface pointers in 64-bit objc ABI\n\nllvm-svn: 70004"},
[b]={"12bdebbbf7ff",1240617008,"reject explicit pointer arithmetic on interface pointers in 64-bit objc ABI","reject explicit pointer arithmetic on interface pointers in 64-bit objc ABI\n\nllvm-svn: 70004"},
[h]={{u,4986,"/// Diagnose if arithmetic on the given ObjC pointer is illegal.\n///\n/// \\return true on error\nstatic bool checkArithmeticOnObjCPointer(Sema &S, SourceLocation opLoc, Expr *op) {\n  // ...\n  S.Diag(opLoc, diag::err_arithmetic_nonfragile_interface) << op->getType()->castAs<ObjCObjectPointerType>()->getPointeeType() << op->getSourceRange();"}},
[h]={{v,4986,"/// Diagnose if arithmetic on the given ObjC pointer is illegal.\n///\n/// \\return true on error\nstatic bool checkArithmeticOnObjCPointer(Sema &S, SourceLocation opLoc, Expr *op) {\n  // ...\n  S.Diag(opLoc, diag::err_arithmetic_nonfragile_interface) << op->getType()->castAs<ObjCObjectPointerType>()->getPointeeType() << op->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaObjC/sizeof-interface.m"]={"clang/test/SemaObjC/sizeof-interface.m:54:8: error: arithmetic on pointer to interface \'I0\', which is not a constant size for this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:55:8: error: arithmetic on pointer to interface \'I0\', which is not a constant size for this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:56:8: error: arithmetic on pointer to interface \'I0\', which is not a constant size for this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:88:3: error: arithmetic on pointer to interface \'Foo\', which is not a constant size for this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:89:3: error: arithmetic on pointer to interface \'Foo\', which is not a constant size for this architecture and platform"}
["clang/test/SemaObjC/sizeof-interface.m"]={"clang/test/SemaObjC/sizeof-interface.m:54:8: error: arithmetic on pointer to interface \'I0\', which is not a constant size for this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:55:8: error: arithmetic on pointer to interface \'I0\', which is not a constant size for this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:56:8: error: arithmetic on pointer to interface \'I0\', which is not a constant size for this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:88:3: error: arithmetic on pointer to interface \'Foo\', which is not a constant size for this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:89:3: error: arithmetic on pointer to interface \'Foo\', which is not a constant size for this architecture and platform"}
Line 1,829: Line 1,831:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={ab,1576908663,Z,Y},
[b]={Z,1576908663,X,Y},
[h]={{p,3142,"bool Sema::CheckARMCoprocessorImmediate(const TargetInfo &TI, const Expr *CoprocArg, bool WantCDE) {\n  // ...\n  if (IsCDECoproc != WantCDE)\n    return Diag(CoprocArg->getBeginLoc(), diag::err_arm_invalid_coproc) << (int)CoprocNo << (int)WantCDE << CoprocArg->getSourceRange();"}},
[h]={{o,3142,"bool Sema::CheckARMCoprocessorImmediate(const TargetInfo &TI, const Expr *CoprocArg, bool WantCDE) {\n  // ...\n  if (IsCDECoproc != WantCDE)\n    return Diag(CoprocArg->getBeginLoc(), diag::err_arm_invalid_coproc) << (int)CoprocNo << (int)WantCDE << CoprocArg->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/arm-cde-immediates.c"]={"clang/test/Sema/arm-cde-immediates.c:9:21: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:10:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:11:21: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:12:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:13:21: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:14:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:15:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:16:23: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:17:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:18:23: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:19:21: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:20:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:21:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:22:23: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:23:21: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:24:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:25:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:26:23: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:34:13: error: coprocessor 1 must be configured as CDE"}
["clang/test/Sema/arm-cde-immediates.c"]={"clang/test/Sema/arm-cde-immediates.c:9:21: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:10:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:11:21: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:12:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:13:21: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:14:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:15:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:16:23: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:17:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:18:23: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:19:21: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:20:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:21:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:22:23: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:23:21: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:24:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:25:22: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:26:23: error: coprocessor 0 must be configured as GCP","clang/test/Sema/arm-cde-immediates.c:34:13: error: coprocessor 1 must be configured as CDE"}
Line 1,841: Line 1,843:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"59b2d8390941",1434390661,"This patch implements clang support for the ACLE special register intrinsics\nin section 10.1, __arm_...","This patch implements clang support for the ACLE special register intrinsics\nin section 10.1, __arm_{w,r}sr{,p,64}.\n\nThis includes arm_acle.h definitions with builtins and codegen to support\nthese, the intrinsics are implemented by generating read/write_register calls\nwhich get appropriately lowered in the backend based on the register string\nprovided. SemaChecking is also implemented to fault invalid parameters.\n\nDifferential Revision: http://reviews.llvm.org/D9697\n\nllvm-svn: 239737"},
[b]={"59b2d8390941",1434390661,"This patch implements clang support for the ACLE special register intrinsics","This patch implements clang support for the ACLE special register intrinsics\nin section 10.1, __arm_{w,r}sr{,p,64}.\n\nThis includes arm_acle.h definitions with builtins and codegen to support\nthese, the intrinsics are implemented by generating read/write_register calls\nwhich get appropriately lowered in the backend based on the register string\nprovided. SemaChecking is also implemented to fault invalid parameters.\n\nDifferential Revision: http://reviews.llvm.org/D9697\n\nllvm-svn: 239737"},
[h]={{p,9141,"/// SemaBuiltinARMSpecialReg - Handle a check if argument ArgNum of CallExpr\n/// TheCall is an ARM/AArch64 special register string literal.\nbool Sema::SemaBuiltinARMSpecialReg(unsigned BuiltinID, CallExpr *TheCall, int ArgNum, unsigned ExpectedFieldNum, bool AllowName) {\n  // ...\n  if (Fields.size() != ExpectedFieldNum && !(AllowName && Fields.size() == 1))\n    return Diag(TheCall->getBeginLoc(), diag::err_arm_invalid_specialreg) << Arg->getSourceRange();"},{p,9183,"/// SemaBuiltinARMSpecialReg - Handle a check if argument ArgNum of CallExpr\n/// TheCall is an ARM/AArch64 special register string literal.\nbool Sema::SemaBuiltinARMSpecialReg(unsigned BuiltinID, CallExpr *TheCall, int ArgNum, unsigned ExpectedFieldNum, bool AllowName) {\n  // ...\n  // If the string is the name of a register then we cannot check that it is\n  // valid here but if the string is of one the forms described in ACLE then we\n  // can check that the supplied fields are integers and within the valid\n  // ranges.\n  if (Fields.size() > 1) {\n    // ...\n    if (!ValidString)\n      return Diag(TheCall->getBeginLoc(), diag::err_arm_invalid_specialreg) << Arg->getSourceRange();"}},
[h]={{o,9141,"/// SemaBuiltinARMSpecialReg - Handle a check if argument ArgNum of CallExpr\n/// TheCall is an ARM/AArch64 special register string literal.\nbool Sema::SemaBuiltinARMSpecialReg(unsigned BuiltinID, CallExpr *TheCall, int ArgNum, unsigned ExpectedFieldNum, bool AllowName) {\n  // ...\n  if (Fields.size() != ExpectedFieldNum && !(AllowName && Fields.size() == 1))\n    return Diag(TheCall->getBeginLoc(), diag::err_arm_invalid_specialreg) << Arg->getSourceRange();"},{o,9183,"/// SemaBuiltinARMSpecialReg - Handle a check if argument ArgNum of CallExpr\n/// TheCall is an ARM/AArch64 special register string literal.\nbool Sema::SemaBuiltinARMSpecialReg(unsigned BuiltinID, CallExpr *TheCall, int ArgNum, unsigned ExpectedFieldNum, bool AllowName) {\n  // ...\n  // If the string is the name of a register then we cannot check that it is\n  // valid here but if the string is of one the forms described in ACLE then we\n  // can check that the supplied fields are integers and within the valid\n  // ranges.\n  if (Fields.size() > 1) {\n    // ...\n    if (!ValidString)\n      return Diag(TheCall->getBeginLoc(), diag::err_arm_invalid_specialreg) << Arg->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/arm-special-register.c"]={"clang/test/Sema/arm-special-register.c:16:3: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:28:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:40:3: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:52:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:56:3: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:60:3: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:68:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:72:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:80:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:84:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:88:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:92:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:96:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:100:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:104:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:108:10: error: invalid special register for builtin"}
["clang/test/Sema/arm-special-register.c"]={"clang/test/Sema/arm-special-register.c:16:3: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:28:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:40:3: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:52:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:56:3: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:60:3: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:68:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:72:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:80:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:84:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:88:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:92:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:96:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:100:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:104:10: error: invalid special register for builtin","clang/test/Sema/arm-special-register.c:108:10: error: invalid special register for builtin"}
Line 1,853: Line 1,855:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{D,3400,"ExprResult Sema::ActOnDesignatedInitializer(Designation &Desig, SourceLocation EqualOrColonLoc, bool GNUSyntax, ExprResult Init) {\n  // ...\n  // Build designators and check array designator expressions.\n  for (unsigned Idx = 0; Idx < Desig.getNumDesignators(); ++Idx) {\n    // ...\n    if (D.isFieldDesignator()) {\n    // ...\n    } else if (D.isArrayDesignator()) {\n    // ...\n    } else if (D.isArrayRangeDesignator()) {\n      // ...\n      if (!StartIndex || !EndIndex)\n      // ...\n      else {\n        // ...\n        if (!StartDependent && !EndDependent && EndValue < StartValue) {\n          Diag(D.getEllipsisLoc(), diag::err_array_designator_empty_range) << toString(StartValue, 10) << toString(EndValue, 10) << StartIndex->getSourceRange() << EndIndex->getSourceRange();"}},
[h]={{E,3400,"ExprResult Sema::ActOnDesignatedInitializer(Designation &Desig, SourceLocation EqualOrColonLoc, bool GNUSyntax, ExprResult Init) {\n  // ...\n  // Build designators and check array designator expressions.\n  for (unsigned Idx = 0; Idx < Desig.getNumDesignators(); ++Idx) {\n    // ...\n    if (D.isFieldDesignator()) {\n    // ...\n    } else if (D.isArrayDesignator()) {\n    // ...\n    } else if (D.isArrayRangeDesignator()) {\n      // ...\n      if (!StartIndex || !EndIndex)\n      // ...\n      else {\n        // ...\n        if (!StartDependent && !EndDependent && EndValue < StartValue) {\n          Diag(D.getEllipsisLoc(), diag::err_array_designator_empty_range) << toString(StartValue, 10) << toString(EndValue, 10) << StartIndex->getSourceRange() << EndIndex->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/designated-initializers.c"]={"clang/test/Sema/designated-initializers.c:11:7: error: array designator range [8, 7] is empty"}
["clang/test/Sema/designated-initializers.c"]={"clang/test/Sema/designated-initializers.c:11:7: error: array designator range [8, 7] is empty"}
Line 1,865: Line 1,867:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{D,3337,"/// Check that the given Index expression is a valid array designator\n/// value. This is essentially just a wrapper around\n/// VerifyIntegerConstantExpression that also checks for negative values\n/// and produces a reasonable diagnostic if there is a\n/// failure. Returns the index expression, possibly with an implicit cast\n/// added, on success.  If everything went okay, Value will receive the\n/// value of the constant expression.\nstatic ExprResult CheckArrayDesignatorExpr(Sema &S, Expr *Index, llvm::APSInt &Value) {\n  // ...\n  if (Value.isSigned() && Value.isNegative())\n    return S.Diag(Loc, diag::err_array_designator_negative) << toString(Value, 10) << Index->getSourceRange();"}},
[h]={{E,3337,"/// Check that the given Index expression is a valid array designator\n/// value. This is essentially just a wrapper around\n/// VerifyIntegerConstantExpression that also checks for negative values\n/// and produces a reasonable diagnostic if there is a\n/// failure. Returns the index expression, possibly with an implicit cast\n/// added, on success.  If everything went okay, Value will receive the\n/// value of the constant expression.\nstatic ExprResult CheckArrayDesignatorExpr(Sema &S, Expr *Index, llvm::APSInt &Value) {\n  // ...\n  if (Value.isSigned() && Value.isNegative())\n    return S.Diag(Loc, diag::err_array_designator_negative) << toString(Value, 10) << Index->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/designated-initializers.c"]={"clang/test/Sema/designated-initializers.c:13:4: error: array designator value \'-1\' is negative"}
["clang/test/Sema/designated-initializers.c"]={"clang/test/Sema/designated-initializers.c:13:4: error: array designator value \'-1\' is negative"}
Line 1,877: Line 1,879:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{D,3001,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList  The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx  The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField  If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex  If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index  Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList  The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n  // ...\n  if (!AT) {\n    if (!VerifyOnly)\n      SemaRef.Diag(D->getLBracketLoc(), diag::err_array_designator_non_array) << CurrentObjectType;"}},
[h]={{E,3001,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList  The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx  The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField  If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex  If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index  Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList  The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n  // ...\n  if (!AT) {\n    if (!VerifyOnly)\n      SemaRef.Diag(D->getLBracketLoc(), diag::err_array_designator_non_array) << CurrentObjectType;"}},
[j]={
[j]={
["clang/test/Sema/designated-initializers.c"]={"clang/test/Sema/designated-initializers.c:37:3: error: array designator cannot initialize non-array type \'struct point\'"}
["clang/test/Sema/designated-initializers.c"]={"clang/test/Sema/designated-initializers.c:37:3: error: array designator cannot initialize non-array type \'struct point\'"}
Line 1,889: Line 1,891:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{D,3043,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList  The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx  The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField  If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex  If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index  Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList  The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n  // ...\n  if (isa<ConstantArrayType>(AT)) {\n    // ...\n    if (DesignatedEndIndex >= MaxElements) {\n      if (!VerifyOnly)\n        SemaRef.Diag(IndexExpr->getBeginLoc(), diag::err_array_designator_too_large) << toString(DesignatedEndIndex, 10) << toString(MaxElements, 10) << IndexExpr->getSourceRange();"}},
[h]={{E,3043,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList  The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx  The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField  If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex  If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index  Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList  The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n  // ...\n  if (isa<ConstantArrayType>(AT)) {\n    // ...\n    if (DesignatedEndIndex >= MaxElements) {\n      if (!VerifyOnly)\n        SemaRef.Diag(IndexExpr->getBeginLoc(), diag::err_array_designator_too_large) << toString(DesignatedEndIndex, 10) << toString(MaxElements, 10) << IndexExpr->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/designated-initializers.c"]={"clang/test/Sema/designated-initializers.c:17:4: error: array designator index (10) exceeds array bounds (10)","clang/test/Sema/designated-initializers.c:22:10: error: array designator index (12) exceeds array bounds (10)","clang/test/Sema/designated-initializers.c:47:4: error: array designator index (10) exceeds array bounds (10)"}
["clang/test/Sema/designated-initializers.c"]={"clang/test/Sema/designated-initializers.c:17:4: error: array designator index (10) exceeds array bounds (10)","clang/test/Sema/designated-initializers.c:22:10: error: array designator index (12) exceeds array bounds (10)","clang/test/Sema/designated-initializers.c:47:4: error: array designator index (10) exceeds array bounds (10)"}
Line 1,901: Line 1,903:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={M,1625925174,K,L},
[b]={N,1625925174,M,L},
[h]={{o,2448,"bool Sema::checkArrayElementAlignment(QualType EltTy, SourceLocation Loc) {\n  // ...\n  Diag(Loc, diag::err_array_element_alignment) << EltTy << Size.getQuantity() << Alignment.getQuantity();"}},
[h]={{n,2448,"bool Sema::checkArrayElementAlignment(QualType EltTy, SourceLocation Loc) {\n  // ...\n  Diag(Loc, diag::err_array_element_alignment) << EltTy << Size.getQuantity() << Alignment.getQuantity();"}},
[j]={
[j]={
["clang/test/Sema/align-x86-64.c"]={"clang/test/Sema/align-x86-64.c:9:19: error: size of array element of type \'UINT192\' (24 bytes) isn\'t a multiple of its alignment (16 bytes)"}
["clang/test/Sema/align-x86-64.c"]={"clang/test/Sema/align-x86-64.c:9:19: error: size of array element of type \'UINT192\' (24 bytes) isn\'t a multiple of its alignment (16 bytes)"}
Line 1,913: Line 1,915:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={ab,1576908663,Z,Y},
[b]={Z,1576908663,X,Y},
[h]={{n,13802,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    case VarDecl::TentativeDefinition:\n      // File scope. C99 6.9.2p2: A declaration of an identifier for an\n      // object that has file scope without an initializer, and without a\n      // storage-class specifier or with the storage-class specifier \"static\",\n      // constitutes a tentative definition. Note: A tentative definition with\n      // external linkage is valid (C99 6.2.2p5).\n      if (!Var->isInvalidDecl()) {\n        if (const IncompleteArrayType *ArrayT = Context.getAsIncompleteArrayType(Type)) {\n          if (RequireCompleteSizedType(Var->getLocation(), ArrayT->getElementType(), diag::err_array_incomplete_or_sizeless_type))"},{u,7674,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n  // ...\n  if (literalType->isArrayType()) {\n    if (RequireCompleteSizedType(LParenLoc, Context.getBaseElementType(literalType), diag::err_array_incomplete_or_sizeless_type, SourceRange(LParenLoc, LiteralExpr->getSourceRange().getEnd())))"},{o,2492,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    if (T->isVoidType() || T->isIncompleteArrayType()) {\n      Diag(Loc, diag::err_array_incomplete_or_sizeless_type) << 0 << T;"},{o,2512,"/// 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 (getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    if (!T.isWebAssemblyReferenceType() && RequireCompleteSizedType(Loc, T, diag::err_array_incomplete_or_sizeless_type))"},{o,2526,"/// 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 (T->isSizelessType() && !T.isWebAssemblyReferenceType()) {\n    Diag(Loc, diag::err_array_incomplete_or_sizeless_type) << 1 << T;"}},
[h]={{m,13802,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    case VarDecl::TentativeDefinition:\n      // File scope. C99 6.9.2p2: A declaration of an identifier for an\n      // object that has file scope without an initializer, and without a\n      // storage-class specifier or with the storage-class specifier \"static\",\n      // constitutes a tentative definition. Note: A tentative definition with\n      // external linkage is valid (C99 6.2.2p5).\n      if (!Var->isInvalidDecl()) {\n        if (const IncompleteArrayType *ArrayT = Context.getAsIncompleteArrayType(Type)) {\n          if (RequireCompleteSizedType(Var->getLocation(), ArrayT->getElementType(), diag::err_array_incomplete_or_sizeless_type))"},{v,7674,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n  // ...\n  if (literalType->isArrayType()) {\n    if (RequireCompleteSizedType(LParenLoc, Context.getBaseElementType(literalType), diag::err_array_incomplete_or_sizeless_type, SourceRange(LParenLoc, LiteralExpr->getSourceRange().getEnd())))"},{n,2492,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    if (T->isVoidType() || T->isIncompleteArrayType()) {\n      Diag(Loc, diag::err_array_incomplete_or_sizeless_type) << 0 << T;"},{n,2512,"/// 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 (getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    if (!T.isWebAssemblyReferenceType() && RequireCompleteSizedType(Loc, T, diag::err_array_incomplete_or_sizeless_type))"},{n,2526,"/// 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 (T->isSizelessType() && !T.isWebAssemblyReferenceType()) {\n    Diag(Loc, diag::err_array_incomplete_or_sizeless_type) << 1 << T;"}},
[j]={
[j]={
["clang/test/Parser/typeof.c"]={"clang/test/Parser/typeof.c:13:11: error: array has incomplete element type \'void\'"}
["clang/test/Parser/typeof.c"]={"clang/test/Parser/typeof.c:13:11: error: array has incomplete element type \'void\'"}
Line 1,925: Line 1,927:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e2f943b5cb44",1298399391,"Implement the GNU C extension which permits the initialization of an\narray from a constant array com...","Implement the GNU C extension which permits the initialization of an\narray from a constant array compound literal. Fixes PR9261.\n\nllvm-svn: 126230"},
[b]={"e2f943b5cb44",1298399391,"Implement the GNU C extension which permits the initialization of an","Implement the GNU C extension which permits the initialization of an\narray from a constant array compound literal. Fixes PR9261.\n\nllvm-svn: 126230"},
[h]={{D,9611,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ArrayTypeMismatch:\n  case FK_NonConstantArrayInit:\n    S.Diag(Kind.getLocation(), (Failure == FK_ArrayTypeMismatch ? diag::err_array_init_different_type : diag::err_array_init_non_constant_array)) << DestType.getNonReferenceType() << OnlyArg->getType() << Args[0]->getSourceRange();"}},
[h]={{E,9611,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ArrayTypeMismatch:\n  case FK_NonConstantArrayInit:\n    S.Diag(Kind.getLocation(), (Failure == FK_ArrayTypeMismatch ? diag::err_array_init_different_type : diag::err_array_init_non_constant_array)) << DestType.getNonReferenceType() << OnlyArg->getType() << Args[0]->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/array-init.c"]={"clang/test/Sema/array-init.c:290:5: error: cannot initialize array of type \'int[5]\' with array of type \'int[3]\'"}
["clang/test/Sema/array-init.c"]={"clang/test/Sema/array-init.c:290:5: error: cannot initialize array of type \'int[5]\' with array of type \'int[3]\'"}
Line 1,937: Line 1,939:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"8f62c5ca22f4",1368615784,"Better diagnostics for string initialization.\n\nThis commit improves Clang\'s diagnostics for string i...","Better diagnostics for string initialization.\n\nThis commit improves Clang\'s diagnostics for string initialization.\nWhere it would previously say:\n\n  /tmp/a.c:3:9: error: array initializer must be an initializer list\n  wchar_t s[] = \"Hi\";\n          ^\n  /tmp/a.c:4:6: error: array initializer must be an initializer list or string literal\n  char t[] = L\"Hi\";\n      ^\n\nIt will now say\n\n  /tmp/a.c:3:9: error: initializing wide char array with non-wide string literal\n  wchar_t s[] = \"Hi\";\n          ^\n  /tmp/a.c:4:6: error: initializing char array with wide string literal\n  char t[] = L\"Hi\";\n      ^\n\nAs a bonus, it also fixes the fact that Clang would previously reject\nthis valid C11 code:\n\n  char16_t s[] = u\"hi\";\n  char32_t t[] = U\"hi\";\n\nbecause it would only recognize the built-in types for char16_t and\nchar32_t, which do not exist in C.\n\nllvm-svn: 181880"},
[b]={"8f62c5ca22f4",1368615784,"Better diagnostics for string initialization.","Better diagnostics for string initialization.\n\nThis commit improves Clang\'s diagnostics for string initialization.\nWhere it would previously say:\n\n  /tmp/a.c:3:9: error: array initializer must be an initializer list\n  wchar_t s[] = \"Hi\";\n          ^\n  /tmp/a.c:4:6: error: array initializer must be an initializer list or string literal\n  char t[] = L\"Hi\";\n      ^\n\nIt will now say\n\n  /tmp/a.c:3:9: error: initializing wide char array with non-wide string literal\n  wchar_t s[] = \"Hi\";\n          ^\n  /tmp/a.c:4:6: error: initializing char array with wide string literal\n  char t[] = L\"Hi\";\n      ^\n\nAs a bonus, it also fixes the fact that Clang would previously reject\nthis valid C11 code:\n\n  char16_t s[] = u\"hi\";\n  char32_t t[] = U\"hi\";\n\nbecause it would only recognize the built-in types for char16_t and\nchar32_t, which do not exist in C.\n\nllvm-svn: 181880"},
[h]={{D,9594,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_IncompatWideStringIntoWideChar:\n    S.Diag(Kind.getLocation(), diag::err_array_init_incompat_wide_string_into_wchar);"}},
[h]={{E,9594,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_IncompatWideStringIntoWideChar:\n    S.Diag(Kind.getLocation(), diag::err_array_init_incompat_wide_string_into_wchar);"}},
[j]={
[j]={
["clang/test/SemaCXX/string-init.cpp"]={"clang/test/SemaCXX/string-init.cpp:12:11: error: initializing wide char array with incompatible wide string literal","clang/test/SemaCXX/string-init.cpp:13:11: error: initializing wide char array with incompatible wide string literal","clang/test/SemaCXX/string-init.cpp:19:12: error: initializing wide char array with incompatible wide string literal","clang/test/SemaCXX/string-init.cpp:20:12: error: initializing wide char array with incompatible wide string literal","clang/test/SemaCXX/string-init.cpp:24:12: error: initializing wide char array with incompatible wide string literal","clang/test/SemaCXX/string-init.cpp:26:12: error: initializing wide char array with incompatible wide string literal"}
["clang/test/SemaCXX/string-init.cpp"]={"clang/test/SemaCXX/string-init.cpp:12:11: error: initializing wide char array with incompatible wide string literal","clang/test/SemaCXX/string-init.cpp:13:11: error: initializing wide char array with incompatible wide string literal","clang/test/SemaCXX/string-init.cpp:19:12: error: initializing wide char array with incompatible wide string literal","clang/test/SemaCXX/string-init.cpp:20:12: error: initializing wide char array with incompatible wide string literal","clang/test/SemaCXX/string-init.cpp:24:12: error: initializing wide char array with incompatible wide string literal","clang/test/SemaCXX/string-init.cpp:26:12: error: initializing wide char array with incompatible wide string literal"}
Line 1,949: Line 1,951:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"8f62c5ca22f4",1368615784,"Better diagnostics for string initialization.\n\nThis commit improves Clang\'s diagnostics for string i...","Better diagnostics for string initialization.\n\nThis commit improves Clang\'s diagnostics for string initialization.\nWhere it would previously say:\n\n  /tmp/a.c:3:9: error: array initializer must be an initializer list\n  wchar_t s[] = \"Hi\";\n          ^\n  /tmp/a.c:4:6: error: array initializer must be an initializer list or string literal\n  char t[] = L\"Hi\";\n      ^\n\nIt will now say\n\n  /tmp/a.c:3:9: error: initializing wide char array with non-wide string literal\n  wchar_t s[] = \"Hi\";\n          ^\n  /tmp/a.c:4:6: error: initializing char array with wide string literal\n  char t[] = L\"Hi\";\n      ^\n\nAs a bonus, it also fixes the fact that Clang would previously reject\nthis valid C11 code:\n\n  char16_t s[] = u\"hi\";\n  char32_t t[] = U\"hi\";\n\nbecause it would only recognize the built-in types for char16_t and\nchar32_t, which do not exist in C.\n\nllvm-svn: 181880"},
[b]={"8f62c5ca22f4",1368615784,"Better diagnostics for string initialization.","Better diagnostics for string initialization.\n\nThis commit improves Clang\'s diagnostics for string initialization.\nWhere it would previously say:\n\n  /tmp/a.c:3:9: error: array initializer must be an initializer list\n  wchar_t s[] = \"Hi\";\n          ^\n  /tmp/a.c:4:6: error: array initializer must be an initializer list or string literal\n  char t[] = L\"Hi\";\n      ^\n\nIt will now say\n\n  /tmp/a.c:3:9: error: initializing wide char array with non-wide string literal\n  wchar_t s[] = \"Hi\";\n          ^\n  /tmp/a.c:4:6: error: initializing char array with wide string literal\n  char t[] = L\"Hi\";\n      ^\n\nAs a bonus, it also fixes the fact that Clang would previously reject\nthis valid C11 code:\n\n  char16_t s[] = u\"hi\";\n  char32_t t[] = U\"hi\";\n\nbecause it would only recognize the built-in types for char16_t and\nchar32_t, which do not exist in C.\n\nllvm-svn: 181880"},
[h]={{D,9587,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NarrowStringIntoWideCharArray:\n    S.Diag(Kind.getLocation(), diag::err_array_init_narrow_string_into_wchar);"}},
[h]={{E,9587,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NarrowStringIntoWideCharArray:\n    S.Diag(Kind.getLocation(), diag::err_array_init_narrow_string_into_wchar);"}},
[j]={
[j]={
["clang/test/SemaCXX/string-init.cpp"]={"clang/test/SemaCXX/string-init.cpp:10:11: error: initializing wide char array with non-wide string literal","clang/test/SemaCXX/string-init.cpp:11:11: error: initializing wide char array with non-wide string literal","clang/test/SemaCXX/string-init.cpp:16:12: error: initializing wide char array with non-wide string literal","clang/test/SemaCXX/string-init.cpp:17:12: error: initializing wide char array with non-wide string literal","clang/test/SemaCXX/string-init.cpp:22:12: error: initializing wide char array with non-wide string literal","clang/test/SemaCXX/string-init.cpp:23:12: error: initializing wide char array with non-wide string literal"}
["clang/test/SemaCXX/string-init.cpp"]={"clang/test/SemaCXX/string-init.cpp:10:11: error: initializing wide char array with non-wide string literal","clang/test/SemaCXX/string-init.cpp:11:11: error: initializing wide char array with non-wide string literal","clang/test/SemaCXX/string-init.cpp:16:12: error: initializing wide char array with non-wide string literal","clang/test/SemaCXX/string-init.cpp:17:12: error: initializing wide char array with non-wide string literal","clang/test/SemaCXX/string-init.cpp:22:12: error: initializing wide char array with non-wide string literal","clang/test/SemaCXX/string-init.cpp:23:12: error: initializing wide char array with non-wide string literal"}
Line 1,961: Line 1,963:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e2f943b5cb44",1298399391,"Implement the GNU C extension which permits the initialization of an\narray from a constant array com...","Implement the GNU C extension which permits the initialization of an\narray from a constant array compound literal. Fixes PR9261.\n\nllvm-svn: 126230"},
[b]={"e2f943b5cb44",1298399391,"Implement the GNU C extension which permits the initialization of an","Implement the GNU C extension which permits the initialization of an\narray from a constant array compound literal. Fixes PR9261.\n\nllvm-svn: 126230"},
[h]={{D,9612,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ArrayTypeMismatch:\n  case FK_NonConstantArrayInit:\n    S.Diag(Kind.getLocation(), (Failure == FK_ArrayTypeMismatch ? diag::err_array_init_different_type : diag::err_array_init_non_constant_array)) << DestType.getNonReferenceType() << OnlyArg->getType() << Args[0]->getSourceRange();"}}
[h]={{E,9612,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ArrayTypeMismatch:\n  case FK_NonConstantArrayInit:\n    S.Diag(Kind.getLocation(), (Failure == FK_ArrayTypeMismatch ? diag::err_array_init_different_type : diag::err_array_init_non_constant_array)) << DestType.getNonReferenceType() << OnlyArg->getType() << Args[0]->getSourceRange();"}}
},
},
["err_array_init_not_init_list"]={
["err_array_init_not_init_list"]={
Line 1,970: Line 1,972:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"3e1e52782604",1260399737,"Reimplement reference initialization (C++ [dcl.init.ref]) using the\nnew notion of an \"initialization...","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"},
[b]={"3e1e52782604",1260399737,"Reimplement reference initialization (C++ [dcl.init.ref]) using the","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"},
[h]={{D,9578,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ArrayNeedsInitList:\n    S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 0;"},{D,9581,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ArrayNeedsInitListOrStringLiteral:\n    S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 1;"},{D,9584,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ArrayNeedsInitListOrWideStringLiteral:\n    S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 2;"}},
[h]={{E,9578,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ArrayNeedsInitList:\n    S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 0;"},{E,9581,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ArrayNeedsInitListOrStringLiteral:\n    S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 1;"},{E,9584,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ArrayNeedsInitListOrWideStringLiteral:\n    S.Diag(Kind.getLocation(), diag::err_array_init_not_init_list) << 2;"}},
[j]={
[j]={
["clang/test/SemaCXX/string-init.cpp"]={"clang/test/SemaCXX/string-init.cpp:28:7: error: array initializer must be an initializer list","clang/test/SemaCXX/string-init.cpp:29:7: error: array initializer must be an initializer list","clang/test/SemaCXX/string-init.cpp:30:7: error: array initializer must be an initializer list","clang/test/SemaCXX/string-init.cpp:31:7: error: array initializer must be an initializer list","clang/test/SemaCXX/string-init.cpp:32:7: error: array initializer must be an initializer list","clang/test/SemaCXX/string-init.cpp:36:8: error: array initializer must be an initializer list or string literal","clang/test/SemaCXX/string-init.cpp:37:11: error: array initializer must be an initializer list or wide string literal","clang/test/SemaCXX/string-init.cpp:38:12: error: array initializer must be an initializer list or wide string literal","clang/test/SemaCXX/string-init.cpp:39:12: error: array initializer must be an initializer list or wide string literal"}
["clang/test/SemaCXX/string-init.cpp"]={"clang/test/SemaCXX/string-init.cpp:28:7: error: array initializer must be an initializer list","clang/test/SemaCXX/string-init.cpp:29:7: error: array initializer must be an initializer list","clang/test/SemaCXX/string-init.cpp:30:7: error: array initializer must be an initializer list","clang/test/SemaCXX/string-init.cpp:31:7: error: array initializer must be an initializer list","clang/test/SemaCXX/string-init.cpp:32:7: error: array initializer must be an initializer list","clang/test/SemaCXX/string-init.cpp:36:8: error: array initializer must be an initializer list or string literal","clang/test/SemaCXX/string-init.cpp:37:11: error: array initializer must be an initializer list or wide string literal","clang/test/SemaCXX/string-init.cpp:38:12: error: array initializer must be an initializer list or wide string literal","clang/test/SemaCXX/string-init.cpp:39:12: error: array initializer must be an initializer list or wide string literal"}
Line 1,982: Line 1,984:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type.\n\nThis is not yet part of any C++ working draft, and so ...","Implement P0482R2, support for char8_t type.\n\nThis is not yet part of any C++ working draft, and so is controlled by the flag\n-fchar8_t rather than a -std= flag. (The GCC implementation is controlled by a\nflag with the same name.)\n\nThis implementation is experimental, and will be removed or revised\nsubstantially to match the proposal as it makes its way through the C++\ncommittee.\n\nllvm-svn: 331244"},
[b]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type.","Implement P0482R2, support for char8_t type.\n\nThis is not yet part of any C++ working draft, and so is controlled by the flag\n-fchar8_t rather than a -std= flag. (The GCC implementation is controlled by a\nflag with the same name.)\n\nThis implementation is experimental, and will be removed or revised\nsubstantially to match the proposal as it makes its way through the C++\ncommittee.\n\nllvm-svn: 331244"},
[h]={{D,9598,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_PlainStringIntoUTF8Char:\n    S.Diag(Kind.getLocation(), diag::err_array_init_plain_string_into_char8_t);"}},
[h]={{E,9598,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_PlainStringIntoUTF8Char:\n    S.Diag(Kind.getLocation(), diag::err_array_init_plain_string_into_char8_t);"}},
[j]={
[j]={
["clang/test/SemaCXX/char8_t.cpp"]={"clang/test/SemaCXX/char8_t.cpp:9:9: error: initializing \'char8_t\' array with plain string literal"}
["clang/test/SemaCXX/char8_t.cpp"]={"clang/test/SemaCXX/char8_t.cpp:9:9: error: initializing \'char8_t\' array with plain string literal"}
Line 1,994: Line 1,996:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type.\n\nThis is not yet part of any C++ working draft, and so ...","Implement P0482R2, support for char8_t type.\n\nThis is not yet part of any C++ working draft, and so is controlled by the flag\n-fchar8_t rather than a -std= flag. (The GCC implementation is controlled by a\nflag with the same name.)\n\nThis implementation is experimental, and will be removed or revised\nsubstantially to match the proposal as it makes its way through the C++\ncommittee.\n\nllvm-svn: 331244"},
[b]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type.","Implement P0482R2, support for char8_t type.\n\nThis is not yet part of any C++ working draft, and so is controlled by the flag\n-fchar8_t rather than a -std= flag. (The GCC implementation is controlled by a\nflag with the same name.)\n\nThis implementation is experimental, and will be removed or revised\nsubstantially to match the proposal as it makes its way through the C++\ncommittee.\n\nllvm-svn: 331244"},
[h]={{D,9604,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_UTF8StringIntoPlainChar:\n    S.Diag(Kind.getLocation(), diag::err_array_init_utf8_string_into_char) << DestType->isSignedIntegerType() << S.getLangOpts().CPlusPlus20;"}},
[h]={{E,9604,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_UTF8StringIntoPlainChar:\n    S.Diag(Kind.getLocation(), diag::err_array_init_utf8_string_into_char) << DestType->isSignedIntegerType() << S.getLangOpts().CPlusPlus20;"}},
[j]={
[j]={
["clang/test/SemaCXX/char8_t.cpp"]={"clang/test/SemaCXX/char8_t.cpp:19:13: error: initialization of char array with UTF-8 string literal is not permitted by C++20"}
["clang/test/SemaCXX/char8_t.cpp"]={"clang/test/SemaCXX/char8_t.cpp:19:13: error: initialization of char array with UTF-8 string literal is not permitted by C++20"}
Line 2,006: Line 2,008:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"8f62c5ca22f4",1368615784,"Better diagnostics for string initialization.\n\nThis commit improves Clang\'s diagnostics for string i...","Better diagnostics for string initialization.\n\nThis commit improves Clang\'s diagnostics for string initialization.\nWhere it would previously say:\n\n  /tmp/a.c:3:9: error: array initializer must be an initializer list\n  wchar_t s[] = \"Hi\";\n          ^\n  /tmp/a.c:4:6: error: array initializer must be an initializer list or string literal\n  char t[] = L\"Hi\";\n      ^\n\nIt will now say\n\n  /tmp/a.c:3:9: error: initializing wide char array with non-wide string literal\n  wchar_t s[] = \"Hi\";\n          ^\n  /tmp/a.c:4:6: error: initializing char array with wide string literal\n  char t[] = L\"Hi\";\n      ^\n\nAs a bonus, it also fixes the fact that Clang would previously reject\nthis valid C11 code:\n\n  char16_t s[] = u\"hi\";\n  char32_t t[] = U\"hi\";\n\nbecause it would only recognize the built-in types for char16_t and\nchar32_t, which do not exist in C.\n\nllvm-svn: 181880"},
[b]={"8f62c5ca22f4",1368615784,"Better diagnostics for string initialization.","Better diagnostics for string initialization.\n\nThis commit improves Clang\'s diagnostics for string initialization.\nWhere it would previously say:\n\n  /tmp/a.c:3:9: error: array initializer must be an initializer list\n  wchar_t s[] = \"Hi\";\n          ^\n  /tmp/a.c:4:6: error: array initializer must be an initializer list or string literal\n  char t[] = L\"Hi\";\n      ^\n\nIt will now say\n\n  /tmp/a.c:3:9: error: initializing wide char array with non-wide string literal\n  wchar_t s[] = \"Hi\";\n          ^\n  /tmp/a.c:4:6: error: initializing char array with wide string literal\n  char t[] = L\"Hi\";\n      ^\n\nAs a bonus, it also fixes the fact that Clang would previously reject\nthis valid C11 code:\n\n  char16_t s[] = u\"hi\";\n  char32_t t[] = U\"hi\";\n\nbecause it would only recognize the built-in types for char16_t and\nchar32_t, which do not exist in C.\n\nllvm-svn: 181880"},
[h]={{D,9590,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_WideStringIntoCharArray:\n    S.Diag(Kind.getLocation(), diag::err_array_init_wide_string_into_char);"}},
[h]={{E,9590,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_WideStringIntoCharArray:\n    S.Diag(Kind.getLocation(), diag::err_array_init_wide_string_into_char);"}},
[j]={
[j]={
["clang/test/SemaCXX/string-init.cpp"]={"clang/test/SemaCXX/string-init.cpp:6:8: error: initializing char array with wide string literal","clang/test/SemaCXX/string-init.cpp:7:8: error: initializing char array with wide string literal","clang/test/SemaCXX/string-init.cpp:8:8: error: initializing char array with wide string literal"}
["clang/test/SemaCXX/string-init.cpp"]={"clang/test/SemaCXX/string-init.cpp:6:8: error: initializing char array with wide string literal","clang/test/SemaCXX/string-init.cpp:7:8: error: initializing char array with wide string literal","clang/test/SemaCXX/string-init.cpp:8:8: error: initializing char array with wide string literal"}
Line 2,018: Line 2,020:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{t,1869,"/// 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.NumElts && !Initializer)\n      return ExprError(Diag(Chunk.Loc, diag::err_array_new_needs_size) << D.getSourceRange());"}},
[h]={{u,1869,"/// 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.NumElts && !Initializer)\n      return ExprError(Diag(Chunk.Loc, diag::err_array_new_needs_size) << D.getSourceRange());"}},
[j]={
[j]={
["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:139:17: error: array size must be specified in new expression with no initializer","clang/test/SemaCXX/new-delete.cpp:141:16: error: array size must be specified in new expression with no initializer"}
["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:139:17: error: array size must be specified in new expression with no initializer","clang/test/SemaCXX/new-delete.cpp:141:16: error: array size must be specified in new expression with no initializer"}
Line 2,030: Line 2,032:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"7d8072e03860",1272397094,"Diagnose the use of abstract types as array element types. Previously,\nwe were relying on checking f...","Diagnose the use of abstract types as array element types. Previously,\nwe were relying on checking for abstract class types when an array\ntype was actually used to declare a variable, parameter, etc. However,\nwe need to check when the construct the array for, e.g., SFINAE\npurposes (see DR337). Fixes problems with Boost\'s is_abstract type\ntrait. \n\nllvm-svn: 102452"},
[b]={"7d8072e03860",1272397094,"Diagnose the use of abstract types as array element types. Previously,","Diagnose the use of abstract types as array element types. Previously,\nwe were relying on checking for abstract class types when an array\ntype was actually used to declare a variable, parameter, etc. However,\nwe need to check when the construct the array for, e.g., SFINAE\npurposes (see DR337). Fixes problems with Boost\'s is_abstract type\ntrait. \n\nllvm-svn: 102452"},
[h]={{r,6095,"#include \"clang/AST/TypeLocNodes.def\"\n  // ...\n  CheckPolymorphic(PointerTypeLoc) CheckPolymorphic(ReferenceTypeLoc) CheckPolymorphic(MemberPointerTypeLoc) CheckPolymorphic(BlockPointerTypeLoc) CheckPolymorphic(AtomicTypeLoc)\n    // ...\n    // It matched; do some magic.\n    // FIXME: These should be at most warnings. See P0929R2, CWG1640, CWG1646.\n    if (Sel == Sema::AbstractArrayType) {\n      Info.S.Diag(Ctx->getLocation(), diag::err_array_of_abstract_type) << T << TL.getSourceRange();"},{o,2497,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    if (RequireNonAbstractType(Brackets.getBegin(), T, diag::err_array_of_abstract_type))"}},
[h]={{s,6095,"#include \"clang/AST/TypeLocNodes.def\"\n  // ...\n  CheckPolymorphic(PointerTypeLoc) CheckPolymorphic(ReferenceTypeLoc) CheckPolymorphic(MemberPointerTypeLoc) CheckPolymorphic(BlockPointerTypeLoc) CheckPolymorphic(AtomicTypeLoc)\n    // ...\n    // It matched; do some magic.\n    // FIXME: These should be at most warnings. See P0929R2, CWG1640, CWG1646.\n    if (Sel == Sema::AbstractArrayType) {\n      Info.S.Diag(Ctx->getLocation(), diag::err_array_of_abstract_type) << T << TL.getSourceRange();"},{n,2497,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    if (RequireNonAbstractType(Brackets.getBegin(), T, diag::err_array_of_abstract_type))"}},
[j]={
[j]={
["clang/test/CXX/class.derived/class.abstract/p3.cpp"]={"clang/test/CXX/class.derived/class.abstract/p3.cpp:39:9: error: array of abstract class type \'A\'","clang/test/CXX/class.derived/class.abstract/p3.cpp:41:9: error: array of abstract class type \'B\' (aka \'SecretlyAbstract<int>\')","clang/test/CXX/class.derived/class.abstract/p3.cpp:45:9: error: array of abstract class type \'SecretlyAbstract<char>\'","clang/test/CXX/class.derived/class.abstract/p3.cpp:51:13: error: array of abstract class type \'A\'","clang/test/CXX/class.derived/class.abstract/p3.cpp:53:13: error: array of abstract class type \'B\' (aka \'SecretlyAbstract<int>\')"}
["clang/test/CXX/class.derived/class.abstract/p3.cpp"]={"clang/test/CXX/class.derived/class.abstract/p3.cpp:39:9: error: array of abstract class type \'A\'","clang/test/CXX/class.derived/class.abstract/p3.cpp:41:9: error: array of abstract class type \'B\' (aka \'SecretlyAbstract<int>\')","clang/test/CXX/class.derived/class.abstract/p3.cpp:45:9: error: array of abstract class type \'SecretlyAbstract<char>\'","clang/test/CXX/class.derived/class.abstract/p3.cpp:51:13: error: array of abstract class type \'A\'","clang/test/CXX/class.derived/class.abstract/p3.cpp:53:13: error: array of abstract class type \'B\' (aka \'SecretlyAbstract<int>\')"}
Line 2,042: Line 2,044:
[f]=a,
[f]=a,
[g]="OpenMP Issue",
[g]="OpenMP Issue",
[b]={"a9f35cb7d665",1457538365,"[OpenMP] Add support for multidimensional array sections in map clause SEMA.\n\nSummary: In some cases...","[OpenMP] Add support for multidimensional array sections in map clause SEMA.\n\nSummary: In some cases it can be proved statically that multidimensional array section refer to contiguous storage and can therefore be allowed in a map clause. This patch adds support for those cases in SEMA.\n\nReviewers: hfinkel, carlo.bertolli, arpith-jacob, kkwli0, ABataev\n\nSubscribers: cfe-commits, fraggamuffin, caomhin\n\nDifferential Revision: http://reviews.llvm.org/D17547\n\nllvm-svn: 263019"},
[b]={"a9f35cb7d665",1457538365,"[OpenMP] Add support for multidimensional array sections in map clause SEMA.","[OpenMP] Add support for multidimensional array sections in map clause SEMA.\n\nSummary: In some cases it can be proved statically that multidimensional array section refer to contiguous storage and can therefore be allowed in a map clause. This patch adds support for those cases in SEMA.\n\nReviewers: hfinkel, carlo.bertolli, arpith-jacob, kkwli0, ABataev\n\nSubscribers: cfe-commits, fraggamuffin, caomhin\n\nDifferential Revision: http://reviews.llvm.org/D17547\n\nllvm-svn: 263019"},
[h]={{"clang/lib/Sema/SemaOpenMP.cpp",21302,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  // ...\n  bool VisitOMPArraySectionExpr(OMPArraySectionExpr *OASE) {\n    // ...\n    if (AllowWholeSizeArraySection) {\n    // ...\n    } else if (DKind == OMPD_target_update && SemaRef.getLangOpts().OpenMP >= 50) {\n    // ...\n    } else if (AllowUnitySizeArraySection && NotUnity) {\n      // ...\n      SemaRef.Diag(ELoc, diag::err_array_section_does_not_specify_contiguous_storage) << OASE->getSourceRange();"}},
[h]={{"clang/lib/Sema/SemaOpenMP.cpp",21302,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  // ...\n  bool VisitOMPArraySectionExpr(OMPArraySectionExpr *OASE) {\n    // ...\n    if (AllowWholeSizeArraySection) {\n    // ...\n    } else if (DKind == OMPD_target_update && SemaRef.getLangOpts().OpenMP >= 50) {\n    // ...\n    } else if (AllowUnitySizeArraySection && NotUnity) {\n      // ...\n      SemaRef.Diag(ELoc, diag::err_array_section_does_not_specify_contiguous_storage) << OASE->getSourceRange();"}},
[j]={
[j]={
Line 2,054: Line 2,056:
[f]=a,
[f]=a,
[g]="OpenMP Issue",
[g]="OpenMP Issue",
[b]={fb,1590001902,jb,lb},
[b]={kb,1590001902,fb,jb},
[h]={{"clang/lib/Sema/SemaOpenMP.cpp",21437,"/// Return the expression of the base of the mappable expression or null if it\n/// cannot be determined and do all the necessary checks to see if the\n/// expression is valid as a standalone mappable expression. In the process,\n/// record all the components of the expression.\nstatic const Expr *checkMapClauseExpressionBase(Sema &SemaRef, Expr *E, OMPClauseMappableExprCommon::MappableExprComponentList &CurComponents, OpenMPClauseKind CKind, OpenMPDirectiveKind DKind, bool NoDiagnose) {\n  // ...\n  if (Checker.Visit(E->IgnoreParens())) {\n    // Check if the highest dimension array section has length specified\n    if (SemaRef.getLangOpts().OpenMP >= 50 && !CurComponents.empty() && (CKind == OMPC_to || CKind == OMPC_from)) {\n      // ...\n      for (; CI != CE; ++CI) {\n        // ...\n        SemaRef.Diag(ELoc, diag::err_array_section_does_not_specify_length) << ERange;"}},
[h]={{"clang/lib/Sema/SemaOpenMP.cpp",21437,"/// Return the expression of the base of the mappable expression or null if it\n/// cannot be determined and do all the necessary checks to see if the\n/// expression is valid as a standalone mappable expression. In the process,\n/// record all the components of the expression.\nstatic const Expr *checkMapClauseExpressionBase(Sema &SemaRef, Expr *E, OMPClauseMappableExprCommon::MappableExprComponentList &CurComponents, OpenMPClauseKind CKind, OpenMPDirectiveKind DKind, bool NoDiagnose) {\n  // ...\n  if (Checker.Visit(E->IgnoreParens())) {\n    // Check if the highest dimension array section has length specified\n    if (SemaRef.getLangOpts().OpenMP >= 50 && !CurComponents.empty() && (CKind == OMPC_to || CKind == OMPC_from)) {\n      // ...\n      for (; CI != CE; ++CI) {\n        // ...\n        SemaRef.Diag(ELoc, diag::err_array_section_does_not_specify_length) << ERange;"}},
[j]={
[j]={
Line 2,066: Line 2,068:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"4799d03ce841",1277857243,"Implement C++ DR299, which allows an implicit conversion from a class\ntype to an integral or enumera...","Implement C++ DR299, which allows an implicit conversion from a class\ntype to an integral or enumeration type in the size of an array new\nexpression, e.g.,\n\n  new int[ConvertibleToInt(10)];\n\nThis is a GNU and C++0x extension.\n\nllvm-svn: 107229"},
[b]={"4799d03ce841",1277857243,"Implement C++ DR299, which allows an implicit conversion from a class","Implement C++ DR299, which allows an implicit conversion from a class\ntype to an integral or enumeration type in the size of an array new\nexpression, e.g.,\n\n  new int[ConvertibleToInt(10)];\n\nThis is a GNU and C++0x extension.\n\nllvm-svn: 107229"},
[h]={{t,2172,"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    if (getLangOpts().CPlusPlus14) {\n    // ...\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        // ...\n        SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_array_size_ambiguous_conversion) << T; }"}},
[h]={{u,2172,"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    if (getLangOpts().CPlusPlus14) {\n    // ...\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        // ...\n        SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_array_size_ambiguous_conversion) << T; }"}},
[j]={
[j]={
["clang/test/SemaCXX/cxx1y-contextual-conversion-tweaks.cpp"]={"clang/test/SemaCXX/cxx1y-contextual-conversion-tweaks.cpp:168:14: error: ambiguous conversion of array size expression of type \'X\' to an integral or enumeration type"}
["clang/test/SemaCXX/cxx1y-contextual-conversion-tweaks.cpp"]={"clang/test/SemaCXX/cxx1y-contextual-conversion-tweaks.cpp:168:14: error: ambiguous conversion of array size expression of type \'X\' to an integral or enumeration type"}
Line 2,078: Line 2,080:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"4799d03ce841",1277857243,"Implement C++ DR299, which allows an implicit conversion from a class\ntype to an integral or enumera...","Implement C++ DR299, which allows an implicit conversion from a class\ntype to an integral or enumeration type in the size of an array new\nexpression, e.g.,\n\n  new int[ConvertibleToInt(10)];\n\nThis is a GNU and C++0x extension.\n\nllvm-svn: 107229"},
[b]={"4799d03ce841",1277857243,"Implement C++ DR299, which allows an implicit conversion from a class","Implement C++ DR299, which allows an implicit conversion from a class\ntype to an integral or enumeration type in the size of an array new\nexpression, e.g.,\n\n  new int[ConvertibleToInt(10)];\n\nThis is a GNU and C++0x extension.\n\nllvm-svn: 107229"},
[h]={{t,2161,"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    if (getLangOpts().CPlusPlus14) {\n    // ...\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        // ...\n        SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, diag::err_array_size_explicit_conversion) << T << ConvTy; }"}},
[h]={{u,2161,"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    if (getLangOpts().CPlusPlus14) {\n    // ...\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        // ...\n        SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, diag::err_array_size_explicit_conversion) << T << ConvTy; }"}},
[j]={
[j]={
["clang/test/SemaCXX/explicit.cpp"]={"clang/test/SemaCXX/explicit.cpp:219:5: error: array size expression of type \'NotInt\' requires explicit conversion to type \'int\'"}
["clang/test/SemaCXX/explicit.cpp"]={"clang/test/SemaCXX/explicit.cpp:219:5: error: array size expression of type \'NotInt\' requires explicit conversion to type \'int\'"}
Line 2,090: Line 2,092:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"4799d03ce841",1277857243,"Implement C++ DR299, which allows an implicit conversion from a class\ntype to an integral or enumera...","Implement C++ DR299, which allows an implicit conversion from a class\ntype to an integral or enumeration type in the size of an array new\nexpression, e.g.,\n\n  new int[ConvertibleToInt(10)];\n\nThis is a GNU and C++0x extension.\n\nllvm-svn: 107229"},
[b]={"4799d03ce841",1277857243,"Implement C++ DR299, which allows an implicit conversion from a class","Implement C++ DR299, which allows an implicit conversion from a class\ntype to an integral or enumeration type in the size of an array new\nexpression, e.g.,\n\n  new int[ConvertibleToInt(10)];\n\nThis is a GNU and C++0x extension.\n\nllvm-svn: 107229"},
[h]={{t,2155,"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    if (getLangOpts().CPlusPlus14) {\n    // ...\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        // ...\n        SemaDiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_array_size_incomplete_type) << T << ArraySize->getSourceRange(); }"}}
[h]={{u,2155,"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    if (getLangOpts().CPlusPlus14) {\n    // ...\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        // ...\n        SemaDiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_array_size_incomplete_type) << T << ArraySize->getSourceRange(); }"}}
},
},
["err_array_size_non_int"]={
["err_array_size_non_int"]={
Line 2,099: Line 2,101:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{o,2414,"/// Check whether the specified array bound can be evaluated using the relevant\n/// language rules. If so, returns the possibly-converted expression and sets\n/// SizeVal to the size. If not, but the expression might be a VLA bound,\n/// returns ExprResult(). Otherwise, produces a diagnostic and returns\n/// ExprError().\nstatic ExprResult checkArraySize(Sema &S, Expr *&ArraySize, llvm::APSInt &SizeVal, unsigned VLADiag, bool VLAIsError) {\n  // ...\n  // If the size is an ICE, it certainly isn\'t a VLA. If we\'re in a GNU mode\n  // (like gnu99, but not c99) accept any evaluatable value as an extension.\n  class VLADiagnoser : public Sema::VerifyICEDiagnoser {\n    // ...\n    Sema::SemaDiagnosticBuilder diagnoseNotICEType(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_array_size_non_int) << T; }"},{o,2570,"/// 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  // C99 6.7.5.2p1: The size expression shall have integer type.\n  // C++11 allows contextual conversions to such types.\n  if (!getLangOpts().CPlusPlus11 && ArraySize && !ArraySize->isTypeDependent() && !ArraySize->getType()->isIntegralOrUnscopedEnumerationType()) {\n    Diag(ArraySize->getBeginLoc(), diag::err_array_size_non_int) << ArraySize->getType() << ArraySize->getSourceRange();"}},
[h]={{n,2414,"/// Check whether the specified array bound can be evaluated using the relevant\n/// language rules. If so, returns the possibly-converted expression and sets\n/// SizeVal to the size. If not, but the expression might be a VLA bound,\n/// returns ExprResult(). Otherwise, produces a diagnostic and returns\n/// ExprError().\nstatic ExprResult checkArraySize(Sema &S, Expr *&ArraySize, llvm::APSInt &SizeVal, unsigned VLADiag, bool VLAIsError) {\n  // ...\n  // If the size is an ICE, it certainly isn\'t a VLA. If we\'re in a GNU mode\n  // (like gnu99, but not c99) accept any evaluatable value as an extension.\n  class VLADiagnoser : public Sema::VerifyICEDiagnoser {\n    // ...\n    Sema::SemaDiagnosticBuilder diagnoseNotICEType(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_array_size_non_int) << T; }"},{n,2570,"/// 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  // C99 6.7.5.2p1: The size expression shall have integer type.\n  // C++11 allows contextual conversions to such types.\n  if (!getLangOpts().CPlusPlus11 && ArraySize && !ArraySize->isTypeDependent() && !ArraySize->getType()->isIntegralOrUnscopedEnumerationType()) {\n    Diag(ArraySize->getBeginLoc(), diag::err_array_size_non_int) << ArraySize->getType() << ArraySize->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:20:14: error: size of array has non-integer type \'v2u\' (vector of 2 \'unsigned int\' values)"}
["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:20:14: error: size of array has non-integer type \'v2u\' (vector of 2 \'unsigned int\' values)"}
Line 2,111: Line 2,113:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{t,2149,"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    if (getLangOpts().CPlusPlus14) {\n    // ...\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        // ...\n        SemaDiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_array_size_not_integral) << S.getLangOpts().CPlusPlus11 << T; }"}},
[h]={{u,2149,"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    if (getLangOpts().CPlusPlus14) {\n    // ...\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        // ...\n        SemaDiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_array_size_not_integral) << S.getLangOpts().CPlusPlus11 << T; }"}},
[j]={
[j]={
["clang/test/SemaCXX/enum-scoped.cpp"]={"clang/test/SemaCXX/enum-scoped.cpp:44:11: error: array size expression must have integral or unscoped enumeration type, not \'E1\'"}
["clang/test/SemaCXX/enum-scoped.cpp"]={"clang/test/SemaCXX/enum-scoped.cpp:44:11: error: array size expression must have integral or unscoped enumeration type, not \'E1\'"}
Line 2,123: Line 2,125:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"deb55d512333",1265000569,"Fix for PR5185. C99 [*] VLA notation should be disallowed in function definitions.\n\nllvm-svn: 94972","Fix for PR5185. C99 [*] VLA notation should be disallowed in function definitions.\n\nllvm-svn: 94972"},
[b]={"deb55d512333",1265000569,"Fix for PR5185. C99 [*] VLA notation should be disallowed in function definitions.","Fix for PR5185. C99 [*] VLA notation should be disallowed in function definitions.\n\nllvm-svn: 94972"},
[h]={{p,16617,"static void diagnoseArrayStarInParamType(Sema &S, QualType PType, SourceLocation Loc) {\n  // ...\n  S.Diag(Loc, diag::err_array_star_in_function_definition);"}},
[h]={{o,16617,"static void diagnoseArrayStarInParamType(Sema &S, QualType PType, SourceLocation Loc) {\n  // ...\n  S.Diag(Loc, diag::err_array_star_in_function_definition);"}},
[j]={
[j]={
["clang/test/Sema/crash-invalid-array.c"]={"clang/test/Sema/crash-invalid-array.c:18:14: error: variable length array must be bound in function definition","clang/test/Sema/crash-invalid-array.c:19:15: error: variable length array must be bound in function definition","clang/test/Sema/crash-invalid-array.c:20:15: error: variable length array must be bound in function definition","clang/test/Sema/crash-invalid-array.c:21:15: error: variable length array must be bound in function definition","clang/test/Sema/crash-invalid-array.c:22:15: error: variable length array must be bound in function definition"}
["clang/test/Sema/crash-invalid-array.c"]={"clang/test/Sema/crash-invalid-array.c:18:14: error: variable length array must be bound in function definition","clang/test/Sema/crash-invalid-array.c:19:15: error: variable length array must be bound in function definition","clang/test/Sema/crash-invalid-array.c:20:15: error: variable length array must be bound in function definition","clang/test/Sema/crash-invalid-array.c:21:15: error: variable length array must be bound in function definition","clang/test/Sema/crash-invalid-array.c:22:15: error: variable length array must be bound in function definition"}
Line 2,135: Line 2,137:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"4e2ab5550284",1240783071,"Add a bit more handling for declarations like \"int a[*]\".\n\nllvm-svn: 70162","Add a bit more handling for declarations like \"int a[*]\".\n\nllvm-svn: 70162"},
[b]={"4e2ab5550284",1240783071,"Add a bit more handling for declarations like \"int a[*]\".","Add a bit more handling for declarations like \"int a[*]\".\n\nllvm-svn: 70162"},
[h]={{o,5134,"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::Array: {\n      // ...\n      if (ASM == ArrayType::Star && !D.isPrototypeContext()) {\n        // ...\n        S.Diag(DeclType.Loc, diag::err_array_star_outside_prototype);"}},
[h]={{n,5134,"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::Array: {\n      // ...\n      if (ASM == ArrayType::Star && !D.isPrototypeContext()) {\n        // ...\n        S.Diag(DeclType.Loc, diag::err_array_star_outside_prototype);"}},
[j]={
[j]={
["clang/test/Sema/vla.c"]={"clang/test/Sema/vla.c:47:6: error: star modifier used outside of function prototype"}
["clang/test/Sema/vla.c"]={"clang/test/Sema/vla.c:47:6: error: star modifier used outside of function prototype"}
Line 2,147: Line 2,149:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"420052640f7c",1345016550,"Check for improper use of \'static\' and type qualifiers in array\ndeclarators.\n\nThey are only allowed ...","Check for improper use of \'static\' and type qualifiers in array\ndeclarators.\n\nThey are only allowed for function parameters, and then only on the\noutermost array type derivation.\n\nllvm-svn: 161934"},
[b]={"420052640f7c",1345016550,"Check for improper use of \'static\' and type qualifiers in array","Check for improper use of \'static\' and type qualifiers in array\ndeclarators.\n\nThey are only allowed for function parameters, and then only on the\noutermost array type derivation.\n\nllvm-svn: 161934"},
[h]={{o,5157,"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::Array: {\n      // ...\n      // C99 6.7.5.2p1: The optional type qualifiers and the keyword static\n      // shall appear only in a declaration of a function parameter with an\n      // array type, ...\n      if (ASM == ArrayType::Static || ATI.TypeQuals) {\n        // ...\n        // C99 6.7.5.2p1: ... and then only in the outermost array type\n        // derivation.\n        if (hasOuterPointerLikeChunk(D, chunkIndex)) {\n          S.Diag(DeclType.Loc, diag::err_array_static_not_outermost) << (ASM == ArrayType::Static ? \"\'static\'\" : \"type qualifier\");"}},
[h]={{n,5157,"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::Array: {\n      // ...\n      // C99 6.7.5.2p1: The optional type qualifiers and the keyword static\n      // shall appear only in a declaration of a function parameter with an\n      // array type, ...\n      if (ASM == ArrayType::Static || ATI.TypeQuals) {\n        // ...\n        // C99 6.7.5.2p1: ... and then only in the outermost array type\n        // derivation.\n        if (hasOuterPointerLikeChunk(D, chunkIndex)) {\n          S.Diag(DeclType.Loc, diag::err_array_static_not_outermost) << (ASM == ArrayType::Static ? \"\'static\'\" : \"type qualifier\");"}},
[j]={
[j]={
["clang/test/Sema/static-array.c"]={"clang/test/Sema/static-array.c:50:8: error: \'static\' used in non-outermost array type derivation","clang/test/Sema/static-array.c:53:8: error: type qualifier used in non-outermost array type derivation","clang/test/Sema/static-array.c:55:16: error: \'static\' used in non-outermost array type derivation"}
["clang/test/Sema/static-array.c"]={"clang/test/Sema/static-array.c:50:8: error: \'static\' used in non-outermost array type derivation","clang/test/Sema/static-array.c:53:8: error: type qualifier used in non-outermost array type derivation","clang/test/Sema/static-array.c:55:16: error: \'static\' used in non-outermost array type derivation"}
Line 2,159: Line 2,161:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"420052640f7c",1345016550,"Check for improper use of \'static\' and type qualifiers in array\ndeclarators.\n\nThey are only allowed ...","Check for improper use of \'static\' and type qualifiers in array\ndeclarators.\n\nThey are only allowed for function parameters, and then only on the\noutermost array type derivation.\n\nllvm-svn: 161934"},
[b]={"420052640f7c",1345016550,"Check for improper use of \'static\' and type qualifiers in array","Check for improper use of \'static\' and type qualifiers in array\ndeclarators.\n\nThey are only allowed for function parameters, and then only on the\noutermost array type derivation.\n\nllvm-svn: 161934"},
[h]={{o,5145,"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::Array: {\n      // ...\n      // C99 6.7.5.2p1: The optional type qualifiers and the keyword static\n      // shall appear only in a declaration of a function parameter with an\n      // array type, ...\n      if (ASM == ArrayType::Static || ATI.TypeQuals) {\n        if (!(D.isPrototypeContext() || D.getContext() == DeclaratorContext::KNRTypeList)) {\n          S.Diag(DeclType.Loc, diag::err_array_static_outside_prototype) << (ASM == ArrayType::Static ? \"\'static\'\" : \"type qualifier\");"}},
[h]={{n,5145,"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::Array: {\n      // ...\n      // C99 6.7.5.2p1: The optional type qualifiers and the keyword static\n      // shall appear only in a declaration of a function parameter with an\n      // array type, ...\n      if (ASM == ArrayType::Static || ATI.TypeQuals) {\n        if (!(D.isPrototypeContext() || D.getContext() == DeclaratorContext::KNRTypeList)) {\n          S.Diag(DeclType.Loc, diag::err_array_static_outside_prototype) << (ASM == ArrayType::Static ? \"\'static\'\" : \"type qualifier\");"}},
[j]={
[j]={
["clang/test/Sema/static-array.c"]={"clang/test/Sema/static-array.c:34:15: error: \'static\' used in array declarator outside of function prototype","clang/test/Sema/static-array.c:38:8: error: \'static\' used in array declarator outside of function prototype","clang/test/Sema/static-array.c:40:8: error: type qualifier used in array declarator outside of function prototype","clang/test/Sema/static-array.c:41:8: error: type qualifier used in array declarator outside of function prototype","clang/test/Sema/static-array.c:42:8: error: type qualifier used in array declarator outside of function prototype","clang/test/Sema/static-array.c:44:8: error: \'static\' used in array declarator outside of function prototype"}
["clang/test/Sema/static-array.c"]={"clang/test/Sema/static-array.c:34:15: error: \'static\' used in array declarator outside of function prototype","clang/test/Sema/static-array.c:38:8: error: \'static\' used in array declarator outside of function prototype","clang/test/Sema/static-array.c:40:8: error: type qualifier used in array declarator outside of function prototype","clang/test/Sema/static-array.c:41:8: error: type qualifier used in array declarator outside of function prototype","clang/test/Sema/static-array.c:42:8: error: type qualifier used in array declarator outside of function prototype","clang/test/Sema/static-array.c:44:8: error: \'static\' used in array declarator outside of function prototype"}
Line 2,171: Line 2,173:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"caa1bf434d93",1282091940,"Emit an error if an array is too large. We\'re slightly more strict\nthan GCC 4.2 here when building 3...","Emit an error if an array is too large. We\'re slightly more strict\nthan GCC 4.2 here when building 32-bit (where GCC will allow\nallocation of an array for which we can\'t get a valid past-the-end\npointer), and emulate its odd behavior in 64-bit where it only allows\n63 bits worth of storage in the array. The former is a correctness\nissue; the latter is harmless in practice (you wouldn\'t be able to use\nsuch an array anyway) and helps us pass a GCC DejaGNU test.\n\nFixes <rdar://problem/8212293>.\n\nllvm-svn: 111338"},
[b]={"caa1bf434d93",1282091940,"Emit an error if an array is too large. We\'re slightly more strict","Emit an error if an array is too large. We\'re slightly more strict\nthan GCC 4.2 here when building 32-bit (where GCC will allow\nallocation of an array for which we can\'t get a valid past-the-end\npointer), and emulate its odd behavior in 64-bit where it only allows\n63 bits worth of storage in the array. The former is a correctness\nissue; the latter is harmless in practice (you wouldn\'t be able to use\nsuch an array anyway) and helps us pass a GCC DejaGNU test.\n\nFixes <rdar://problem/8212293>.\n\nllvm-svn: 111338"},
[h]={{n,6611,"/// 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  // ...\n  else if (Oversized.getBoolValue())\n    Diag(Loc, diag::err_array_too_large) << toString(Oversized, 10);"},{n,6730,"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        // ...\n        else if (T->isVariableArrayType())\n        // ...\n        else if (Oversized.getBoolValue())\n          Diag(NewTD->getLocation(), diag::err_array_too_large) << toString(Oversized, 10);"},{t,2230,"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      // ...\n      if (!AllocType->isDependentType()) {\n        // ...\n        if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context))\n          return ExprError(Diag((*ArraySize)->getBeginLoc(), diag::err_array_too_large) << toString(*Value, 10) << (*ArraySize)->getSourceRange());"},{o,2660,"/// 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 (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context)) {\n        Diag(ArraySize->getBeginLoc(), diag::err_array_too_large) << toString(ConstVal, 10) << ArraySize->getSourceRange();"}},
[h]={{m,6611,"/// 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  // ...\n  else if (Oversized.getBoolValue())\n    Diag(Loc, diag::err_array_too_large) << toString(Oversized, 10);"},{m,6730,"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        // ...\n        else if (T->isVariableArrayType())\n        // ...\n        else if (Oversized.getBoolValue())\n          Diag(NewTD->getLocation(), diag::err_array_too_large) << toString(Oversized, 10);"},{u,2230,"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      // ...\n      if (!AllocType->isDependentType()) {\n        // ...\n        if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context))\n          return ExprError(Diag((*ArraySize)->getBeginLoc(), diag::err_array_too_large) << toString(*Value, 10) << (*ArraySize)->getSourceRange());"},{n,2660,"/// 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 (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context)) {\n        Diag(ArraySize->getBeginLoc(), diag::err_array_too_large) << toString(ConstVal, 10) << ArraySize->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/offsetof-64.c"]={"clang/test/Sema/offsetof-64.c:16:8: error: array is too large (1152921504606846976 elements)"}
["clang/test/Sema/offsetof-64.c"]={"clang/test/Sema/offsetof-64.c:16:8: error: array is too large (1152921504606846976 elements)"}
Line 2,183: Line 2,185:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{n,8537,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  // Emit an error if an address space was applied to decl with local storage.\n  // This includes arrays of objects with address space qualifiers, but not\n  // automatic variables that point to other address spaces.\n  // ISO/IEC TR 18037 S5.1.2\n  if (!getLangOpts().OpenCL && NewVD->hasLocalStorage() && T.getAddressSpace() != LangAS::Default) {\n    Diag(NewVD->getLocation(), diag::err_as_qualified_auto_decl) << 0;"},{n,8638,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (getLangOpts().OpenCL) {\n    // ...\n    // FIXME: Adding local AS in C++ for OpenCL might make sense.\n    if (NewVD->isFileVarDecl() || NewVD->isStaticLocal() || NewVD->hasExternalStorage()) {\n    // ...\n    } else {\n      // ...\n      if (T.getAddressSpace() == LangAS::opencl_constant || T.getAddressSpace() == LangAS::opencl_local) {\n      // ...\n      } else if (T.getAddressSpace() != LangAS::opencl_private &&\n        // ...\n        Diag(NewVD->getLocation(), diag::err_as_qualified_auto_decl) << 1;"}},
[h]={{m,8537,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  // Emit an error if an address space was applied to decl with local storage.\n  // This includes arrays of objects with address space qualifiers, but not\n  // automatic variables that point to other address spaces.\n  // ISO/IEC TR 18037 S5.1.2\n  if (!getLangOpts().OpenCL && NewVD->hasLocalStorage() && T.getAddressSpace() != LangAS::Default) {\n    Diag(NewVD->getLocation(), diag::err_as_qualified_auto_decl) << 0;"},{m,8638,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (getLangOpts().OpenCL) {\n    // ...\n    // FIXME: Adding local AS in C++ for OpenCL might make sense.\n    if (NewVD->isFileVarDecl() || NewVD->isStaticLocal() || NewVD->hasExternalStorage()) {\n    // ...\n    } else {\n      // ...\n      if (T.getAddressSpace() == LangAS::opencl_constant || T.getAddressSpace() == LangAS::opencl_local) {\n      // ...\n      } else if (T.getAddressSpace() != LangAS::opencl_private &&\n        // ...\n        Diag(NewVD->getLocation(), diag::err_as_qualified_auto_decl) << 1;"}},
[j]={
[j]={
["clang/test/SemaHLSL/group_shared.hlsl"]={"clang/test/SemaHLSL/group_shared.hlsl:9:22: error: automatic variable qualified with an address space"}
["clang/test/SemaHLSL/group_shared.hlsl"]={"clang/test/SemaHLSL/group_shared.hlsl:9:22: error: automatic variable qualified with an address space"}
Line 2,194: Line 2,196:
[e]="bad type for named register variable",
[e]="bad type for named register variable",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={"2e31e4e47b09",1401986722,"Add pointer types to global named register\n\nThis patch adds support for pointer types in global name...","Add pointer types to global named register\n\nThis patch adds support for pointer types in global named registers variables.\nIt\'ll be lowered as a pair of read/write_register and inttoptr/ptrtoint calls.\nAlso adds some early checks on types on SemaDecl to avoid the assert.\n\nTests changed accordingly. (PR19837)\n\nllvm-svn: 210274"},
[b]={"2e31e4e47b09",1401986722,"Add pointer types to global named register","Add pointer types to global named register\n\nThis patch adds support for pointer types in global named registers variables.\nIt\'ll be lowered as a pair of read/write_register and inttoptr/ptrtoint calls.\nAlso adds some early checks on types on SemaDecl to avoid the assert.\n\nTests changed accordingly. (PR19837)\n\nllvm-svn: 210274"},
[h]={{n,7969,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    // ...\n    if (S->getFnParent() != nullptr) {\n    // ...\n    } else if (SC == SC_Register) {\n      // ...\n      if (!R->isIntegralType(Context) && !R->isPointerType()) {\n        Diag(D.getBeginLoc(), diag::err_asm_bad_register_type);"}},
[h]={{m,7969,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    // ...\n    if (S->getFnParent() != nullptr) {\n    // ...\n    } else if (SC == SC_Register) {\n      // ...\n      if (!R->isIntegralType(Context) && !R->isPointerType()) {\n        Diag(D.getBeginLoc(), diag::err_asm_bad_register_type);"}},
[j]={
[j]={
[N]={"clang/test/Sema/asm.c:200:1: error: bad type for named register variable","clang/test/Sema/asm.c:201:1: error: bad type for named register variable"}
[O]={"clang/test/Sema/asm.c:200:1: error: bad type for named register variable","clang/test/Sema/asm.c:201:1: error: bad type for named register variable"}
}
}
},
},
Line 2,206: Line 2,208:
[e]="duplicate asm qualifier \'(.*?)\'",
[e]="duplicate asm qualifier \'(.*?)\'",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={"f08df464ae89",1582039343,"[OPENMP50]Add initial support for OpenMP 5.0 iterator.\n\nAdded basic parsing/semantic analysis/(de)se...","[OPENMP50]Add initial support for OpenMP 5.0 iterator.\n\nAdded basic parsing/semantic analysis/(de)serialization support for\niterator expression introduced in OpenMP 5.0."},
[b]={"f08df464ae89",1582039343,"[OPENMP50]Add initial support for OpenMP 5.0 iterator.","[OPENMP50]Add initial support for OpenMP 5.0 iterator.\n\nAdded basic parsing/semantic analysis/(de)serialization support for\niterator expression introduced in OpenMP 5.0."},
[h]={{"clang/lib/Parse/ParseStmtAsm.cpp",696,"/// parseGNUAsmQualifierListOpt - Parse a GNU extended asm qualifier list.\n///      asm-qualifier:\n///        volatile\n///        inline\n///        goto\n///\n///      asm-qualifier-list:\n///        asm-qualifier\n///        asm-qualifier-list asm-qualifier\nbool Parser::parseGNUAsmQualifierListOpt(GNUAsmQualifiers &AQ) {\n  while (true) {\n    // ...\n    if (AQ.setAsmQualifier(A))\n      Diag(Tok.getLocation(), diag::err_asm_duplicate_qual) << GNUAsmQualifiers::getQualifierName(A);"}},
[h]={{"clang/lib/Parse/ParseStmtAsm.cpp",696,"/// parseGNUAsmQualifierListOpt - Parse a GNU extended asm qualifier list.\n///      asm-qualifier:\n///        volatile\n///        inline\n///        goto\n///\n///      asm-qualifier-list:\n///        asm-qualifier\n///        asm-qualifier-list asm-qualifier\nbool Parser::parseGNUAsmQualifierListOpt(GNUAsmQualifiers &AQ) {\n  while (true) {\n    // ...\n    if (AQ.setAsmQualifier(A))\n      Diag(Tok.getLocation(), diag::err_asm_duplicate_qual) << GNUAsmQualifiers::getQualifierName(A);"}},
[j]={
[j]={
Line 2,218: Line 2,220:
[e]="__asm used with no assembly instructions",
[e]="__asm used with no assembly instructions",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={"317be45091d7",1348516679,"Replace an assertion with an error for empty __asm statements.\n\nllvm-svn: 164551","Replace an assertion with an error for empty __asm statements.\n\nllvm-svn: 164551"},
[b]={"317be45091d7",1348516679,"Replace an assertion with an error for empty __asm statements.","Replace an assertion with an error for empty __asm statements.\n\nllvm-svn: 164551"},
[h]={{"clang/lib/Parse/ParseStmtAsm.cpp",330,"/// Turn a sequence of our tokens back into a string that we can hand\n/// to the MC asm parser.\nstatic bool buildMSAsmString(Preprocessor &PP, SourceLocation AsmLoc, ArrayRef<Token> AsmToks, SmallVectorImpl<unsigned> &TokOffsets, SmallString<512> &Asm) {\n  // ...\n  for (unsigned i = 0, e = AsmToks.size(); i < e; ++i) {\n    // ...\n    // Don\'t actually write \'__asm\' into the assembly stream.\n    if (Tok.is(tok::kw_asm)) {\n      // Complain about __asm at the end of the stream.\n      if (i + 1 == e) {\n        PP.Diag(AsmLoc, diag::err_asm_empty);"}},
[h]={{"clang/lib/Parse/ParseStmtAsm.cpp",330,"/// Turn a sequence of our tokens back into a string that we can hand\n/// to the MC asm parser.\nstatic bool buildMSAsmString(Preprocessor &PP, SourceLocation AsmLoc, ArrayRef<Token> AsmToks, SmallVectorImpl<unsigned> &TokOffsets, SmallString<512> &Asm) {\n  // ...\n  for (unsigned i = 0, e = AsmToks.size(); i < e; ++i) {\n    // ...\n    // Don\'t actually write \'__asm\' into the assembly stream.\n    if (Tok.is(tok::kw_asm)) {\n      // Complain about __asm at the end of the stream.\n      if (i + 1 == e) {\n        PP.Diag(AsmLoc, diag::err_asm_empty);"}},
[j]={
[j]={
Line 2,230: Line 2,232:
[e]="empty symbolic operand name in inline assembly string",
[e]="empty symbolic operand name in inline assembly string",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{wb,750,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  // ...\n  while (true) {\n    // ...\n    // Handle operands that have asmSymbolicName (e.g., %x[foo]).\n    if (EscapedChar == \'[\') {\n      // ...\n      if (NameEnd == CurPtr)\n        return diag::err_asm_empty_symbolic_operand_name;"}},
[h]={{sb,750,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  // ...\n  while (true) {\n    // ...\n    // Handle operands that have asmSymbolicName (e.g., %x[foo]).\n    if (EscapedChar == \'[\') {\n      // ...\n      if (NameEnd == CurPtr)\n        return diag::err_asm_empty_symbolic_operand_name;"}},
[j]={
[j]={
[N]={"clang/test/Sema/asm.c:81:10: error: empty symbolic operand name in inline assembly string"}
[O]={"clang/test/Sema/asm.c:81:10: error: empty symbolic operand name in inline assembly string"}
}
}
},
},
Line 2,242: Line 2,244:
[e]="asm operand has incomplete type (.*?)",
[e]="asm operand has incomplete type (.*?)",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={"f413f5ed44dd",1367539813,"Move parsing of identifiers in MS-style inline assembly into\nthe actual parser and support arbitrary...","Move parsing of identifiers in MS-style inline assembly into\nthe actual parser and support arbitrary id-expressions.\n\nWe\'re actually basically set up to do arbitrary expressions here\nif we wanted to.\n\nAssembly operands permit things like A::x to be written regardless\nof language mode, which forces us to embellish the evaluation\ncontext logic somewhat.  The logic here under template instantiation\nis incorrect;  we need to preserve the fact that an expression was\nunevaluated.  Of course, template instantiation in general is fishy\nhere because we have no way of delaying semantic analysis in the\nMC parser.  It\'s all just fishy.\n\nI\'ve also fixed the serialization of MS asm statements.\n\nThis commit depends on an LLVM commit.\n\nllvm-svn: 180976"},
[b]={"f413f5ed44dd",1367539813,"Move parsing of identifiers in MS-style inline assembly into","Move parsing of identifiers in MS-style inline assembly into\nthe actual parser and support arbitrary id-expressions.\n\nWe\'re actually basically set up to do arbitrary expressions here\nif we wanted to.\n\nAssembly operands permit things like A::x to be written regardless\nof language mode, which forces us to embellish the evaluation\ncontext logic somewhat.  The logic here under template instantiation\nis incorrect;  we need to preserve the fact that an expression was\nunevaluated.  Of course, template instantiation in general is fishy\nhere because we have no way of delaying semantic analysis in the\nMC parser.  It\'s all just fishy.\n\nI\'ve also fixed the serialization of MS asm statements.\n\nThis commit depends on an LLVM commit.\n\nllvm-svn: 180976"},
[h]={{B,816,"ExprResult Sema::LookupInlineAsmIdentifier(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, UnqualifiedId &Id, bool IsUnevaluatedContext) {\n  // ...\n  if (RequireCompleteExprType(Result.get(), diag::err_asm_incomplete_type)) {"},{B,864,"bool Sema::LookupInlineAsmField(StringRef Base, StringRef Member, unsigned &Offset, SourceLocation AsmLoc) {\n  // ...\n  for (StringRef NextMember : Members) {\n    // ...\n    if (RequireCompleteType(AsmLoc, QualType(RT, 0), diag::err_asm_incomplete_type))"}}
[h]={{D,816,"ExprResult Sema::LookupInlineAsmIdentifier(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, UnqualifiedId &Id, bool IsUnevaluatedContext) {\n  // ...\n  if (RequireCompleteExprType(Result.get(), diag::err_asm_incomplete_type)) {"},{D,864,"bool Sema::LookupInlineAsmField(StringRef Base, StringRef Member, unsigned &Offset, SourceLocation AsmLoc) {\n  // ...\n  for (StringRef NextMember : Members) {\n    // ...\n    if (RequireCompleteType(AsmLoc, QualType(RT, 0), diag::err_asm_incomplete_type))"}}
},
},
["err_asm_input_duplicate_match"]={
["err_asm_input_duplicate_match"]={
Line 2,251: Line 2,253:
[e]="more than one input constraint matches the same output \'(.*?)\'",
[e]="more than one input constraint matches the same output \'(.*?)\'",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={"8e261be91106",1442846460,"Fix assertion in inline assembler IR gen\nSeveral inputs may not refer to one output constraint in in...","Fix assertion in inline assembler IR gen\nSeveral inputs may not refer to one output constraint in inline assembler\ninsertions, clang was failing on assertion on such test case.\n\nllvm-svn: 248158"},
[b]={"8e261be91106",1442846460,"Fix assertion in inline assembler IR gen","Fix assertion in inline assembler IR gen\nSeveral inputs may not refer to one output constraint in inline assembler\ninsertions, clang was failing on assertion on such test case.\n\nllvm-svn: 248158"},
[h]={{B,606,"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 (InputMatchedToOutput[TiedTo] != ~0U) {\n      targetDiag(NS->getInputExpr(i)->getBeginLoc(), diag::err_asm_input_duplicate_match) << TiedTo;"}},
[h]={{D,606,"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 (InputMatchedToOutput[TiedTo] != ~0U) {\n      targetDiag(NS->getInputExpr(i)->getBeginLoc(), diag::err_asm_input_duplicate_match) << TiedTo;"}},
[j]={
[j]={
[N]={"clang/test/Sema/asm.c:292:17: error: more than one input constraint matches the same output \'1\'"}
[O]={"clang/test/Sema/asm.c:292:17: error: more than one input constraint matches the same output \'1\'"}
}
}
},
},
Line 2,263: Line 2,265:
[e]="invalid % escape in inline assembly string",
[e]="invalid % escape in inline assembly string",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{wb,663,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  // ...\n  while (true) {\n    // ...\n    // Escaped \"%\" character in asm string.\n    if (CurPtr == StrEnd) {\n      // ...\n      return diag::err_asm_invalid_escape;"},{wb,701,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  // ...\n  while (true) {\n    // ...\n    if (isLetter(EscapedChar)) {\n      if (CurPtr == StrEnd) { // Premature end.\n        // ...\n        return diag::err_asm_invalid_escape;"},{wb,780,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  // ...\n  while (true) {\n    // ...\n    return diag::err_asm_invalid_escape;"}},
[h]={{sb,663,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  // ...\n  while (true) {\n    // ...\n    // Escaped \"%\" character in asm string.\n    if (CurPtr == StrEnd) {\n      // ...\n      return diag::err_asm_invalid_escape;"},{sb,701,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  // ...\n  while (true) {\n    // ...\n    if (isLetter(EscapedChar)) {\n      if (CurPtr == StrEnd) { // Premature end.\n        // ...\n        return diag::err_asm_invalid_escape;"},{sb,780,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  // ...\n  while (true) {\n    // ...\n    return diag::err_asm_invalid_escape;"}},
[j]={
[j]={
[N]={"clang/test/Sema/asm.c:75:9: error: invalid % escape in inline assembly string","clang/test/Sema/asm.c:76:12: error: invalid % escape in inline assembly string","clang/test/Sema/asm.c:135:34: error: invalid % escape in inline assembly string"}
[O]={"clang/test/Sema/asm.c:75:9: error: invalid % escape in inline assembly string","clang/test/Sema/asm.c:76:12: error: invalid % escape in inline assembly string","clang/test/Sema/asm.c:135:34: error: invalid % escape in inline assembly string"}
}
}
},
},
Line 2,275: Line 2,277:
[e]="register \'(.*?)\' unsuitable for global register variables on this target",
[e]="register \'(.*?)\' unsuitable for global register variables on this target",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={"8c26ea663d43",1447805728,"Produce a better diagnostic for global register variables.\n\nCurrently, when there is a global regist...","Produce a better diagnostic for global register variables.\n\nCurrently, when there is a global register variable in a program that\nis bound to an invalid register, clang/llvm prints an error message that\nis not very user-friendly.\n\nThis commit improves the diagnostic and moves the check that used to be\nin the backend to Sema. In addition, it makes changes to error out if\nthe size of the register doesn\'t match the declared variable size.\n\ne.g., volatile register int B asm (\"rbp\");\n\nrdar://problem/23084219\n\nDifferential Revision: http://reviews.llvm.org/D13834\n\nllvm-svn: 253405"},
[b]={"8c26ea663d43",1447805728,"Produce a better diagnostic for global register variables.","Produce a better diagnostic for global register variables.\n\nCurrently, when there is a global register variable in a program that\nis bound to an invalid register, clang/llvm prints an error message that\nis not very user-friendly.\n\nThis commit improves the diagnostic and moves the check that used to be\nin the backend to Sema. In addition, it makes changes to error out if\nthe size of the register doesn\'t match the declared variable size.\n\ne.g., volatile register int B asm (\"rbp\");\n\nrdar://problem/23084219\n\nDifferential Revision: http://reviews.llvm.org/D13834\n\nllvm-svn: 253405"},
[h]={{n,7963,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    // ...\n    if (S->getFnParent() != nullptr) {\n    // ...\n    } else if (SC == SC_Register) {\n      // Global Named register\n      if (DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) {\n        // ...\n        if (!TI.isValidGCCRegisterName(Label))\n        // ...\n        else if (!TI.validateGlobalRegisterVariable(Label, Context.getTypeSize(R), HasSizeMismatch))\n          Diag(E->getExprLoc(), diag::err_asm_invalid_global_var_reg) << Label;"}},
[h]={{m,7963,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    // ...\n    if (S->getFnParent() != nullptr) {\n    // ...\n    } else if (SC == SC_Register) {\n      // Global Named register\n      if (DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) {\n        // ...\n        if (!TI.isValidGCCRegisterName(Label))\n        // ...\n        else if (!TI.validateGlobalRegisterVariable(Label, Context.getTypeSize(R), HasSizeMismatch))\n          Diag(E->getExprLoc(), diag::err_asm_invalid_global_var_reg) << Label;"}},
[j]={
[j]={
[N]={"clang/test/Sema/asm.c:203:22: error: register \'edi\' unsuitable for global register variables on this target"}
[O]={"clang/test/Sema/asm.c:203:22: error: register \'edi\' unsuitable for global register variables on this target"}
}
}
},
},
Line 2,287: Line 2,289:
[e]="invalid input constraint \'(.*?)\' in asm",
[e]="invalid input constraint \'(.*?)\' in asm",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{B,368,"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 = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    // ...\n    if (!Context.getTargetInfo().validateInputConstraint(OutputConstraintInfos, Info)) {\n      targetDiag(Literal->getBeginLoc(), diag::err_asm_invalid_input_constraint) << Info.getConstraintStr();"}},
[h]={{D,368,"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 = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    // ...\n    if (!Context.getTargetInfo().validateInputConstraint(OutputConstraintInfos, Info)) {\n      targetDiag(Literal->getBeginLoc(), diag::err_asm_invalid_input_constraint) << Info.getConstraintStr();"}},
[j]={
[j]={
["clang/test/CodeGen/avr/avr-unsupported-inline-asm-constraints.c"]={"clang/test/CodeGen/avr/avr-unsupported-inline-asm-constraints.c:6:36: error: invalid input constraint \'fo\' in asm","clang/test/CodeGen/avr/avr-unsupported-inline-asm-constraints.c:7:36: error: invalid input constraint \'Nd\' in asm"}
["clang/test/CodeGen/avr/avr-unsupported-inline-asm-constraints.c"]={"clang/test/CodeGen/avr/avr-unsupported-inline-asm-constraints.c:6:36: error: invalid input constraint \'fo\' in asm","clang/test/CodeGen/avr/avr-unsupported-inline-asm-constraints.c:7:36: error: invalid input constraint \'Nd\' in asm"}
Line 2,299: Line 2,301:
[e]="invalid input size for constraint \'(.*?)\'",
[e]="invalid input size for constraint \'(.*?)\'",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={"887b485dbe3d",1352702571,"Check that the input size is correct for the given constraint.\n\nThe \'a\', \'c\', and \'d\' constraints on...","Check that the input size is correct for the given constraint.\n\nThe \'a\', \'c\', and \'d\' constraints on i386 mean a 32-bit register. We cannot\nplace a 64-bit value into the 32-bit register. Error out instead of causing the\ncompiler to spew general badness.\n<rdar://problem/12415959>\n\nllvm-svn: 167717"},
[b]={"887b485dbe3d",1352702571,"Check that the input size is correct for the given constraint.","Check that the input size is correct for the given constraint.\n\nThe \'a\', \'c\', and \'d\' constraints on i386 mean a 32-bit register. We cannot\nplace a 64-bit value into the 32-bit register. Error out instead of causing the\ncompiler to spew general badness.\n<rdar://problem/12415959>\n\nllvm-svn: 167717"},
[h]={{B,461,"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 = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    // ...\n    if (!Context.getTargetInfo().validateInputSize(FeatureMap, Literal->getString(), Size))\n      return targetDiag(InputExpr->getBeginLoc(), diag::err_asm_invalid_input_size) << Info.getConstraintStr();"}},
[h]={{D,461,"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 = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    // ...\n    if (!Context.getTargetInfo().validateInputSize(FeatureMap, Literal->getString(), Size))\n      return targetDiag(InputExpr->getBeginLoc(), diag::err_asm_invalid_input_size) << Info.getConstraintStr();"}},
[j]={
[j]={
["clang/test/CodeGen/X86/mmx-inline-asm-error.c"]={"clang/test/CodeGen/X86/mmx-inline-asm-error.c:7:30: error: invalid input size for constraint \'y\'"}
["clang/test/CodeGen/X86/mmx-inline-asm-error.c"]={"clang/test/CodeGen/X86/mmx-inline-asm-error.c:7:30: error: invalid input size for constraint \'y\'"}
Line 2,311: Line 2,313:
[e]="invalid lvalue in asm input for constraint \'(.*?)\'",
[e]="invalid lvalue in asm input for constraint \'(.*?)\'",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{B,401,"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 = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    // ...\n    // Only allow void types for memory constraints.\n    if (Info.allowsMemory() && !Info.allowsRegister()) {\n      if (CheckAsmLValue(InputExpr, *this))\n        return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_asm_invalid_lvalue_in_input) << Info.getConstraintStr() << InputExpr->getSourceRange());"}},
[h]={{D,401,"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 = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    // ...\n    // Only allow void types for memory constraints.\n    if (Info.allowsMemory() && !Info.allowsRegister()) {\n      if (CheckAsmLValue(InputExpr, *this))\n        return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_asm_invalid_lvalue_in_input) << Info.getConstraintStr() << InputExpr->getSourceRange());"}},
[j]={
[j]={
[N]={"clang/test/Sema/asm.c:58:24: error: invalid lvalue in asm input for constraint \'m\'","clang/test/Sema/asm.c:60:24: error: invalid lvalue in asm input for constraint \'m\'"}
[O]={"clang/test/Sema/asm.c:58:24: error: invalid lvalue in asm input for constraint \'m\'","clang/test/Sema/asm.c:60:24: error: invalid lvalue in asm input for constraint \'m\'"}
}
}
},
},
Line 2,323: Line 2,325:
[e]="invalid lvalue in asm output",
[e]="invalid lvalue in asm output",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{B,339,"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; i != NumOutputs; i++) {\n    // ...\n    default:\n      return StmtError(Diag(OutputExpr->getBeginLoc(), diag::err_asm_invalid_lvalue_in_output) << OutputExpr->getSourceRange());"}},
[h]={{D,339,"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; i != NumOutputs; i++) {\n    // ...\n    default:\n      return StmtError(Diag(OutputExpr->getBeginLoc(), diag::err_asm_invalid_lvalue_in_output) << OutputExpr->getSourceRange());"}},
[j]={
[j]={
["clang/test/SemaCXX/statements.cpp"]={"clang/test/SemaCXX/statements.cpp:25:23: error: invalid lvalue in asm output","clang/test/SemaCXX/statements.cpp:31:21: error: invalid lvalue in asm output"}
["clang/test/SemaCXX/statements.cpp"]={"clang/test/SemaCXX/statements.cpp:25:23: error: invalid lvalue in asm output","clang/test/SemaCXX/statements.cpp:31:21: error: invalid lvalue in asm output"}
Line 2,335: Line 2,337:
[e]="invalid operand number in inline asm string",
[e]="invalid operand number in inline asm string",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{wb,722,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  // ...\n  while (true) {\n    // ...\n    // Handle operands that don\'t have asmSymbolicName (e.g., %x4).\n    if (isDigit(EscapedChar)) {\n      // ...\n      if (N >= NumOperands) {\n        // ...\n        return diag::err_asm_invalid_operand_number;"}},
[h]={{sb,722,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  // ...\n  while (true) {\n    // ...\n    // Handle operands that don\'t have asmSymbolicName (e.g., %x4).\n    if (isDigit(EscapedChar)) {\n      // ...\n      if (N >= NumOperands) {\n        // ...\n        return diag::err_asm_invalid_operand_number;"}},
[j]={
[j]={
[N]={"clang/test/Sema/asm.c:84:9: error: invalid operand number in inline asm string","clang/test/Sema/asm.c:314:15: error: invalid operand number in inline asm string"}
[O]={"clang/test/Sema/asm.c:84:9: error: invalid operand number in inline asm string","clang/test/Sema/asm.c:314:15: error: invalid operand number in inline asm string"}
}
}
},
},
Line 2,347: Line 2,349:
[e]="invalid output constraint \'(.*?)\' in asm",
[e]="invalid output constraint \'(.*?)\' in asm",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{B,277,"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; i != NumOutputs; i++) {\n    // ...\n    if (!Context.getTargetInfo().validateOutputConstraint(Info)) {\n      targetDiag(Literal->getBeginLoc(), diag::err_asm_invalid_output_constraint) << Info.getConstraintStr();"}},
[h]={{D,277,"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; i != NumOutputs; i++) {\n    // ...\n    if (!Context.getTargetInfo().validateOutputConstraint(Info)) {\n      targetDiag(Literal->getBeginLoc(), diag::err_asm_invalid_output_constraint) << Info.getConstraintStr();"}},
[j]={
[j]={
["clang/test/Sema/arm-asm.c"]={"clang/test/Sema/arm-asm.c:5:37: error: invalid output constraint \'=&b\' in asm"}
["clang/test/Sema/arm-asm.c"]={"clang/test/Sema/arm-asm.c:5:37: error: invalid output constraint \'=&b\' in asm"}
Line 2,359: Line 2,361:
[e]="invalid output size for constraint \'(.*?)\'",
[e]="invalid output size for constraint \'(.*?)\'",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={"974131ea8825",1411064238,"[X86, inlineasm] Check that the output size is correct for the given constraint.\n\nllvm-svn: 218064","[X86, inlineasm] Check that the output size is correct for the given constraint.\n\nllvm-svn: 218064"},
[b]={"974131ea8825",1411064238,"[X86, inlineasm] Check that the output size is correct for the given constraint.","[X86, inlineasm] Check that the output size is correct for the given constraint.\n\nllvm-svn: 218064"},
[h]={{B,346,"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; i != NumOutputs; i++) {\n    // ...\n    if (!Context.getTargetInfo().validateOutputSize(FeatureMap, Literal->getString(), Size)) {\n      targetDiag(OutputExpr->getBeginLoc(), diag::err_asm_invalid_output_size) << Info.getConstraintStr();"}},
[h]={{D,346,"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; i != NumOutputs; i++) {\n    // ...\n    if (!Context.getTargetInfo().validateOutputSize(FeatureMap, Literal->getString(), Size)) {\n      targetDiag(OutputExpr->getBeginLoc(), diag::err_asm_invalid_output_size) << Info.getConstraintStr();"}},
[j]={
[j]={
["clang/test/CodeGen/X86/mmx-inline-asm-error.c"]={"clang/test/CodeGen/X86/mmx-inline-asm-error.c:8:29: error: invalid output size for constraint \'=y\'","clang/test/CodeGen/X86/mmx-inline-asm-error.c:9:33: error: invalid output size for constraint \'+y\'"}
["clang/test/CodeGen/X86/mmx-inline-asm-error.c"]={"clang/test/CodeGen/X86/mmx-inline-asm-error.c:8:29: error: invalid output size for constraint \'=y\'","clang/test/CodeGen/X86/mmx-inline-asm-error.c:9:33: error: invalid output size for constraint \'+y\'"}
Line 2,371: Line 2,373:
[e]="invalid type (.*?) in asm (?:input|output)",
[e]="invalid type (.*?) in asm (?:input|output)",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={"60ee88599098",1589228634,"[clang][asm goto][slh] Warn if asm goto + SLH\n\nSummary:\nAsm goto is not supported by SLH. Warn if an...","[clang][asm goto][slh] Warn if asm goto + SLH\n\nSummary:\nAsm goto is not supported by SLH. Warn if an instance of asm goto is detected\nwhile SLH is enabled.\n\nTest included.\n\nReviewed By: jyu2\n\nDifferential Revision: https://reviews.llvm.org/D79743"},
[b]={"60ee88599098",1589228634,"[clang][asm goto][slh] Warn if asm goto + SLH","[clang][asm goto][slh] Warn if asm goto + SLH\n\nSummary:\nAsm goto is not supported by SLH. Warn if an instance of asm goto is detected\nwhile SLH is enabled.\n\nTest included.\n\nReviewed By: jyu2\n\nDifferential Revision: https://reviews.llvm.org/D79743"},
[h]={{B,306,"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; i != NumOutputs; i++) {\n    // ...\n    // Disallow bit-precise integer types, since the backends tend to have\n    // difficulties with abnormal sizes.\n    if (OutputExpr->getType()->isBitIntType())\n      return StmtError(Diag(OutputExpr->getBeginLoc(), diag::err_asm_invalid_type) << OutputExpr->getType() << 0 /*Input*/"},{B,442,"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 = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    // ...\n    if (InputExpr->getType()->isBitIntType())\n      return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_asm_invalid_type) << InputExpr->getType() << 1 /*Output*/"},{B,948,"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      Diag(E->getBeginLoc(), diag::err_asm_invalid_type) << E->getType() << (I < NumOutputs) << E->getSourceRange();"}},
[h]={{D,306,"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; i != NumOutputs; i++) {\n    // ...\n    // Disallow bit-precise integer types, since the backends tend to have\n    // difficulties with abnormal sizes.\n    if (OutputExpr->getType()->isBitIntType())\n      return StmtError(Diag(OutputExpr->getBeginLoc(), diag::err_asm_invalid_type) << OutputExpr->getType() << 0 /*Input*/"},{D,442,"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 = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    // ...\n    if (InputExpr->getType()->isBitIntType())\n      return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_asm_invalid_type) << InputExpr->getType() << 1 /*Output*/"},{D,948,"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      Diag(E->getBeginLoc(), diag::err_asm_invalid_type) << E->getType() << (I < NumOutputs) << E->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCXX/ext-int-asm.cpp"]={"clang/test/SemaCXX/ext-int-asm.cpp:5:20: error: invalid type \'_BitInt(9)\' in asm input","clang/test/SemaCXX/ext-int-asm.cpp:6:15: error: invalid type \'_BitInt(9)\' in asm output","clang/test/SemaCXX/ext-int-asm.cpp:8:18: error: invalid type \'_BitInt(9)\' in asm input","clang/test/SemaCXX/ext-int-asm.cpp:9:18: error: invalid type \'_BitInt(9)\' in asm output"}
["clang/test/SemaCXX/ext-int-asm.cpp"]={"clang/test/SemaCXX/ext-int-asm.cpp:5:20: error: invalid type \'_BitInt(9)\' in asm input","clang/test/SemaCXX/ext-int-asm.cpp:6:15: error: invalid type \'_BitInt(9)\' in asm output","clang/test/SemaCXX/ext-int-asm.cpp:8:18: error: invalid type \'_BitInt(9)\' in asm input","clang/test/SemaCXX/ext-int-asm.cpp:9:18: error: invalid type \'_BitInt(9)\' in asm output"}
Line 2,383: Line 2,385:
[e]="invalid type (.*?) in asm input for constraint \'(.*?)\'",
[e]="invalid type (.*?) in asm input for constraint \'(.*?)\'",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{"clang/lib/CodeGen/CGStmt.cpp",2565,"void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {\n  // ...\n  for (unsigned i = 0, e = S.getNumOutputs(); i != e; i++) {\n    // ...\n    if (!Info.allowsMemory() && IsScalarOrAggregate) {\n      // ...\n      if (llvm::Type *AdjTy = getTargetHooks().adjustInlineAsmType(*this, OutputConstraint, ResultRegTypes.back()))\n      // ...\n      else {\n        CGM.getDiags().Report(S.getAsmLoc(), diag::err_asm_invalid_type_in_input) << OutExpr->getType() << OutputConstraint;"},{"clang/lib/CodeGen/CGStmt.cpp",2694,"void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {\n  // ...\n  for (unsigned i = 0, e = S.getNumInputs(); i != e; i++) {\n    // ...\n    if (llvm::Type *AdjTy = getTargetHooks().adjustInlineAsmType(*this, ReplaceConstraint, Arg->getType()))\n    // ...\n    else\n      CGM.getDiags().Report(S.getAsmLoc(), diag::err_asm_invalid_type_in_input) << InputExpr->getType() << InputConstraint;"},{"clang/lib/Frontend/InterfaceStubFunctionsConsumer.cpp",120,"#endif\n    // ...\n    if (RDO & IsLate) {\n      Instance.getDiagnostics().Report(diag::err_asm_invalid_type_in_input) << \"Generating Interface Stubs is not supported with \""},{"clang/lib/Frontend/InterfaceStubFunctionsConsumer.cpp",234,"#endif\n  // ...\n  bool HandleNamedDecl(const NamedDecl *ND, MangledSymbols &Symbols, int RDO) {\n    // ...\n    Instance.getDiagnostics().Report(diag::err_asm_invalid_type_in_input) << \"Expected a function or function template decl.\";"},{B,434,"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 = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    // ...\n    if (Info.allowsRegister()) {\n      if (InputExpr->getType()->isVoidType()) {\n        return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_asm_invalid_type_in_input) << InputExpr->getType() << Info.getConstraintStr() << InputExpr->getSourceRange());"}},
[h]={{"clang/lib/CodeGen/CGStmt.cpp",2565,"void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {\n  // ...\n  for (unsigned i = 0, e = S.getNumOutputs(); i != e; i++) {\n    // ...\n    if (!Info.allowsMemory() && IsScalarOrAggregate) {\n      // ...\n      if (llvm::Type *AdjTy = getTargetHooks().adjustInlineAsmType(*this, OutputConstraint, ResultRegTypes.back()))\n      // ...\n      else {\n        CGM.getDiags().Report(S.getAsmLoc(), diag::err_asm_invalid_type_in_input) << OutExpr->getType() << OutputConstraint;"},{"clang/lib/CodeGen/CGStmt.cpp",2694,"void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {\n  // ...\n  for (unsigned i = 0, e = S.getNumInputs(); i != e; i++) {\n    // ...\n    if (llvm::Type *AdjTy = getTargetHooks().adjustInlineAsmType(*this, ReplaceConstraint, Arg->getType()))\n    // ...\n    else\n      CGM.getDiags().Report(S.getAsmLoc(), diag::err_asm_invalid_type_in_input) << InputExpr->getType() << InputConstraint;"},{"clang/lib/Frontend/InterfaceStubFunctionsConsumer.cpp",120,"#endif\n    // ...\n    if (RDO & IsLate) {\n      Instance.getDiagnostics().Report(diag::err_asm_invalid_type_in_input) << \"Generating Interface Stubs is not supported with \""},{"clang/lib/Frontend/InterfaceStubFunctionsConsumer.cpp",234,"#endif\n  // ...\n  bool HandleNamedDecl(const NamedDecl *ND, MangledSymbols &Symbols, int RDO) {\n    // ...\n    Instance.getDiagnostics().Report(diag::err_asm_invalid_type_in_input) << \"Expected a function or function template decl.\";"},{D,434,"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 = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    // ...\n    if (Info.allowsRegister()) {\n      if (InputExpr->getType()->isVoidType()) {\n        return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_asm_invalid_type_in_input) << InputExpr->getType() << Info.getConstraintStr() << InputExpr->getSourceRange());"}},
[j]={
[j]={
[N]={"clang/test/Sema/asm.c:8:25: error: invalid type \'void\' in asm input for constraint \'a\'","clang/test/Sema/asm.c:53:24: error: invalid type \'const volatile void\' in asm input for constraint \'r\'","clang/test/Sema/asm.c:57:24: error: invalid type \'void\' in asm input for constraint \'r\'"}
[O]={"clang/test/Sema/asm.c:8:25: error: invalid type \'void\' in asm input for constraint \'a\'","clang/test/Sema/asm.c:53:24: error: invalid type \'const volatile void\' in asm input for constraint \'r\'","clang/test/Sema/asm.c:57:24: error: invalid type \'void\' in asm input for constraint \'r\'"}
}
}
},
},
Line 2,396: Line 2,398:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"93dbeae0f734",1409869008,"Don\'t allow inline asm statements to reference parameters in naked functions\n\nDifferential Revision:...","Don\'t allow inline asm statements to reference parameters in naked functions\n\nDifferential Revision: http://reviews.llvm.org/D5183\n\nllvm-svn: 217200"},
[b]={"93dbeae0f734",1409869008,"Don\'t allow inline asm statements to reference parameters in naked functions","Don\'t allow inline asm statements to reference parameters in naked functions\n\nDifferential Revision: http://reviews.llvm.org/D5183\n\nllvm-svn: 217200"},
[h]={{B,149,"static bool CheckNakedParmReference(Expr *E, Sema &S) {\n  // ...\n  while (WorkList.size()) {\n    // ...\n    if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n      if (isa<ParmVarDecl>(DRE->getDecl())) {\n        S.Diag(DRE->getBeginLoc(), diag::err_asm_naked_parm_ref);"}},
[h]={{D,149,"static bool CheckNakedParmReference(Expr *E, Sema &S) {\n  // ...\n  while (WorkList.size()) {\n    // ...\n    if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n      if (isa<ParmVarDecl>(DRE->getDecl())) {\n        S.Diag(DRE->getBeginLoc(), diag::err_asm_naked_parm_ref);"}},
[j]={
[j]={
["clang/test/Sema/attr-naked.c"]={"clang/test/Sema/attr-naked.c:41:19: error: parameter references not allowed in naked functions","clang/test/Sema/attr-naked.c:48:20: error: parameter references not allowed in naked functions"}
["clang/test/Sema/attr-naked.c"]={"clang/test/Sema/attr-naked.c:41:19: error: parameter references not allowed in naked functions","clang/test/Sema/attr-naked.c:48:20: error: parameter references not allowed in naked functions"}
Line 2,408: Line 2,410:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"71ac240620c4",1423002958,"Diagnose CXX \'this\' pointer reference in funcs with naked attr\n\nClang asserts for this pointer refer...","Diagnose CXX \'this\' pointer reference in funcs with naked attr\n\nClang asserts for this pointer reference in asms of naked functions.\nThis patch diagnoses if this pointer reference is used.\n\nDifferential Revision: http://reviews.llvm.org/D7329\n\nllvm-svn: 228052"},
[b]={"71ac240620c4",1423002958,"Diagnose CXX \'this\' pointer reference in funcs with naked attr","Diagnose CXX \'this\' pointer reference in funcs with naked attr\n\nClang asserts for this pointer reference in asms of naked functions.\nThis patch diagnoses if this pointer reference is used.\n\nDifferential Revision: http://reviews.llvm.org/D7329\n\nllvm-svn: 228052"},
[h]={{B,143,"static bool CheckNakedParmReference(Expr *E, Sema &S) {\n  // ...\n  while (WorkList.size()) {\n    // ...\n    if (isa<CXXThisExpr>(E)) {\n      S.Diag(E->getBeginLoc(), diag::err_asm_naked_this_ref);"}},
[h]={{D,143,"static bool CheckNakedParmReference(Expr *E, Sema &S) {\n  // ...\n  while (WorkList.size()) {\n    // ...\n    if (isa<CXXThisExpr>(E)) {\n      S.Diag(E->getBeginLoc(), diag::err_asm_naked_this_ref);"}},
[j]={
[j]={
["clang/test/Sema/attr-naked.cpp"]={"clang/test/Sema/attr-naked.cpp:12:28: error: \'this\' pointer references not allowed in naked functions"}
["clang/test/Sema/attr-naked.cpp"]={"clang/test/Sema/attr-naked.cpp:12:28: error: \'this\' pointer references not allowed in naked functions"}
Line 2,419: Line 2,421:
[e]="reference to a (?:bit\\-field|vector element|global register variable) in asm (?:input|output) with a memory constraint \'(.*?)\'",
[e]="reference to a (?:bit\\-field|vector element|global register variable) in asm (?:input|output) with a memory constraint \'(.*?)\'",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={"d9eab9cc130d",1438598290,"Additional fix for PR14269: Crash on vector elements / global register vars in inline assembler.\n\nCo...","Additional fix for PR14269: Crash on vector elements / global register vars in inline assembler.\n\nCompiler crashed when vector elements / global register vars were used in inline assembler with \"m\" restriction. This patch fixes this.\n\nDifferential Revision: http://reviews.llvm.org/D10476\n\nllvm-svn: 243870"},
[b]={"d9eab9cc130d",1438598290,"Additional fix for PR14269: Crash on vector elements / global register vars in inline assembler.","Additional fix for PR14269: Crash on vector elements / global register vars in inline assembler.\n\nCompiler crashed when vector elements / global register vars were used in inline assembler with \"m\" restriction. This patch fixes this.\n\nDifferential Revision: http://reviews.llvm.org/D10476\n\nllvm-svn: 243870"},
[h]={{B,184,"/// Returns true if given expression is not compatible with inline\n/// assembly\'s memory constraint; false otherwise.\nstatic bool checkExprMemoryConstraintCompat(Sema &S, Expr *E, TargetInfo::ConstraintInfo &Info, bool is_input_expr) {\n  // ...\n  if (EType != ExprSafeType) {\n    S.Diag(E->getBeginLoc(), diag::err_asm_non_addr_value_in_memory_constraint) << EType << is_input_expr << Info.getConstraintStr() << E->getSourceRange();"}},
[h]={{D,184,"/// Returns true if given expression is not compatible with inline\n/// assembly\'s memory constraint; false otherwise.\nstatic bool checkExprMemoryConstraintCompat(Sema &S, Expr *E, TargetInfo::ConstraintInfo &Info, bool is_input_expr) {\n  // ...\n  if (EType != ExprSafeType) {\n    S.Diag(E->getBeginLoc(), diag::err_asm_non_addr_value_in_memory_constraint) << EType << is_input_expr << Info.getConstraintStr() << E->getSourceRange();"}},
[j]={
[j]={
[N]={"clang/test/Sema/asm.c:268:20: error: reference to a bit-field in asm input with a memory constraint \'=rm\'","clang/test/Sema/asm.c:271:18: error: reference to a bit-field in asm output with a memory constraint \'m\'","clang/test/Sema/asm.c:273:20: error: reference to a vector element in asm input with a memory constraint \'=rm\'","clang/test/Sema/asm.c:276:18: error: reference to a vector element in asm output with a memory constraint \'m\'","clang/test/Sema/asm.c:278:20: error: reference to a global register variable in asm input with a memory constraint \'=rm\'","clang/test/Sema/asm.c:281:18: error: reference to a global register variable in asm output with a memory constraint \'m\'"}
[O]={"clang/test/Sema/asm.c:268:20: error: reference to a bit-field in asm input with a memory constraint \'=rm\'","clang/test/Sema/asm.c:271:18: error: reference to a bit-field in asm output with a memory constraint \'m\'","clang/test/Sema/asm.c:273:20: error: reference to a vector element in asm input with a memory constraint \'=rm\'","clang/test/Sema/asm.c:276:18: error: reference to a vector element in asm output with a memory constraint \'m\'","clang/test/Sema/asm.c:278:20: error: reference to a global register variable in asm input with a memory constraint \'=rm\'","clang/test/Sema/asm.c:281:18: error: reference to a global register variable in asm output with a memory constraint \'m\'"}
}
}
},
},
Line 2,431: Line 2,433:
[e]="cannot use (?:unicode|wide|an empty) string literal in \'asm\'",
[e]="cannot use (?:unicode|wide|an empty) string literal in \'asm\'",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"65cdbf58a7dc",1322786146,"Diagnose use of wide string literal in \'asm\' instead of crashing.  Fixes <rdar://problem/10465079>.\n...","Diagnose use of wide string literal in \'asm\' instead of crashing.  Fixes <rdar://problem/10465079>.\n\nllvm-svn: 145656"},
[b]={"65cdbf58a7dc",1322786146,"Diagnose use of wide string literal in \'asm\' instead of crashing.  Fixes <rdar://problem/10465079>.","Diagnose use of wide string literal in \'asm\' instead of crashing.  Fixes <rdar://problem/10465079>.\n\nllvm-svn: 145656"},
[h]={{ac,1632,"/// ParseAsmStringLiteral - This is just a normal string-literal, but is not\n/// allowed to be a wide string, and is not subject to character translation.\n/// Unlike GCC, we also diagnose an empty string literal when parsing for an\n/// asm label as opposed to an asm statement, because such a construct does not\n/// behave well.\n///\n/// [GNU] asm-string-literal:\n///        string-literal\n///\nExprResult Parser::ParseAsmStringLiteral(bool ForAsmLabel) {\n  // ...\n  if (!AsmString.isInvalid()) {\n    // ...\n    if (!SL->isOrdinary()) {\n      Diag(Tok, diag::err_asm_operand_wide_string_literal) << SL->isWide() << SL->getSourceRange();"},{ac,1638,"/// ParseAsmStringLiteral - This is just a normal string-literal, but is not\n/// allowed to be a wide string, and is not subject to character translation.\n/// Unlike GCC, we also diagnose an empty string literal when parsing for an\n/// asm label as opposed to an asm statement, because such a construct does not\n/// behave well.\n///\n/// [GNU] asm-string-literal:\n///        string-literal\n///\nExprResult Parser::ParseAsmStringLiteral(bool ForAsmLabel) {\n  // ...\n  if (!AsmString.isInvalid()) {\n    // ...\n    if (ForAsmLabel && SL->getString().empty()) {\n      Diag(Tok, diag::err_asm_operand_wide_string_literal) << 2 /* an empty */ << SL->getSourceRange();"}},
[h]={{ec,1632,"/// ParseAsmStringLiteral - This is just a normal string-literal, but is not\n/// allowed to be a wide string, and is not subject to character translation.\n/// Unlike GCC, we also diagnose an empty string literal when parsing for an\n/// asm label as opposed to an asm statement, because such a construct does not\n/// behave well.\n///\n/// [GNU] asm-string-literal:\n///        string-literal\n///\nExprResult Parser::ParseAsmStringLiteral(bool ForAsmLabel) {\n  // ...\n  if (!AsmString.isInvalid()) {\n    // ...\n    if (!SL->isOrdinary()) {\n      Diag(Tok, diag::err_asm_operand_wide_string_literal) << SL->isWide() << SL->getSourceRange();"},{ec,1638,"/// ParseAsmStringLiteral - This is just a normal string-literal, but is not\n/// allowed to be a wide string, and is not subject to character translation.\n/// Unlike GCC, we also diagnose an empty string literal when parsing for an\n/// asm label as opposed to an asm statement, because such a construct does not\n/// behave well.\n///\n/// [GNU] asm-string-literal:\n///        string-literal\n///\nExprResult Parser::ParseAsmStringLiteral(bool ForAsmLabel) {\n  // ...\n  if (!AsmString.isInvalid()) {\n    // ...\n    if (ForAsmLabel && SL->getString().empty()) {\n      Diag(Tok, diag::err_asm_operand_wide_string_literal) << 2 /* an empty */ << SL->getSourceRange();"}},
[j]={
[j]={
["clang/test/Parser/asm.c"]={"clang/test/Parser/asm.c:20:24: error: cannot use an empty string literal in \'asm\'","clang/test/Parser/asm.c:29:20: error: cannot use wide string literal in \'asm\'"}
["clang/test/Parser/asm.c"]={"clang/test/Parser/asm.c:20:24: error: cannot use an empty string literal in \'asm\'","clang/test/Parser/asm.c:29:20: error: cannot use wide string literal in \'asm\'"}
Line 2,443: Line 2,445:
[e]="cannot pass a pointer\\-to\\-member through register\\-constrained inline assembly parameter",
[e]="cannot pass a pointer\\-to\\-member through register\\-constrained inline assembly parameter",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={M,1625925174,K,L},
[b]={N,1625925174,M,L},
[h]={{B,385,"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 = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    // ...\n    if (InputExpr->getType()->isMemberPointerType())\n      return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_asm_pmf_through_constraint_not_permitted) << InputExpr->getSourceRange());"}},
[h]={{D,385,"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 = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    // ...\n    if (InputExpr->getType()->isMemberPointerType())\n      return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_asm_pmf_through_constraint_not_permitted) << InputExpr->getSourceRange());"}},
[j]={
[j]={
["clang/test/Sema/gnu-asm-pmf.cpp"]={"clang/test/Sema/gnu-asm-pmf.cpp:34:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter","clang/test/Sema/gnu-asm-pmf.cpp:36:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter","clang/test/Sema/gnu-asm-pmf.cpp:38:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter","clang/test/Sema/gnu-asm-pmf.cpp:40:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter","clang/test/Sema/gnu-asm-pmf.cpp:42:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter","clang/test/Sema/gnu-asm-pmf.cpp:44:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter"}
["clang/test/Sema/gnu-asm-pmf.cpp"]={"clang/test/Sema/gnu-asm-pmf.cpp:34:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter","clang/test/Sema/gnu-asm-pmf.cpp:36:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter","clang/test/Sema/gnu-asm-pmf.cpp:38:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter","clang/test/Sema/gnu-asm-pmf.cpp:40:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter","clang/test/Sema/gnu-asm-pmf.cpp:42:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter","clang/test/Sema/gnu-asm-pmf.cpp:44:36: error: cannot pass a pointer-to-member through register-constrained inline assembly parameter"}
Line 2,455: Line 2,457:
[e]="expected \'volatile\', \'inline\', \'goto\', or \'\\(\'",
[e]="expected \'volatile\', \'inline\', \'goto\', or \'\\(\'",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={"f08df464ae89",1582039343,"[OPENMP50]Add initial support for OpenMP 5.0 iterator.\n\nAdded basic parsing/semantic analysis/(de)se...","[OPENMP50]Add initial support for OpenMP 5.0 iterator.\n\nAdded basic parsing/semantic analysis/(de)serialization support for\niterator expression introduced in OpenMP 5.0."},
[b]={"f08df464ae89",1582039343,"[OPENMP50]Add initial support for OpenMP 5.0 iterator.","[OPENMP50]Add initial support for OpenMP 5.0 iterator.\n\nAdded basic parsing/semantic analysis/(de)serialization support for\niterator expression introduced in OpenMP 5.0."},
[h]={{"clang/lib/Parse/ParseStmtAsm.cpp",689,"/// parseGNUAsmQualifierListOpt - Parse a GNU extended asm qualifier list.\n///      asm-qualifier:\n///        volatile\n///        inline\n///        goto\n///\n///      asm-qualifier-list:\n///        asm-qualifier\n///        asm-qualifier-list asm-qualifier\nbool Parser::parseGNUAsmQualifierListOpt(GNUAsmQualifiers &AQ) {\n  while (true) {\n    // ...\n    if (A == GNUAsmQualifiers::AQ_unspecified) {\n      if (Tok.isNot(tok::l_paren)) {\n        Diag(Tok.getLocation(), diag::err_asm_qualifier_ignored);"}},
[h]={{"clang/lib/Parse/ParseStmtAsm.cpp",689,"/// parseGNUAsmQualifierListOpt - Parse a GNU extended asm qualifier list.\n///      asm-qualifier:\n///        volatile\n///        inline\n///        goto\n///\n///      asm-qualifier-list:\n///        asm-qualifier\n///        asm-qualifier-list asm-qualifier\nbool Parser::parseGNUAsmQualifierListOpt(GNUAsmQualifiers &AQ) {\n  while (true) {\n    // ...\n    if (A == GNUAsmQualifiers::AQ_unspecified) {\n      if (Tok.isNot(tok::l_paren)) {\n        Diag(Tok.getLocation(), diag::err_asm_qualifier_ignored);"}},
[j]={
[j]={
Line 2,467: Line 2,469:
[e]="size of register \'(.*?)\' does not match variable size",
[e]="size of register \'(.*?)\' does not match variable size",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={"8c26ea663d43",1447805728,"Produce a better diagnostic for global register variables.\n\nCurrently, when there is a global regist...","Produce a better diagnostic for global register variables.\n\nCurrently, when there is a global register variable in a program that\nis bound to an invalid register, clang/llvm prints an error message that\nis not very user-friendly.\n\nThis commit improves the diagnostic and moves the check that used to be\nin the backend to Sema. In addition, it makes changes to error out if\nthe size of the register doesn\'t match the declared variable size.\n\ne.g., volatile register int B asm (\"rbp\");\n\nrdar://problem/23084219\n\nDifferential Revision: http://reviews.llvm.org/D13834\n\nllvm-svn: 253405"},
[b]={"8c26ea663d43",1447805728,"Produce a better diagnostic for global register variables.","Produce a better diagnostic for global register variables.\n\nCurrently, when there is a global register variable in a program that\nis bound to an invalid register, clang/llvm prints an error message that\nis not very user-friendly.\n\nThis commit improves the diagnostic and moves the check that used to be\nin the backend to Sema. In addition, it makes changes to error out if\nthe size of the register doesn\'t match the declared variable size.\n\ne.g., volatile register int B asm (\"rbp\");\n\nrdar://problem/23084219\n\nDifferential Revision: http://reviews.llvm.org/D13834\n\nllvm-svn: 253405"},
[h]={{n,7965,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    // ...\n    if (S->getFnParent() != nullptr) {\n    // ...\n    } else if (SC == SC_Register) {\n      // Global Named register\n      if (DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) {\n        // ...\n        if (!TI.isValidGCCRegisterName(Label))\n        // ...\n        else if (!TI.validateGlobalRegisterVariable(Label, Context.getTypeSize(R), HasSizeMismatch))\n        // ...\n        else if (HasSizeMismatch)\n          Diag(E->getExprLoc(), diag::err_asm_register_size_mismatch) << Label;"}},
[h]={{m,7965,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    // ...\n    if (S->getFnParent() != nullptr) {\n    // ...\n    } else if (SC == SC_Register) {\n      // Global Named register\n      if (DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) {\n        // ...\n        if (!TI.isValidGCCRegisterName(Label))\n        // ...\n        else if (!TI.validateGlobalRegisterVariable(Label, Context.getTypeSize(R), HasSizeMismatch))\n        // ...\n        else if (HasSizeMismatch)\n          Diag(E->getExprLoc(), diag::err_asm_register_size_mismatch) << Label;"}},
[j]={
[j]={
[N]={"clang/test/Sema/asm.c:204:28: error: size of register \'esp\' does not match variable size"}
[O]={"clang/test/Sema/asm.c:204:28: error: size of register \'esp\' does not match variable size"}
}
}
},
},
Line 2,479: Line 2,481:
[e]="unsupported inline asm\\: input with type (?:(.*?) matching output with type (.*?)|)",
[e]="unsupported inline asm\\: input with type (?:(.*?) matching output with type (.*?)|)",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={"574428e4db41",1240770144,"implement PR4077: [Linux kernel] inscrutable error on inline asm input/output constraint mismatch\nBe...","implement PR4077: [Linux kernel] inscrutable error on inline asm input/output constraint mismatch\nBefore we emitted:\n\n$ clang t.c -S -m64 \nllvm: error: Unsupported asm: input constraint with a matching output constraint of incompatible type!\n\nNow we produce:\n$ clang t.c -S -m64 \nt.c:5:40: error: unsupported inline asm: input with type \'unsigned long\' matching output with type \'int\'\n  asm volatile(\"foo \" : \"=a\" (a) :\"0\" (b));\n                            ~~~      ~^~\n\nllvm-svn: 70142"},
[b]={"574428e4db41",1240770144,"implement PR4077: [Linux kernel] inscrutable error on inline asm input/output constraint mismatch","implement PR4077: [Linux kernel] inscrutable error on inline asm input/output constraint mismatch\nBefore we emitted:\n\n$ clang t.c -S -m64 \nllvm: error: Unsupported asm: input constraint with a matching output constraint of incompatible type!\n\nNow we produce:\n$ clang t.c -S -m64 \nt.c:5:40: error: unsupported inline asm: input with type \'unsigned long\' matching output with type \'int\'\n  asm volatile(\"foo \" : \"=a\" (a) :\"0\" (b));\n                            ~~~      ~^~\n\nllvm-svn: 70142"},
[h]={{B,705,"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    targetDiag(InputExpr->getBeginLoc(), diag::err_asm_tying_incompatible_types) << InTy << OutTy << OutputExpr->getSourceRange() << InputExpr->getSourceRange();"}},
[h]={{D,705,"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    targetDiag(InputExpr->getBeginLoc(), diag::err_asm_tying_incompatible_types) << InTy << OutTy << OutputExpr->getSourceRange() << InputExpr->getSourceRange();"}},
[j]={
[j]={
[N]={"clang/test/Sema/asm.c:91:45: error: unsupported inline asm: input with type \'unsigned long long\' matching output with type \'int\'","clang/test/Sema/asm.c:359:29: error: unsupported inline asm: input with type \'st_size64\' (aka \'struct _st_size64\') matching output with type \'long long\'","clang/test/Sema/asm.c:361:29: error: unsupported inline asm: input with type \'st_size32\' (aka \'struct _st_size32\') matching output with type \'st_size64\' (aka \'struct _st_size64\')","clang/test/Sema/asm.c:366:29: error: unsupported inline asm: input with type \'st_size128\' (aka \'struct _st_size128\') matching output with type \'long long\'"}
[O]={"clang/test/Sema/asm.c:91:45: error: unsupported inline asm: input with type \'unsigned long long\' matching output with type \'int\'","clang/test/Sema/asm.c:359:29: error: unsupported inline asm: input with type \'st_size64\' (aka \'struct _st_size64\') matching output with type \'long long\'","clang/test/Sema/asm.c:361:29: error: unsupported inline asm: input with type \'st_size32\' (aka \'struct _st_size32\') matching output with type \'st_size64\' (aka \'struct _st_size64\')","clang/test/Sema/asm.c:366:29: error: unsupported inline asm: input with type \'st_size128\' (aka \'struct _st_size128\') matching output with type \'long long\'"}
}
}
},
},
Line 2,491: Line 2,493:
[e]="asm constraint has an unexpected number of alternatives\\: (.*?) vs (.*?)",
[e]="asm constraint has an unexpected number of alternatives\\: (.*?) vs (.*?)",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={"c63fa612e46e",1419826199,"Sema: Forbid inconsistent constraint alternatives\n\nVerify that asm constraints have the same number ...","Sema: Forbid inconsistent constraint alternatives\n\nVerify that asm constraints have the same number of alternatives\n\nllvm-svn: 224911"},
[b]={"c63fa612e46e",1419826199,"Sema: Forbid inconsistent constraint alternatives","Sema: Forbid inconsistent constraint alternatives\n\nVerify that asm constraints have the same number of alternatives\n\nllvm-svn: 224911"},
[h]={{B,572,"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 = OutputConstraintInfos.size(); i != e; ++i) {\n    // ...\n    if (NumAlternatives == ~0U) {\n    // ...\n    } else if (NumAlternatives != AltCount) {\n      targetDiag(NS->getOutputExpr(i)->getBeginLoc(), diag::err_asm_unexpected_constraint_alternatives) << NumAlternatives << AltCount;"},{B,587,"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 (NumAlternatives == ~0U) {\n    // ...\n    } else if (NumAlternatives != AltCount) {\n      targetDiag(NS->getInputExpr(i)->getBeginLoc(), diag::err_asm_unexpected_constraint_alternatives) << NumAlternatives << AltCount;"}},
[h]={{D,572,"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 = OutputConstraintInfos.size(); i != e; ++i) {\n    // ...\n    if (NumAlternatives == ~0U) {\n    // ...\n    } else if (NumAlternatives != AltCount) {\n      targetDiag(NS->getOutputExpr(i)->getBeginLoc(), diag::err_asm_unexpected_constraint_alternatives) << NumAlternatives << AltCount;"},{D,587,"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 (NumAlternatives == ~0U) {\n    // ...\n    } else if (NumAlternatives != AltCount) {\n      targetDiag(NS->getInputExpr(i)->getBeginLoc(), diag::err_asm_unexpected_constraint_alternatives) << NumAlternatives << AltCount;"}},
[j]={
[j]={
[N]={"clang/test/Sema/asm.c:217:21: error: asm constraint has an unexpected number of alternatives: 1 vs 2"}
[O]={"clang/test/Sema/asm.c:217:21: error: asm constraint has an unexpected number of alternatives: 1 vs 2"}
}
}
},
},
Line 2,503: Line 2,505:
[e]="unknown register name \'(.*?)\' in asm",
[e]="unknown register name \'(.*?)\' in asm",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{n,7945,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    // ...\n    if (S->getFnParent() != nullptr) {\n      // ...\n      case SC_Register:\n        // Local Named register\n        if (!Context.getTargetInfo().isValidGCCRegisterName(Label) && DeclAttrsMatchCUDAMode(getLangOpts(), getCurFunctionDecl()))\n          Diag(E->getExprLoc(), diag::err_asm_unknown_register_name) << Label;"},{n,7959,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    // ...\n    if (S->getFnParent() != nullptr) {\n    // ...\n    } else if (SC == SC_Register) {\n      // Global Named register\n      if (DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) {\n        // ...\n        if (!TI.isValidGCCRegisterName(Label))\n          Diag(E->getExprLoc(), diag::err_asm_unknown_register_name) << Label;"},{B,475,"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  // Check that the clobbers are valid.\n  for (unsigned i = 0; i != NumClobbers; i++) {\n    // ...\n    if (!Context.getTargetInfo().isValidClobber(Clobber)) {\n      targetDiag(Literal->getBeginLoc(), diag::err_asm_unknown_register_name) << Clobber;"}},
[h]={{m,7945,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    // ...\n    if (S->getFnParent() != nullptr) {\n      // ...\n      case SC_Register:\n        // Local Named register\n        if (!Context.getTargetInfo().isValidGCCRegisterName(Label) && DeclAttrsMatchCUDAMode(getLangOpts(), getCurFunctionDecl()))\n          Diag(E->getExprLoc(), diag::err_asm_unknown_register_name) << Label;"},{m,7959,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n    // ...\n    if (S->getFnParent() != nullptr) {\n    // ...\n    } else if (SC == SC_Register) {\n      // Global Named register\n      if (DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) {\n        // ...\n        if (!TI.isValidGCCRegisterName(Label))\n          Diag(E->getExprLoc(), diag::err_asm_unknown_register_name) << Label;"},{D,475,"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  // Check that the clobbers are valid.\n  for (unsigned i = 0; i != NumClobbers; i++) {\n    // ...\n    if (!Context.getTargetInfo().isValidClobber(Clobber)) {\n      targetDiag(Literal->getBeginLoc(), diag::err_asm_unknown_register_name) << Clobber;"}},
[j]={
[j]={
[N]={"clang/test/Sema/asm.c:26:20: error: unknown register name \'foo\' in asm","clang/test/Sema/asm.c:28:20: error: unknown register name \'204\' in asm","clang/test/Sema/asm.c:29:20: error: unknown register name \'-1\' in asm","clang/test/Sema/asm.c:30:20: error: unknown register name \'+1\' in asm","clang/test/Sema/asm.c:116:24: error: unknown register name \'rr_asm\' in asm","clang/test/Sema/asm.c:117:25: error: unknown register name \'%\' in asm","clang/test/Sema/asm.c:129:26: error: unknown register name \'cc\' in asm"}
[O]={"clang/test/Sema/asm.c:26:20: error: unknown register name \'foo\' in asm","clang/test/Sema/asm.c:28:20: error: unknown register name \'204\' in asm","clang/test/Sema/asm.c:29:20: error: unknown register name \'-1\' in asm","clang/test/Sema/asm.c:30:20: error: unknown register name \'+1\' in asm","clang/test/Sema/asm.c:116:24: error: unknown register name \'rr_asm\' in asm","clang/test/Sema/asm.c:117:25: error: unknown register name \'%\' in asm","clang/test/Sema/asm.c:129:26: error: unknown register name \'cc\' in asm"}
}
}
},
},
Line 2,515: Line 2,517:
[e]="unknown symbolic operand name in inline assembly string",
[e]="unknown symbolic operand name in inline assembly string",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{wb,758,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  // ...\n  while (true) {\n    // ...\n    // Handle operands that have asmSymbolicName (e.g., %x[foo]).\n    if (EscapedChar == \'[\') {\n      // ...\n      if (N == -1) {\n        // ...\n        return diag::err_asm_unknown_symbolic_operand_name;"}},
[h]={{sb,758,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  // ...\n  while (true) {\n    // ...\n    // Handle operands that have asmSymbolicName (e.g., %x[foo]).\n    if (EscapedChar == \'[\') {\n      // ...\n      if (N == -1) {\n        // ...\n        return diag::err_asm_unknown_symbolic_operand_name;"}},
[j]={
[j]={
[N]={"clang/test/Sema/asm.c:79:11: error: unknown symbolic operand name in inline assembly string"}
[O]={"clang/test/Sema/asm.c:79:11: error: unknown symbolic operand name in inline assembly string"}
}
}
},
},
Line 2,527: Line 2,529:
[e]="unterminated symbolic operand name in inline assembly string",
[e]="unterminated symbolic operand name in inline assembly string",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{wb,748,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  // ...\n  while (true) {\n    // ...\n    // Handle operands that have asmSymbolicName (e.g., %x[foo]).\n    if (EscapedChar == \'[\') {\n      // ...\n      if (NameEnd == nullptr)\n        return diag::err_asm_unterminated_symbolic_operand_name;"}},
[h]={{sb,748,"/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing\n/// it into pieces.  If the asm string is erroneous, emit errors and return\n/// true, otherwise return false.\nunsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece> &Pieces, const ASTContext &C, unsigned &DiagOffs) const {\n  // ...\n  while (true) {\n    // ...\n    // Handle operands that have asmSymbolicName (e.g., %x[foo]).\n    if (EscapedChar == \'[\') {\n      // ...\n      if (NameEnd == nullptr)\n        return diag::err_asm_unterminated_symbolic_operand_name;"}},
[j]={
[j]={
[N]={"clang/test/Sema/asm.c:80:10: error: unterminated symbolic operand name in inline assembly string"}
[O]={"clang/test/Sema/asm.c:80:10: error: unterminated symbolic operand name in inline assembly string"}
}
}
},
},
Line 2,539: Line 2,541:
[e]="unwind clobber can\'t be used with asm goto",
[e]="unwind clobber can\'t be used with asm goto",
[f]=a,
[f]=a,
[g]=z,
[g]=A,
[b]={Tb,1615397021,Ub,Vb},
[b]={dc,1615397021,cc,fc},
[h]={{B,490,"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  // Using unwind clobber and asm-goto together is not supported right now.\n  if (UnwindClobberLoc && NumLabels > 0) {\n    targetDiag(*UnwindClobberLoc, diag::err_asm_unwind_and_goto);"}}
[h]={{D,490,"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  // Using unwind clobber and asm-goto together is not supported right now.\n  if (UnwindClobberLoc && NumLabels > 0) {\n    targetDiag(*UnwindClobberLoc, diag::err_asm_unwind_and_goto);"}}
},
},
["err_assoc_compatible_types"]={
["err_assoc_compatible_types"]={
Line 2,549: Line 2,551:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"91147596414d",1302827748,"C1X: implement generic selections\n\nAs an extension, generic selection support has been added for all...","C1X: implement generic selections\n\nAs an extension, generic selection support has been added for all\nsupported languages.  The syntax is the same as for C1X.\n\nllvm-svn: 129554"},
[b]={"91147596414d",1302827748,"C1X: implement generic selections","C1X: implement generic selections\n\nAs an extension, generic selection support has been added for all\nsupported languages.  The syntax is the same as for C1X.\n\nllvm-svn: 129554"},
[h]={{u,1778,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  // ...\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    // ...\n    if (Types[i]) {\n      // ...\n      if (Types[i]->getType()->isDependentType()) {\n      // ...\n      } else {\n        // ...\n        // C11 6.5.1.1p2 \"No two generic associations in the same generic\n        // selection shall specify compatible types.\"\n        for (unsigned j = i + 1; j < NumAssocs; ++j)\n          if (Types[j] && !Types[j]->getType()->isDependentType() && Context.typesAreCompatible(Types[i]->getType(), Types[j]->getType())) {\n            Diag(Types[j]->getTypeLoc().getBeginLoc(), diag::err_assoc_compatible_types) << Types[j]->getTypeLoc().getSourceRange() << Types[j]->getType() << Types[i]->getType();"}},
[h]={{v,1778,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  // ...\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    // ...\n    if (Types[i]) {\n      // ...\n      if (Types[i]->getType()->isDependentType()) {\n      // ...\n      } else {\n        // ...\n        // C11 6.5.1.1p2 \"No two generic associations in the same generic\n        // selection shall specify compatible types.\"\n        for (unsigned j = i + 1; j < NumAssocs; ++j)\n          if (Types[j] && !Types[j]->getType()->isDependentType() && Context.typesAreCompatible(Types[i]->getType(), Types[j]->getType())) {\n            Diag(Types[j]->getTypeLoc().getBeginLoc(), diag::err_assoc_compatible_types) << Types[j]->getTypeLoc().getSourceRange() << Types[j]->getType() << Types[i]->getType();"}},
[j]={
[j]={
["clang/test/Sema/attr-btf_type_tag.c"]={"clang/test/Sema/attr-btf_type_tag.c:32:19: error: type \'int *\' in generic association compatible with previously specified type \'int  __attribute__((btf_type_tag(\"tag1\")))*\' (aka \'int *\')"}
["clang/test/Sema/attr-btf_type_tag.c"]={"clang/test/Sema/attr-btf_type_tag.c:32:19: error: type \'int *\' in generic association compatible with previously specified type \'int  __attribute__((btf_type_tag(\"tag1\")))*\' (aka \'int *\')"}
Line 2,561: Line 2,563:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"91147596414d",1302827748,"C1X: implement generic selections\n\nAs an extension, generic selection support has been added for all...","C1X: implement generic selections\n\nAs an extension, generic selection support has been added for all\nsupported languages.  The syntax is the same as for C1X.\n\nllvm-svn: 129554"},
[b]={"91147596414d",1302827748,"C1X: implement generic selections","C1X: implement generic selections\n\nAs an extension, generic selection support has been added for all\nsupported languages.  The syntax is the same as for C1X.\n\nllvm-svn: 129554"},
[h]={{u,1726,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  // ...\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    // ...\n    if (Types[i]) {\n      // ...\n      if (Types[i]->getType()->isDependentType()) {\n      // ...\n      } else {\n        // ...\n        if (ControllingExpr && Types[i]->getType()->isIncompleteType())\n          D = diag::err_assoc_type_incomplete;"}},
[h]={{v,1726,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  // ...\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    // ...\n    if (Types[i]) {\n      // ...\n      if (Types[i]->getType()->isDependentType()) {\n      // ...\n      } else {\n        // ...\n        if (ControllingExpr && Types[i]->getType()->isIncompleteType())\n          D = diag::err_assoc_type_incomplete;"}},
[j]={
[j]={
["clang/test/SemaCXX/generic-selection.cpp"]={"clang/test/SemaCXX/generic-selection.cpp:87:21: error: type \'struct T\' in generic association incomplete"}
["clang/test/SemaCXX/generic-selection.cpp"]={"clang/test/SemaCXX/generic-selection.cpp:87:21: error: type \'struct T\' in generic association incomplete"}
Line 2,573: Line 2,575:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"91147596414d",1302827748,"C1X: implement generic selections\n\nAs an extension, generic selection support has been added for all...","C1X: implement generic selections\n\nAs an extension, generic selection support has been added for all\nsupported languages.  The syntax is the same as for C1X.\n\nllvm-svn: 129554"},
[b]={"91147596414d",1302827748,"C1X: implement generic selections","C1X: implement generic selections\n\nAs an extension, generic selection support has been added for all\nsupported languages.  The syntax is the same as for C1X.\n\nllvm-svn: 129554"},
[h]={{u,1728,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  // ...\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    // ...\n    if (Types[i]) {\n      // ...\n      if (Types[i]->getType()->isDependentType()) {\n      // ...\n      } else {\n        // ...\n        if (ControllingExpr && Types[i]->getType()->isIncompleteType())\n        // ...\n        else if (ControllingExpr && !Types[i]->getType()->isObjectType())\n          D = diag::err_assoc_type_nonobject;"}},
[h]={{v,1728,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  // ...\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    // ...\n    if (Types[i]) {\n      // ...\n      if (Types[i]->getType()->isDependentType()) {\n      // ...\n      } else {\n        // ...\n        if (ControllingExpr && Types[i]->getType()->isIncompleteType())\n        // ...\n        else if (ControllingExpr && !Types[i]->getType()->isObjectType())\n          D = diag::err_assoc_type_nonobject;"}},
[j]={
[j]={
["clang/test/Sema/generic-selection.c"]={"clang/test/Sema/generic-selection.c:9:7: error: type \'void ()\' in generic association not an object type"}
["clang/test/Sema/generic-selection.c"]={"clang/test/Sema/generic-selection.c:9:7: error: type \'void ()\' in generic association not an object type"}
Line 2,585: Line 2,587:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"91147596414d",1302827748,"C1X: implement generic selections\n\nAs an extension, generic selection support has been added for all...","C1X: implement generic selections\n\nAs an extension, generic selection support has been added for all\nsupported languages.  The syntax is the same as for C1X.\n\nllvm-svn: 129554"},
[b]={"91147596414d",1302827748,"C1X: implement generic selections","C1X: implement generic selections\n\nAs an extension, generic selection support has been added for all\nsupported languages.  The syntax is the same as for C1X.\n\nllvm-svn: 129554"},
[h]={{u,1730,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  // ...\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    // ...\n    if (Types[i]) {\n      // ...\n      if (Types[i]->getType()->isDependentType()) {\n      // ...\n      } else {\n        // ...\n        if (ControllingExpr && Types[i]->getType()->isIncompleteType())\n        // ...\n        else if (ControllingExpr && !Types[i]->getType()->isObjectType())\n        // ...\n        else if (Types[i]->getType()->isVariablyModifiedType())\n          D = diag::err_assoc_type_variably_modified;"}},
[h]={{v,1730,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  // ...\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    // ...\n    if (Types[i]) {\n      // ...\n      if (Types[i]->getType()->isDependentType()) {\n      // ...\n      } else {\n        // ...\n        if (ControllingExpr && Types[i]->getType()->isIncompleteType())\n        // ...\n        else if (ControllingExpr && !Types[i]->getType()->isObjectType())\n        // ...\n        else if (Types[i]->getType()->isVariablyModifiedType())\n          D = diag::err_assoc_type_variably_modified;"}},
[j]={
[j]={
["clang/test/Sema/generic-selection.c"]={"clang/test/Sema/generic-selection.c:10:7: error: type \'int[n]\' in generic association is a variably modified type"}
["clang/test/Sema/generic-selection.c"]={"clang/test/Sema/generic-selection.c:10:7: error: type \'int[n]\' in generic association is a variably modified type"}
Line 2,593: Line 2,595:
["err_ast_file_invalid"]={
["err_ast_file_invalid"]={
[c]="file \'%1\' is not a valid precompiled %select{PCH|module|AST}0 file",
[c]="file \'%1\' is not a valid precompiled %select{PCH|module|AST}0 file",
[d]=cc,
[d]=Vb,
[e]="file \'(.*?)\' is not a valid precompiled (?:PCH|module|AST) file",
[e]="file \'(.*?)\' is not a valid precompiled (?:PCH|module|AST) file",
[f]=a,
[f]=a,
[g]="AST Deserialization Issue",
[g]="AST Deserialization Issue",
[b]={"a2f2c2f3a463",1605203629,"Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC\n\nClean up the logic ...","Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC\n\nClean up the logic for `err_fe_{pch,module,ast}_file_modified` to use a\n`select` like other ASTReader diagnostics. There should be no\nfunctionality change here, just a cleanup.\n\nDifferential Revision: https://reviews.llvm.org/D91367"},
[b]={"a2f2c2f3a463",1605203629,"Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC","Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC\n\nClean up the logic for `err_fe_{pch,module,ast}_file_modified` to use a\n`select` like other ASTReader diagnostics. There should be no\nfunctionality change here, just a cleanup.\n\nDifferential Revision: https://reviews.llvm.org/D91367"},
[h]={{"clang/lib/Serialization/ASTReader.cpp",4643,"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  // Sniff for the signature.\n  if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {\n    Diag(diag::err_ast_file_invalid) << moduleKindForDiagnostic(Type) << FileName << std::move(Err);"}},
[h]={{"clang/lib/Serialization/ASTReader.cpp",4643,"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  // Sniff for the signature.\n  if (llvm::Error Err = doesntStartWithASTFileMagic(Stream)) {\n    Diag(diag::err_ast_file_invalid) << moduleKindForDiagnostic(Type) << FileName << std::move(Err);"}},
[j]={
[j]={
Line 2,605: Line 2,607:
["err_ast_file_not_found"]={
["err_ast_file_not_found"]={
[c]="%select{PCH|module|AST}0 file \'%1\' not found%select{|: %3}2",
[c]="%select{PCH|module|AST}0 file \'%1\' not found%select{|: %3}2",
[d]=cc,
[d]=Vb,
[e]="(?:PCH|module|AST) file \'(.*?)\' not found(?:|\\: (.*?))",
[e]="(?:PCH|module|AST) file \'(.*?)\' not found(?:|\\: (.*?))",
[f]=a,
[f]=a,
[g]="AST Deserialization Issue",
[g]="AST Deserialization Issue",
[b]={"a2f2c2f3a463",1605203629,"Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC\n\nClean up the logic ...","Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC\n\nClean up the logic for `err_fe_{pch,module,ast}_file_modified` to use a\n`select` like other ASTReader diagnostics. There should be no\nfunctionality change here, just a cleanup.\n\nDifferential Revision: https://reviews.llvm.org/D91367"},
[b]={"a2f2c2f3a463",1605203629,"Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC","Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC\n\nClean up the logic for `err_fe_{pch,module,ast}_file_modified` to use a\n`select` like other ASTReader diagnostics. There should be no\nfunctionality change here, just a cleanup.\n\nDifferential Revision: https://reviews.llvm.org/D91367"},
[h]={{"clang/lib/Serialization/ASTReader.cpp",4608,"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  case ModuleManager::Missing:\n    // ...\n    Diag(diag::err_ast_file_not_found) << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty() << ErrorStr;"}},
[h]={{"clang/lib/Serialization/ASTReader.cpp",4608,"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  case ModuleManager::Missing:\n    // ...\n    Diag(diag::err_ast_file_not_found) << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty() << ErrorStr;"}},
[j]={
[j]={
Line 2,617: Line 2,619:
["err_ast_file_out_of_date"]={
["err_ast_file_out_of_date"]={
[c]="%select{PCH|module|AST}0 file \'%1\' is out of date and needs to be rebuilt%select{|: %3}2",
[c]="%select{PCH|module|AST}0 file \'%1\' is out of date and needs to be rebuilt%select{|: %3}2",
[d]=cc,
[d]=Vb,
[e]="(?:PCH|module|AST) file \'(.*?)\' is out of date and needs to be rebuilt(?:|\\: (.*?))",
[e]="(?:PCH|module|AST) file \'(.*?)\' is out of date and needs to be rebuilt(?:|\\: (.*?))",
[f]=a,
[f]=a,
[g]="AST Deserialization Issue",
[g]="AST Deserialization Issue",
[b]={"a2f2c2f3a463",1605203629,"Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC\n\nClean up the logic ...","Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC\n\nClean up the logic for `err_fe_{pch,module,ast}_file_modified` to use a\n`select` like other ASTReader diagnostics. There should be no\nfunctionality change here, just a cleanup.\n\nDifferential Revision: https://reviews.llvm.org/D91367"},
[b]={"a2f2c2f3a463",1605203629,"Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC","Serialization: Merge three diagnostics to simplify ASTReader::getInputFile, NFC\n\nClean up the logic for `err_fe_{pch,module,ast}_file_modified` to use a\n`select` like other ASTReader diagnostics. There should be no\nfunctionality change here, just a cleanup.\n\nDifferential Revision: https://reviews.llvm.org/D91367"},
[h]={{"clang/lib/Serialization/ASTReader.cpp",4620,"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  case ModuleManager::OutOfDate:\n    // ...\n    Diag(diag::err_ast_file_out_of_date) << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty() << ErrorStr;"}},
[h]={{"clang/lib/Serialization/ASTReader.cpp",4620,"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  case ModuleManager::OutOfDate:\n    // ...\n    Diag(diag::err_ast_file_out_of_date) << moduleKindForDiagnostic(Type) << FileName << !ErrorStr.empty() << ErrorStr;"}},
[j]={
[j]={
Line 2,632: Line 2,634:
[e]="@defs is not supported in Objective\\-C\\+\\+",
[e]="@defs is not supported in Objective\\-C\\+\\+",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"23c84767484c",1302801679,"Parse an \'@\' in an Objective-C++ class member specification,\ndiagnosing it as an error rather than l...","Parse an \'@\' in an Objective-C++ class member specification,\ndiagnosing it as an error rather than looping infinitely. Also,\nexplicitly disallow @defs in Objective-C++. Fixes <rdar://problem/9260136>.\n\nllvm-svn: 129521"},
[b]={"23c84767484c",1302801679,"Parse an \'@\' in an Objective-C++ class member specification,","Parse an \'@\' in an Objective-C++ class member specification,\ndiagnosing it as an error rather than looping infinitely. Also,\nexplicitly disallow @defs in Objective-C++. Fixes <rdar://problem/9260136>.\n\nllvm-svn: 129521"},
[h]={{I,2682,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  if (Tok.is(tok::at)) {\n    if (getLangOpts().ObjC && NextToken().isObjCAtKeyword(tok::objc_defs))\n      Diag(Tok, diag::err_at_defs_cxx);"}},
[h]={{J,2682,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  if (Tok.is(tok::at)) {\n    if (getLangOpts().ObjC && NextToken().isObjCAtKeyword(tok::objc_defs))\n      Diag(Tok, diag::err_at_defs_cxx);"}},
[j]={
[j]={
["clang/test/Parser/objcxx-at.mm"]={"clang/test/Parser/objcxx-at.mm:9:3: error: @defs is not supported in Objective-C++"}
["clang/test/Parser/objcxx-at.mm"]={"clang/test/Parser/objcxx-at.mm:9:3: error: @defs is not supported in Objective-C++"}
Line 2,644: Line 2,646:
[e]="unexpected \'@\' in member specification",
[e]="unexpected \'@\' in member specification",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"23c84767484c",1302801679,"Parse an \'@\' in an Objective-C++ class member specification,\ndiagnosing it as an error rather than l...","Parse an \'@\' in an Objective-C++ class member specification,\ndiagnosing it as an error rather than looping infinitely. Also,\nexplicitly disallow @defs in Objective-C++. Fixes <rdar://problem/9260136>.\n\nllvm-svn: 129521"},
[b]={"23c84767484c",1302801679,"Parse an \'@\' in an Objective-C++ class member specification,","Parse an \'@\' in an Objective-C++ class member specification,\ndiagnosing it as an error rather than looping infinitely. Also,\nexplicitly disallow @defs in Objective-C++. Fixes <rdar://problem/9260136>.\n\nllvm-svn: 129521"},
[h]={{I,2684,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  if (Tok.is(tok::at)) {\n    if (getLangOpts().ObjC && NextToken().isObjCAtKeyword(tok::objc_defs))\n    // ...\n    else\n      Diag(Tok, diag::err_at_in_class);"}},
[h]={{J,2684,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  if (Tok.is(tok::at)) {\n    if (getLangOpts().ObjC && NextToken().isObjCAtKeyword(tok::objc_defs))\n    // ...\n    else\n      Diag(Tok, diag::err_at_in_class);"}},
[j]={
[j]={
["clang/test/Parser/objcxx-at.mm"]={"clang/test/Parser/objcxx-at.mm:14:5: error: unexpected \'@\' in member specification"}
["clang/test/Parser/objcxx-at.mm"]={"clang/test/Parser/objcxx-at.mm:14:5: error: unexpected \'@\' in member specification"}
Line 2,657: Line 2,659:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"ece1b2b0e156",1240345721,"Patch to diagnose use of objc\'s @defs in nonfragile abi.\n\nllvm-svn: 69710","Patch to diagnose use of objc\'s @defs in nonfragile abi.\n\nllvm-svn: 69710"},
[b]={"ece1b2b0e156",1240345721,"Patch to diagnose use of objc\'s @defs in nonfragile abi.","Patch to diagnose use of objc\'s @defs in nonfragile abi.\n\nllvm-svn: 69710"},
[h]={{G,5110,"/// Called whenever \\@defs(ClassName) is encountered in the source.  Inserts the\n/// instance variables of ClassName into Decls.\nvoid Sema::ActOnDefs(Scope *S, Decl *TagD, SourceLocation DeclStart, IdentifierInfo *ClassName, SmallVectorImpl<Decl *> &Decls) {\n  // ...\n  if (LangOpts.ObjCRuntime.isNonFragile()) {\n    Diag(DeclStart, diag::err_atdef_nonfragile_interface);"}},
[h]={{G,5110,"/// Called whenever \\@defs(ClassName) is encountered in the source.  Inserts the\n/// instance variables of ClassName into Decls.\nvoid Sema::ActOnDefs(Scope *S, Decl *TagD, SourceLocation DeclStart, IdentifierInfo *ClassName, SmallVectorImpl<Decl *> &Decls) {\n  // ...\n  if (LangOpts.ObjCRuntime.isNonFragile()) {\n    Diag(DeclStart, diag::err_atdef_nonfragile_interface);"}},
[j]={
[j]={
Line 2,668: Line 2,670:
[e]="use of \'@import\' when modules are disabled",
[e]="use of \'@import\' when modules are disabled",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"a773d0861800",1395871363,"Objective-C. Improve diagnostic error for \'@import\' \nwhen modules are disabled. // rdar://15505492\n\n...","Objective-C. Improve diagnostic error for \'@import\' \nwhen modules are disabled. // rdar://15505492\n\nllvm-svn: 204862"},
[b]={"a773d0861800",1395871363,"Objective-C. Improve diagnostic error for \'@import\' ","Objective-C. Improve diagnostic error for \'@import\' \nwhen modules are disabled. // rdar://15505492\n\nllvm-svn: 204862"},
[h]={{"clang/lib/Parse/ParseObjc.cpp",103,"/// ParseObjCAtDirectives - Handle parts of the external-declaration production:\n///      external-declaration: [C99 6.9]\n/// [OBJC]  objc-class-definition\n/// [OBJC]  objc-class-declaration\n/// [OBJC]  objc-alias-declaration\n/// [OBJC]  objc-protocol-definition\n/// [OBJC]  objc-method-definition\n/// [OBJC]  \'@\' \'end\'\nParser::DeclGroupPtrTy Parser::ParseObjCAtDirectives(ParsedAttributes &DeclAttrs, ParsedAttributes &DeclSpecAttrs) {\n  // ...\n  case tok::objc_import:\n    // ...\n    Diag(AtLoc, diag::err_atimport);"}},
[h]={{"clang/lib/Parse/ParseObjc.cpp",103,"/// ParseObjCAtDirectives - Handle parts of the external-declaration production:\n///      external-declaration: [C99 6.9]\n/// [OBJC]  objc-class-definition\n/// [OBJC]  objc-class-declaration\n/// [OBJC]  objc-alias-declaration\n/// [OBJC]  objc-protocol-definition\n/// [OBJC]  objc-method-definition\n/// [OBJC]  \'@\' \'end\'\nParser::DeclGroupPtrTy Parser::ParseObjCAtDirectives(ParsedAttributes &DeclAttrs, ParsedAttributes &DeclSpecAttrs) {\n  // ...\n  case tok::objc_import:\n    // ...\n    Diag(AtLoc, diag::err_atimport);"}},
[j]={
[j]={
Line 2,681: Line 2,683:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={nb,1616787805,ob,pb},
[b]={gb,1616787805,hb,ib},
[h]={{p,7460,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  if (ValType->isBitIntType()) {\n    Diag(Ptr->getExprLoc(), diag::err_atomic_builtin_bit_int_prohibit);"}},
[h]={{o,7460,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  if (ValType->isBitIntType()) {\n    Diag(Ptr->getExprLoc(), diag::err_atomic_builtin_bit_int_prohibit);"}},
[j]={
[j]={
[ub]={"clang/test/Sema/builtins.c:289:22: error: argument to atomic builtin of type \'_BitInt\' is not supported","clang/test/Sema/builtins.c:297:22: error: argument to atomic builtin of type \'_BitInt\' is not supported"}
[pb]={"clang/test/Sema/builtins.c:289:22: error: argument to atomic builtin of type \'_BitInt\' is not supported","clang/test/Sema/builtins.c:297:22: error: argument to atomic builtin of type \'_BitInt\' is not supported"}
}
}
},
},
Line 2,693: Line 2,695:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"a383c94ccd63",1525541922,"Disallow pointers to const in __sync_fetch_and_xxx.\n\nDiagnoses code like:\n\nvoid f(const int *ptr) {\n...","Disallow pointers to const in __sync_fetch_and_xxx.\n\nDiagnoses code like:\n\nvoid f(const int *ptr) {\n  __sync_fetch_and_add(ptr, 1);\n}\n\nwhich matches the behavior of GCC and ICC.\n\nllvm-svn: 331598"},
[b]={"a383c94ccd63",1525541922,"Disallow pointers to const in __sync_fetch_and_xxx.","Disallow pointers to const in __sync_fetch_and_xxx.\n\nDiagnoses code like:\n\nvoid f(const int *ptr) {\n  __sync_fetch_and_add(ptr, 1);\n}\n\nwhich matches the behavior of GCC and ICC.\n\nllvm-svn: 331598"},
[h]={{p,7568,"/// 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  if (ValType.isConstQualified()) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_cannot_be_const) << FirstArg->getType() << FirstArg->getSourceRange();"}},
[h]={{o,7568,"/// 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  if (ValType.isConstQualified()) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_cannot_be_const) << FirstArg->getType() << FirstArg->getSourceRange();"}},
[j]={
[j]={
[ub]={"clang/test/Sema/builtins.c:280:3: error: address argument to atomic builtin cannot be const-qualified (\'const int *\' invalid)"}
[pb]={"clang/test/Sema/builtins.c:280:3: error: address argument to atomic builtin cannot be const-qualified (\'const int *\' invalid)"}
}
}
},
},
Line 2,705: Line 2,707:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={X,1582847864,W,S},
[b]={T,1582847864,U,V},
[h]={{p,7890,"/// 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  if (BitIntValType && !llvm::isPowerOf2_64(BitIntValType->getNumBits())) {\n    Diag(FirstArg->getExprLoc(), diag::err_atomic_builtin_ext_int_size);"}},
[h]={{o,7890,"/// 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  if (BitIntValType && !llvm::isPowerOf2_64(BitIntValType->getNumBits())) {\n    Diag(FirstArg->getExprLoc(), diag::err_atomic_builtin_ext_int_size);"}},
[j]={
[j]={
[ub]={"clang/test/Sema/builtins.c:285:24: error: Atomic memory operand must have a power-of-two size","clang/test/Sema/builtins.c:287:25: error: Atomic memory operand must have a power-of-two size","clang/test/Sema/builtins.c:313:24: error: Atomic memory operand must have a power-of-two size","clang/test/Sema/builtins.c:315:25: error: Atomic memory operand must have a power-of-two size"}
[pb]={"clang/test/Sema/builtins.c:285:24: error: Atomic memory operand must have a power-of-two size","clang/test/Sema/builtins.c:287:25: error: Atomic memory operand must have a power-of-two size","clang/test/Sema/builtins.c:313:24: error: Atomic memory operand must have a power-of-two size","clang/test/Sema/builtins.c:315:25: error: Atomic memory operand must have a power-of-two size"}
}
}
},
},
Line 2,717: Line 2,719:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"dc04654697fb",1241765902,"reimplement __sync_* builtins to be variadic and to follow the same\nsemantic rules that gcc and icc ...","reimplement __sync_* builtins to be variadic and to follow the same\nsemantic rules that gcc and icc use.  This implements the variadic\nand concrete versions as builtins and has sema do the \ndisambiguation.  There are probably a bunch of details to finish up\nbut this seems like a large monotonic step forward :)\n\nllvm-svn: 71212"},
[b]={"dc04654697fb",1241765902,"reimplement __sync_* builtins to be variadic and to follow the same","reimplement __sync_* builtins to be variadic and to follow the same\nsemantic rules that gcc and icc use.  This implements the variadic\nand concrete versions as builtins and has sema do the \ndisambiguation.  There are probably a bunch of details to finish up\nbut this seems like a large monotonic step forward :)\n\nllvm-svn: 71212"},
[h]={{p,3182,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n  // ...\n  if (!pointerType) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer) << PointerArg->getType() << PointerArg->getSourceRange();"},{p,7153,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  if (!pointerType) {\n    Diag(ExprRange.getBegin(), diag::err_atomic_builtin_must_be_pointer) << Ptr->getType() << Ptr->getSourceRange();"},{p,7554,"/// 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  if (!pointerType) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer) << FirstArg->getType() << FirstArg->getSourceRange();"}},
[h]={{o,3182,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n  // ...\n  if (!pointerType) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer) << PointerArg->getType() << PointerArg->getSourceRange();"},{o,7153,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  if (!pointerType) {\n    Diag(ExprRange.getBegin(), diag::err_atomic_builtin_must_be_pointer) << Ptr->getType() << Ptr->getSourceRange();"},{o,7554,"/// 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  if (!pointerType) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer) << FirstArg->getType() << FirstArg->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCUDA/atomic-ops.cu"]={"clang/test/SemaCUDA/atomic-ops.cu:8:9: error: address argument to atomic builtin must be a pointer (\'int\' invalid)","clang/test/SemaCUDA/atomic-ops.cu:33:3: error: address argument to atomic builtin must be a pointer (\'int\' invalid)","clang/test/SemaCUDA/atomic-ops.cu:67:10: error: address argument to atomic builtin must be a pointer (\'int\' invalid)"}
["clang/test/SemaCUDA/atomic-ops.cu"]={"clang/test/SemaCUDA/atomic-ops.cu:8:9: error: address argument to atomic builtin must be a pointer (\'int\' invalid)","clang/test/SemaCUDA/atomic-ops.cu:33:3: error: address argument to atomic builtin must be a pointer (\'int\' invalid)","clang/test/SemaCUDA/atomic-ops.cu:67:10: error: address argument to atomic builtin must be a pointer (\'int\' invalid)"}
Line 2,729: Line 2,731:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"6aacd49094bc",1373968073,"ARM: implement low-level intrinsics for the atomic exclusive operations.\n\nThis adds three overloaded...","ARM: implement low-level intrinsics for the atomic exclusive operations.\n\nThis adds three overloaded intrinsics to Clang:\n    T __builtin_arm_ldrex(const volatile T *addr)\n    int __builtin_arm_strex(T val, volatile T *addr)\n    void __builtin_arm_clrex()\n\nThe intent is that these do what users would expect when given most sensible\ntypes. Currently, \"sensible\" translates to ints, floats and pointers.\n\nllvm-svn: 186394"},
[b]={"6aacd49094bc",1373968073,"ARM: implement low-level intrinsics for the atomic exclusive operations.","ARM: implement low-level intrinsics for the atomic exclusive operations.\n\nThis adds three overloaded intrinsics to Clang:\n    T __builtin_arm_ldrex(const volatile T *addr)\n    int __builtin_arm_strex(T val, volatile T *addr)\n    void __builtin_arm_clrex()\n\nThe intent is that these do what users would expect when given most sensible\ntypes. Currently, \"sensible\" translates to ints, floats and pointers.\n\nllvm-svn: 186394"},
[h]={{p,3216,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n  // ...\n  // In general, we allow ints, floats and pointers to be loaded and stored.\n  if (!ValType->isIntegerType() && !ValType->isAnyPointerType() && !ValType->isBlockPointerType() && !ValType->isFloatingType()) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer_intfltptr) << PointerArg->getType() << PointerArg->getSourceRange();"}},
[h]={{o,3216,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n  // ...\n  // In general, we allow ints, floats and pointers to be loaded and stored.\n  if (!ValType->isIntegerType() && !ValType->isAnyPointerType() && !ValType->isBlockPointerType() && !ValType->isFloatingType()) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer_intfltptr) << PointerArg->getType() << PointerArg->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/builtins-arm64-exclusive.c"]={"clang/test/Sema/builtins-arm64-exclusive.c:23:10: error: address argument to atomic builtin must be a pointer to integer, floating-point or pointer (\'const volatile struct Simple *\' invalid)","clang/test/Sema/builtins-arm64-exclusive.c:47:10: error: address argument to atomic builtin must be a pointer to integer, floating-point or pointer (\'volatile struct Simple *\' invalid)","clang/test/Sema/builtins-arm64-exclusive.c:72:10: error: address argument to atomic builtin must be a pointer to integer, floating-point or pointer (\'const volatile struct Simple *\' invalid)","clang/test/Sema/builtins-arm64-exclusive.c:96:10: error: address argument to atomic builtin must be a pointer to integer, floating-point or pointer (\'volatile struct Simple *\' invalid)"}
["clang/test/Sema/builtins-arm64-exclusive.c"]={"clang/test/Sema/builtins-arm64-exclusive.c:23:10: error: address argument to atomic builtin must be a pointer to integer, floating-point or pointer (\'const volatile struct Simple *\' invalid)","clang/test/Sema/builtins-arm64-exclusive.c:47:10: error: address argument to atomic builtin must be a pointer to integer, floating-point or pointer (\'volatile struct Simple *\' invalid)","clang/test/Sema/builtins-arm64-exclusive.c:72:10: error: address argument to atomic builtin must be a pointer to integer, floating-point or pointer (\'const volatile struct Simple *\' invalid)","clang/test/Sema/builtins-arm64-exclusive.c:96:10: error: address argument to atomic builtin must be a pointer to integer, floating-point or pointer (\'volatile struct Simple *\' invalid)"}
Line 2,741: Line 2,743:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"dc04654697fb",1241765902,"reimplement __sync_* builtins to be variadic and to follow the same\nsemantic rules that gcc and icc ...","reimplement __sync_* builtins to be variadic and to follow the same\nsemantic rules that gcc and icc use.  This implements the variadic\nand concrete versions as builtins and has sema do the \ndisambiguation.  There are probably a bunch of details to finish up\nbut this seems like a large monotonic step forward :)\n\nllvm-svn: 71212"},
[b]={"dc04654697fb",1241765902,"reimplement __sync_* builtins to be variadic and to follow the same","reimplement __sync_* builtins to be variadic and to follow the same\nsemantic rules that gcc and icc use.  This implements the variadic\nand concrete versions as builtins and has sema do the \ndisambiguation.  There are probably a bunch of details to finish up\nbut this seems like a large monotonic step forward :)\n\nllvm-svn: 71212"},
[h]={{p,7562,"/// 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  if (!ValType->isIntegerType() && !ValType->isAnyPointerType() && !ValType->isBlockPointerType()) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer_intptr) << FirstArg->getType() << FirstArg->getSourceRange();"}}
[h]={{o,7562,"/// 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  if (!ValType->isIntegerType() && !ValType->isAnyPointerType() && !ValType->isBlockPointerType()) {\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_must_be_pointer_intptr) << FirstArg->getType() << FirstArg->getSourceRange();"}}
},
},
["err_atomic_builtin_pointer_size"]={
["err_atomic_builtin_pointer_size"]={
Line 2,750: Line 2,752:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"dc04654697fb",1241765902,"reimplement __sync_* builtins to be variadic and to follow the same\nsemantic rules that gcc and icc ...","reimplement __sync_* builtins to be variadic and to follow the same\nsemantic rules that gcc and icc use.  This implements the variadic\nand concrete versions as builtins and has sema do the \ndisambiguation.  There are probably a bunch of details to finish up\nbut this seems like a large monotonic step forward :)\n\nllvm-svn: 71212"},
[b]={"dc04654697fb",1241765902,"reimplement __sync_* builtins to be variadic and to follow the same","reimplement __sync_* builtins to be variadic and to follow the same\nsemantic rules that gcc and icc use.  This implements the variadic\nand concrete versions as builtins and has sema do the \ndisambiguation.  There are probably a bunch of details to finish up\nbut this seems like a large monotonic step forward :)\n\nllvm-svn: 71212"},
[h]={{p,7633,"/// 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  default:\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_pointer_size) << FirstArg->getType() << FirstArg->getSourceRange();"}}
[h]={{o,7633,"/// 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  default:\n    Diag(DRE->getBeginLoc(), diag::err_atomic_builtin_pointer_size) << FirstArg->getType() << FirstArg->getSourceRange();"}}
},
},
["err_atomic_exclusive_builtin_pointer_size"]={
["err_atomic_exclusive_builtin_pointer_size"]={
Line 2,759: Line 2,761:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"6aacd49094bc",1373968073,"ARM: implement low-level intrinsics for the atomic exclusive operations.\n\nThis adds three overloaded...","ARM: implement low-level intrinsics for the atomic exclusive operations.\n\nThis adds three overloaded intrinsics to Clang:\n    T __builtin_arm_ldrex(const volatile T *addr)\n    int __builtin_arm_strex(T val, volatile T *addr)\n    void __builtin_arm_clrex()\n\nThe intent is that these do what users would expect when given most sensible\ntypes. Currently, \"sensible\" translates to ints, floats and pointers.\n\nllvm-svn: 186394"},
[b]={"6aacd49094bc",1373968073,"ARM: implement low-level intrinsics for the atomic exclusive operations.","ARM: implement low-level intrinsics for the atomic exclusive operations.\n\nThis adds three overloaded intrinsics to Clang:\n    T __builtin_arm_ldrex(const volatile T *addr)\n    int __builtin_arm_strex(T val, volatile T *addr)\n    void __builtin_arm_clrex()\n\nThe intent is that these do what users would expect when given most sensible\ntypes. Currently, \"sensible\" translates to ints, floats and pointers.\n\nllvm-svn: 186394"},
[h]={{p,3224,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n  // ...\n  // But ARM doesn\'t have instructions to deal with 128-bit versions.\n  if (Context.getTypeSize(ValType) > MaxWidth) {\n    // ...\n    Diag(DRE->getBeginLoc(), diag::err_atomic_exclusive_builtin_pointer_size) << PointerArg->getType() << PointerArg->getSourceRange();"}},
[h]={{o,3224,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n  // ...\n  // But ARM doesn\'t have instructions to deal with 128-bit versions.\n  if (Context.getTypeSize(ValType) > MaxWidth) {\n    // ...\n    Diag(DRE->getBeginLoc(), diag::err_atomic_exclusive_builtin_pointer_size) << PointerArg->getType() << PointerArg->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/builtins-arm-exclusive.c"]={"clang/test/Sema/builtins-arm-exclusive.c:24:10: error: address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type (\'const volatile __int128 *\' invalid)","clang/test/Sema/builtins-arm-exclusive.c:51:10: error: address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type (\'volatile __int128 *\' invalid)","clang/test/Sema/builtins-arm-exclusive.c:75:10: error: address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type (\'const volatile __int128 *\' invalid)","clang/test/Sema/builtins-arm-exclusive.c:102:10: error: address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type (\'volatile __int128 *\' invalid)"}
["clang/test/Sema/builtins-arm-exclusive.c"]={"clang/test/Sema/builtins-arm-exclusive.c:24:10: error: address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type (\'const volatile __int128 *\' invalid)","clang/test/Sema/builtins-arm-exclusive.c:51:10: error: address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type (\'volatile __int128 *\' invalid)","clang/test/Sema/builtins-arm-exclusive.c:75:10: error: address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type (\'const volatile __int128 *\' invalid)","clang/test/Sema/builtins-arm-exclusive.c:102:10: error: address argument to load or store exclusive builtin must be a pointer to 1,2,4 or 8 byte type (\'volatile __int128 *\' invalid)"}
Line 2,771: Line 2,773:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"615de765abde",1369762659,"Patch to issue error when target of MacOS and iOS \ndoes not support large load/store of atomic objec...","Patch to issue error when target of MacOS and iOS \ndoes not support large load/store of atomic objects.\n// rdar://13973577\n\nllvm-svn: 182781"},
[b]={"615de765abde",1369762659,"Patch to issue error when target of MacOS and iOS ","Patch to issue error when target of MacOS and iOS \ndoes not support large load/store of atomic objects.\n// rdar://13973577\n\nllvm-svn: 182781"},
[h]={{p,7452,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  if ((Op == AtomicExpr::AO__c11_atomic_load || Op == AtomicExpr::AO__c11_atomic_store || Op == AtomicExpr::AO__opencl_atomic_load || Op == AtomicExpr::AO__hip_atomic_load || Op == AtomicExpr::AO__opencl_atomic_store || Op == AtomicExpr::AO__hip_atomic_store) && Context.AtomicUsesUnsupportedLibcall(AE))\n    Diag(AE->getBeginLoc(), diag::err_atomic_load_store_uses_lib) << ((Op == AtomicExpr::AO__c11_atomic_load || Op == AtomicExpr::AO__opencl_atomic_load || Op == AtomicExpr::AO__hip_atomic_load) ? 0 : 1);"}},
[h]={{o,7452,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  if ((Op == AtomicExpr::AO__c11_atomic_load || Op == AtomicExpr::AO__c11_atomic_store || Op == AtomicExpr::AO__opencl_atomic_load || Op == AtomicExpr::AO__hip_atomic_load || Op == AtomicExpr::AO__opencl_atomic_store || Op == AtomicExpr::AO__hip_atomic_store) && Context.AtomicUsesUnsupportedLibcall(AE))\n    Diag(AE->getBeginLoc(), diag::err_atomic_load_store_uses_lib) << ((Op == AtomicExpr::AO__c11_atomic_load || Op == AtomicExpr::AO__opencl_atomic_load || Op == AtomicExpr::AO__hip_atomic_load) ? 0 : 1);"}},
[j]={
[j]={
["clang/test/Sema/atomic-requires-library-error.c"]={"clang/test/Sema/atomic-requires-library-error.c:17:3: error: atomic store requires runtime support that is not available for this target","clang/test/Sema/atomic-requires-library-error.c:26:18: error: atomic load requires runtime support that is not available for this target"}
["clang/test/Sema/atomic-requires-library-error.c"]={"clang/test/Sema/atomic-requires-library-error.c:17:3: error: atomic store requires runtime support that is not available for this target","clang/test/Sema/atomic-requires-library-error.c:26:18: error: atomic load requires runtime support that is not available for this target"}
Line 2,783: Line 2,785:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"39195062c20c",1501870591,"Add OpenCL 2.0 atomic builtin functions as Clang builtin\n\nOpenCL 2.0 atomic builtin functions have a...","Add OpenCL 2.0 atomic builtin functions as Clang builtin\n\nOpenCL 2.0 atomic builtin functions have a scope argument which is ideally\nrepresented as synchronization scope argument in LLVM atomic instructions.\n\nClang supports translating Clang atomic builtin functions to LLVM atomic\ninstructions. However it currently does not support synchronization scope\nof LLVM atomic instructions. Without this, users have to use LLVM assembly\ncode to implement OpenCL atomic builtin functions.\n\nThis patch adds OpenCL 2.0 atomic builtin functions as Clang builtin\nfunctions, which supports generating LLVM atomic instructions with\nsynchronization scope operand.\n\nCurrently only constant memory scope argument is supported. Support of\nnon-constant memory scope argument will be added later.\n\nDifferential Revision: https://reviews.llvm.org/D28691\n\nllvm-svn: 310082"},
[b]={"39195062c20c",1501870591,"Add OpenCL 2.0 atomic builtin functions as Clang builtin","Add OpenCL 2.0 atomic builtin functions as Clang builtin\n\nOpenCL 2.0 atomic builtin functions have a scope argument which is ideally\nrepresented as synchronization scope argument in LLVM atomic instructions.\n\nClang supports translating Clang atomic builtin functions to LLVM atomic\ninstructions. However it currently does not support synchronization scope\nof LLVM atomic instructions. Without this, users have to use LLVM assembly\ncode to implement OpenCL atomic builtin functions.\n\nThis patch adds OpenCL 2.0 atomic builtin functions as Clang builtin\nfunctions, which supports generating LLVM atomic instructions with\nsynchronization scope operand.\n\nCurrently only constant memory scope argument is supported. Support of\nnon-constant memory scope argument will be added later.\n\nDifferential Revision: https://reviews.llvm.org/D28691\n\nllvm-svn: 310082"},
[h]={{p,7436,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  if (auto ScopeModel = AtomicExpr::getScopeModel(Op)) {\n    // ...\n    if (std::optional<llvm::APSInt> Result = Scope->getIntegerConstantExpr(Context)) {\n      if (!ScopeModel->isValid(Result->getZExtValue()))\n        Diag(Scope->getBeginLoc(), diag::err_atomic_op_has_invalid_synch_scope) << Scope->getSourceRange();"}},
[h]={{o,7436,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  if (auto ScopeModel = AtomicExpr::getScopeModel(Op)) {\n    // ...\n    if (std::optional<llvm::APSInt> Result = Scope->getIntegerConstantExpr(Context)) {\n      if (!ScopeModel->isValid(Result->getZExtValue()))\n        Diag(Scope->getBeginLoc(), diag::err_atomic_op_has_invalid_synch_scope) << Scope->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCUDA/atomic-ops.cu"]={"clang/test/SemaCUDA/atomic-ops.cu:9:36: error: synchronization scope argument to atomic operation is invalid","clang/test/SemaCUDA/atomic-ops.cu:15:51: error: synchronization scope argument to atomic operation is invalid","clang/test/SemaCUDA/atomic-ops.cu:34:34: error: synchronization scope argument to atomic operation is invalid","clang/test/SemaCUDA/atomic-ops.cu:40:49: error: synchronization scope argument to atomic operation is invalid","clang/test/SemaCUDA/atomic-ops.cu:68:62: error: synchronization scope argument to atomic operation is invalid"}
["clang/test/SemaCUDA/atomic-ops.cu"]={"clang/test/SemaCUDA/atomic-ops.cu:9:36: error: synchronization scope argument to atomic operation is invalid","clang/test/SemaCUDA/atomic-ops.cu:15:51: error: synchronization scope argument to atomic operation is invalid","clang/test/SemaCUDA/atomic-ops.cu:34:34: error: synchronization scope argument to atomic operation is invalid","clang/test/SemaCUDA/atomic-ops.cu:40:49: error: synchronization scope argument to atomic operation is invalid","clang/test/SemaCUDA/atomic-ops.cu:68:62: error: synchronization scope argument to atomic operation is invalid"}
Line 2,795: Line 2,797:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"df14b3a8377f",1318299601,"Initial implementation of __atomic_* (everything except __atomic_is_lock_free).\n\nllvm-svn: 141632","Initial implementation of __atomic_* (everything except __atomic_is_lock_free).\n\nllvm-svn: 141632"},
[b]={"df14b3a8377f",1318299601,"Initial implementation of __atomic_* (everything except __atomic_is_lock_free).","Initial implementation of __atomic_* (everything except __atomic_is_lock_free).\n\nllvm-svn: 141632"},
[h]={{p,7163,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  if (IsC11) {\n    if (!AtomTy->isAtomicType()) {\n      Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_atomic) << Ptr->getType() << Ptr->getSourceRange();"}},
[h]={{o,7163,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  if (IsC11) {\n    if (!AtomTy->isAtomicType()) {\n      Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_atomic) << Ptr->getType() << Ptr->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaOpenCL/atomic-ops.cl"]={"clang/test/SemaOpenCL/atomic-ops.cl:27:3: error: address argument to atomic operation must be a pointer to _Atomic type (\'__generic int *\' invalid)","clang/test/SemaOpenCL/atomic-ops.cl:33:3: error: address argument to atomic operation must be a pointer to _Atomic type (\'__generic int *\' invalid)","clang/test/SemaOpenCL/atomic-ops.cl:52:20: error: address argument to atomic operation must be a pointer to _Atomic type (\'__generic int *\' invalid)"}
["clang/test/SemaOpenCL/atomic-ops.cl"]={"clang/test/SemaOpenCL/atomic-ops.cl:27:3: error: address argument to atomic operation must be a pointer to _Atomic type (\'__generic int *\' invalid)","clang/test/SemaOpenCL/atomic-ops.cl:33:3: error: address argument to atomic operation must be a pointer to _Atomic type (\'__generic int *\' invalid)","clang/test/SemaOpenCL/atomic-ops.cl:52:20: error: address argument to atomic operation must be a pointer to _Atomic type (\'__generic int *\' invalid)"}
Line 2,807: Line 2,809:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining\n\nSYCL is single source offload progr...","[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>"},
[b]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining","[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>"},
[h]={{p,7207,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n    // ...\n    if (!IsAllowedValueType(ValType, ArithAllows)) {\n      auto DID = ArithAllows & AOEVT_FP ? (ArithAllows & AOEVT_Pointer ? diag::err_atomic_op_needs_atomic_int_ptr_or_fp : diag::err_atomic_op_needs_atomic_int_or_fp) : diag::err_atomic_op_needs_atomic_int;"}},
[h]={{o,7207,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n    // ...\n    if (!IsAllowedValueType(ValType, ArithAllows)) {\n      auto DID = ArithAllows & AOEVT_FP ? (ArithAllows & AOEVT_Pointer ? diag::err_atomic_op_needs_atomic_int_ptr_or_fp : diag::err_atomic_op_needs_atomic_int_or_fp) : diag::err_atomic_op_needs_atomic_int;"}},
[j]={
[j]={
["clang/test/SemaOpenCL/atomic-ops.cl"]={"clang/test/SemaOpenCL/atomic-ops.cl:60:3: error: address argument to atomic operation must be a pointer to atomic integer (\'__generic atomic_float *\' (aka \'__generic _Atomic(float) *\') invalid)"}
["clang/test/SemaOpenCL/atomic-ops.cl"]={"clang/test/SemaOpenCL/atomic-ops.cl:60:3: error: address argument to atomic operation must be a pointer to atomic integer (\'__generic atomic_float *\' (aka \'__generic _Atomic(float) *\') invalid)"}
Line 2,819: Line 2,821:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={M,1625925174,K,L},
[b]={N,1625925174,M,L},
[h]={{p,7206,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n    // ...\n    if (!IsAllowedValueType(ValType, ArithAllows)) {\n      auto DID = ArithAllows & AOEVT_FP ? (ArithAllows & AOEVT_Pointer ? diag::err_atomic_op_needs_atomic_int_ptr_or_fp : diag::err_atomic_op_needs_atomic_int_or_fp) : diag::err_atomic_op_needs_atomic_int;"}},
[h]={{o,7206,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n    // ...\n    if (!IsAllowedValueType(ValType, ArithAllows)) {\n      auto DID = ArithAllows & AOEVT_FP ? (ArithAllows & AOEVT_Pointer ? diag::err_atomic_op_needs_atomic_int_ptr_or_fp : diag::err_atomic_op_needs_atomic_int_or_fp) : diag::err_atomic_op_needs_atomic_int;"}},
[j]={
[j]={
["clang/test/Sema/atomic-ops.c"]={"clang/test/Sema/atomic-ops.c:203:3: error: address argument to atomic operation must be a pointer to atomic integer or supported floating point type (\'_Atomic(int *) *\' invalid)","clang/test/Sema/atomic-ops.c:208:3: error: address argument to atomic operation must be a pointer to atomic integer or supported floating point type (\'_Atomic(int *) *\' invalid)","clang/test/Sema/atomic-ops.c:222:3: error: address argument to atomic operation must be a pointer to integer or supported floating point type (\'int **\' invalid)"}
["clang/test/Sema/atomic-ops.c"]={"clang/test/Sema/atomic-ops.c:203:3: error: address argument to atomic operation must be a pointer to atomic integer or supported floating point type (\'_Atomic(int *) *\' invalid)","clang/test/Sema/atomic-ops.c:208:3: error: address argument to atomic operation must be a pointer to atomic integer or supported floating point type (\'_Atomic(int *) *\' invalid)","clang/test/Sema/atomic-ops.c:222:3: error: address argument to atomic operation must be a pointer to integer or supported floating point type (\'int **\' invalid)"}
Line 2,831: Line 2,833:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"df14b3a8377f",1318299601,"Initial implementation of __atomic_* (everything except __atomic_is_lock_free).\n\nllvm-svn: 141632","Initial implementation of __atomic_* (everything except __atomic_is_lock_free).\n\nllvm-svn: 141632"},
[b]={"df14b3a8377f",1318299601,"Initial implementation of __atomic_* (everything except __atomic_is_lock_free).","Initial implementation of __atomic_* (everything except __atomic_is_lock_free).\n\nllvm-svn: 141632"},
[h]={{p,7220,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n  // ...\n  } else if (IsN && !ValType->isIntegerType() && !ValType->isPointerType()) {\n    // ...\n    Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_atomic_int_or_ptr) << IsC11 << Ptr->getType() << Ptr->getSourceRange();"}},
[h]={{o,7220,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n  // ...\n  } else if (IsN && !ValType->isIntegerType() && !ValType->isPointerType()) {\n    // ...\n    Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_atomic_int_or_ptr) << IsC11 << Ptr->getType() << Ptr->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/atomic-ops.c"]={"clang/test/Sema/atomic-ops.c:152:20: error: address argument to atomic operation must be a pointer to integer or pointer (\'double *\' invalid)","clang/test/Sema/atomic-ops.c:153:3: error: address argument to atomic operation must be a pointer to integer or pointer (\'struct S *\' invalid)","clang/test/Sema/atomic-ops.c:176:3: error: address argument to atomic operation must be a pointer to integer or pointer (\'_Atomic(int) *\' invalid)","clang/test/Sema/atomic-ops.c:177:3: error: address argument to atomic operation must be a pointer to integer or pointer (\'struct S *\' invalid)","clang/test/Sema/atomic-ops.c:187:20: error: address argument to atomic operation must be a pointer to integer or pointer (\'_Atomic(int) *\' invalid)"}
["clang/test/Sema/atomic-ops.c"]={"clang/test/Sema/atomic-ops.c:152:20: error: address argument to atomic operation must be a pointer to integer or pointer (\'double *\' invalid)","clang/test/Sema/atomic-ops.c:153:3: error: address argument to atomic operation must be a pointer to integer or pointer (\'struct S *\' invalid)","clang/test/Sema/atomic-ops.c:176:3: error: address argument to atomic operation must be a pointer to integer or pointer (\'_Atomic(int) *\' invalid)","clang/test/Sema/atomic-ops.c:177:3: error: address argument to atomic operation must be a pointer to integer or pointer (\'struct S *\' invalid)","clang/test/Sema/atomic-ops.c:187:20: error: address argument to atomic operation must be a pointer to integer or pointer (\'_Atomic(int) *\' invalid)"}
Line 2,843: Line 2,845:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={fb,1590001902,jb,lb},
[b]={kb,1590001902,fb,jb},
[h]={{p,7205,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n    // ...\n    if (!IsAllowedValueType(ValType, ArithAllows)) {\n      auto DID = ArithAllows & AOEVT_FP ? (ArithAllows & AOEVT_Pointer ? diag::err_atomic_op_needs_atomic_int_ptr_or_fp : diag::err_atomic_op_needs_atomic_int_or_fp) : diag::err_atomic_op_needs_atomic_int;"}},
[h]={{o,7205,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n    // ...\n    if (!IsAllowedValueType(ValType, ArithAllows)) {\n      auto DID = ArithAllows & AOEVT_FP ? (ArithAllows & AOEVT_Pointer ? diag::err_atomic_op_needs_atomic_int_ptr_or_fp : diag::err_atomic_op_needs_atomic_int_or_fp) : diag::err_atomic_op_needs_atomic_int;"}},
[j]={
[j]={
["clang/test/Sema/atomic-ops.c"]={"clang/test/Sema/atomic-ops.c:213:3: error: address argument to atomic operation must be a pointer to integer, pointer or supported floating point type (\'_Atomic(int) *\' invalid)","clang/test/Sema/atomic-ops.c:217:3: error: address argument to atomic operation must be a pointer to integer, pointer or supported floating point type (\'struct S *\' invalid)"}
["clang/test/Sema/atomic-ops.c"]={"clang/test/Sema/atomic-ops.c:213:3: error: address argument to atomic operation must be a pointer to integer, pointer or supported floating point type (\'_Atomic(int) *\' invalid)","clang/test/Sema/atomic-ops.c:217:3: error: address argument to atomic operation must be a pointer to integer, pointer or supported floating point type (\'struct S *\' invalid)"}
Line 2,855: Line 2,857:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e00921a0a448",1347689398,"const _Atomic(T) is not an atomic type, so do not allow it as the type \'A\' in\nC11 7.17\'s atomic oper...","const _Atomic(T) is not an atomic type, so do not allow it as the type \'A\' in\nC11 7.17\'s atomic operations. GNU\'s __atomic_* builtins do allow const-qualified\natomics, though (!!) so don\'t restrict those.\n\nllvm-svn: 163964"},
[b]={"e00921a0a448",1347689398,"const _Atomic(T) is not an atomic type, so do not allow it as the type \'A\' in","const _Atomic(T) is not an atomic type, so do not allow it as the type \'A\' in\nC11 7.17\'s atomic operations. GNU\'s __atomic_* builtins do allow const-qualified\natomics, though (!!) so don\'t restrict those.\n\nllvm-svn: 163964"},
[h]={{p,7169,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  if (IsC11) {\n    // ...\n    if ((Form != Load && Form != LoadCopy && AtomTy.isConstQualified()) || AtomTy.getAddressSpace() == LangAS::opencl_constant) {\n      Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_non_const_atomic) << (AtomTy.isConstQualified() ? 0 : 1) << Ptr->getType() << Ptr->getSourceRange();"}},
[h]={{o,7169,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  if (IsC11) {\n    // ...\n    if ((Form != Load && Form != LoadCopy && AtomTy.isConstQualified()) || AtomTy.getAddressSpace() == LangAS::opencl_constant) {\n      Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_non_const_atomic) << (AtomTy.isConstQualified() ? 0 : 1) << Ptr->getType() << Ptr->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaOpenCL/atomic-ops.cl"]={"clang/test/SemaOpenCL/atomic-ops.cl:28:3: error: address argument to atomic operation must be a pointer to non-const _Atomic type (\'const __generic atomic_int *\' (aka \'const __generic _Atomic(int) *\') invalid)","clang/test/SemaOpenCL/atomic-ops.cl:35:3: error: address argument to atomic operation must be a pointer to non-const _Atomic type (\'const __generic atomic_int *\' (aka \'const __generic _Atomic(int) *\') invalid)","clang/test/SemaOpenCL/atomic-ops.cl:39:3: error: address argument to atomic operation must be a pointer to non-constant _Atomic type (\'__constant atomic_int *\' (aka \'__constant _Atomic(int) *\') invalid)","clang/test/SemaOpenCL/atomic-ops.cl:45:3: error: address argument to atomic operation must be a pointer to non-constant _Atomic type (\'__constant atomic_int *\' (aka \'__constant _Atomic(int) *\') invalid)","clang/test/SemaOpenCL/atomic-ops.cl:82:3: error: address argument to atomic operation must be a pointer to non-const _Atomic type (\'const __generic atomic_int *\' (aka \'const __generic _Atomic(int) *\') invalid)","clang/test/SemaOpenCL/atomic-ops.cl:83:3: error: address argument to atomic operation must be a pointer to non-const _Atomic type (\'const __generic atomic_int *\' (aka \'const __generic _Atomic(int) *\') invalid)"}
["clang/test/SemaOpenCL/atomic-ops.cl"]={"clang/test/SemaOpenCL/atomic-ops.cl:28:3: error: address argument to atomic operation must be a pointer to non-const _Atomic type (\'const __generic atomic_int *\' (aka \'const __generic _Atomic(int) *\') invalid)","clang/test/SemaOpenCL/atomic-ops.cl:35:3: error: address argument to atomic operation must be a pointer to non-const _Atomic type (\'const __generic atomic_int *\' (aka \'const __generic _Atomic(int) *\') invalid)","clang/test/SemaOpenCL/atomic-ops.cl:39:3: error: address argument to atomic operation must be a pointer to non-constant _Atomic type (\'__constant atomic_int *\' (aka \'__constant _Atomic(int) *\') invalid)","clang/test/SemaOpenCL/atomic-ops.cl:45:3: error: address argument to atomic operation must be a pointer to non-constant _Atomic type (\'__constant atomic_int *\' (aka \'__constant _Atomic(int) *\') invalid)","clang/test/SemaOpenCL/atomic-ops.cl:82:3: error: address argument to atomic operation must be a pointer to non-const _Atomic type (\'const __generic atomic_int *\' (aka \'const __generic _Atomic(int) *\') invalid)","clang/test/SemaOpenCL/atomic-ops.cl:83:3: error: address argument to atomic operation must be a pointer to non-const _Atomic type (\'const __generic atomic_int *\' (aka \'const __generic _Atomic(int) *\') invalid)"}
Line 2,867: Line 2,869:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"a3a7c56143f4",1443917462,"Diagnose const atomics in __atomic builtins.\n\nDiagnose when a pointer to const T is used as the firs...","Diagnose const atomics in __atomic builtins.\n\nDiagnose when a pointer to const T is used as the first argument in at atomic\nbuiltin unless that builtin is a load operation. This is already checked for\nC11 atomics builtins but not for __atomic ones.\n\nThis patch was given the LGTM by rsmith when it was part\nof a larger review. (See http://reviews.llvm.org/D10407)\n\nllvm-svn: 249252"},
[b]={"a3a7c56143f4",1443917462,"Diagnose const atomics in __atomic builtins.","Diagnose const atomics in __atomic builtins.\n\nDiagnose when a pointer to const T is used as the first argument in at atomic\nbuiltin unless that builtin is a load operation. This is already checked for\nC11 atomics builtins but not for __atomic ones.\n\nThis patch was given the LGTM by rsmith when it was part\nof a larger review. (See http://reviews.llvm.org/D10407)\n\nllvm-svn: 249252"},
[h]={{p,7177,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  if (IsC11) {\n  // ...\n  } else if (Form != Load && Form != LoadCopy) {\n    if (ValType.isConstQualified()) {\n      Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_non_const_pointer) << Ptr->getType() << Ptr->getSourceRange();"}},
[h]={{o,7177,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  if (IsC11) {\n  // ...\n  } else if (Form != Load && Form != LoadCopy) {\n    if (ValType.isConstQualified()) {\n      Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_non_const_pointer) << Ptr->getType() << Ptr->getSourceRange();"}},
[j]={
[j]={
[ub]={"clang/test/Sema/builtins.c:281:3: error: address argument to atomic operation must be a pointer to non-const type (\'const int *\' invalid)"}
[pb]={"clang/test/Sema/builtins.c:281:3: error: address argument to atomic operation must be a pointer to non-const type (\'const int *\' invalid)"}
}
}
},
},
Line 2,879: Line 2,881:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"feea883de4e5",1334207297,"Implement support for 18 of the GNU-compatible __atomic builtins.\n\nThis is not quite sufficient for ...","Implement support for 18 of the GNU-compatible __atomic builtins.\n\nThis is not quite sufficient for libstdc++\'s <atomic>: we still need\n__atomic_test_and_set and __atomic_clear, and may need a more complete\n__atomic_is_lock_free implementation.\n\nWe are also missing an implementation of __atomic_always_lock_free,\n__atomic_nand_fetch, and __atomic_fetch_nand, but those aren\'t needed\nfor libstdc++.\n\nllvm-svn: 154579"},
[b]={"feea883de4e5",1334207297,"Implement support for 18 of the GNU-compatible __atomic builtins.","Implement support for 18 of the GNU-compatible __atomic builtins.\n\nThis is not quite sufficient for libstdc++\'s <atomic>: we still need\n__atomic_test_and_set and __atomic_clear, and may need a more complete\n__atomic_is_lock_free implementation.\n\nWe are also missing an implementation of __atomic_always_lock_free,\n__atomic_nand_fetch, and __atomic_fetch_nand, but those aren\'t needed\nfor libstdc++.\n\nllvm-svn: 154579"},
[h]={{p,7231,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  if (!IsC11 && !AtomTy.isTriviallyCopyableType(Context) && !AtomTy->isScalarType()) {\n    // ...\n    Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_trivial_copy) << Ptr->getType() << Ptr->getSourceRange();"}},
[h]={{o,7231,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  if (!IsC11 && !AtomTy.isTriviallyCopyableType(Context) && !AtomTy->isScalarType()) {\n    // ...\n    Diag(ExprRange.getBegin(), diag::err_atomic_op_needs_trivial_copy) << Ptr->getType() << Ptr->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/atomic-ops.c"]={"clang/test/Sema/atomic-ops.c:156:3: error: address argument to atomic operation must be a pointer to a trivially-copyable type (\'_Atomic(int) *\' invalid)","clang/test/Sema/atomic-ops.c:183:3: error: address argument to atomic operation must be a pointer to a trivially-copyable type (\'_Atomic(int) *\' invalid)"}
["clang/test/Sema/atomic-ops.c"]={"clang/test/Sema/atomic-ops.c:156:3: error: address argument to atomic operation must be a pointer to a trivially-copyable type (\'_Atomic(int) *\' invalid)","clang/test/Sema/atomic-ops.c:183:3: error: address argument to atomic operation must be a pointer to a trivially-copyable type (\'_Atomic(int) *\' invalid)"}
Line 2,891: Line 2,893:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"a08a74705bb0",1326155821,"objc++: patch for IRgen for atomic properties of\nc++ objects with non-trivial assignment/copy functi...","objc++: patch for IRgen for atomic properties of\nc++ objects with non-trivial assignment/copy functions.\nAlso, one additional sema check. // rdar://6137845\n\nllvm-svn: 147817"},
[b]={"a08a74705bb0",1326155821,"objc++: patch for IRgen for atomic properties of","objc++: patch for IRgen for atomic properties of\nc++ objects with non-trivial assignment/copy functions.\nAlso, one additional sema check. // rdar://6137845\n\nllvm-svn: 147817"},
[h]={{P,1547,"/// 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 (ObjCMethodDecl *setterMethod = property->getSetterMethodDecl()) {\n    // ...\n    if (getLangOpts().CPlusPlus && Synthesize && !CompleteTypeErr && Ivar->getType()->isRecordType()) {\n      // ...\n      if (property->getPropertyAttributes() & ObjCPropertyAttribute::kind_atomic) {\n        // ...\n        if (const CXXOperatorCallExpr *CXXCE = dyn_cast_or_null<CXXOperatorCallExpr>(callExpr))\n          if (const FunctionDecl *FuncDecl = CXXCE->getDirectCallee())\n            if (!FuncDecl->isTrivial())\n              if (property->getType()->isReferenceType()) {\n                Diag(PropertyDiagLoc, diag::err_atomic_property_nontrivial_assign_op) << property->getType();"}},
[h]={{Q,1547,"/// 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 (ObjCMethodDecl *setterMethod = property->getSetterMethodDecl()) {\n    // ...\n    if (getLangOpts().CPlusPlus && Synthesize && !CompleteTypeErr && Ivar->getType()->isRecordType()) {\n      // ...\n      if (property->getPropertyAttributes() & ObjCPropertyAttribute::kind_atomic) {\n        // ...\n        if (const CXXOperatorCallExpr *CXXCE = dyn_cast_or_null<CXXOperatorCallExpr>(callExpr))\n          if (const FunctionDecl *FuncDecl = CXXCE->getDirectCallee())\n            if (!FuncDecl->isTrivial())\n              if (property->getType()->isReferenceType()) {\n                Diag(PropertyDiagLoc, diag::err_atomic_property_nontrivial_assign_op) << property->getType();"}},
[j]={
[j]={
["clang/test/SemaObjCXX/property-synthesis-error.mm"]={"clang/test/SemaObjCXX/property-synthesis-error.mm:70:13: error: atomic property of reference type \'const TCPPObject &\' cannot have non-trivial assignment operator","clang/test/SemaObjCXX/property-synthesis-error.mm:102:1: error: atomic property of reference type \'TemplateClass2<int &> &\' cannot have non-trivial assignment operator"}
["clang/test/SemaObjCXX/property-synthesis-error.mm"]={"clang/test/SemaObjCXX/property-synthesis-error.mm:70:13: error: atomic property of reference type \'const TCPPObject &\' cannot have non-trivial assignment operator","clang/test/SemaObjCXX/property-synthesis-error.mm:102:1: error: atomic property of reference type \'TemplateClass2<int &> &\' cannot have non-trivial assignment operator"}
Line 2,904: Line 2,906:
[g]=k,
[g]=k,
[b]={"0dfb889575a6",1317942033,"Support for C1x _Atomic specifier (see testcase).  This is primarily being committed at the moment t...","Support for C1x _Atomic specifier (see testcase).  This is primarily being committed at the moment to help support C++0x <atomic>, but it should be a solid base for implementing the full specification of C1x _Atomic.\n\nThanks to Jeffrey Yasskin for the thorough review!\n\nllvm-svn: 141330"},
[b]={"0dfb889575a6",1317942033,"Support for C1x _Atomic specifier (see testcase).  This is primarily being committed at the moment t...","Support for C1x _Atomic specifier (see testcase).  This is primarily being committed at the moment to help support C++0x <atomic>, but it should be a solid base for implementing the full specification of C1x _Atomic.\n\nThanks to Jeffrey Yasskin for the thorough review!\n\nllvm-svn: 141330"},
[h]={{o,9762,"QualType Sema::BuildAtomicType(QualType T, SourceLocation Loc) {\n  if (!isDependentOrGNUAutoType(T)) {\n    // ...\n    if (RequireCompleteType(Loc, T, diag::err_atomic_specifier_bad_type, 0))"},{o,9785,"QualType Sema::BuildAtomicType(QualType T, SourceLocation Loc) {\n  if (!isDependentOrGNUAutoType(T)) {\n    // ...\n    if (DisallowedKind != -1) {\n      Diag(Loc, diag::err_atomic_specifier_bad_type) << DisallowedKind << T;"}},
[h]={{n,9762,"QualType Sema::BuildAtomicType(QualType T, SourceLocation Loc) {\n  if (!isDependentOrGNUAutoType(T)) {\n    // ...\n    if (RequireCompleteType(Loc, T, diag::err_atomic_specifier_bad_type, 0))"},{n,9785,"QualType Sema::BuildAtomicType(QualType T, SourceLocation Loc) {\n  if (!isDependentOrGNUAutoType(T)) {\n    // ...\n    if (DisallowedKind != -1) {\n      Diag(Loc, diag::err_atomic_specifier_bad_type) << DisallowedKind << T;"}},
[j]={
[j]={
["clang/test/Sema/atomic-type.c"]={"clang/test/Sema/atomic-type.c:18:1: error: _Atomic cannot be applied to function type \'int (void)\' ","clang/test/Sema/atomic-type.c:19:1: error: _Atomic cannot be applied to incomplete type \'struct ErrorS\' ","clang/test/Sema/atomic-type.c:20:1: error: _Atomic cannot be applied to array type \'int[10]\' ","clang/test/Sema/atomic-type.c:21:1: error: _Atomic cannot be applied to qualified type \'const int\' ","clang/test/Sema/atomic-type.c:22:1: error: _Atomic cannot be applied to atomic type \'_Atomic(int)\' "}
["clang/test/Sema/atomic-type.c"]={"clang/test/Sema/atomic-type.c:18:1: error: _Atomic cannot be applied to function type \'int (void)\' ","clang/test/Sema/atomic-type.c:19:1: error: _Atomic cannot be applied to incomplete type \'struct ErrorS\' ","clang/test/Sema/atomic-type.c:20:1: error: _Atomic cannot be applied to array type \'int[10]\' ","clang/test/Sema/atomic-type.c:21:1: error: _Atomic cannot be applied to qualified type \'const int\' ","clang/test/Sema/atomic-type.c:22:1: error: _Atomic cannot be applied to atomic type \'_Atomic(int)\' "}
Line 2,915: Line 2,917:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"b111da14ada1",1534544288,"[ObjC] Error out when using forward-declared protocol in a @protocol\nexpression\n\nClang emits invalid...","[ObjC] Error out when using forward-declared protocol in a @protocol\nexpression\n\nClang emits invalid protocol metadata when a @protocol expression is used with a\nforward-declared protocol. The protocol metadata is missing protocol conformance\nlist of the protocol since we don\'t have access to the definition of it in the\ncompiled translation unit. The linker then might end up picking the invalid\nmetadata when linking which will lead to incorrect runtime protocol conformance\nchecks.\n\nThis commit makes sure that Clang fails to compile code that uses a @protocol\nexpression with a forward-declared protocol. This ensures that Clang does not\nemit invalid protocol metadata. I added an extra assert in CodeGen to ensure\nthat this kind of issue won\'t happen in other places.\n\nrdar://32787811\n\nDifferential Revision: https://reviews.llvm.org/D49462\n\nllvm-svn: 340102"},
[b]={"b111da14ada1",1534544288,"[ObjC] Error out when using forward-declared protocol in a @protocol","[ObjC] Error out when using forward-declared protocol in a @protocol\nexpression\n\nClang emits invalid protocol metadata when a @protocol expression is used with a\nforward-declared protocol. The protocol metadata is missing protocol conformance\nlist of the protocol since we don\'t have access to the definition of it in the\ncompiled translation unit. The linker then might end up picking the invalid\nmetadata when linking which will lead to incorrect runtime protocol conformance\nchecks.\n\nThis commit makes sure that Clang fails to compile code that uses a @protocol\nexpression with a forward-declared protocol. This ensures that Clang does not\nemit invalid protocol metadata. I added an extra assert in CodeGen to ensure\nthat this kind of issue won\'t happen in other places.\n\nrdar://32787811\n\nDifferential Revision: https://reviews.llvm.org/D49462\n\nllvm-svn: 340102"},
[h]={{C,1400,"ExprResult Sema::ParseObjCProtocolExpression(IdentifierInfo *ProtocolId, SourceLocation AtLoc, SourceLocation ProtoLoc, SourceLocation LParenLoc, SourceLocation ProtoIdLoc, SourceLocation RParenLoc) {\n  // ...\n  if (!PDecl->hasDefinition()) {\n    Diag(ProtoLoc, diag::err_atprotocol_protocol) << PDecl;"}},
[h]={{C,1400,"ExprResult Sema::ParseObjCProtocolExpression(IdentifierInfo *ProtocolId, SourceLocation AtLoc, SourceLocation ProtoLoc, SourceLocation LParenLoc, SourceLocation ProtoIdLoc, SourceLocation RParenLoc) {\n  // ...\n  if (!PDecl->hasDefinition()) {\n    Diag(ProtoLoc, diag::err_atprotocol_protocol) << PDecl;"}},
[j]={
[j]={
Line 2,927: Line 2,929:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang.\n\n`diagnose_if` can be used to have clang emit either warning...","Add the diagnose_if attribute to clang.\n\n`diagnose_if` can be used to have clang emit either warnings or errors\nfor function calls that meet user-specified conditions. For example:\n\n```\nconstexpr int foo(int a)\n  __attribute__((diagnose_if(a > 10, \"configurations with a > 10 are \"\n                                      \"expensive.\", \"warning\")));\n\nint f1 = foo(9);\nint f2 = foo(10); // warning: configuration with a > 10 are expensive.\nint f3 = foo(f2);\n```\n\nIt currently only emits diagnostics in cases where the condition is\nguaranteed to always be true. So, the following code will emit no\nwarnings:\n\n```\nconstexpr int bar(int a) {\n  foo(a);\n  return 0;\n}\n\nconstexpr int i = bar(10);\n```\n\nWe hope to support optionally emitting diagnostics for cases like that\n(and emitting runtime checks) in the future.\n\nRelease notes will appear shortly. :)\n\nDifferential Revision: https://reviews.llvm.org/D27424\n\nllvm-svn: 291418"},
[b]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang.","Add the diagnose_if attribute to clang.\n\n`diagnose_if` can be used to have clang emit either warnings or errors\nfor function calls that meet user-specified conditions. For example:\n\n```\nconstexpr int foo(int a)\n  __attribute__((diagnose_if(a > 10, \"configurations with a > 10 are \"\n                                      \"expensive.\", \"warning\")));\n\nint f1 = foo(9);\nint f2 = foo(10); // warning: configuration with a > 10 are expensive.\nint f3 = foo(f2);\n```\n\nIt currently only emits diagnostics in cases where the condition is\nguaranteed to always be true. So, the following code will emit no\nwarnings:\n\n```\nconstexpr int bar(int a) {\n  foo(a);\n  return 0;\n}\n\nconstexpr int i = bar(10);\n```\n\nWe hope to support optionally emitting diagnostics for cases like that\n(and emitting runtime checks) in the future.\n\nRelease notes will appear shortly. :)\n\nDifferential Revision: https://reviews.llvm.org/D27424\n\nllvm-svn: 291418"},
[h]={{l,948,"static bool checkFunctionConditionAttr(Sema &S, Decl *D, const ParsedAttr &AL, Expr *&Cond, StringRef &Msg) {\n  // ...\n  if (isa<FunctionDecl>(D) && !Cond->isValueDependent() && !Expr::isPotentialConstantExprUnevaluated(Cond, cast<FunctionDecl>(D), Diags)) {\n    S.Diag(AL.getLoc(), diag::err_attr_cond_never_constant_expr) << AL;"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",253,"static Expr *instantiateDependentFunctionAttrCondition(Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const Attr *A, Expr *OldCond, const Decl *Tmpl, FunctionDecl *New) {\n  // ...\n  if (OldCond->isValueDependent() && !Cond->isValueDependent() && !Expr::isPotentialConstantExprUnevaluated(Cond, New, Diags)) {\n    S.Diag(A->getLocation(), diag::err_attr_cond_never_constant_expr) << A;"}},
[h]={{l,948,"static bool checkFunctionConditionAttr(Sema &S, Decl *D, const ParsedAttr &AL, Expr *&Cond, StringRef &Msg) {\n  // ...\n  if (isa<FunctionDecl>(D) && !Cond->isValueDependent() && !Expr::isPotentialConstantExprUnevaluated(Cond, cast<FunctionDecl>(D), Diags)) {\n    S.Diag(AL.getLoc(), diag::err_attr_cond_never_constant_expr) << AL;"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",253,"static Expr *instantiateDependentFunctionAttrCondition(Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const Attr *A, Expr *OldCond, const Decl *Tmpl, FunctionDecl *New) {\n  // ...\n  if (OldCond->isValueDependent() && !Cond->isValueDependent() && !Expr::isPotentialConstantExprUnevaluated(Cond, New, Diags)) {\n    S.Diag(A->getLocation(), diag::err_attr_cond_never_constant_expr) << A;"}},
[j]={
[j]={
Line 2,939: Line 2,941:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={db,1308874139,cb,eb},
[b]={bb,1308874139,cb,db},
[h]={{o,6973,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  // Check for redundant/conflicting ownership qualifiers.\n  if (Qualifiers::ObjCLifetime previousLifetime = type.getQualifiers().getObjCLifetime()) {\n    // If it\'s written directly, that\'s an error.\n    if (S.Context.hasDirectOwnershipQualifier(type)) {\n      S.Diag(AttrLoc, diag::err_attr_objc_ownership_redundant) << type;"}},
[h]={{n,6973,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  // Check for redundant/conflicting ownership qualifiers.\n  if (Qualifiers::ObjCLifetime previousLifetime = type.getQualifiers().getObjCLifetime()) {\n    // If it\'s written directly, that\'s an error.\n    if (S.Context.hasDirectOwnershipQualifier(type)) {\n      S.Diag(AttrLoc, diag::err_attr_objc_ownership_redundant) << type;"}},
[j]={
[j]={
["clang/test/SemaObjCXX/arc-objc-lifetime.mm"]={"clang/test/SemaObjCXX/arc-objc-lifetime.mm:36:1: error: the type \'I *__strong\' is already explicitly ownership-qualified","clang/test/SemaObjCXX/arc-objc-lifetime.mm:37:14: error: the type \'I *__strong\' is already explicitly ownership-qualified","clang/test/SemaObjCXX/arc-objc-lifetime.mm:38:14: error: the type \'I *__strong\' is already explicitly ownership-qualified"}
["clang/test/SemaObjCXX/arc-objc-lifetime.mm"]={"clang/test/SemaObjCXX/arc-objc-lifetime.mm:36:1: error: the type \'I *__strong\' is already explicitly ownership-qualified","clang/test/SemaObjCXX/arc-objc-lifetime.mm:37:14: error: the type \'I *__strong\' is already explicitly ownership-qualified","clang/test/SemaObjCXX/arc-objc-lifetime.mm:38:14: error: the type \'I *__strong\' is already explicitly ownership-qualified"}
Line 2,951: Line 2,953:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={X,1582847864,W,S},
[b]={T,1582847864,U,V},
[h]={{l,6390,"static void handleSwiftError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  auto hasErrorParameter = [](Sema &S, Decl *D, const ParsedAttr &AL) -> bool {\n    // ...\n    S.Diag(AL.getLoc(), diag::err_attr_swift_error_no_error_parameter) << AL << isa<ObjCMethodDecl>(D);"}},
[h]={{l,6390,"static void handleSwiftError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  auto hasErrorParameter = [](Sema &S, Decl *D, const ParsedAttr &AL) -> bool {\n    // ...\n    S.Diag(AL.getLoc(), diag::err_attr_swift_error_no_error_parameter) << AL << isa<ObjCMethodDecl>(D);"}},
[j]={
[j]={
Line 2,963: Line 2,965:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={X,1582847864,W,S},
[b]={T,1582847864,U,V},
[h]={{l,6403,"static void handleSwiftError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  auto hasPointerResult = [](Sema &S, Decl *D, const ParsedAttr &AL) -> bool {\n    // ...\n    S.Diag(AL.getLoc(), diag::err_attr_swift_error_return_type) << AL << AL.getArgAsIdent(0)->Ident->getName() << isa<ObjCMethodDecl>(D) << /*pointer*/ 1;"},{l,6414,"static void handleSwiftError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  auto hasIntegerResult = [](Sema &S, Decl *D, const ParsedAttr &AL) -> bool {\n    // ...\n    S.Diag(AL.getLoc(), diag::err_attr_swift_error_return_type) << AL << AL.getArgAsIdent(0)->Ident->getName() << isa<ObjCMethodDecl>(D) << /*integral*/ 0;"}},
[h]={{l,6403,"static void handleSwiftError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  auto hasPointerResult = [](Sema &S, Decl *D, const ParsedAttr &AL) -> bool {\n    // ...\n    S.Diag(AL.getLoc(), diag::err_attr_swift_error_return_type) << AL << AL.getArgAsIdent(0)->Ident->getName() << isa<ObjCMethodDecl>(D) << /*pointer*/ 1;"},{l,6414,"static void handleSwiftError(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  auto hasIntegerResult = [](Sema &S, Decl *D, const ParsedAttr &AL) -> bool {\n    // ...\n    S.Diag(AL.getLoc(), diag::err_attr_swift_error_return_type) << AL << AL.getArgAsIdent(0)->Ident->getName() << isa<ObjCMethodDecl>(D) << /*integral*/ 0;"}},
[j]={
[j]={
Line 2,975: Line 2,977:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"d3b01bc7c673",1340452306,"Support the tls_model attribute (PR9788)\n\nThis adds support for the tls_model attribute. This allows...","Support the tls_model attribute (PR9788)\n\nThis adds support for the tls_model attribute. This allows the user to\nchoose a TLS model that is better than what LLVM would select by\ndefault. For example, a variable might be declared as:\n\n  __thread int x __attribute__((tls_model(\"initial-exec\")));\n\nif it will not be used in a shared library that is dlopen\'ed.\n\nThis depends on LLVM r159077.\n\nllvm-svn: 159078"},
[b]={"d3b01bc7c673",1340452306,"Support the tls_model attribute (PR9788)","Support the tls_model attribute (PR9788)\n\nThis adds support for the tls_model attribute. This allows the user to\nchoose a TLS model that is better than what LLVM would select by\ndefault. For example, a variable might be declared as:\n\n  __thread int x __attribute__((tls_model(\"initial-exec\")));\n\nif it will not be used in a shared library that is dlopen\'ed.\n\nThis depends on LLVM r159077.\n\nllvm-svn: 159078"},
[h]={{l,2038,"static void handleTLSModelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Check that the value.\n  if (Model != \"global-dynamic\" && Model != \"local-dynamic\" && Model != \"initial-exec\" && Model != \"local-exec\") {\n    S.Diag(LiteralLoc, diag::err_attr_tlsmodel_arg);"}},
[h]={{l,2038,"static void handleTLSModelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Check that the value.\n  if (Model != \"global-dynamic\" && Model != \"local-dynamic\" && Model != \"initial-exec\" && Model != \"local-exec\") {\n    S.Diag(LiteralLoc, diag::err_attr_tlsmodel_arg);"}},
[j]={
[j]={
Line 2,987: Line 2,989:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"8f5f520653f5",1311798605,"Forbid address-space-qualified function types, per TR 18037\n\nllvm-svn: 136257","Forbid address-space-qualified function types, per TR 18037\n\nllvm-svn: 136257"},
[b]={"8f5f520653f5",1311798605,"Forbid address-space-qualified function types, per TR 18037","Forbid address-space-qualified function types, per TR 18037\n\nllvm-svn: 136257"},
[h]={{o,6827,"/// HandleAddressSpaceTypeAttribute - Process an address_space attribute on the\n/// specified type.  The attribute contains 1 argument, the id of the address\n/// space for the type.\nstatic void HandleAddressSpaceTypeAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  // ...\n  // ISO/IEC TR 18037 S5.3 (amending C99 6.7.3): \"A function type shall not be\n  // qualified by an address-space qualifier.\"\n  if (Type->isFunctionType()) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_address_function_type);"}},
[h]={{n,6827,"/// HandleAddressSpaceTypeAttribute - Process an address_space attribute on the\n/// specified type.  The attribute contains 1 argument, the id of the address\n/// space for the type.\nstatic void HandleAddressSpaceTypeAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  // ...\n  // ISO/IEC TR 18037 S5.3 (amending C99 6.7.3): \"A function type shall not be\n  // qualified by an address-space qualifier.\"\n  if (Type->isFunctionType()) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_address_function_type);"}},
[j]={
[j]={
["clang/test/Sema/address_spaces.c"]={"clang/test/Sema/address_spaces.c:50:1: error: function type may not be qualified with an address space","clang/test/Sema/address_spaces.c:51:9: error: function type may not be qualified with an address space"}
["clang/test/Sema/address_spaces.c"]={"clang/test/Sema/address_spaces.c:50:1: error: function type may not be qualified with an address space","clang/test/Sema/address_spaces.c:51:9: error: function type may not be qualified with an address space"}
Line 2,999: Line 3,001:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{o,4624,"// Diagnose whether this is a case with the multiple addr spaces.\n// Returns true if this is an invalid case.\n// ISO/IEC TR 18037 S5.3 (amending C99 6.7.3): \"No type shall be qualified\n// by qualifiers for two or more different address spaces.\"\nstatic bool DiagnoseMultipleAddrSpaceAttributes(Sema &S, LangAS ASOld, LangAS ASNew, SourceLocation AttrLoc) {\n  if (ASOld != LangAS::Default) {\n    if (ASOld != ASNew) {\n      S.Diag(AttrLoc, diag::err_attribute_address_multiple_qualifiers);"},{o,6774,"/// BuildAddressSpaceAttr - Builds a DependentAddressSpaceType if an expression\n/// is uninstantiated. If instantiated it will apply the appropriate address\n/// space to the type. This function allows dependent template variables to be\n/// used in conjunction with the address_space attribute\nQualType Sema::BuildAddressSpaceAttr(QualType &T, LangAS ASIdx, Expr *AddrSpace, SourceLocation AttrLoc) {\n  // ...\n  // A check with similar intentions as checking if a type already has an\n  // address space except for on a dependent types, basically if the\n  // current type is already a DependentAddressSpaceType then its already\n  // lined up to have another address space on it and we can\'t have\n  // multiple address spaces on the one pointer indirection\n  if (T->getAs<DependentAddressSpaceType>()) {\n    Diag(AttrLoc, diag::err_attribute_address_multiple_qualifiers);"}},
[h]={{n,4624,"// Diagnose whether this is a case with the multiple addr spaces.\n// Returns true if this is an invalid case.\n// ISO/IEC TR 18037 S5.3 (amending C99 6.7.3): \"No type shall be qualified\n// by qualifiers for two or more different address spaces.\"\nstatic bool DiagnoseMultipleAddrSpaceAttributes(Sema &S, LangAS ASOld, LangAS ASNew, SourceLocation AttrLoc) {\n  if (ASOld != LangAS::Default) {\n    if (ASOld != ASNew) {\n      S.Diag(AttrLoc, diag::err_attribute_address_multiple_qualifiers);"},{n,6774,"/// BuildAddressSpaceAttr - Builds a DependentAddressSpaceType if an expression\n/// is uninstantiated. If instantiated it will apply the appropriate address\n/// space to the type. This function allows dependent template variables to be\n/// used in conjunction with the address_space attribute\nQualType Sema::BuildAddressSpaceAttr(QualType &T, LangAS ASIdx, Expr *AddrSpace, SourceLocation AttrLoc) {\n  // ...\n  // A check with similar intentions as checking if a type already has an\n  // address space except for on a dependent types, basically if the\n  // current type is already a DependentAddressSpaceType then its already\n  // lined up to have another address space on it and we can\'t have\n  // multiple address spaces on the one pointer indirection\n  if (T->getAs<DependentAddressSpaceType>()) {\n    Diag(AttrLoc, diag::err_attribute_address_multiple_qualifiers);"}},
[j]={
[j]={
["clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.clcpp"]={"clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.clcpp:6:24: error: multiple address spaces specified for type"}
["clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.clcpp"]={"clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.clcpp:6:24: error: multiple address spaces specified for type"}
Line 3,011: Line 3,013:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"8945266f3d02",1248763938,"Bounds checking for address spaces.\n\nllvm-svn: 77303","Bounds checking for address spaces.\n\nllvm-svn: 77303"},
[b]={"8945266f3d02",1248763938,"Bounds checking for address spaces.","Bounds checking for address spaces.\n\nllvm-svn: 77303"},
[h]={{o,6727,"/// Build an AddressSpace index from a constant expression and diagnose any\n/// errors related to invalid address_spaces. Returns true on successfully\n/// building an AddressSpace index.\nstatic bool BuildAddressSpaceIndex(Sema &S, LangAS &ASIdx, const Expr *AddrSpace, SourceLocation AttrLoc) {\n  if (!AddrSpace->isValueDependent()) {\n    // ...\n    // Bounds checking.\n    if (addrSpace.isSigned()) {\n      if (addrSpace.isNegative()) {\n        S.Diag(AttrLoc, diag::err_attribute_address_space_negative) << AddrSpace->getSourceRange();"}},
[h]={{n,6727,"/// Build an AddressSpace index from a constant expression and diagnose any\n/// errors related to invalid address_spaces. Returns true on successfully\n/// building an AddressSpace index.\nstatic bool BuildAddressSpaceIndex(Sema &S, LangAS &ASIdx, const Expr *AddrSpace, SourceLocation AttrLoc) {\n  if (!AddrSpace->isValueDependent()) {\n    // ...\n    // Bounds checking.\n    if (addrSpace.isSigned()) {\n      if (addrSpace.isNegative()) {\n        S.Diag(AttrLoc, diag::err_attribute_address_space_negative) << AddrSpace->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/address_spaces.c"]={"clang/test/Sema/address_spaces.c:23:18: error: address space is negative"}
["clang/test/Sema/address_spaces.c"]={"clang/test/Sema/address_spaces.c:23:18: error: address space is negative"}
Line 3,023: Line 3,025:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"8945266f3d02",1248763938,"Bounds checking for address spaces.\n\nllvm-svn: 77303","Bounds checking for address spaces.\n\nllvm-svn: 77303"},
[b]={"8945266f3d02",1248763938,"Bounds checking for address spaces.","Bounds checking for address spaces.\n\nllvm-svn: 77303"},
[h]={{o,6739,"/// Build an AddressSpace index from a constant expression and diagnose any\n/// errors related to invalid address_spaces. Returns true on successfully\n/// building an AddressSpace index.\nstatic bool BuildAddressSpaceIndex(Sema &S, LangAS &ASIdx, const Expr *AddrSpace, SourceLocation AttrLoc) {\n  if (!AddrSpace->isValueDependent()) {\n    // ...\n    if (addrSpace > max) {\n      S.Diag(AttrLoc, diag::err_attribute_address_space_too_high) << (unsigned)max.getZExtValue() << AddrSpace->getSourceRange();"}},
[h]={{n,6739,"/// Build an AddressSpace index from a constant expression and diagnose any\n/// errors related to invalid address_spaces. Returns true on successfully\n/// building an AddressSpace index.\nstatic bool BuildAddressSpaceIndex(Sema &S, LangAS &ASIdx, const Expr *AddrSpace, SourceLocation AttrLoc) {\n  if (!AddrSpace->isValueDependent()) {\n    // ...\n    if (addrSpace > max) {\n      S.Diag(AttrLoc, diag::err_attribute_address_space_too_high) << (unsigned)max.getZExtValue() << AddrSpace->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/address_spaces.c"]={"clang/test/Sema/address_spaces.c:24:18: error: address space is larger than the maximum supported (8388586)","clang/test/Sema/address_spaces.c:25:18: error: address space is larger than the maximum supported (8388586)","clang/test/Sema/address_spaces.c:27:18: error: address space is larger than the maximum supported (8388586)"}
["clang/test/Sema/address_spaces.c"]={"clang/test/Sema/address_spaces.c:24:18: error: address space is larger than the maximum supported (8388586)","clang/test/Sema/address_spaces.c:25:18: error: address space is larger than the maximum supported (8388586)","clang/test/Sema/address_spaces.c:27:18: error: address space is larger than the maximum supported (8388586)"}
Line 3,035: Line 3,037:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"abecae741cb7",1392237370,"Sema: Restrict alignment to 2**28.\n\nAllowing alignment past this point causes wrap around within cla...","Sema: Restrict alignment to 2**28.\n\nAllowing alignment past this point causes wrap around within clang.\n\nN.B.  GCC has the same restriction.\n\nllvm-svn: 201254"},
[b]={"abecae741cb7",1392237370,"Sema: Restrict alignment to 2**28.","Sema: Restrict alignment to 2**28.\n\nAllowing alignment past this point causes wrap around within clang.\n\nN.B.  GCC has the same restriction.\n\nllvm-svn: 201254"},
[h]={{l,4481,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  // ...\n  if (Alignment > MaximumAlignment) {\n    Diag(AttrLoc, diag::err_attribute_aligned_too_great) << MaximumAlignment << E->getSourceRange();"}},
[h]={{l,4481,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  // ...\n  if (Alignment > MaximumAlignment) {\n    Diag(AttrLoc, diag::err_attribute_aligned_too_great) << MaximumAlignment << E->getSourceRange();"}},
[j]={
[j]={
Line 3,047: Line 3,049:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"5b48d725a0bc",1474851777,"[AMDGPU] Expose flat work group size, register and wave control attributes\n\n__attribute__((amdgpu_fl...","[AMDGPU] Expose flat work group size, register and wave control attributes\n\n__attribute__((amdgpu_flat_work_group_size(<min>, <max>))) - request minimum and maximum flat work group size\n__attribute__((amdgpu_waves_per_eu(<min>[, <max>]))) - request minimum and/or maximum waves per execution unit\n\nDifferential Revision: https://reviews.llvm.org/D24513\n\nllvm-svn: 282371"},
[b]={"5b48d725a0bc",1474851777,"[AMDGPU] Expose flat work group size, register and wave control attributes","[AMDGPU] Expose flat work group size, register and wave control attributes\n\n__attribute__((amdgpu_flat_work_group_size(<min>, <max>))) - request minimum and maximum flat work group size\n__attribute__((amdgpu_waves_per_eu(<min>[, <max>]))) - request minimum and/or maximum waves per execution unit\n\nDifferential Revision: https://reviews.llvm.org/D24513\n\nllvm-svn: 282371"},
[h]={{l,7853,"static bool checkAMDGPUFlatWorkGroupSizeArguments(Sema &S, Expr *MinExpr, Expr *MaxExpr, const AMDGPUFlatWorkGroupSizeAttr &Attr) {\n  // ...\n  if (Min == 0 && Max != 0) {\n    S.Diag(Attr.getLocation(), diag::err_attribute_argument_invalid) << &Attr << 0;"},{l,7858,"static bool checkAMDGPUFlatWorkGroupSizeArguments(Sema &S, Expr *MinExpr, Expr *MaxExpr, const AMDGPUFlatWorkGroupSizeAttr &Attr) {\n  // ...\n  if (Min > Max) {\n    S.Diag(Attr.getLocation(), diag::err_attribute_argument_invalid) << &Attr << 1;"},{l,7907,"static bool checkAMDGPUWavesPerEUArguments(Sema &S, Expr *MinExpr, Expr *MaxExpr, const AMDGPUWavesPerEUAttr &Attr) {\n  // ...\n  if (Min == 0 && Max != 0) {\n    S.Diag(Attr.getLocation(), diag::err_attribute_argument_invalid) << &Attr << 0;"},{l,7912,"static bool checkAMDGPUWavesPerEUArguments(Sema &S, Expr *MinExpr, Expr *MaxExpr, const AMDGPUWavesPerEUAttr &Attr) {\n  // ...\n  if (Max != 0 && Min > Max) {\n    S.Diag(Attr.getLocation(), diag::err_attribute_argument_invalid) << &Attr << 1;"}},
[h]={{l,7853,"static bool checkAMDGPUFlatWorkGroupSizeArguments(Sema &S, Expr *MinExpr, Expr *MaxExpr, const AMDGPUFlatWorkGroupSizeAttr &Attr) {\n  // ...\n  if (Min == 0 && Max != 0) {\n    S.Diag(Attr.getLocation(), diag::err_attribute_argument_invalid) << &Attr << 0;"},{l,7858,"static bool checkAMDGPUFlatWorkGroupSizeArguments(Sema &S, Expr *MinExpr, Expr *MaxExpr, const AMDGPUFlatWorkGroupSizeAttr &Attr) {\n  // ...\n  if (Min > Max) {\n    S.Diag(Attr.getLocation(), diag::err_attribute_argument_invalid) << &Attr << 1;"},{l,7907,"static bool checkAMDGPUWavesPerEUArguments(Sema &S, Expr *MinExpr, Expr *MaxExpr, const AMDGPUWavesPerEUAttr &Attr) {\n  // ...\n  if (Min == 0 && Max != 0) {\n    S.Diag(Attr.getLocation(), diag::err_attribute_argument_invalid) << &Attr << 0;"},{l,7912,"static bool checkAMDGPUWavesPerEUArguments(Sema &S, Expr *MinExpr, Expr *MaxExpr, const AMDGPUWavesPerEUAttr &Attr) {\n  // ...\n  if (Max != 0 && Min > Max) {\n    S.Diag(Attr.getLocation(), diag::err_attribute_argument_invalid) << &Attr << 1;"}},
[j]={
[j]={
Line 3,059: Line 3,061:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"b1d23a8db36c",1400510498,"[OpenCL] Reject reqd_work_group_size(X, Y, Z) where X, Y or Z == 0.\n\nPatch by Pedro Ferreira!\n\nllvm-...","[OpenCL] Reject reqd_work_group_size(X, Y, Z) where X, Y or Z == 0.\n\nPatch by Pedro Ferreira!\n\nllvm-svn: 209127"},
[b]={"b1d23a8db36c",1400510498,"[OpenCL] Reject reqd_work_group_size(X, Y, Z) where X, Y or Z == 0.","[OpenCL] Reject reqd_work_group_size(X, Y, Z) where X, Y or Z == 0.\n\nPatch by Pedro Ferreira!\n\nllvm-svn: 209127"},
[h]={{l,3221,"// Handles reqd_work_group_size and work_group_size_hint.\ntemplate <typename WorkGroupAttr> static void handleWorkGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned i = 0; i < 3; ++i) {\n    // ...\n    if (WGSize[i] == 0) {\n      S.Diag(AL.getLoc(), diag::err_attribute_argument_is_zero) << AL << E->getSourceRange();"},{l,3244,"// Handles intel_reqd_sub_group_size.\nstatic void handleSubGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (SGSize == 0) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_is_zero) << AL << E->getSourceRange();"}},
[h]={{l,3221,"// Handles reqd_work_group_size and work_group_size_hint.\ntemplate <typename WorkGroupAttr> static void handleWorkGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned i = 0; i < 3; ++i) {\n    // ...\n    if (WGSize[i] == 0) {\n      S.Diag(AL.getLoc(), diag::err_attribute_argument_is_zero) << AL << E->getSourceRange();"},{l,3244,"// Handles intel_reqd_sub_group_size.\nstatic void handleSubGroupSize(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (SGSize == 0) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_is_zero) << AL << E->getSourceRange();"}},
[j]={
[j]={
Line 3,083: Line 3,085:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{l,327,"/// Check if IdxExpr is a valid parameter index for a function or\n/// instance method D.  May output an error.\n///\n/// \\returns true if IdxExpr is a valid index.\ntemplate <typename AttrInfo> static bool checkFunctionOrMethodParameterIndex(Sema &S, const Decl *D, const AttrInfo &AI, unsigned AttrArgNum, const Expr *IdxExpr, ParamIdx &Idx, bool CanIndexImplicitThis = false) {\n  // ...\n  if (IdxSource < 1 || (!IV && IdxSource > NumParams)) {\n    S.Diag(getAttrLoc(AI), diag::err_attribute_argument_out_of_bounds) << &AI << AttrArgNum << IdxExpr->getSourceRange();"},{l,3974,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (Idx < 1 || Idx > NumArgs) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << 2 << IdxExpr->getSourceRange();"},{l,4024,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // FirstArg == 0 is is always valid.\n  if (FirstArg != 0) {\n    if (Kind == StrftimeFormat) {\n    // ...\n    } else if (isFunctionOrMethodVariadic(D)) {\n      // Else, if the function is variadic, then FirstArg must be 0 or the\n      // \"position\" of the ... parameter. It\'s unusual to use 0 with variadic\n      // functions, so the fixit proposes the latter.\n      if (FirstArg != NumArgs + 1) {\n        S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << 3 << FirstArgExpr->getSourceRange() << FixItHint::CreateReplacement(FirstArgExpr->getSourceRange(), std::to_string(NumArgs + 1));"},{l,4037,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // FirstArg == 0 is is always valid.\n  if (FirstArg != 0) {\n    if (Kind == StrftimeFormat) {\n    // ...\n    } else if (isFunctionOrMethodVariadic(D)) {\n    // ...\n    } else {\n      // ...\n      if (FirstArg <= Idx) {\n        // ...\n        S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << 3 << FirstArgExpr->getSourceRange();"},{l,4097,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    // ...\n    if (AL.isArgIdent(I)) {\n    // ...\n    } else if (AL.isArgExpr(I)) {\n      // ...\n      // If the expression is not parseable as an int32_t we have a problem.\n      if (!checkUInt32Argument(S, AL, IdxExpr, (uint32_t &)ArgIdx, I + 1, false)) {\n        S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << (I + 1) << IdxExpr->getSourceRange();"},{l,4104,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    // ...\n    if (AL.isArgIdent(I)) {\n    // ...\n    } else if (AL.isArgExpr(I)) {\n      // ...\n      // Check oob, excluding the special values, 0 and -1.\n      if (ArgIdx < -1 || ArgIdx > NumArgs) {\n        S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << (I + 1) << IdxExpr->getSourceRange();"},{l,6487,"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 (ParamIdx == 0 || ParamIdx > BlockParams.size()) {\n      S.Diag(ErrorAttr->getLocation(), diag::err_attribute_argument_out_of_bounds) << ErrorAttr << 2;"},{l,7418,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (Num > 63) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << (int)NumParams->getSExtValue() << NumParamsExpr->getSourceRange();"},{l,7508,"static void handleM68kInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if ((Num & 1) || Num > 30) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << (int)MaybeNumParams->getSExtValue() << NumParamsExpr->getSourceRange();"},{l,7990,"static void handleLayoutVersion(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // TODO: Investigate what happens with the next major version of MSVC.\n  if (Version != LangOptions::MSVC2015 / 100) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << Version << VersionExpr->getSourceRange();"}},
[h]={{l,327,"/// Check if IdxExpr is a valid parameter index for a function or\n/// instance method D.  May output an error.\n///\n/// \\returns true if IdxExpr is a valid index.\ntemplate <typename AttrInfo> static bool checkFunctionOrMethodParameterIndex(Sema &S, const Decl *D, const AttrInfo &AI, unsigned AttrArgNum, const Expr *IdxExpr, ParamIdx &Idx, bool CanIndexImplicitThis = false) {\n  // ...\n  if (IdxSource < 1 || (!IV && IdxSource > NumParams)) {\n    S.Diag(getAttrLoc(AI), diag::err_attribute_argument_out_of_bounds) << &AI << AttrArgNum << IdxExpr->getSourceRange();"},{l,3974,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (Idx < 1 || Idx > NumArgs) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << 2 << IdxExpr->getSourceRange();"},{l,4024,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // FirstArg == 0 is is always valid.\n  if (FirstArg != 0) {\n    if (Kind == StrftimeFormat) {\n    // ...\n    } else if (isFunctionOrMethodVariadic(D)) {\n      // Else, if the function is variadic, then FirstArg must be 0 or the\n      // \"position\" of the ... parameter. It\'s unusual to use 0 with variadic\n      // functions, so the fixit proposes the latter.\n      if (FirstArg != NumArgs + 1) {\n        S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << 3 << FirstArgExpr->getSourceRange() << FixItHint::CreateReplacement(FirstArgExpr->getSourceRange(), std::to_string(NumArgs + 1));"},{l,4037,"/// Handle __attribute__((format(type,idx,firstarg))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html\nstatic void handleFormatAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // FirstArg == 0 is is always valid.\n  if (FirstArg != 0) {\n    if (Kind == StrftimeFormat) {\n    // ...\n    } else if (isFunctionOrMethodVariadic(D)) {\n    // ...\n    } else {\n      // ...\n      if (FirstArg <= Idx) {\n        // ...\n        S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << 3 << FirstArgExpr->getSourceRange();"},{l,4097,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    // ...\n    if (AL.isArgIdent(I)) {\n    // ...\n    } else if (AL.isArgExpr(I)) {\n      // ...\n      // If the expression is not parseable as an int32_t we have a problem.\n      if (!checkUInt32Argument(S, AL, IdxExpr, (uint32_t &)ArgIdx, I + 1, false)) {\n        S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << (I + 1) << IdxExpr->getSourceRange();"},{l,4104,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    // ...\n    if (AL.isArgIdent(I)) {\n    // ...\n    } else if (AL.isArgExpr(I)) {\n      // ...\n      // Check oob, excluding the special values, 0 and -1.\n      if (ArgIdx < -1 || ArgIdx > NumArgs) {\n        S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << (I + 1) << IdxExpr->getSourceRange();"},{l,6487,"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 (ParamIdx == 0 || ParamIdx > BlockParams.size()) {\n      S.Diag(ErrorAttr->getLocation(), diag::err_attribute_argument_out_of_bounds) << ErrorAttr << 2;"},{l,7418,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (Num > 63) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << (int)NumParams->getSExtValue() << NumParamsExpr->getSourceRange();"},{l,7508,"static void handleM68kInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if ((Num & 1) || Num > 30) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << (int)MaybeNumParams->getSExtValue() << NumParamsExpr->getSourceRange();"},{l,7990,"static void handleLayoutVersion(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // TODO: Investigate what happens with the next major version of MSVC.\n  if (Version != LangOptions::MSVC2015 / 100) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds) << AL << Version << VersionExpr->getSourceRange();"}},
[j]={
[j]={
Line 3,095: Line 3,097:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"ce667f6df971",1549977542,"Renaming yet another diagnostic to not conflict; NFC.\n\nllvm-svn: 353839","Renaming yet another diagnostic to not conflict; NFC.\n\nllvm-svn: 353839"},
[b]={"ce667f6df971",1549977542,"Renaming yet another diagnostic to not conflict; NFC.","Renaming yet another diagnostic to not conflict; NFC.\n\nllvm-svn: 353839"},
[h]={{l,666,"/// Checks that all attribute arguments, starting from Sidx, resolve to\n/// a capability object.\n/// \\param Sidx The attribute argument index to start checking with.\n/// \\param ParamIdxOk Whether an argument can be indexing into a function\n/// parameter list.\nstatic void checkAttrArgsAreCapabilityObjs(Sema &S, Decl *D, const ParsedAttr &AL, SmallVectorImpl<Expr *> &Args, unsigned Sidx = 0, bool ParamIdxOk = false) {\n  // ...\n  for (unsigned Idx = Sidx; Idx < AL.getNumArgs(); ++Idx) {\n    // ...\n    // Now check if we index into a record type function param.\n    if (!RT && ParamIdxOk) {\n      // ...\n      if (FD && IL) {\n        // ...\n        if (!ArgValue.isStrictlyPositive() || ParamIdxFromOne > NumParams) {\n          S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds_extra_info) << AL << Idx + 1 << NumParams;"}},
[h]={{l,666,"/// Checks that all attribute arguments, starting from Sidx, resolve to\n/// a capability object.\n/// \\param Sidx The attribute argument index to start checking with.\n/// \\param ParamIdxOk Whether an argument can be indexing into a function\n/// parameter list.\nstatic void checkAttrArgsAreCapabilityObjs(Sema &S, Decl *D, const ParsedAttr &AL, SmallVectorImpl<Expr *> &Args, unsigned Sidx = 0, bool ParamIdxOk = false) {\n  // ...\n  for (unsigned Idx = Sidx; Idx < AL.getNumArgs(); ++Idx) {\n    // ...\n    // Now check if we index into a record type function param.\n    if (!RT && ParamIdxOk) {\n      // ...\n      if (FD && IL) {\n        // ...\n        if (!ArgValue.isStrictlyPositive() || ParamIdxFromOne > NumParams) {\n          S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds_extra_info) << AL << Idx + 1 << NumParams;"}},
[j]={
[j]={
Line 3,107: Line 3,109:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"4b1e8399c22e",1312912771,"Thread Safety: Added basic argument parsing for all new attributes.\n\nThis patch special cases the pa...","Thread Safety: Added basic argument parsing for all new attributes.\n\nThis patch special cases the parser for thread safety attributes so that all\nattribute arguments are put in the argument list (instead of a special\nparameter) since arguments may not otherwise resolve correctly without two-token\nlookahead.\n\nThis patch also adds checks to make sure that attribute arguments are\nlockable objects.\n\nllvm-svn: 137130"},
[b]={"4b1e8399c22e",1312912771,"Thread Safety: Added basic argument parsing for all new attributes.","Thread Safety: Added basic argument parsing for all new attributes.\n\nThis patch special cases the parser for thread safety attributes so that all\nattribute arguments are put in the argument list (instead of a special\nparameter) since arguments may not otherwise resolve correctly without two-token\nlookahead.\n\nThis patch also adds checks to make sure that attribute arguments are\nlockable objects.\n\nllvm-svn: 137130"},
[h]={{l,1188,"static void handlePassObjectSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // pass_object_size\'s argument is passed in as the second argument of\n  // __builtin_object_size. So, it has the same constraints as that second\n  // argument; namely, it must be in the range [0, 3].\n  if (Type > 3) {\n    S.Diag(E->getBeginLoc(), diag::err_attribute_argument_out_of_range) << AL << 0 << 3 << E->getSourceRange();"},{l,3881,"/// Handle __attribute__((init_priority(priority))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html\nstatic void handleInitPriorityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Only perform the priority check if the attribute is outside of a system\n  // header. Values <= 100 are reserved for the implementation, and libc++\n  // benefits from being able to specify values in that range.\n  if ((prioritynum < 101 || prioritynum > 65535) && !S.getSourceManager().isInSystemHeader(AL.getLoc())) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_range) << E->getSourceRange() << AL << 101 << 65535;"},{l,5744,"static void handlePatchableFunctionEntryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.getNumArgs() == 2) {\n    // ...\n    if (Count < Offset) {\n      S.Diag(getAttrLoc(AL), diag::err_attribute_argument_out_of_range) << &AL << 0 << Count << Arg->getBeginLoc();"}},
[h]={{l,1188,"static void handlePassObjectSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // pass_object_size\'s argument is passed in as the second argument of\n  // __builtin_object_size. So, it has the same constraints as that second\n  // argument; namely, it must be in the range [0, 3].\n  if (Type > 3) {\n    S.Diag(E->getBeginLoc(), diag::err_attribute_argument_out_of_range) << AL << 0 << 3 << E->getSourceRange();"},{l,3881,"/// Handle __attribute__((init_priority(priority))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html\nstatic void handleInitPriorityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Only perform the priority check if the attribute is outside of a system\n  // header. Values <= 100 are reserved for the implementation, and libc++\n  // benefits from being able to specify values in that range.\n  if ((prioritynum < 101 || prioritynum > 65535) && !S.getSourceManager().isInSystemHeader(AL.getLoc())) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_range) << E->getSourceRange() << AL << 101 << 65535;"},{l,5744,"static void handlePatchableFunctionEntryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.getNumArgs() == 2) {\n    // ...\n    if (Count < Offset) {\n      S.Diag(getAttrLoc(AL), diag::err_attribute_argument_out_of_range) << &AL << 0 << Count << Arg->getBeginLoc();"}},
[j]={
[j]={
Line 3,118: Line 3,120:
[e]="attribute (.*?) does not support argument pack expansion",
[e]="attribute (.*?) does not support argument pack expansion",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions.\n\nThis implements the parsing and recog...","[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"},
[b]={"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"},
[h]={{A,481,"unsigned Parser::ParseAttributeArgsCommon(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  if (!ArgExprs.empty() ? Tok.is(tok::comma) : Tok.isNot(tok::r_paren)) {\n    // ...\n    if (AttributeIsTypeArgAttr) {\n    // ...\n    } else if (AttributeHasVariadicIdentifierArg) {\n    // ...\n    } else {\n      // ...\n      // Pack expansion must currently be explicitly supported by an attribute.\n      for (size_t I = 0; I < ParsedExprs.size(); ++I) {\n        // ...\n        if (!attributeAcceptsExprPack(*AttrName)) {\n          Diag(Tok.getLocation(), diag::err_attribute_argument_parm_pack_not_supported) << AttrName;"}},
[h]={{B,481,"unsigned Parser::ParseAttributeArgsCommon(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  if (!ArgExprs.empty() ? Tok.is(tok::comma) : Tok.isNot(tok::r_paren)) {\n    // ...\n    if (AttributeIsTypeArgAttr) {\n    // ...\n    } else if (AttributeHasVariadicIdentifierArg) {\n    // ...\n    } else {\n      // ...\n      // Pack expansion must currently be explicitly supported by an attribute.\n      for (size_t I = 0; I < ParsedExprs.size(); ++I) {\n        // ...\n        if (!attributeAcceptsExprPack(*AttrName)) {\n          Diag(Tok.getLocation(), diag::err_attribute_argument_parm_pack_not_supported) << AttrName;"}},
[j]={
[j]={
["clang/test/Parser/cxx0x-attributes.cpp"]={"clang/test/Parser/cxx0x-attributes.cpp:269:38: error: attribute \'no_sanitize\' does not support argument pack expansion"}
["clang/test/Parser/cxx0x-attributes.cpp"]={"clang/test/Parser/cxx0x-attributes.cpp:269:38: error: attribute \'no_sanitize\' does not support argument pack expansion"}
Line 3,131: Line 3,133:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"3bf758cd6579",1375147863,"err_attribute_not_string has been subsumed by err_attribute_argument_type.\n\nllvm-svn: 187400","err_attribute_not_string has been subsumed by err_attribute_argument_type.\n\nllvm-svn: 187400"},
[b]={"3bf758cd6579",1375147863,"err_attribute_not_string has been subsumed by err_attribute_argument_type.","err_attribute_not_string has been subsumed by err_attribute_argument_type.\n\nllvm-svn: 187400"},
[h]={{l,229,"/// If Expr is a valid integer constant, get the value of the integer\n/// expression and return success or failure. May output an error.\n///\n/// Negative argument is implicitly converted to unsigned, unless\n/// \\p StrictlyUnsigned is true.\ntemplate <typename AttrInfo> static bool checkUInt32Argument(Sema &S, const AttrInfo &AI, const Expr *Expr, uint32_t &Val, unsigned Idx = UINT_MAX, bool StrictlyUnsigned = false) {\n  // ...\n  if (Expr->isTypeDependent() || !(I = Expr->getIntegerConstantExpr(S.Context))) {\n    if (Idx != UINT_MAX)\n    // ...\n    else\n      S.Diag(getAttrLoc(AI), diag::err_attribute_argument_type) << &AI << AANT_ArgumentIntegerConstant << Expr->getSourceRange();"},{l,354,"/// Check if the argument \\p E is a ASCII string literal. If not emit an error\n/// and return false, otherwise set \\p Str to the value of the string literal\n/// and return true.\nbool Sema::checkStringLiteralArgumentAttr(const AttributeCommonInfo &CI, const Expr *E, StringRef &Str, SourceLocation *ArgLocation) {\n  // ...\n  if (!Literal || !Literal->isOrdinary()) {\n    Diag(E->getBeginLoc(), diag::err_attribute_argument_type) << CI << AANT_ArgumentString;"},{l,373,"/// Check if the argument \\p ArgNum of \\p Attr is a ASCII string literal.\n/// If not emit an error and return false. If the argument is an identifier it\n/// will emit an error with a fixit hint and treat it as if it was a string\n/// literal.\nbool Sema::checkStringLiteralArgumentAttr(const ParsedAttr &AL, unsigned ArgNum, StringRef &Str, SourceLocation *ArgLocation) {\n  // Look for identifiers. If we have one emit a hint to fix it to a literal.\n  if (AL.isArgIdent(ArgNum)) {\n    // ...\n    Diag(Loc->Loc, diag::err_attribute_argument_type) << AL << AANT_ArgumentString << FixItHint::CreateInsertion(Loc->Loc, \"\\\"\") << FixItHint::CreateInsertion(getLocForEndOfToken(Loc->Loc), \"\\\"\");"},{l,1217,"static void handleConsumableAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.isArgIdent(0)) {\n  // ...\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,1289,"static void handleParamTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.isArgIdent(0)) {\n  // ...\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,1321,"static void handleReturnTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.isArgIdent(0)) {\n  // ...\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,1368,"static void handleSetTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.isArgIdent(0)) {\n  // ...\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,1390,"static void handleTestTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.isArgIdent(0)) {\n  // ...\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,1704,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  // ...\n  if (!E->isValueDependent()) {\n    // ...\n    if (!(I = E->getIntegerConstantExpr(Context))) {\n      if (OE)\n      // ...\n      else\n        Diag(AttrLoc, diag::err_attribute_argument_type) << &TmpAttr << AANT_ArgumentIntegerConstant << E->getSourceRange();"},{l,2100,"static void handleCPUSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned ArgNo = 0; ArgNo < getNumAttributeArgs(AL); ++ArgNo) {\n    if (!AL.isArgIdent(ArgNo)) {\n      S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,4726,"/// handleModeAttr - This attribute modifies the width of a decl with primitive\n/// type.\n///\n/// Despite what would be logical, the mode attribute is a decl attribute, not a\n/// type attribute: \'int ** __attribute((mode(HI))) *G;\' tries to make \'G\' be\n/// HImode, not an intermediate pointer.\nstatic void handleModeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // This attribute isn\'t documented, but glibc uses it.  It changes\n  // the width of an int or unsigned int to the specified size.\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,6892,"static void handleSwiftNewType(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,7223,"static void handleHLSLResourceBindingAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,7236,"static void handleHLSLResourceBindingAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.getNumArgs() == 2) {\n    // ...\n    if (!AL.isArgIdent(1)) {\n      S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,7402,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!AL.isArgExpr(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIntegerConstant;"},{l,7410,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!(NumParams = NumParamsExpr->getIntegerConstantExpr(S.Context))) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIntegerConstant << NumParamsExpr->getSourceRange();"},{l,7490,"static void handleM68kInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!AL.isArgExpr(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIntegerConstant;"},{l,7500,"static void handleM68kInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!MaybeNumParams) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIntegerConstant << NumParamsExpr->getSourceRange();"},{l,8592,"static void handleCFGuardAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{"clang/lib/Sema/SemaStmtAttr.cpp",463,"static Attr *handleOpenCLUnrollHint(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  // ...\n  if (A.getNumArgs() == 1) {\n    // ...\n    if (!(ArgVal = E->getIntegerConstantExpr(S.Context))) {\n      S.Diag(A.getLoc(), diag::err_attribute_argument_type) << A << AANT_ArgumentIntegerConstant << E->getSourceRange();"},{o,2729,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // ...\n  if (!VecSize) {\n    Diag(AttrLoc, diag::err_attribute_argument_type) << \"vector_size\" << AANT_ArgumentIntegerConstant << SizeExpr->getSourceRange();"},{o,2807,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  // ...\n  if (!ArraySize->isTypeDependent() && !ArraySize->isValueDependent()) {\n    // ...\n    if (!vecSize) {\n      Diag(AttrLoc, diag::err_attribute_argument_type) << \"ext_vector_type\" << AANT_ArgumentIntegerConstant << ArraySize->getSourceRange();"},{o,2861,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  // Both are row and column expressions are invalid.\n  if (!ValueRows && !ValueColumns) {\n    Diag(AttrLoc, diag::err_attribute_argument_type) << \"matrix_type\" << AANT_ArgumentIntegerConstant << RowRange << ColRange;"},{o,2869,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  // Only the row expression is invalid.\n  if (!ValueRows) {\n    Diag(AttrLoc, diag::err_attribute_argument_type) << \"matrix_type\" << AANT_ArgumentIntegerConstant << RowRange;"},{o,2876,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  // Only the column expression is invalid.\n  if (!ValueColumns) {\n    Diag(AttrLoc, diag::err_attribute_argument_type) << \"matrix_type\" << AANT_ArgumentIntegerConstant << ColRange;"},{o,6717,"/// Build an AddressSpace index from a constant expression and diagnose any\n/// errors related to invalid address_spaces. Returns true on successfully\n/// building an AddressSpace index.\nstatic bool BuildAddressSpaceIndex(Sema &S, LangAS &ASIdx, const Expr *AddrSpace, SourceLocation AttrLoc) {\n  if (!AddrSpace->isValueDependent()) {\n    // ...\n    if (!OptAddrSpace) {\n      S.Diag(AttrLoc, diag::err_attribute_argument_type) << \"\'address_space\'\" << AANT_ArgumentIntegerConstant << AddrSpace->getSourceRange();"},{o,6804,"static void HandleBTFTypeTagAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  // ...\n  if (!StrLiteral) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) << Attr << AANT_ArgumentString;"},{o,6936,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  if (!attr.isArgIdent(0)) {\n    S.Diag(AttrLoc, diag::err_attribute_argument_type) << attr << AANT_ArgumentString;"},{o,7107,"/// handleObjCGCTypeAttr - Process the __attribute__((objc_gc)) type\n/// attribute on the specified type.  Returns true to indicate that\n/// the attribute was handled, false to indicate that the type does\n/// not permit the attribute.\nstatic bool handleObjCGCTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  // Check the attribute arguments.\n  if (!attr.isArgIdent(0)) {\n    S.Diag(attr.getLoc(), diag::err_attribute_argument_type) << attr << AANT_ArgumentString;"},{o,8184,"static bool verifyValidIntegerConstantExpr(Sema &S, const ParsedAttr &Attr, llvm::APSInt &Result) {\n  // ...\n  S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) << Attr << AANT_ArgumentIntegerConstant << AttrExpr->getSourceRange();"}},
[h]={{l,229,"/// If Expr is a valid integer constant, get the value of the integer\n/// expression and return success or failure. May output an error.\n///\n/// Negative argument is implicitly converted to unsigned, unless\n/// \\p StrictlyUnsigned is true.\ntemplate <typename AttrInfo> static bool checkUInt32Argument(Sema &S, const AttrInfo &AI, const Expr *Expr, uint32_t &Val, unsigned Idx = UINT_MAX, bool StrictlyUnsigned = false) {\n  // ...\n  if (Expr->isTypeDependent() || !(I = Expr->getIntegerConstantExpr(S.Context))) {\n    if (Idx != UINT_MAX)\n    // ...\n    else\n      S.Diag(getAttrLoc(AI), diag::err_attribute_argument_type) << &AI << AANT_ArgumentIntegerConstant << Expr->getSourceRange();"},{l,354,"/// Check if the argument \\p E is a ASCII string literal. If not emit an error\n/// and return false, otherwise set \\p Str to the value of the string literal\n/// and return true.\nbool Sema::checkStringLiteralArgumentAttr(const AttributeCommonInfo &CI, const Expr *E, StringRef &Str, SourceLocation *ArgLocation) {\n  // ...\n  if (!Literal || !Literal->isOrdinary()) {\n    Diag(E->getBeginLoc(), diag::err_attribute_argument_type) << CI << AANT_ArgumentString;"},{l,373,"/// Check if the argument \\p ArgNum of \\p Attr is a ASCII string literal.\n/// If not emit an error and return false. If the argument is an identifier it\n/// will emit an error with a fixit hint and treat it as if it was a string\n/// literal.\nbool Sema::checkStringLiteralArgumentAttr(const ParsedAttr &AL, unsigned ArgNum, StringRef &Str, SourceLocation *ArgLocation) {\n  // Look for identifiers. If we have one emit a hint to fix it to a literal.\n  if (AL.isArgIdent(ArgNum)) {\n    // ...\n    Diag(Loc->Loc, diag::err_attribute_argument_type) << AL << AANT_ArgumentString << FixItHint::CreateInsertion(Loc->Loc, \"\\\"\") << FixItHint::CreateInsertion(getLocForEndOfToken(Loc->Loc), \"\\\"\");"},{l,1217,"static void handleConsumableAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.isArgIdent(0)) {\n  // ...\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,1289,"static void handleParamTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.isArgIdent(0)) {\n  // ...\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,1321,"static void handleReturnTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.isArgIdent(0)) {\n  // ...\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,1368,"static void handleSetTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.isArgIdent(0)) {\n  // ...\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,1390,"static void handleTestTypestateAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.isArgIdent(0)) {\n  // ...\n  } else {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,1704,"void Sema::AddAssumeAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, Expr *OE) {\n  // ...\n  if (!E->isValueDependent()) {\n    // ...\n    if (!(I = E->getIntegerConstantExpr(Context))) {\n      if (OE)\n      // ...\n      else\n        Diag(AttrLoc, diag::err_attribute_argument_type) << &TmpAttr << AANT_ArgumentIntegerConstant << E->getSourceRange();"},{l,2100,"static void handleCPUSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned ArgNo = 0; ArgNo < getNumAttributeArgs(AL); ++ArgNo) {\n    if (!AL.isArgIdent(ArgNo)) {\n      S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,4726,"/// handleModeAttr - This attribute modifies the width of a decl with primitive\n/// type.\n///\n/// Despite what would be logical, the mode attribute is a decl attribute, not a\n/// type attribute: \'int ** __attribute((mode(HI))) *G;\' tries to make \'G\' be\n/// HImode, not an intermediate pointer.\nstatic void handleModeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // This attribute isn\'t documented, but glibc uses it.  It changes\n  // the width of an int or unsigned int to the specified size.\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,6892,"static void handleSwiftNewType(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,7223,"static void handleHLSLResourceBindingAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,7236,"static void handleHLSLResourceBindingAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.getNumArgs() == 2) {\n    // ...\n    if (!AL.isArgIdent(1)) {\n      S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{l,7402,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!AL.isArgExpr(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIntegerConstant;"},{l,7410,"static void handleMSP430InterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!(NumParams = NumParamsExpr->getIntegerConstantExpr(S.Context))) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIntegerConstant << NumParamsExpr->getSourceRange();"},{l,7490,"static void handleM68kInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!AL.isArgExpr(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIntegerConstant;"},{l,7500,"static void handleM68kInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!MaybeNumParams) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIntegerConstant << NumParamsExpr->getSourceRange();"},{l,8592,"static void handleCFGuardAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!AL.isArgIdent(0)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_argument_type) << AL << AANT_ArgumentIdentifier;"},{"clang/lib/Sema/SemaStmtAttr.cpp",463,"static Attr *handleOpenCLUnrollHint(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  // ...\n  if (A.getNumArgs() == 1) {\n    // ...\n    if (!(ArgVal = E->getIntegerConstantExpr(S.Context))) {\n      S.Diag(A.getLoc(), diag::err_attribute_argument_type) << A << AANT_ArgumentIntegerConstant << E->getSourceRange();"},{n,2729,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // ...\n  if (!VecSize) {\n    Diag(AttrLoc, diag::err_attribute_argument_type) << \"vector_size\" << AANT_ArgumentIntegerConstant << SizeExpr->getSourceRange();"},{n,2807,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  // ...\n  if (!ArraySize->isTypeDependent() && !ArraySize->isValueDependent()) {\n    // ...\n    if (!vecSize) {\n      Diag(AttrLoc, diag::err_attribute_argument_type) << \"ext_vector_type\" << AANT_ArgumentIntegerConstant << ArraySize->getSourceRange();"},{n,2861,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  // Both are row and column expressions are invalid.\n  if (!ValueRows && !ValueColumns) {\n    Diag(AttrLoc, diag::err_attribute_argument_type) << \"matrix_type\" << AANT_ArgumentIntegerConstant << RowRange << ColRange;"},{n,2869,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  // Only the row expression is invalid.\n  if (!ValueRows) {\n    Diag(AttrLoc, diag::err_attribute_argument_type) << \"matrix_type\" << AANT_ArgumentIntegerConstant << RowRange;"},{n,2876,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  // Only the column expression is invalid.\n  if (!ValueColumns) {\n    Diag(AttrLoc, diag::err_attribute_argument_type) << \"matrix_type\" << AANT_ArgumentIntegerConstant << ColRange;"},{n,6717,"/// Build an AddressSpace index from a constant expression and diagnose any\n/// errors related to invalid address_spaces. Returns true on successfully\n/// building an AddressSpace index.\nstatic bool BuildAddressSpaceIndex(Sema &S, LangAS &ASIdx, const Expr *AddrSpace, SourceLocation AttrLoc) {\n  if (!AddrSpace->isValueDependent()) {\n    // ...\n    if (!OptAddrSpace) {\n      S.Diag(AttrLoc, diag::err_attribute_argument_type) << \"\'address_space\'\" << AANT_ArgumentIntegerConstant << AddrSpace->getSourceRange();"},{n,6804,"static void HandleBTFTypeTagAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  // ...\n  if (!StrLiteral) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) << Attr << AANT_ArgumentString;"},{n,6936,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  if (!attr.isArgIdent(0)) {\n    S.Diag(AttrLoc, diag::err_attribute_argument_type) << attr << AANT_ArgumentString;"},{n,7107,"/// handleObjCGCTypeAttr - Process the __attribute__((objc_gc)) type\n/// attribute on the specified type.  Returns true to indicate that\n/// the attribute was handled, false to indicate that the type does\n/// not permit the attribute.\nstatic bool handleObjCGCTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  // Check the attribute arguments.\n  if (!attr.isArgIdent(0)) {\n    S.Diag(attr.getLoc(), diag::err_attribute_argument_type) << attr << AANT_ArgumentString;"},{n,8184,"static bool verifyValidIntegerConstantExpr(Sema &S, const ParsedAttr &Attr, llvm::APSInt &Result) {\n  // ...\n  S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) << Attr << AANT_ArgumentIntegerConstant << AttrExpr->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCXX/warn-consumed-parsing.cpp"]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:38:39: error: \'callable_when\' attribute requires a string","clang/test/SemaCXX/warn-consumed-parsing.cpp:46:38: error: \'return_typestate\' attribute requires an identifier","clang/test/SemaCXX/warn-consumed-parsing.cpp:56:7: error: \'consumable\' attribute requires an identifier"}
["clang/test/SemaCXX/warn-consumed-parsing.cpp"]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:38:39: error: \'callable_when\' attribute requires a string","clang/test/SemaCXX/warn-consumed-parsing.cpp:46:38: error: \'return_typestate\' attribute requires an identifier","clang/test/SemaCXX/warn-consumed-parsing.cpp:56:7: error: \'consumable\' attribute requires an identifier"}
Line 3,143: Line 3,145:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={ab,1576908663,Z,Y},
[b]={Z,1576908663,X,Y},
[h]={{l,5826,"static void handleArmBuiltinAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if ((IsAArch64 && !ArmSveAliasValid(S.Context, BuiltinID, AliasName) && !ArmSmeAliasValid(S.Context, BuiltinID, AliasName)) || (!IsAArch64 && !ArmMveAliasValid(BuiltinID, AliasName) && !ArmCdeAliasValid(BuiltinID, AliasName))) {\n    S.Diag(AL.getLoc(), diag::err_attribute_arm_builtin_alias);"}},
[h]={{l,5826,"static void handleArmBuiltinAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if ((IsAArch64 && !ArmSveAliasValid(S.Context, BuiltinID, AliasName) && !ArmSmeAliasValid(S.Context, BuiltinID, AliasName)) || (!IsAArch64 && !ArmMveAliasValid(BuiltinID, AliasName) && !ArmCdeAliasValid(BuiltinID, AliasName))) {\n    S.Diag(AL.getLoc(), diag::err_attribute_arm_builtin_alias);"}},
[j]={
[j]={
Line 3,155: Line 3,157:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={X,1582847864,W,S},
[b]={T,1582847864,U,V},
[h]={{o,8265,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  // Attribute is unsupported if \'-msve-vector-bits=<bits>\' isn\'t specified, or\n  // if <bits>+ syntax is used.\n  if (!S.getLangOpts().VScaleMin || S.getLangOpts().VScaleMin != S.getLangOpts().VScaleMax) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_arm_feature_sve_bits_unsupported) << Attr;"}}
[h]={{n,8265,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  // Attribute is unsupported if \'-msve-vector-bits=<bits>\' isn\'t specified, or\n  // if <bits>+ syntax is used.\n  if (!S.getLangOpts().VScaleMin || S.getLangOpts().VScaleMin != S.getLangOpts().VScaleMax) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_arm_feature_sve_bits_unsupported) << Attr;"}}
},
},
["err_attribute_arm_mve_polymorphism"]={
["err_attribute_arm_mve_polymorphism"]={
Line 3,164: Line 3,166:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk\n\nImplement a pessimistic evaluator of ...","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"},
[b]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk","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"},
[h]={{o,8322,"static void HandleArmMveStrictPolymorphismAttr(TypeProcessingState &State, QualType &CurType, ParsedAttr &Attr) {\n  // ...\n  if (!VT || VT->getVectorKind() != VectorType::NeonVector) {\n    State.getSema().Diag(Attr.getLoc(), diag::err_attribute_arm_mve_polymorphism);"}},
[h]={{n,8322,"static void HandleArmMveStrictPolymorphismAttr(TypeProcessingState &State, QualType &CurType, ParsedAttr &Attr) {\n  // ...\n  if (!VT || VT->getVectorKind() != VectorType::NeonVector) {\n    State.getSema().Diag(Attr.getLoc(), diag::err_attribute_arm_mve_polymorphism);"}},
[j]={
[j]={
["clang/test/Sema/overload-arm-mve.c"]={"clang/test/Sema/overload-arm-mve.c:120:24: error: \'__clang_arm_mve_strict_polymorphism\' attribute can only be applied to an MVE/NEON vector type","clang/test/Sema/overload-arm-mve.c:121:24: error: \'__clang_arm_mve_strict_polymorphism\' attribute can only be applied to an MVE/NEON vector type","clang/test/Sema/overload-arm-mve.c:122:24: error: \'__clang_arm_mve_strict_polymorphism\' attribute can only be applied to an MVE/NEON vector type"}
["clang/test/Sema/overload-arm-mve.c"]={"clang/test/Sema/overload-arm-mve.c:120:24: error: \'__clang_arm_mve_strict_polymorphism\' attribute can only be applied to an MVE/NEON vector type","clang/test/Sema/overload-arm-mve.c:121:24: error: \'__clang_arm_mve_strict_polymorphism\' attribute can only be applied to an MVE/NEON vector type","clang/test/Sema/overload-arm-mve.c:122:24: error: \'__clang_arm_mve_strict_polymorphism\' attribute can only be applied to an MVE/NEON vector type"}
Line 3,176: Line 3,178:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"118baf76115b",1289867544,"Add support for \"neon_vector_type\" and \"neon_polyvector_type\" attributes\nto create the special Neon ...","Add support for \"neon_vector_type\" and \"neon_polyvector_type\" attributes\nto create the special Neon vector types.  These are intended to be used in\nClang\'s version of <arm_neon.h> to define special Neon vector types that will\nbe mangled according to ARM\'s ABI.\n\nllvm-svn: 119301"},
[b]={"118baf76115b",1289867544,"Add support for \"neon_vector_type\" and \"neon_polyvector_type\" attributes","Add support for \"neon_vector_type\" and \"neon_polyvector_type\" attributes\nto create the special Neon vector types.  These are intended to be used in\nClang\'s version of <arm_neon.h> to define special Neon vector types that will\nbe mangled according to ARM\'s ABI.\n\nllvm-svn: 119301"},
[h]={{o,8241,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  // ...\n  if (vecSize != 64 && vecSize != 128) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_bad_neon_vector_size) << CurType;"}},
[h]={{n,8241,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  // ...\n  if (vecSize != 64 && vecSize != 128) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_bad_neon_vector_size) << CurType;"}},
[j]={
[j]={
["clang/test/Sema/neon-vector-types.c"]={"clang/test/Sema/neon-vector-types.c:42:24: error: Neon vector size must be 64 or 128 bits","clang/test/Sema/neon-vector-types.c:43:24: error: Neon vector size must be 64 or 128 bits"}
["clang/test/Sema/neon-vector-types.c"]={"clang/test/Sema/neon-vector-types.c:42:24: error: Neon vector size must be 64 or 128 bits","clang/test/Sema/neon-vector-types.c:43:24: error: Neon vector size must be 64 or 128 bits"}
Line 3,188: Line 3,190:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={M,1625925174,K,L},
[b]={N,1625925174,M,L},
[h]={{o,8385,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  if (VecSize != ExpectedSize) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_bad_rvv_vector_size) << VecSize << ExpectedSize;"}}
[h]={{n,8385,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  if (VecSize != ExpectedSize) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_bad_rvv_vector_size) << VecSize << ExpectedSize;"}}
},
},
["err_attribute_bad_sve_vector_size"]={
["err_attribute_bad_sve_vector_size"]={
Line 3,197: Line 3,199:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={X,1582847864,W,S},
[b]={T,1582847864,U,V},
[h]={{o,8288,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  // The attribute vector size must match -msve-vector-bits.\n  if (VecSize != S.getLangOpts().VScaleMin * 128) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_bad_sve_vector_size) << VecSize << S.getLangOpts().VScaleMin * 128;"}}
[h]={{n,8288,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  // The attribute vector size must match -msve-vector-bits.\n  if (VecSize != S.getLangOpts().VScaleMin * 128) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_bad_sve_vector_size) << VecSize << S.getLangOpts().VScaleMin * 128;"}}
},
},
["err_attribute_bounds_for_function"]={
["err_attribute_bounds_for_function"]={
Line 3,206: Line 3,208:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={nb,1616787805,ob,pb},
[b]={gb,1616787805,hb,ib},
[h]={{l,1075,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned I = 1; I < AL.getNumArgs(); ++I) {\n    // ...\n    if (Index > DeclFD->getNumParams()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_bounds_for_function) << AL << Index << DeclFD << DeclFD->getNumParams();"}},
[h]={{l,1075,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned I = 1; I < AL.getNumArgs(); ++I) {\n    // ...\n    if (Index > DeclFD->getNumParams()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_bounds_for_function) << AL << Index << DeclFD << DeclFD->getNumParams();"}},
[j]={
[j]={
Line 3,218: Line 3,220:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the re...","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"},
[b]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","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"},
[h]={{l,5859,"static void handleBuiltinAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if ((IsAArch64 && !ArmSveAliasValid(S.Context, BuiltinID, AliasName)) || (IsARM && !ArmMveAliasValid(BuiltinID, AliasName) && !ArmCdeAliasValid(BuiltinID, AliasName)) || (IsRISCV && !RISCVAliasValid(BuiltinID, AliasName)) || (!IsAArch64 && !IsARM && !IsRISCV && !IsHLSL)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_builtin_alias) << AL;"}}
[h]={{l,5859,"static void handleBuiltinAliasAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if ((IsAArch64 && !ArmSveAliasValid(S.Context, BuiltinID, AliasName)) || (IsARM && !ArmMveAliasValid(BuiltinID, AliasName) && !ArmCdeAliasValid(BuiltinID, AliasName)) || (IsRISCV && !RISCVAliasValid(BuiltinID, AliasName)) || (!IsAArch64 && !IsARM && !IsRISCV && !IsHLSL)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_builtin_alias) << AL;"}}
},
},
Line 3,227: Line 3,229:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{l,3710,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // gcc only allows for simple identifiers. Since we support more than gcc, we\n  // will warn the user.\n  if (auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n    // ...\n    if (!FD) {\n      S.Diag(Loc, diag::err_attribute_cleanup_arg_not_function) << 1 << NI.getName();"},{l,3720,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // gcc only allows for simple identifiers. Since we support more than gcc, we\n  // will warn the user.\n  if (auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n  // ...\n  } else if (auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {\n    // ...\n    if (!FD) {\n      S.Diag(Loc, diag::err_attribute_cleanup_arg_not_function) << 2 << NI.getName();"},{l,3727,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // gcc only allows for simple identifiers. Since we support more than gcc, we\n  // will warn the user.\n  if (auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n  // ...\n  } else if (auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {\n  // ...\n  } else {\n    S.Diag(Loc, diag::err_attribute_cleanup_arg_not_function) << 0;"}},
[h]={{l,3710,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // gcc only allows for simple identifiers. Since we support more than gcc, we\n  // will warn the user.\n  if (auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n    // ...\n    if (!FD) {\n      S.Diag(Loc, diag::err_attribute_cleanup_arg_not_function) << 1 << NI.getName();"},{l,3720,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // gcc only allows for simple identifiers. Since we support more than gcc, we\n  // will warn the user.\n  if (auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n  // ...\n  } else if (auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {\n    // ...\n    if (!FD) {\n      S.Diag(Loc, diag::err_attribute_cleanup_arg_not_function) << 2 << NI.getName();"},{l,3727,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // gcc only allows for simple identifiers. Since we support more than gcc, we\n  // will warn the user.\n  if (auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n  // ...\n  } else if (auto *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {\n  // ...\n  } else {\n    S.Diag(Loc, diag::err_attribute_cleanup_arg_not_function) << 0;"}},
[j]={
[j]={
Line 3,239: Line 3,241:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{l,3743,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (S.CheckAssignmentConstraints(FD->getParamDecl(0)->getLocation(), ParamTy, Ty) != Sema::Compatible) {\n    S.Diag(Loc, diag::err_attribute_cleanup_func_arg_incompatible_type) << NI.getName() << ParamTy << Ty;"}},
[h]={{l,3743,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (S.CheckAssignmentConstraints(FD->getParamDecl(0)->getLocation(), ParamTy, Ty) != Sema::Compatible) {\n    S.Diag(Loc, diag::err_attribute_cleanup_func_arg_incompatible_type) << NI.getName() << ParamTy << Ty;"}},
[j]={
[j]={
Line 3,251: Line 3,253:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{l,3732,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (FD->getNumParams() != 1) {\n    S.Diag(Loc, diag::err_attribute_cleanup_func_must_take_one_arg) << NI.getName();"}},
[h]={{l,3732,"static void handleCleanupAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (FD->getNumParams() != 1) {\n    S.Diag(Loc, diag::err_attribute_cleanup_func_must_take_one_arg) << NI.getName();"}},
[j]={
[j]={
Line 3,263: Line 3,265:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"474b323a0387",1451540206,"[MSVC Compat] Diagnose multiple default ctors for dllexport\'d classes\n\nThe MS ABI emits a special de...","[MSVC Compat] Diagnose multiple default ctors for dllexport\'d classes\n\nThe MS ABI emits a special default constructor closure thunk if a\ndefault constructor has a weird calling convention or default arguments.\n\nThe MS ABI has a quirk: there can be only one such thunk because the\nmangling scheme does not have room for distinct manglings.  We must\nraise a diagnostic in this eventuality.\n\nN.B.  MSVC sorta gets this right.  Multiple default constructors result\nin the default constructor closure getting emitted but they seem to\nget confused by which default constructors are reasonable to reference\nfrom the closure.  We try to be a little more careful which results in\nmild differences in behavior.\n\nllvm-svn: 256661"},
[b]={"474b323a0387",1451540206,"[MSVC Compat] Diagnose multiple default ctors for dllexport\'d classes","[MSVC Compat] Diagnose multiple default ctors for dllexport\'d classes\n\nThe MS ABI emits a special default constructor closure thunk if a\ndefault constructor has a weird calling convention or default arguments.\n\nThe MS ABI has a quirk: there can be only one such thunk because the\nmangling scheme does not have room for distinct manglings.  We must\nraise a diagnostic in this eventuality.\n\nN.B.  MSVC sorta gets this right.  Multiple default constructors result\nin the default constructor closure getting emitted but they seem to\nget confused by which default constructors are reasonable to reference\nfrom the closure.  We try to be a little more careful which results in\nmild differences in behavior.\n\nllvm-svn: 256661"},
[h]={{r,6298,"static void checkForMultipleExportedDefaultConstructors(Sema &S, CXXRecordDecl *Class) {\n  // ...\n  for (Decl *Member : Class->decls()) {\n    // ...\n    if (LastExportedDefaultCtor) {\n      S.Diag(LastExportedDefaultCtor->getLocation(), diag::err_attribute_dll_ambiguous_default_ctor) << Class;"}},
[h]={{s,6298,"static void checkForMultipleExportedDefaultConstructors(Sema &S, CXXRecordDecl *Class) {\n  // ...\n  for (Decl *Member : Class->decls()) {\n    // ...\n    if (LastExportedDefaultCtor) {\n      S.Diag(LastExportedDefaultCtor->getLocation(), diag::err_attribute_dll_ambiguous_default_ctor) << Class;"}},
[j]={
[j]={
["clang/test/SemaCXX/dllexport.cpp"]={"clang/test/SemaCXX/dllexport.cpp:788:3: error: \'__declspec(dllexport)\' cannot be applied to more than one default constructor in \'ClassWithMultipleDefaultCtors\'","clang/test/SemaCXX/dllexport.cpp:793:25: error: \'__declspec(dllexport)\' cannot be applied to more than one default constructor in \'ClassTemplateWithMultipleDefaultCtors\'"}
["clang/test/SemaCXX/dllexport.cpp"]={"clang/test/SemaCXX/dllexport.cpp:788:3: error: \'__declspec(dllexport)\' cannot be applied to more than one default constructor in \'ClassWithMultipleDefaultCtors\'","clang/test/SemaCXX/dllexport.cpp:793:25: error: \'__declspec(dllexport)\' cannot be applied to more than one default constructor in \'ClassTemplateWithMultipleDefaultCtors\'"}
Line 3,275: Line 3,277:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"9de0a57687b9",1401382279,"Sema: Functions with dll attributes cannot be deleted\n\nllvm-svn: 209827","Sema: Functions with dll attributes cannot be deleted\n\nllvm-svn: 209827"},
[b]={"9de0a57687b9",1401382279,"Sema: Functions with dll attributes cannot be deleted","Sema: Functions with dll attributes cannot be deleted\n\nllvm-svn: 209827"},
[h]={{r,17831,"void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {\n  // ...\n  // dllimport/dllexport cannot be deleted.\n  if (const InheritableAttr *DLLAttr = getDLLAttr(Fn)) {\n    Diag(Fn->getLocation(), diag::err_attribute_dll_deleted) << DLLAttr;"}},
[h]={{s,17831,"void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {\n  // ...\n  // dllimport/dllexport cannot be deleted.\n  if (const InheritableAttr *DLLAttr = getDLLAttr(Fn)) {\n    Diag(Fn->getLocation(), diag::err_attribute_dll_deleted) << DLLAttr;"}},
[j]={
[j]={
["clang/test/SemaCXX/dllexport.cpp"]={"clang/test/SemaCXX/dllexport.cpp:247:28: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:248:35: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:705:25: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:706:25: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:707:25: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:708:40: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:709:25: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:710:40: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:711:30: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:1111:47: error: attribute \'dllexport\' cannot be applied to a deleted function"}
["clang/test/SemaCXX/dllexport.cpp"]={"clang/test/SemaCXX/dllexport.cpp:247:28: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:248:35: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:705:25: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:706:25: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:707:25: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:708:40: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:709:25: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:710:40: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:711:30: error: attribute \'dllexport\' cannot be applied to a deleted function","clang/test/SemaCXX/dllexport.cpp:1111:47: error: attribute \'dllexport\' cannot be applied to a deleted function"}
Line 3,287: Line 3,289:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"5869ec4c6c62",1442351130,"MS ABI: Don\'t allow dllexport/import on lambdas\n\nThis is to follow up on David\'s comment in\nhttp://r...","MS ABI: Don\'t allow dllexport/import on lambdas\n\nThis is to follow up on David\'s comment in\nhttp://reviews.llvm.org/D12422#235509\n\nllvm-svn: 247718"},
[b]={"5869ec4c6c62",1442351130,"MS ABI: Don\'t allow dllexport/import on lambdas","MS ABI: Don\'t allow dllexport/import on lambdas\n\nThis is to follow up on David\'s comment in\nhttp://reviews.llvm.org/D12422#235509\n\nllvm-svn: 247718"},
[h]={{l,2089,"static void handleCPUSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (const auto *MD = dyn_cast<CXXMethodDecl>(D)) {\n    if (MD->getParent()->isLambda()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_dll_lambda) << AL;"},{l,8049,"static void handleDLLAttr(Sema &S, Decl *D, const ParsedAttr &A) {\n  // ...\n  if (const auto *MD = dyn_cast<CXXMethodDecl>(D)) {\n    if ((S.Context.getTargetInfo().shouldDLLImportComdatSymbols()) && MD->getParent()->isLambda()) {\n      S.Diag(A.getRange().getBegin(), diag::err_attribute_dll_lambda) << A;"}},
[h]={{l,2089,"static void handleCPUSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (const auto *MD = dyn_cast<CXXMethodDecl>(D)) {\n    if (MD->getParent()->isLambda()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_dll_lambda) << AL;"},{l,8049,"static void handleDLLAttr(Sema &S, Decl *D, const ParsedAttr &A) {\n  // ...\n  if (const auto *MD = dyn_cast<CXXMethodDecl>(D)) {\n    if ((S.Context.getTargetInfo().shouldDLLImportComdatSymbols()) && MD->getParent()->isLambda()) {\n      S.Diag(A.getRange().getBegin(), diag::err_attribute_dll_lambda) << A;"}},
[j]={
[j]={
Line 3,299: Line 3,301:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"496524b4484b",1401502129,"Diagnose dll attribute on member of class that already has a dll attribute\n\nDifferential Revision: h...","Diagnose dll attribute on member of class that already has a dll attribute\n\nDifferential Revision: http://reviews.llvm.org/D3973\n\nllvm-svn: 209954"},
[b]={"496524b4484b",1401502129,"Diagnose dll attribute on member of class that already has a dll attribute","Diagnose dll attribute on member of class that already has a dll attribute\n\nDifferential Revision: http://reviews.llvm.org/D3973\n\nllvm-svn: 209954"},
[h]={{r,6483,"/// Check class-level dllimport/dllexport attribute.\nvoid Sema::checkClassLevelDLLAttribute(CXXRecordDecl *Class) {\n  // ...\n  if (Context.getTargetInfo().shouldDLLImportComdatSymbols() && !ClassAttr->isInherited()) {\n    // Diagnose dll attributes on members of class with dll attribute.\n    for (Decl *Member : Class->decls()) {\n      // ...\n      Diag(MemberAttr->getLocation(), diag::err_attribute_dll_member_of_dll_class) << MemberAttr << ClassAttr;"}},
[h]={{s,6483,"/// Check class-level dllimport/dllexport attribute.\nvoid Sema::checkClassLevelDLLAttribute(CXXRecordDecl *Class) {\n  // ...\n  if (Context.getTargetInfo().shouldDLLImportComdatSymbols() && !ClassAttr->isInherited()) {\n    // Diagnose dll attributes on members of class with dll attribute.\n    for (Decl *Member : Class->decls()) {\n      // ...\n      Diag(MemberAttr->getLocation(), diag::err_attribute_dll_member_of_dll_class) << MemberAttr << ClassAttr;"}},
[j]={
[j]={
["clang/test/SemaCXX/dllimport.cpp"]={"clang/test/SemaCXX/dllimport.cpp:1487:19: error: attribute \'dllexport\' cannot be applied to member of \'dllimport\' class","clang/test/SemaCXX/dllimport.cpp:1488:19: error: attribute \'dllimport\' cannot be applied to member of \'dllimport\' class","clang/test/SemaCXX/dllimport.cpp:1498:19: error: attribute \'dllimport\' cannot be applied to member of \'dllexport\' class","clang/test/SemaCXX/dllimport.cpp:1499:19: error: attribute \'dllexport\' cannot be applied to member of \'dllexport\' class"}
["clang/test/SemaCXX/dllimport.cpp"]={"clang/test/SemaCXX/dllimport.cpp:1487:19: error: attribute \'dllexport\' cannot be applied to member of \'dllimport\' class","clang/test/SemaCXX/dllimport.cpp:1488:19: error: attribute \'dllimport\' cannot be applied to member of \'dllimport\' class","clang/test/SemaCXX/dllimport.cpp:1498:19: error: attribute \'dllimport\' cannot be applied to member of \'dllexport\' class","clang/test/SemaCXX/dllimport.cpp:1499:19: error: attribute \'dllexport\' cannot be applied to member of \'dllexport\' class"}
Line 3,311: Line 3,313:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"8ca0bfc57ff5",1396277818,"Sema: Require external linkage for dll attributes\n\nllvm-svn: 205198","Sema: Require external linkage for dll attributes\n\nllvm-svn: 205198"},
[b]={"8ca0bfc57ff5",1396277818,"Sema: Require external linkage for dll attributes","Sema: Require external linkage for dll attributes\n\nllvm-svn: 205198"},
[h]={{n,7003,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // ...\n  if (const InheritableAttr *Attr = getDLLAttr(&ND)) {\n    // ...\n    if ((ND.isExternallyVisible() && AnonNSInMicrosoftMode) || (!AnonNSInMicrosoftMode && (!ND.isExternallyVisible() || (VD && VD->isStaticLocal())))) {\n      S.Diag(ND.getLocation(), diag::err_attribute_dll_not_extern) << &ND << Attr;"},{r,6467,"/// Check class-level dllimport/dllexport attribute.\nvoid Sema::checkClassLevelDLLAttribute(CXXRecordDecl *Class) {\n  // ...\n  if (!Class->isExternallyVisible()) {\n    Diag(Class->getLocation(), diag::err_attribute_dll_not_extern) << Class << ClassAttr;"}},
[h]={{m,7003,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // ...\n  if (const InheritableAttr *Attr = getDLLAttr(&ND)) {\n    // ...\n    if ((ND.isExternallyVisible() && AnonNSInMicrosoftMode) || (!AnonNSInMicrosoftMode && (!ND.isExternallyVisible() || (VD && VD->isStaticLocal())))) {\n      S.Diag(ND.getLocation(), diag::err_attribute_dll_not_extern) << &ND << Attr;"},{s,6467,"/// Check class-level dllimport/dllexport attribute.\nvoid Sema::checkClassLevelDLLAttribute(CXXRecordDecl *Class) {\n  // ...\n  if (!Class->isExternallyVisible()) {\n    Diag(Class->getLocation(), diag::err_attribute_dll_not_extern) << Class << ClassAttr;"}},
[j]={
[j]={
["clang/test/Sema/dllexport-2.cpp"]={"clang/test/Sema/dllexport-2.cpp:11:33: error: \'j\' must have external linkage when declared \'dllexport\'","clang/test/Sema/dllexport-2.cpp:21:28: error: \'j2\' must have external linkage when declared \'dllexport\'"}
["clang/test/Sema/dllexport-2.cpp"]={"clang/test/Sema/dllexport-2.cpp:11:33: error: \'j\' must have external linkage when declared \'dllexport\'","clang/test/Sema/dllexport-2.cpp:21:28: error: \'j2\' must have external linkage when declared \'dllexport\'"}
Line 3,323: Line 3,325:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"82f0b06749e5",1396277775,"Sema: Check dll attributes on redeclarations\n\nA redeclaration may not add dllimport or dllexport att...","Sema: Check dll attributes on redeclarations\n\nA redeclaration may not add dllimport or dllexport attributes. dllexport is\nsticky and can be omitted on redeclarations while dllimport cannot.\n\nllvm-svn: 205197"},
[b]={"82f0b06749e5",1396277775,"Sema: Check dll attributes on redeclarations","Sema: Check dll attributes on redeclarations\n\nA redeclaration may not add dllimport or dllexport attributes. dllexport is\nsticky and can be omitted on redeclarations while dllimport cannot.\n\nllvm-svn: 205197"},
[h]={{n,7093,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n  // ...\n  if (AddsAttr && !IsSpecialization && !OldDecl->isImplicit()) {\n    // ...\n    unsigned DiagID = JustWarn ? diag::warn_attribute_dll_redeclaration : diag::err_attribute_dll_redeclaration;"}},
[h]={{m,7093,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n  // ...\n  if (AddsAttr && !IsSpecialization && !OldDecl->isImplicit()) {\n    // ...\n    unsigned DiagID = JustWarn ? diag::warn_attribute_dll_redeclaration : diag::err_attribute_dll_redeclaration;"}},
[j]={
[j]={
["clang/test/Sema/dllexport.c"]={"clang/test/Sema/dllexport.c:49:34: error: redeclaration of \'GlobalRedecl3\' cannot add \'dllexport\' attribute","clang/test/Sema/dllexport.c:104:28: error: redeclaration of \'redecl4\' cannot add \'dllexport\' attribute","clang/test/Sema/dllexport.c:108:35: error: redeclaration of \'redecl5\' cannot add \'dllexport\' attribute"}
["clang/test/Sema/dllexport.c"]={"clang/test/Sema/dllexport.c:49:34: error: redeclaration of \'GlobalRedecl3\' cannot add \'dllexport\' attribute","clang/test/Sema/dllexport.c:104:28: error: redeclaration of \'redecl4\' cannot add \'dllexport\' attribute","clang/test/Sema/dllexport.c:108:35: error: redeclaration of \'redecl5\' cannot add \'dllexport\' attribute"}
Line 3,335: Line 3,337:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"5da21da4f6d7",1412405514,"MS ABI: Disallow dllimported/exported variables from having TLS\n\nWindows TLS relies on indexing thro...","MS ABI: Disallow dllimported/exported variables from having TLS\n\nWindows TLS relies on indexing through a tls_index in order to get at\nthe DLL\'s thread local variables.  However, this index is not exported\nalong with the variable: it is assumed that all accesses to thread local\nvariables are inside the same module which created the variable in the\nfirst place.\n\nWhile there are several implementation techniques we could adopt to fix\nthis (notably, the Itanium ABI gets this for free), it is not worth the\nheroics.\n\nInstead, let\'s just ban this combination.  We could revisit this in the\nfuture if we need to.\n\nThis fixes PR21111.\n\nllvm-svn: 219049"},
[b]={"5da21da4f6d7",1412405514,"MS ABI: Disallow dllimported/exported variables from having TLS","MS ABI: Disallow dllimported/exported variables from having TLS\n\nWindows TLS relies on indexing through a tls_index in order to get at\nthe DLL\'s thread local variables.  However, this index is not exported\nalong with the variable: it is assumed that all accesses to thread local\nvariables are inside the same module which created the variable in the\nfirst place.\n\nWhile there are several implementation techniques we could adopt to fix\nthis (notably, the Itanium ABI gets this for free), it is not worth the\nheroics.\n\nInstead, let\'s just ban this combination.  We could revisit this in the\nfuture if we need to.\n\nThis fixes PR21111.\n\nllvm-svn: 219049"},
[h]={{n,14463,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  // ...\n  // dllimport/dllexport variables cannot be thread local, their TLS index\n  // isn\'t exported with the variable.\n  if (DLLAttr && VD->getTLSKind()) {\n    // ...\n    if (F && getDLLAttr(F)) {\n    // ...\n    } else {\n      Diag(VD->getLocation(), diag::err_attribute_dll_thread_local) << VD << DLLAttr;"}},
[h]={{m,14463,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  // ...\n  // dllimport/dllexport variables cannot be thread local, their TLS index\n  // isn\'t exported with the variable.\n  if (DLLAttr && VD->getTLSKind()) {\n    // ...\n    if (F && getDLLAttr(F)) {\n    // ...\n    } else {\n      Diag(VD->getLocation(), diag::err_attribute_dll_thread_local) << VD << DLLAttr;"}},
[j]={
[j]={
["clang/test/Sema/dllexport.c"]={"clang/test/Sema/dllexport.c:59:36: error: \'ThreadLocalGlobal\' cannot be thread local when declared \'dllexport\'"}
["clang/test/Sema/dllexport.c"]={"clang/test/Sema/dllexport.c:59:36: error: \'ThreadLocalGlobal\' cannot be thread local when declared \'dllexport\'"}
Line 3,347: Line 3,349:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"8e9791f62c45",1393450033,"Sema: Definition of dllimport globals is not allowed\n\nUpgrades the warning to an error and clarifies...","Sema: Definition of dllimport globals is not allowed\n\nUpgrades the warning to an error and clarifies the message by treating the\ndefinition as error instead of the attribute.\n\nllvm-svn: 202300"},
[b]={"8e9791f62c45",1393450033,"Sema: Definition of dllimport globals is not allowed","Sema: Definition of dllimport globals is not allowed\n\nUpgrades the warning to an error and clarifies the message by treating the\ndefinition as error instead of the attribute.\n\nllvm-svn: 202300"},
[h]={{n,13179,"/// 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  // dllimport cannot be used on variable definitions.\n  if (VDecl->hasAttr<DLLImportAttr>() && !VDecl->isStaticDataMember()) {\n    Diag(VDecl->getLocation(), diag::err_attribute_dllimport_data_definition);"}},
[h]={{m,13179,"/// 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  // dllimport cannot be used on variable definitions.\n  if (VDecl->hasAttr<DLLImportAttr>() && !VDecl->isStaticDataMember()) {\n    Diag(VDecl->getLocation(), diag::err_attribute_dllimport_data_definition);"}},
[j]={
[j]={
["clang/test/Sema/dllimport.c"]={"clang/test/Sema/dllimport.c:44:34: error: definition of dllimport data","clang/test/Sema/dllimport.c:45:27: error: definition of dllimport data","clang/test/Sema/dllimport.c:46:27: error: definition of dllimport data","clang/test/Sema/dllimport.c:137:36: error: definition of dllimport data","clang/test/Sema/dllimport.c:139:36: error: definition of dllimport data"}
["clang/test/Sema/dllimport.c"]={"clang/test/Sema/dllimport.c:44:34: error: definition of dllimport data","clang/test/Sema/dllimport.c:45:27: error: definition of dllimport data","clang/test/Sema/dllimport.c:46:27: error: definition of dllimport data","clang/test/Sema/dllimport.c:137:36: error: definition of dllimport data","clang/test/Sema/dllimport.c:139:36: error: definition of dllimport data"}
Line 3,359: Line 3,361:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"b0f2f146bb65",1400191669,"Allow dllimport/dllexport on inline functions and adjust the linkage.\n\nThis is a step towards handli...","Allow dllimport/dllexport on inline functions and adjust the linkage.\n\nThis is a step towards handling these attributes on classes (PR11170).\n\nDifferential Revision: http://reviews.llvm.org/D3772\n\nllvm-svn: 208925"},
[b]={"b0f2f146bb65",1400191669,"Allow dllimport/dllexport on inline functions and adjust the linkage.","Allow dllimport/dllexport on inline functions and adjust the linkage.\n\nThis is a step towards handling these attributes on classes (PR11170).\n\nDifferential Revision: http://reviews.llvm.org/D3772\n\nllvm-svn: 208925"},
[h]={{n,15420,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // ...\n  // dllimport cannot be applied to non-inline function definitions.\n  if (FD->hasAttr<DLLImportAttr>() && !FD->isInlined() && !FD->isTemplateInstantiation()) {\n    // ...\n    Diag(FD->getLocation(), diag::err_attribute_dllimport_function_definition);"}},
[h]={{m,15420,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // ...\n  // dllimport cannot be applied to non-inline function definitions.\n  if (FD->hasAttr<DLLImportAttr>() && !FD->isInlined() && !FD->isTemplateInstantiation()) {\n    // ...\n    Diag(FD->getLocation(), diag::err_attribute_dllimport_function_definition);"}},
[j]={
[j]={
["clang/test/SemaCXX/MicrosoftExtensions.cpp"]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:188:33: error: dllimport cannot be applied to non-inline function definition"}
["clang/test/SemaCXX/MicrosoftExtensions.cpp"]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:188:33: error: dllimport cannot be applied to non-inline function definition"}
Line 3,371: Line 3,373:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={M,1625925174,K,L},
[b]={N,1625925174,M,L},
[h]={{n,7130,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n  // ...\n  if (OldImportAttr && !HasNewAttr && (!IsInline || (IsMicrosoftABI && IsTemplate)) && !IsStaticDataMember && !NewDecl->isLocalExternDecl() && !IsQualifiedFriend) {\n    if (IsMicrosoftABI && IsDefinition) {\n      if (IsSpecialization) {\n        S.Diag(NewDecl->getLocation(), diag::err_attribute_dllimport_function_specialization_definition);"}},
[h]={{m,7130,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n  // ...\n  if (OldImportAttr && !HasNewAttr && (!IsInline || (IsMicrosoftABI && IsTemplate)) && !IsStaticDataMember && !NewDecl->isLocalExternDecl() && !IsQualifiedFriend) {\n    if (IsMicrosoftABI && IsDefinition) {\n      if (IsSpecialization) {\n        S.Diag(NewDecl->getLocation(), diag::err_attribute_dllimport_function_specialization_definition);"}},
[j]={
[j]={
["clang/test/SemaCXX/dllimport.cpp"]={"clang/test/SemaCXX/dllimport.cpp:1322:33: error: cannot define non-inline dllimport template specialization","clang/test/SemaCXX/dllimport.cpp:1326:33: error: cannot define non-inline dllimport template specialization","clang/test/SemaCXX/dllimport.cpp:1332:47: error: cannot define non-inline dllimport template specialization"}
["clang/test/SemaCXX/dllimport.cpp"]={"clang/test/SemaCXX/dllimport.cpp:1322:33: error: cannot define non-inline dllimport template specialization","clang/test/SemaCXX/dllimport.cpp:1326:33: error: cannot define non-inline dllimport template specialization","clang/test/SemaCXX/dllimport.cpp:1332:47: error: cannot define non-inline dllimport template specialization"}
Line 3,383: Line 3,385:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"078d2f89cd6a",1401382220,"Sema: Check dll attributes on static data members\n\nRedeclarations cannot add a dll attribute and sta...","Sema: Check dll attributes on static data members\n\nRedeclarations cannot add a dll attribute and static data members cannot\nbe defined.\n\nllvm-svn: 209825"},
[b]={"078d2f89cd6a",1401382220,"Sema: Check dll attributes on static data members","Sema: Check dll attributes on static data members\n\nRedeclarations cannot add a dll attribute and static data members cannot\nbe defined.\n\nllvm-svn: 209825"},
[h]={{n,14446,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  // ...\n  // Imported static data members cannot be defined out-of-line.\n  if (const auto *IA = dyn_cast_or_null<DLLImportAttr>(DLLAttr)) {\n    if (VD->isStaticDataMember() && VD->isOutOfLine() && VD->isThisDeclarationADefinition()) {\n      // ...\n      Diag(VD->getLocation(), IsClassTemplateMember ? diag::warn_attribute_dllimport_static_field_definition : diag::err_attribute_dllimport_static_field_definition);"}},
[h]={{m,14446,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  // ...\n  // Imported static data members cannot be defined out-of-line.\n  if (const auto *IA = dyn_cast_or_null<DLLImportAttr>(DLLAttr)) {\n    if (VD->isStaticDataMember() && VD->isOutOfLine() && VD->isThisDeclarationADefinition()) {\n      // ...\n      Diag(VD->getLocation(), IsClassTemplateMember ? diag::warn_attribute_dllimport_static_field_definition : diag::err_attribute_dllimport_static_field_definition);"}},
[j]={
[j]={
["clang/test/SemaCXX/dllimport.cpp"]={"clang/test/SemaCXX/dllimport.cpp:641:28: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:642:28: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:680:53: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:681:53: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:844:49: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:847:49: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:923:52: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:924:52: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:972:71: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:975:71: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:1107:56: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:1126:56: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:1506:13: error: definition of dllimport static field not allowed"}
["clang/test/SemaCXX/dllimport.cpp"]={"clang/test/SemaCXX/dllimport.cpp:641:28: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:642:28: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:680:53: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:681:53: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:844:49: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:847:49: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:923:52: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:924:52: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:972:71: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:975:71: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:1107:56: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:1126:56: error: definition of dllimport static field not allowed","clang/test/SemaCXX/dllimport.cpp:1506:13: error: definition of dllimport static field not allowed"}
Line 3,395: Line 3,397:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"a747027bc645",1482195942,"Add the alloc_size attribute to clang.\n\nThis patch does three things:\n\n- Gives us the alloc_size att...","Add the alloc_size attribute to clang.\n\nThis patch does three things:\n\n- Gives us the alloc_size attribute in clang, which lets us infer the\n  number of bytes handed back to us by malloc/realloc/calloc/any user\n  functions that act in a similar manner.\n- Teaches our constexpr evaluator that evaluating some `const` variables\n  is OK sometimes. This is why we have a change in\n  test/SemaCXX/constant-expression-cxx11.cpp and other seemingly\n  unrelated tests. Richard Smith okay\'ed this idea some time ago in\n  person.\n- Uniques some Blocks in CodeGen, which was reviewed separately at\n  D26410. Lack of uniquing only really shows up as a problem when\n  combined with our new eagerness in the face of const.\n\nDifferential Revision: https://reviews.llvm.org/D14274\n\nllvm-svn: 290149"},
[b]={"a747027bc645",1482195942,"Add the alloc_size attribute to clang.","Add the alloc_size attribute to clang.\n\nThis patch does three things:\n\n- Gives us the alloc_size attribute in clang, which lets us infer the\n  number of bytes handed back to us by malloc/realloc/calloc/any user\n  functions that act in a similar manner.\n- Teaches our constexpr evaluator that evaluating some `const` variables\n  is OK sometimes. This is why we have a change in\n  test/SemaCXX/constant-expression-cxx11.cpp and other seemingly\n  unrelated tests. Richard Smith okay\'ed this idea some time ago in\n  person.\n- Uniques some Blocks in CodeGen, which was reviewed separately at\n  D26410. Lack of uniquing only really shows up as a problem when\n  combined with our new eagerness in the face of const.\n\nDifferential Revision: https://reviews.llvm.org/D14274\n\nllvm-svn: 290149"},
[h]={{l,820,"/// Checks to be sure that the given parameter number is in bounds, and\n/// is an integral type. Will emit appropriate diagnostics if this returns\n/// false.\n///\n/// AttrArgNo is used to actually retrieve the argument, so it\'s base-0.\ntemplate <typename AttrInfo> static bool checkParamIsIntegerType(Sema &S, const Decl *D, const AttrInfo &AI, unsigned AttrArgNo) {\n  // ...\n  if (!ParamTy->isIntegerType() && !ParamTy->isCharType()) {\n    // ...\n    S.Diag(SrcLoc, diag::err_attribute_integers_only) << AI << getFunctionOrMethodParamRange(D, Idx.getASTIndex());"},{l,1754,"void Sema::AddAllocAlignAttr(Decl *D, const AttributeCommonInfo &CI, Expr *ParamExpr) {\n  // ...\n  if (!Ty->isDependentType() && !Ty->isIntegralType(Context) && !Ty->isAlignValT()) {\n    Diag(ParamExpr->getBeginLoc(), diag::err_attribute_integers_only) << &TmpAttr << FuncDecl->getParamDecl(Idx.getASTIndex())->getSourceRange();"}},
[h]={{l,820,"/// Checks to be sure that the given parameter number is in bounds, and\n/// is an integral type. Will emit appropriate diagnostics if this returns\n/// false.\n///\n/// AttrArgNo is used to actually retrieve the argument, so it\'s base-0.\ntemplate <typename AttrInfo> static bool checkParamIsIntegerType(Sema &S, const Decl *D, const AttrInfo &AI, unsigned AttrArgNo) {\n  // ...\n  if (!ParamTy->isIntegerType() && !ParamTy->isCharType()) {\n    // ...\n    S.Diag(SrcLoc, diag::err_attribute_integers_only) << AI << getFunctionOrMethodParamRange(D, Idx.getASTIndex());"},{l,1754,"void Sema::AddAllocAlignAttr(Decl *D, const AttributeCommonInfo &CI, Expr *ParamExpr) {\n  // ...\n  if (!Ty->isDependentType() && !Ty->isIntegralType(Context) && !Ty->isAlignValT()) {\n    Diag(ParamExpr->getBeginLoc(), diag::err_attribute_integers_only) << &TmpAttr << FuncDecl->getParamDecl(Idx.getASTIndex())->getSourceRange();"}},
[j]={
[j]={
Line 3,407: Line 3,409:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"d293cbd5fd44",1564077051,"Add lifetime categories attributes\n\nSummary:\nThis is the first part of work announced in\n\"[RFC] Addi...","Add lifetime categories attributes\n\nSummary:\nThis is the first part of work announced in\n\"[RFC] Adding lifetime analysis to clang\" [0],\ni.e. the addition of the [[gsl::Owner(T)]] and\n[[gsl::Pointer(T)]] attributes, which\nwill enable user-defined types to participate in\nthe lifetime analysis (which will be part of the\nnext PR).\nThe type `T` here is called \"DerefType\" in the paper,\nand denotes the type that an Owner owns and a Pointer\npoints to. E.g. `std::vector<int>` should be annotated\nwith `[[gsl::Owner(int)]]` and\na `std::vector<int>::iterator` with `[[gsl::Pointer(int)]]`.\n\n[0] http://lists.llvm.org/pipermail/cfe-dev/2018-November/060355.html\n\nReviewers: gribozavr\n\nSubscribers: xazax.hun, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D63954\n\nllvm-svn: 367040"},
[b]={"d293cbd5fd44",1564077051,"Add lifetime categories attributes","Add lifetime categories attributes\n\nSummary:\nThis is the first part of work announced in\n\"[RFC] Adding lifetime analysis to clang\" [0],\ni.e. the addition of the [[gsl::Owner(T)]] and\n[[gsl::Pointer(T)]] attributes, which\nwill enable user-defined types to participate in\nthe lifetime analysis (which will be part of the\nnext PR).\nThe type `T` here is called \"DerefType\" in the paper,\nand denotes the type that an Owner owns and a Pointer\npoints to. E.g. `std::vector<int>` should be annotated\nwith `[[gsl::Owner(int)]]` and\na `std::vector<int>::iterator` with `[[gsl::Pointer(int)]]`.\n\n[0] http://lists.llvm.org/pipermail/cfe-dev/2018-November/060355.html\n\nReviewers: gribozavr\n\nSubscribers: xazax.hun, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D63954\n\nllvm-svn: 367040"},
[h]={{l,3271,"static void handleVecTypeHint(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!ParmType->isExtVectorType() && !ParmType->isFloatingType() && (ParmType->isBooleanType() || !ParmType->isIntegralType(S.getASTContext()))) {\n    S.Diag(AL.getLoc(), diag::err_attribute_invalid_argument) << 2 << AL;"},{l,5236,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.hasParsedType()) {\n    // ...\n    if (SelectIdx != ~0U) {\n      S.Diag(AL.getLoc(), diag::err_attribute_invalid_argument) << SelectIdx << AL;"}},
[h]={{l,3271,"static void handleVecTypeHint(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!ParmType->isExtVectorType() && !ParmType->isFloatingType() && (ParmType->isBooleanType() || !ParmType->isIntegralType(S.getASTContext()))) {\n    S.Diag(AL.getLoc(), diag::err_attribute_invalid_argument) << 2 << AL;"},{l,5236,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.hasParsedType()) {\n    // ...\n    if (SelectIdx != ~0U) {\n      S.Diag(AL.getLoc(), diag::err_attribute_invalid_argument) << SelectIdx << AL;"}},
[j]={
[j]={
Line 3,419: Line 3,421:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={M,1625925174,K,L},
[b]={N,1625925174,M,L},
[h]={{o,2716,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // ...\n  // Only support _BitInt elements with byte-sized power of 2 NumBits.\n  if (const auto *BIT = CurType->getAs<BitIntType>()) {\n    // ...\n    if (!llvm::isPowerOf2_32(NumBits) || NumBits < 8) {\n      Diag(AttrLoc, diag::err_attribute_invalid_bitint_vector_type) << (NumBits < 8);"},{o,2797,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  // ...\n  // Only support _BitInt elements with byte-sized power of 2 NumBits.\n  if (T->isBitIntType()) {\n    // ...\n    if (!llvm::isPowerOf2_32(NumBits) || NumBits < 8) {\n      Diag(AttrLoc, diag::err_attribute_invalid_bitint_vector_type) << (NumBits < 8);"}},
[h]={{n,2716,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // ...\n  // Only support _BitInt elements with byte-sized power of 2 NumBits.\n  if (const auto *BIT = CurType->getAs<BitIntType>()) {\n    // ...\n    if (!llvm::isPowerOf2_32(NumBits) || NumBits < 8) {\n      Diag(AttrLoc, diag::err_attribute_invalid_bitint_vector_type) << (NumBits < 8);"},{n,2797,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  // ...\n  // Only support _BitInt elements with byte-sized power of 2 NumBits.\n  if (T->isBitIntType()) {\n    // ...\n    if (!llvm::isPowerOf2_32(NumBits) || NumBits < 8) {\n      Diag(AttrLoc, diag::err_attribute_invalid_bitint_vector_type) << (NumBits < 8);"}},
[j]={
[j]={
["clang/test/SemaCXX/ext-int.cpp"]={"clang/test/SemaCXX/ext-int.cpp:88:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:90:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:92:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:94:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:96:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:98:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:100:36: error: \'_BitInt\' vector element width must be a power of 2","clang/test/SemaCXX/ext-int.cpp:102:36: error: \'_BitInt\' vector element width must be a power of 2"}
["clang/test/SemaCXX/ext-int.cpp"]={"clang/test/SemaCXX/ext-int.cpp:88:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:90:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:92:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:94:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:96:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:98:35: error: \'_BitInt\' vector element width must be at least as wide as \'CHAR_BIT\'","clang/test/SemaCXX/ext-int.cpp:100:36: error: \'_BitInt\' vector element width must be a power of 2","clang/test/SemaCXX/ext-int.cpp:102:36: error: \'_BitInt\' vector element width must be a power of 2"}
Line 3,431: Line 3,433:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"743682bb9f66",1289896543,"Re-work the handling of implicit \'this\' arguments and silly GCC-style attribute\nargument indexes. Th...","Re-work the handling of implicit \'this\' arguments and silly GCC-style attribute\nargument indexes. This handles the offsets in a consistent manner for all of\nthe attributes which I saw working with these concepts. I\'ve also added tests\nfor the attribute that motivated this: nonnull.\n\nI consolidated the tests for format attributes into one file, and fleshed them\nout a bit to trigger more of the warning cases. Also improved the quality of\nsome of the diagnostics that occur with invalid argument indices.\n\nThe only really questionable change here is supporting the implicit this\nargument for the ownership attribute. I\'m not sure it\'s really a sensible\nconcept there, but implemented the logic for consistency.\n\nllvm-svn: 119339"},
[b]={"743682bb9f66",1289896543,"Re-work the handling of implicit \'this\' arguments and silly GCC-style attribute","Re-work the handling of implicit \'this\' arguments and silly GCC-style attribute\nargument indexes. This handles the offsets in a consistent manner for all of\nthe attributes which I saw working with these concepts. I\'ve also added tests\nfor the attribute that motivated this: nonnull.\n\nI consolidated the tests for format attributes into one file, and fleshed them\nout a bit to trigger more of the warning cases. Also improved the quality of\nsome of the diagnostics that occur with invalid argument indices.\n\nThe only really questionable change here is supporting the implicit this\nargument for the ownership attribute. I\'m not sure it\'s really a sensible\nconcept there, but implemented the logic for consistency.\n\nllvm-svn: 119339"},
[h]={{l,333,"/// Check if IdxExpr is a valid parameter index for a function or\n/// instance method D.  May output an error.\n///\n/// \\returns true if IdxExpr is a valid index.\ntemplate <typename AttrInfo> static bool checkFunctionOrMethodParameterIndex(Sema &S, const Decl *D, const AttrInfo &AI, unsigned AttrArgNum, const Expr *IdxExpr, ParamIdx &Idx, bool CanIndexImplicitThis = false) {\n  // ...\n  if (HasImplicitThisParam && !CanIndexImplicitThis) {\n    if (IdxSource == 1) {\n      S.Diag(getAttrLoc(AI), diag::err_attribute_invalid_implicit_this_argument) << &AI << IdxExpr->getSourceRange();"}},
[h]={{l,333,"/// Check if IdxExpr is a valid parameter index for a function or\n/// instance method D.  May output an error.\n///\n/// \\returns true if IdxExpr is a valid index.\ntemplate <typename AttrInfo> static bool checkFunctionOrMethodParameterIndex(Sema &S, const Decl *D, const AttrInfo &AI, unsigned AttrArgNum, const Expr *IdxExpr, ParamIdx &Idx, bool CanIndexImplicitThis = false) {\n  // ...\n  if (HasImplicitThisParam && !CanIndexImplicitThis) {\n    if (IdxSource == 1) {\n      S.Diag(getAttrLoc(AI), diag::err_attribute_invalid_implicit_this_argument) << &AI << IdxExpr->getSourceRange();"}},
[j]={
[j]={
Line 3,443: Line 3,445:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={ab,1576908663,Z,Y},
[b]={Z,1576908663,X,Y},
[h]={{o,2842,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  // Check element type, if it is not dependent.\n  if (!ElementTy->isDependentType() && !MatrixType::isValidElementType(ElementTy)) {\n    Diag(AttrLoc, diag::err_attribute_invalid_matrix_type) << ElementTy;"}},
[h]={{n,2842,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  // Check element type, if it is not dependent.\n  if (!ElementTy->isDependentType() && !MatrixType::isValidElementType(ElementTy)) {\n    Diag(AttrLoc, diag::err_attribute_invalid_matrix_type) << ElementTy;"}},
[j]={
[j]={
["clang/test/SemaTemplate/matrix-type.cpp"]={"clang/test/SemaTemplate/matrix-type.cpp:120:28: error: invalid matrix element type \'s\'","clang/test/SemaTemplate/matrix-type.cpp:141:34: error: invalid matrix element type \'int_ptr\' (aka \'int *\')"}
["clang/test/SemaTemplate/matrix-type.cpp"]={"clang/test/SemaTemplate/matrix-type.cpp:120:28: error: invalid matrix element type \'s\'","clang/test/SemaTemplate/matrix-type.cpp:141:34: error: invalid matrix element type \'int_ptr\' (aka \'int *\')"}
Line 3,455: Line 3,457:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={M,1625925174,K,L},
[b]={N,1625925174,M,L},
[h]={{l,8826,"/// ProcessDeclAttribute - Apply the specific attribute to the specified decl if\n/// the attribute applies to decls.  If the attribute is a type attribute, just\n/// silently ignore it if a GNU attribute.\nstatic void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D, const ParsedAttr &AL, const Sema::ProcessDeclAttributeOptions &Options) {\n  // ...\n  default:\n    // ...\n    S.Diag(AL.getLoc(), diag::err_attribute_invalid_on_decl) << AL << AL.isRegularKeywordAttribute() << D->getLocation();"},{"clang/utils/TableGen/ClangAttrEmitter.cpp",3886,"static void GenerateAppertainsTo(const Record &Attr, raw_ostream &OS) {\n  // ...\n  if (DeclSubjects.empty()) {\n    // If there are no decl subjects but there are stmt subjects, diagnose\n    // trying to apply a statement attribute to a declaration.\n    if (!StmtSubjects.empty()) {\n      // ...\n      OS << \"  S.Diag(AL.getLoc(), diag::err_attribute_invalid_on_decl)\\n\";"}},
[h]={{l,8826,"/// ProcessDeclAttribute - Apply the specific attribute to the specified decl if\n/// the attribute applies to decls.  If the attribute is a type attribute, just\n/// silently ignore it if a GNU attribute.\nstatic void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D, const ParsedAttr &AL, const Sema::ProcessDeclAttributeOptions &Options) {\n  // ...\n  default:\n    // ...\n    S.Diag(AL.getLoc(), diag::err_attribute_invalid_on_decl) << AL << AL.isRegularKeywordAttribute() << D->getLocation();"},{"clang/utils/TableGen/ClangAttrEmitter.cpp",3886,"static void GenerateAppertainsTo(const Record &Attr, raw_ostream &OS) {\n  // ...\n  if (DeclSubjects.empty()) {\n    // If there are no decl subjects but there are stmt subjects, diagnose\n    // trying to apply a statement attribute to a declaration.\n    if (!StmtSubjects.empty()) {\n      // ...\n      OS << \"  S.Diag(AL.getLoc(), diag::err_attribute_invalid_on_decl)\\n\";"}},
[j]={
[j]={
Line 3,467: Line 3,469:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={M,1625925174,K,L},
[b]={N,1625925174,M,L},
[h]={{o,8369,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  // Attribute can only be attached to a single RVV vector type.\n  if (!CurType->isRVVVLSBuiltinType()) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_rvv_type) << Attr << CurType;"}},
[h]={{n,8369,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  // Attribute can only be attached to a single RVV vector type.\n  if (!CurType->isRVVVLSBuiltinType()) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_rvv_type) << Attr << CurType;"}},
[j]={
[j]={
["clang/test/Sema/attr-riscv-rvv-vector-bits.c"]={"clang/test/Sema/attr-riscv-rvv-vector-bits.c:232:50: error: \'riscv_rvv_vector_bits\' attribute applied to non-RVV type \'vbool1_t\' (aka \'__rvv_bool1_t\')","clang/test/Sema/attr-riscv-rvv-vector-bits.c:235:39: error: \'riscv_rvv_vector_bits\' attribute applied to non-RVV type \'void *\'","clang/test/Sema/attr-riscv-rvv-vector-bits.c:236:37: error: \'riscv_rvv_vector_bits\' attribute applied to non-RVV type \'int\'","clang/test/Sema/attr-riscv-rvv-vector-bits.c:237:39: error: \'riscv_rvv_vector_bits\' attribute applied to non-RVV type \'float\'"}
["clang/test/Sema/attr-riscv-rvv-vector-bits.c"]={"clang/test/Sema/attr-riscv-rvv-vector-bits.c:232:50: error: \'riscv_rvv_vector_bits\' attribute applied to non-RVV type \'vbool1_t\' (aka \'__rvv_bool1_t\')","clang/test/Sema/attr-riscv-rvv-vector-bits.c:235:39: error: \'riscv_rvv_vector_bits\' attribute applied to non-RVV type \'void *\'","clang/test/Sema/attr-riscv-rvv-vector-bits.c:236:37: error: \'riscv_rvv_vector_bits\' attribute applied to non-RVV type \'int\'","clang/test/Sema/attr-riscv-rvv-vector-bits.c:237:39: error: \'riscv_rvv_vector_bits\' attribute applied to non-RVV type \'float\'"}
Line 3,479: Line 3,481:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{o,2756,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // ...\n  if (!TypeSize || VectorSizeBits % TypeSize) {\n    Diag(AttrLoc, diag::err_attribute_invalid_size) << SizeExpr->getSourceRange();"}},
[h]={{n,2756,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // ...\n  if (!TypeSize || VectorSizeBits % TypeSize) {\n    Diag(AttrLoc, diag::err_attribute_invalid_size) << SizeExpr->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCUDA/amdgpu-bf16.cu"]={"clang/test/SemaCUDA/amdgpu-bf16.cu:57:35: error: vector size not an integral multiple of component size"}
["clang/test/SemaCUDA/amdgpu-bf16.cu"]={"clang/test/SemaCUDA/amdgpu-bf16.cu:57:35: error: vector size not an integral multiple of component size"}
Line 3,491: Line 3,493:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={X,1582847864,W,S},
[b]={T,1582847864,U,V},
[h]={{o,8296,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  // Attribute can only be attached to a single SVE vector or predicate type.\n  if (!CurType->isVLSTBuiltinType()) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_sve_type) << Attr << CurType;"}},
[h]={{n,8296,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  // Attribute can only be attached to a single SVE vector or predicate type.\n  if (!CurType->isVLSTBuiltinType()) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_sve_type) << Attr << CurType;"}},
[j]={
[j]={
["clang/test/Sema/attr-arm-sve-vector-bits.c"]={"clang/test/Sema/attr-arm-sve-vector-bits.c:81:39: error: \'arm_sve_vector_bits\' attribute applied to non-SVE type \'void *\'","clang/test/Sema/attr-arm-sve-vector-bits.c:82:37: error: \'arm_sve_vector_bits\' attribute applied to non-SVE type \'int\'","clang/test/Sema/attr-arm-sve-vector-bits.c:83:39: error: \'arm_sve_vector_bits\' attribute applied to non-SVE type \'float\'","clang/test/Sema/attr-arm-sve-vector-bits.c:84:44: error: \'arm_sve_vector_bits\' attribute applied to non-SVE type \'svint8x2_t\' (aka \'__clang_svint8x2_t\')","clang/test/Sema/attr-arm-sve-vector-bits.c:85:47: error: \'arm_sve_vector_bits\' attribute applied to non-SVE type \'svfloat32x3_t\' (aka \'__clang_svfloat32x3_t\')"}
["clang/test/Sema/attr-arm-sve-vector-bits.c"]={"clang/test/Sema/attr-arm-sve-vector-bits.c:81:39: error: \'arm_sve_vector_bits\' attribute applied to non-SVE type \'void *\'","clang/test/Sema/attr-arm-sve-vector-bits.c:82:37: error: \'arm_sve_vector_bits\' attribute applied to non-SVE type \'int\'","clang/test/Sema/attr-arm-sve-vector-bits.c:83:39: error: \'arm_sve_vector_bits\' attribute applied to non-SVE type \'float\'","clang/test/Sema/attr-arm-sve-vector-bits.c:84:44: error: \'arm_sve_vector_bits\' attribute applied to non-SVE type \'svint8x2_t\' (aka \'__clang_svint8x2_t\')","clang/test/Sema/attr-arm-sve-vector-bits.c:85:47: error: \'arm_sve_vector_bits\' attribute applied to non-SVE type \'svfloat32x3_t\' (aka \'__clang_svfloat32x3_t\')"}
Line 3,503: Line 3,505:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{o,2709,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // The base type must be integer (not Boolean or enumeration) or float, and\n  // can\'t already be a vector.\n  if ((!CurType->isDependentType() && (!CurType->isBuiltinType() || CurType->isBooleanType() || (!CurType->isIntegerType() && !CurType->isRealFloatingType())) && !CurType->isBitIntType()) || CurType->isArrayType()) {\n    Diag(AttrLoc, diag::err_attribute_invalid_vector_type) << CurType;"},{o,2789,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  // ...\n  if ((!T->isDependentType() && !T->isIntegerType() && !T->isRealFloatingType()) || (IsNoBoolVecLang && T->isBooleanType())) {\n    Diag(AttrLoc, diag::err_attribute_invalid_vector_type) << T;"},{o,8231,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  // ...\n  // Only certain element types are supported for Neon vectors.\n  if (!isPermittedNeonBaseType(CurType, VecKind, S) && !IsTargetCUDAAndHostARM) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) << CurType;"}},
[h]={{n,2709,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // The base type must be integer (not Boolean or enumeration) or float, and\n  // can\'t already be a vector.\n  if ((!CurType->isDependentType() && (!CurType->isBuiltinType() || CurType->isBooleanType() || (!CurType->isIntegerType() && !CurType->isRealFloatingType())) && !CurType->isBitIntType()) || CurType->isArrayType()) {\n    Diag(AttrLoc, diag::err_attribute_invalid_vector_type) << CurType;"},{n,2789,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  // ...\n  if ((!T->isDependentType() && !T->isIntegerType() && !T->isRealFloatingType()) || (IsNoBoolVecLang && T->isBooleanType())) {\n    Diag(AttrLoc, diag::err_attribute_invalid_vector_type) << T;"},{n,8231,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  // ...\n  // Only certain element types are supported for Neon vectors.\n  if (!isPermittedNeonBaseType(CurType, VecKind, S) && !IsTargetCUDAAndHostARM) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) << CurType;"}},
[j]={
[j]={
["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:56:25: error: invalid vector element type \'float2\' (vector of 2 \'float\' values)"}
["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:56:25: error: invalid vector element type \'float2\' (vector of 2 \'float\' values)"}
Line 3,515: Line 3,517:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={Tb,1615397021,Ub,Vb},
[b]={dc,1615397021,cc,fc},
[h]={{n,3710,"/// 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 (const auto *ILA = New->getAttr<InternalLinkageAttr>())\n    if (!Old->hasAttr<InternalLinkageAttr>()) {\n      Diag(New->getLocation(), diag::err_attribute_missing_on_first_decl) << ILA;"},{n,3718,"/// 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 (auto *EA = New->getAttr<ErrorAttr>()) {\n    if (!Old->hasAttr<ErrorAttr>()) {\n      Diag(EA->getLocation(), diag::err_attribute_missing_on_first_decl) << EA;"},{n,4043,"/// 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    // C++11 [dcl.attr.noreturn]p1:\n    //  The first declaration of a function shall specify the noreturn\n    //  attribute if any declaration of that function specifies the noreturn\n    //  attribute.\n    if (const auto *NRA = New->getAttr<CXX11NoReturnAttr>())\n      if (!Old->hasAttr<CXX11NoReturnAttr>()) {\n        Diag(NRA->getLocation(), diag::err_attribute_missing_on_first_decl) << NRA;"},{n,4600,"/// 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 (const auto *ILA = New->getAttr<InternalLinkageAttr>())\n    if (!Old->hasAttr<InternalLinkageAttr>()) {\n      Diag(New->getLocation(), diag::err_attribute_missing_on_first_decl) << ILA;"}},
[h]={{m,3710,"/// 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 (const auto *ILA = New->getAttr<InternalLinkageAttr>())\n    if (!Old->hasAttr<InternalLinkageAttr>()) {\n      Diag(New->getLocation(), diag::err_attribute_missing_on_first_decl) << ILA;"},{m,3718,"/// 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 (auto *EA = New->getAttr<ErrorAttr>()) {\n    if (!Old->hasAttr<ErrorAttr>()) {\n      Diag(EA->getLocation(), diag::err_attribute_missing_on_first_decl) << EA;"},{m,4043,"/// 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    // C++11 [dcl.attr.noreturn]p1:\n    //  The first declaration of a function shall specify the noreturn\n    //  attribute if any declaration of that function specifies the noreturn\n    //  attribute.\n    if (const auto *NRA = New->getAttr<CXX11NoReturnAttr>())\n      if (!Old->hasAttr<CXX11NoReturnAttr>()) {\n        Diag(NRA->getLocation(), diag::err_attribute_missing_on_first_decl) << NRA;"},{m,4600,"/// 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 (const auto *ILA = New->getAttr<InternalLinkageAttr>())\n    if (!Old->hasAttr<InternalLinkageAttr>()) {\n      Diag(New->getLocation(), diag::err_attribute_missing_on_first_decl) << ILA;"}},
[j]={
[j]={
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.noreturn/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.noreturn/p1.cpp:28:3: error: \'noreturn\' attribute does not appear on the first declaration"}
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.noreturn/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.noreturn/p1.cpp:28:3: error: \'noreturn\' attribute does not appear on the first declaration"}
Line 3,527: Line 3,529:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{o,7100,"/// handleObjCGCTypeAttr - Process the __attribute__((objc_gc)) type\n/// attribute on the specified type.  Returns true to indicate that\n/// the attribute was handled, false to indicate that the type does\n/// not permit the attribute.\nstatic bool handleObjCGCTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  if (type.getObjCGCAttr() != Qualifiers::GCNone) {\n    S.Diag(attr.getLoc(), diag::err_attribute_multiple_objc_gc);"}}
[h]={{n,7100,"/// handleObjCGCTypeAttr - Process the __attribute__((objc_gc)) type\n/// attribute on the specified type.  Returns true to indicate that\n/// the attribute was handled, false to indicate that the type does\n/// not permit the attribute.\nstatic bool handleObjCGCTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  if (type.getObjCGCAttr() != Qualifiers::GCNone) {\n    S.Diag(attr.getLoc(), diag::err_attribute_multiple_objc_gc);"}}
},
},
["err_attribute_no_builtin_on_defaulted_deleted_function"]={
["err_attribute_no_builtin_on_defaulted_deleted_function"]={
Line 3,536: Line 3,538:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute\n\nSummary:\nThis is a follow up on https://reviews.llvm.org/D61634\nTh...","[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"},
[b]={"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"},
[h]={{n,10801,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  // Diagnose no_builtin attribute on function declaration that are not a\n  // definition.\n  // FIXME: We should really be doing this in\n  // SemaDeclAttr.cpp::handleNoBuiltinAttr, unfortunately we only have access to\n  // the FunctionDecl and at this point of the code\n  // FunctionDecl::isThisDeclarationADefinition() which always returns `false`\n  // because Sema::ActOnStartOfFunctionDef has not been called yet.\n  if (const auto *NBA = NewFD->getAttr<NoBuiltinAttr>())\n    // ...\n    case FunctionDefinitionKind::Defaulted:\n    case FunctionDefinitionKind::Deleted:\n      Diag(NBA->getLocation(), diag::err_attribute_no_builtin_on_defaulted_deleted_function) << NBA->getSpelling();"}},
[h]={{m,10801,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  // Diagnose no_builtin attribute on function declaration that are not a\n  // definition.\n  // FIXME: We should really be doing this in\n  // SemaDeclAttr.cpp::handleNoBuiltinAttr, unfortunately we only have access to\n  // the FunctionDecl and at this point of the code\n  // FunctionDecl::isThisDeclarationADefinition() which always returns `false`\n  // because Sema::ActOnStartOfFunctionDef has not been called yet.\n  if (const auto *NBA = NewFD->getAttr<NoBuiltinAttr>())\n    // ...\n    case FunctionDefinitionKind::Defaulted:\n    case FunctionDefinitionKind::Deleted:\n      Diag(NBA->getLocation(), diag::err_attribute_no_builtin_on_defaulted_deleted_function) << NBA->getSpelling();"}},
[j]={
[j]={
["clang/test/Sema/no-builtin.cpp"]={"clang/test/Sema/no-builtin.cpp:36:18: error: no_builtin attribute has no effect on defaulted or deleted functions","clang/test/Sema/no-builtin.cpp:41:18: error: no_builtin attribute has no effect on defaulted or deleted functions"}
["clang/test/Sema/no-builtin.cpp"]={"clang/test/Sema/no-builtin.cpp:36:18: error: no_builtin attribute has no effect on defaulted or deleted functions","clang/test/Sema/no-builtin.cpp:41:18: error: no_builtin attribute has no effect on defaulted or deleted functions"}
Line 3,548: Line 3,550:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute\n\nSummary:\nThis is a follow up on https://reviews.llvm.org/D61634\nTh...","[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"},
[b]={"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"},
[h]={{n,10805,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  // Diagnose no_builtin attribute on function declaration that are not a\n  // definition.\n  // FIXME: We should really be doing this in\n  // SemaDeclAttr.cpp::handleNoBuiltinAttr, unfortunately we only have access to\n  // the FunctionDecl and at this point of the code\n  // FunctionDecl::isThisDeclarationADefinition() which always returns `false`\n  // because Sema::ActOnStartOfFunctionDef has not been called yet.\n  if (const auto *NBA = NewFD->getAttr<NoBuiltinAttr>())\n    // ...\n    case FunctionDefinitionKind::Declaration:\n      Diag(NBA->getLocation(), diag::err_attribute_no_builtin_on_non_definition) << NBA->getSpelling();"}},
[h]={{m,10805,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  // Diagnose no_builtin attribute on function declaration that are not a\n  // definition.\n  // FIXME: We should really be doing this in\n  // SemaDeclAttr.cpp::handleNoBuiltinAttr, unfortunately we only have access to\n  // the FunctionDecl and at this point of the code\n  // FunctionDecl::isThisDeclarationADefinition() which always returns `false`\n  // because Sema::ActOnStartOfFunctionDef has not been called yet.\n  if (const auto *NBA = NewFD->getAttr<NoBuiltinAttr>())\n    // ...\n    case FunctionDefinitionKind::Declaration:\n      Diag(NBA->getLocation(), diag::err_attribute_no_builtin_on_non_definition) << NBA->getSpelling();"}},
[j]={
[j]={
["clang/test/Sema/no-builtin.cpp"]={"clang/test/Sema/no-builtin.cpp:30:48: error: no_builtin attribute is permitted on definitions only","clang/test/Sema/no-builtin.cpp:44:34: error: no_builtin attribute is permitted on definitions only","clang/test/Sema/no-builtin.cpp:50:41: error: no_builtin attribute is permitted on definitions only"}
["clang/test/Sema/no-builtin.cpp"]={"clang/test/Sema/no-builtin.cpp:30:48: error: no_builtin attribute is permitted on definitions only","clang/test/Sema/no-builtin.cpp:44:34: error: no_builtin attribute is permitted on definitions only","clang/test/Sema/no-builtin.cpp:50:41: error: no_builtin attribute is permitted on definitions only"}
Line 3,560: Line 3,562:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute\n\nSummary:\nThis is a follow up on https://reviews.llvm.org/D61634\nTh...","[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"},
[b]={"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"},
[h]={{l,1164,"static void handleNoBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Empty no_builtin must be on its own.\n  if (HasWildcard && Names.size() > 1)\n    S.Diag(D->getLocation(), diag::err_attribute_no_builtin_wildcard_or_builtin_name) << AL;"}},
[h]={{l,1164,"static void handleNoBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Empty no_builtin must be on its own.\n  if (HasWildcard && Names.size() > 1)\n    S.Diag(D->getLocation(), diag::err_attribute_no_builtin_wildcard_or_builtin_name) << AL;"}},
[j]={
[j]={
Line 3,572: Line 3,574:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={nb,1616787805,ob,pb},
[b]={gb,1616787805,hb,ib},
[h]={{l,1025,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (const auto *MethodDecl = dyn_cast<CXXMethodDecl>(DeclFD))\n    if (!MethodDecl->isStatic()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_no_member_function) << AL;"}},
[h]={{l,1025,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (const auto *MethodDecl = dyn_cast<CXXMethodDecl>(DeclFD))\n    if (!MethodDecl->isStatic()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_no_member_function) << AL;"}},
[j]={
[j]={
Line 3,585: Line 3,587:
[g]=k,
[g]=k,
[b]={"317a77f1c7ab",1369265132,"Adding in parsing and the start of semantic support for __sptr and __uptr pointer type qualifiers.  ...","Adding in parsing and the start of semantic support for __sptr and __uptr pointer type qualifiers.  This patch also fixes the correlated __ptr32 and __ptr64 pointer qualifiers so that they are truly type attributes instead of declaration attributes.\n\nFor more information about __sptr and __uptr, see MSDN: http://msdn.microsoft.com/en-us/library/aa983399.aspx\n\nPatch reviewed by Richard Smith.\n\nllvm-svn: 182535"},
[b]={"317a77f1c7ab",1369265132,"Adding in parsing and the start of semantic support for __sptr and __uptr pointer type qualifiers.  ...","Adding in parsing and the start of semantic support for __sptr and __uptr pointer type qualifiers.  This patch also fixes the correlated __ptr32 and __ptr64 pointer qualifiers so that they are truly type attributes instead of declaration attributes.\n\nFor more information about __sptr and __uptr, see MSDN: http://msdn.microsoft.com/en-us/library/aa983399.aspx\n\nPatch reviewed by Richard Smith.\n\nllvm-svn: 182535"},
[h]={{o,7380,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // ...\n  // Check the raw (i.e., desugared) Canonical type to see if it\n  // is a pointer type.\n  if (!isa<PointerType>(Desugared)) {\n    // Pointer type qualifiers can only operate on pointer types, but not\n    // pointer-to-member types.\n    if (Type->isMemberPointerType())\n      S.Diag(PAttr.getLoc(), diag::err_attribute_no_member_pointers) << PAttr;"}},
[h]={{n,7380,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // ...\n  // Check the raw (i.e., desugared) Canonical type to see if it\n  // is a pointer type.\n  if (!isa<PointerType>(Desugared)) {\n    // Pointer type qualifiers can only operate on pointer types, but not\n    // pointer-to-member types.\n    if (Type->isMemberPointerType())\n      S.Diag(PAttr.getLoc(), diag::err_attribute_no_member_pointers) << PAttr;"}},
[j]={
[j]={
["clang/test/Sema/MicrosoftCompatibility.cpp"]={"clang/test/Sema/MicrosoftCompatibility.cpp:10:15: error: \'__uptr\' attribute cannot be used with pointers to members"}
["clang/test/Sema/MicrosoftCompatibility.cpp"]={"clang/test/Sema/MicrosoftCompatibility.cpp:10:15: error: \'__uptr\' attribute cannot be used with pointers to members"}
Line 3,596: Line 3,598:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={ab,1576908663,Z,Y},
[b]={Z,1576908663,X,Y},
[h]={{l,2146,"static void handleCmseNSEntryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.LangOpts.CPlusPlus && !D->getDeclContext()->isExternCContext()) {\n    S.Diag(AL.getLoc(), diag::err_attribute_not_clinkage) << AL;"}},
[h]={{l,2146,"static void handleCmseNSEntryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.LangOpts.CPlusPlus && !D->getDeclContext()->isExternCContext()) {\n    S.Diag(AL.getLoc(), diag::err_attribute_not_clinkage) << AL;"}},
[j]={
[j]={
Line 3,608: Line 3,610:
[f]=a,
[f]=a,
[g]="Modules Issue",
[g]="Modules Issue",
[b]={"49cc1ccb00df",1471557582,"C++ Modules TS: Add parsing support for module import declaration.\n\nllvm-svn: 279163","C++ Modules TS: Add parsing support for module import declaration.\n\nllvm-svn: 279163"},
[b]={"49cc1ccb00df",1471557582,"C++ Modules TS: Add parsing support for module import declaration.","C++ Modules TS: Add parsing support for module import declaration.\n\nllvm-svn: 279163"},
[h]={{ac,2534,"/// 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  ProhibitCXX11Attributes(Attrs, diag::err_attribute_not_import_attr, diag::err_keyword_not_import_attr,"}}
[h]={{ec,2534,"/// 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  ProhibitCXX11Attributes(Attrs, diag::err_attribute_not_import_attr, diag::err_keyword_not_import_attr,"}}
},
},
["err_attribute_not_module_attr"]={
["err_attribute_not_module_attr"]={
Line 3,617: Line 3,619:
[f]=a,
[f]=a,
[g]="Modules Issue",
[g]="Modules Issue",
[b]={"964cc53d9a74",1471570986,"C++ Modules TS: support parsing the \'module\' declaration (including extensions\nfrom p0273r0 approved...","C++ Modules TS: support parsing the \'module\' declaration (including extensions\nfrom p0273r0 approved by EWG). We\'ll eventually need to handle this from the\nlexer as well, in order to disallow preprocessor directives preceding the\nmodule declaration and to support macro import.\n\nllvm-svn: 279196"},
[b]={"964cc53d9a74",1471570986,"C++ Modules TS: support parsing the \'module\' declaration (including extensions","C++ Modules TS: support parsing the \'module\' declaration (including extensions\nfrom p0273r0 approved by EWG). We\'ll eventually need to handle this from the\nlexer as well, in order to disallow preprocessor directives preceding the\nmodule declaration and to support macro import.\n\nllvm-svn: 279196"},
[h]={{ac,2464,"/// 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  ProhibitCXX11Attributes(Attrs, diag::err_attribute_not_module_attr, diag::err_keyword_not_module_attr,"}}
[h]={{ec,2464,"/// 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  ProhibitCXX11Attributes(Attrs, diag::err_attribute_not_module_attr, diag::err_keyword_not_module_attr,"}}
},
},
["err_attribute_not_supported_in_lang"]={
["err_attribute_not_supported_in_lang"]={
Line 3,638: Line 3,640:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"b51bcaf2f027",1491578027,"Sema: prevent __declspec(naked) use on x64\n\nMSDN (https://msdn.microsoft.com/en-us/library/h5w10wxs....","Sema: prevent __declspec(naked) use on x64\n\nMSDN (https://msdn.microsoft.com/en-us/library/h5w10wxs.aspx) indicates\nthat `__declspec(naked)` is only permitted on x86 and ARM targets.\nTesting with cl does confirm this behaviour.  Provide a warning for use\nof `__declspec(naked)` on x64.\n\nllvm-svn: 299774"},
[b]={"b51bcaf2f027",1491578027,"Sema: prevent __declspec(naked) use on x64","Sema: prevent __declspec(naked) use on x64\n\nMSDN (https://msdn.microsoft.com/en-us/library/h5w10wxs.aspx) indicates\nthat `__declspec(naked)` is only permitted on x86 and ARM targets.\nTesting with cl does confirm this behaviour.  Provide a warning for use\nof `__declspec(naked)` on x64.\n\nllvm-svn: 299774"},
[h]={{l,2165,"static void handleNakedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isDeclspecAttribute()) {\n    // ...\n    if (Arch != llvm::Triple::x86 && (Arch != llvm::Triple::arm && Arch != llvm::Triple::thumb)) {\n      S.Diag(AL.getLoc(), diag::err_attribute_not_supported_on_arch) << AL << Triple.getArchName();"}},
[h]={{l,2165,"static void handleNakedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isDeclspecAttribute()) {\n    // ...\n    if (Arch != llvm::Triple::x86 && (Arch != llvm::Triple::arm && Arch != llvm::Triple::thumb)) {\n      S.Diag(AL.getLoc(), diag::err_attribute_not_supported_on_arch) << AL << Triple.getArchName();"}},
[j]={
[j]={
Line 3,649: Line 3,651:
[e]="(.*?)(?: attribute|) cannot be applied to types",
[e]="(.*?)(?: attribute|) cannot be applied to types",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"10876ef5714f",1358386242,"Implement C++11 semantics for [[noreturn]] attribute. This required splitting\nit apart from [[gnu::n...","Implement C++11 semantics for [[noreturn]] attribute. This required splitting\nit apart from [[gnu::noreturn]] / __attribute__((noreturn)), since their\nsemantics are not equivalent (for instance, we treat [[gnu::noreturn]] as\naffecting the function type, whereas [[noreturn]] does not).\n\nllvm-svn: 172691"},
[b]={"10876ef5714f",1358386242,"Implement C++11 semantics for [[noreturn]] attribute. This required splitting","Implement C++11 semantics for [[noreturn]] attribute. This required splitting\nit apart from [[gnu::noreturn]] / __attribute__((noreturn)), since their\nsemantics are not equivalent (for instance, we treat [[gnu::noreturn]] as\naffecting the function type, whereas [[noreturn]] does not).\n\nllvm-svn: 172691"},
[h]={{A,3352,"/// 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    DoneWithDeclSpec:\n      if (!AttrsLastTime)\n      // ...\n      else {\n        // Reject C++11 / C2x attributes that aren\'t type attributes.\n        for (const ParsedAttr &PA : attrs) {\n          // ...\n          Diag(PA.getLoc(), diag::err_attribute_not_type_attr) << PA << PA.isRegularKeywordAttribute();"},{o,8571,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  // ...\n  for (ParsedAttr &attr : AttrsCopy) {\n    // ...\n    default:\n      // A [[]] attribute on a declarator chunk must appertain to a type.\n      if ((attr.isStandardAttributeSyntax() || attr.isRegularKeywordAttribute()) && TAL == TAL_DeclChunk) {\n        state.getSema().Diag(attr.getLoc(), diag::err_attribute_not_type_attr) << attr << attr.isRegularKeywordAttribute();"}},
[h]={{B,3352,"/// 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    DoneWithDeclSpec:\n      if (!AttrsLastTime)\n      // ...\n      else {\n        // Reject C++11 / C2x attributes that aren\'t type attributes.\n        for (const ParsedAttr &PA : attrs) {\n          // ...\n          Diag(PA.getLoc(), diag::err_attribute_not_type_attr) << PA << PA.isRegularKeywordAttribute();"},{n,8571,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  // ...\n  for (ParsedAttr &attr : AttrsCopy) {\n    // ...\n    default:\n      // A [[]] attribute on a declarator chunk must appertain to a type.\n      if ((attr.isStandardAttributeSyntax() || attr.isRegularKeywordAttribute()) && TAL == TAL_DeclChunk) {\n        state.getSema().Diag(attr.getLoc(), diag::err_attribute_not_type_attr) << attr << attr.isRegularKeywordAttribute();"}},
[j]={
[j]={
["clang/test/Sema/attr-only-in-default-eval.cpp"]={"clang/test/Sema/attr-only-in-default-eval.cpp:21:8: error: \'available_only_in_default_eval_method\' attribute cannot be applied to types","clang/test/Sema/attr-only-in-default-eval.cpp:23:14: error: \'available_only_in_default_eval_method\' attribute cannot be applied to types"}
["clang/test/Sema/attr-only-in-default-eval.cpp"]={"clang/test/Sema/attr-only-in-default-eval.cpp:21:8: error: \'available_only_in_default_eval_method\' attribute cannot be applied to types","clang/test/Sema/attr-only-in-default-eval.cpp:23:14: error: \'available_only_in_default_eval_method\' attribute cannot be applied to types"}
Line 3,662: Line 3,664:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang.\n\n`pass_object_size` is our way of enabling `__builtin...","Add the `pass_object_size` attribute to clang.\n\n`pass_object_size` is our way of enabling `__builtin_object_size` to\nproduce high quality results without requiring inlining to happen\neverywhere.\n\nA link to the design doc for this attribute is available at the\nDifferential review link below.\n\nDifferential Revision: http://reviews.llvm.org/D13263\n\nllvm-svn: 254554"},
[b]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang.","Add the `pass_object_size` attribute to clang.\n\n`pass_object_size` is our way of enabling `__builtin_object_size` to\nproduce high quality results without requiring inlining to happen\neverywhere.\n\nA link to the design doc for this attribute is available at the\nDifferential review link below.\n\nDifferential Revision: http://reviews.llvm.org/D13263\n\nllvm-svn: 254554"},
[h]={{l,1175,"static void handlePassObjectSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (D->hasAttr<PassObjectSizeAttr>()) {\n    S.Diag(D->getBeginLoc(), diag::err_attribute_only_once_per_parameter) << AL;"}},
[h]={{l,1175,"static void handlePassObjectSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (D->hasAttr<PassObjectSizeAttr>()) {\n    S.Diag(D->getBeginLoc(), diag::err_attribute_only_once_per_parameter) << AL;"}},
[j]={
[j]={
Line 3,674: Line 3,676:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming ...","[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming static analyzer check\nthat finds handle leaks, use after releases, and double releases.\n\nDifferential Revision: https://reviews.llvm.org/D70469"},
[b]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming static analyzer check\nthat finds handle leaks, use after releases, and double releases.\n\nDifferential Revision: https://reviews.llvm.org/D70469"},
[h]={{l,8564,"static void handleAcquireHandleAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Warn if the parameter is definitely not an output parameter.\n  if (const auto *PVD = dyn_cast<ParmVarDecl>(D)) {\n    if (PVD->getType()->isIntegerType()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_output_parameter) << AL.getRange();"}},
[h]={{l,8564,"static void handleAcquireHandleAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Warn if the parameter is definitely not an output parameter.\n  if (const auto *PVD = dyn_cast<ParmVarDecl>(D)) {\n    if (PVD->getType()->isIntegerType()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_output_parameter) << AL.getRange();"}},
[j]={
[j]={
Line 3,686: Line 3,688:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"d3cf025ae221",1498599091,"[Sema] Allow unmarked overloadable functions.\n\nThis patch extends the `overloadable` attribute to al...","[Sema] Allow unmarked overloadable functions.\n\nThis patch extends the `overloadable` attribute to allow for one\nfunction with a given name to not be marked with the `overloadable`\nattribute. The overload without the `overloadable` attribute will not\nhave its name mangled.\n\nSo, the following code is now legal:\n\n  void foo(void) __attribute__((overloadable));\n  void foo(int);\n  void foo(float) __attribute__((overloadable));\n\nIn addition, this patch fixes a bug where we\'d accept code with\n`__attribute__((overloadable))` inconsistently applied. In other words,\nwe used to accept:\n\n  void foo(void);\n  void foo(void) __attribute__((overloadable));\n\nBut we will do this no longer, since it defeats the original purpose of\nrequiring `__attribute__((overloadable))` on all redeclarations of a\nfunction.\n\nThis breakage seems to not be an issue in practice, since the only code\nI could find that had this pattern often looked like:\n\n  void foo(void);\n  void foo(void) __attribute__((overloadable)) __asm__(\"foo\");\n  void foo(int) __attribute__((overloadable));\n\n...Which can now be simplified by simply removing the asm label and\noverloadable attribute from the redeclaration of `void foo(void);`\n\nDifferential Revision: https://reviews.llvm.org/D32332\n\nllvm-svn: 306467"},
[b]={"d3cf025ae221",1498599091,"[Sema] Allow unmarked overloadable functions.","[Sema] Allow unmarked overloadable functions.\n\nThis patch extends the `overloadable` attribute to allow for one\nfunction with a given name to not be marked with the `overloadable`\nattribute. The overload without the `overloadable` attribute will not\nhave its name mangled.\n\nSo, the following code is now legal:\n\n  void foo(void) __attribute__((overloadable));\n  void foo(int);\n  void foo(float) __attribute__((overloadable));\n\nIn addition, this patch fixes a bug where we\'d accept code with\n`__attribute__((overloadable))` inconsistently applied. In other words,\nwe used to accept:\n\n  void foo(void);\n  void foo(void) __attribute__((overloadable));\n\nBut we will do this no longer, since it defeats the original purpose of\nrequiring `__attribute__((overloadable))` on all redeclarations of a\nfunction.\n\nThis breakage seems to not be an issue in practice, since the only code\nI could find that had this pattern often looked like:\n\n  void foo(void);\n  void foo(void) __attribute__((overloadable)) __asm__(\"foo\");\n  void foo(int) __attribute__((overloadable));\n\n...Which can now be simplified by simply removing the asm label and\noverloadable attribute from the redeclaration of `void foo(void);`\n\nDifferential Revision: https://reviews.llvm.org/D32332\n\nllvm-svn: 306467"},
[h]={{n,3730,"/// 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 (OldOvl != New->hasAttr<OverloadableAttr>() && !Old->isImplicit()) {\n      Diag(New->getLocation(), diag::err_attribute_overloadable_mismatch) << New << OldOvl;"}},
[h]={{m,3730,"/// 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 (OldOvl != New->hasAttr<OverloadableAttr>() && !Old->isImplicit()) {\n      Diag(New->getLocation(), diag::err_attribute_overloadable_mismatch) << New << OldOvl;"}},
[j]={
[j]={
["clang/test/Sema/overloadable.c"]={"clang/test/Sema/overloadable.c:9:6: error: redeclaration of \'f\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:79:35: error: redeclaration of \'invalid\' must not have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:182:6: error: redeclaration of \'to_foo0\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:187:6: error: redeclaration of \'to_foo1\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:189:6: error: redeclaration of \'to_foo1\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:193:6: error: redeclaration of \'to_foo2\' must not have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:194:6: error: redeclaration of \'to_foo2\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:196:6: error: redeclaration of \'to_foo2\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:202:6: error: redeclaration of \'to_foo3\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:205:6: error: redeclaration of \'to_foo4\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:218:6: error: redeclaration of \'to_foo6\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:222:6: error: redeclaration of \'to_foo7\' must not have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:233:6: error: redeclaration of \'to_foo9\' must not have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:244:6: error: redeclaration of \'to_foo10\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:245:6: error: redeclaration of \'to_foo10\' must have the \'overloadable\' attribute"}
["clang/test/Sema/overloadable.c"]={"clang/test/Sema/overloadable.c:9:6: error: redeclaration of \'f\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:79:35: error: redeclaration of \'invalid\' must not have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:182:6: error: redeclaration of \'to_foo0\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:187:6: error: redeclaration of \'to_foo1\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:189:6: error: redeclaration of \'to_foo1\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:193:6: error: redeclaration of \'to_foo2\' must not have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:194:6: error: redeclaration of \'to_foo2\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:196:6: error: redeclaration of \'to_foo2\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:202:6: error: redeclaration of \'to_foo3\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:205:6: error: redeclaration of \'to_foo4\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:218:6: error: redeclaration of \'to_foo6\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:222:6: error: redeclaration of \'to_foo7\' must not have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:233:6: error: redeclaration of \'to_foo9\' must not have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:244:6: error: redeclaration of \'to_foo10\' must have the \'overloadable\' attribute","clang/test/Sema/overloadable.c:245:6: error: redeclaration of \'to_foo10\' must have the \'overloadable\' attribute"}
Line 3,698: Line 3,700:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"d3cf025ae221",1498599091,"[Sema] Allow unmarked overloadable functions.\n\nThis patch extends the `overloadable` attribute to al...","[Sema] Allow unmarked overloadable functions.\n\nThis patch extends the `overloadable` attribute to allow for one\nfunction with a given name to not be marked with the `overloadable`\nattribute. The overload without the `overloadable` attribute will not\nhave its name mangled.\n\nSo, the following code is now legal:\n\n  void foo(void) __attribute__((overloadable));\n  void foo(int);\n  void foo(float) __attribute__((overloadable));\n\nIn addition, this patch fixes a bug where we\'d accept code with\n`__attribute__((overloadable))` inconsistently applied. In other words,\nwe used to accept:\n\n  void foo(void);\n  void foo(void) __attribute__((overloadable));\n\nBut we will do this no longer, since it defeats the original purpose of\nrequiring `__attribute__((overloadable))` on all redeclarations of a\nfunction.\n\nThis breakage seems to not be an issue in practice, since the only code\nI could find that had this pattern often looked like:\n\n  void foo(void);\n  void foo(void) __attribute__((overloadable)) __asm__(\"foo\");\n  void foo(int) __attribute__((overloadable));\n\n...Which can now be simplified by simply removing the asm label and\noverloadable attribute from the redeclaration of `void foo(void);`\n\nDifferential Revision: https://reviews.llvm.org/D32332\n\nllvm-svn: 306467"},
[b]={"d3cf025ae221",1498599091,"[Sema] Allow unmarked overloadable functions.","[Sema] Allow unmarked overloadable functions.\n\nThis patch extends the `overloadable` attribute to allow for one\nfunction with a given name to not be marked with the `overloadable`\nattribute. The overload without the `overloadable` attribute will not\nhave its name mangled.\n\nSo, the following code is now legal:\n\n  void foo(void) __attribute__((overloadable));\n  void foo(int);\n  void foo(float) __attribute__((overloadable));\n\nIn addition, this patch fixes a bug where we\'d accept code with\n`__attribute__((overloadable))` inconsistently applied. In other words,\nwe used to accept:\n\n  void foo(void);\n  void foo(void) __attribute__((overloadable));\n\nBut we will do this no longer, since it defeats the original purpose of\nrequiring `__attribute__((overloadable))` on all redeclarations of a\nfunction.\n\nThis breakage seems to not be an issue in practice, since the only code\nI could find that had this pattern often looked like:\n\n  void foo(void);\n  void foo(void) __attribute__((overloadable)) __asm__(\"foo\");\n  void foo(int) __attribute__((overloadable));\n\n...Which can now be simplified by simply removing the asm label and\noverloadable attribute from the redeclaration of `void foo(void);`\n\nDifferential Revision: https://reviews.llvm.org/D32332\n\nllvm-svn: 306467"},
[h]={{n,11887,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  // ...\n  if (Redeclaration) {\n  // ...\n  } else if (!getLangOpts().CPlusPlus && MayNeedOverloadableChecks && !NewFD->getAttr<OverloadableAttr>()) {\n    // ...\n    if (OtherUnmarkedIter != Previous.end()) {\n      Diag(NewFD->getLocation(), diag::err_attribute_overloadable_multiple_unmarked_overloads);"}},
[h]={{m,11887,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  // ...\n  if (Redeclaration) {\n  // ...\n  } else if (!getLangOpts().CPlusPlus && MayNeedOverloadableChecks && !NewFD->getAttr<OverloadableAttr>()) {\n    // ...\n    if (OtherUnmarkedIter != Previous.end()) {\n      Diag(NewFD->getLocation(), diag::err_attribute_overloadable_multiple_unmarked_overloads);"}},
[j]={
[j]={
["clang/test/Sema/overloadable.c"]={"clang/test/Sema/overloadable.c:211:6: error: at most one overload for a given name may lack the \'overloadable\' attribute","clang/test/Sema/overloadable.c:213:6: error: at most one overload for a given name may lack the \'overloadable\' attribute","clang/test/Sema/overloadable.c:214:6: error: at most one overload for a given name may lack the \'overloadable\' attribute","clang/test/Sema/overloadable.c:236:6: error: at most one overload for a given name may lack the \'overloadable\' attribute","clang/test/Sema/overloadable.c:243:6: error: at most one overload for a given name may lack the \'overloadable\' attribute"}
["clang/test/Sema/overloadable.c"]={"clang/test/Sema/overloadable.c:211:6: error: at most one overload for a given name may lack the \'overloadable\' attribute","clang/test/Sema/overloadable.c:213:6: error: at most one overload for a given name may lack the \'overloadable\' attribute","clang/test/Sema/overloadable.c:214:6: error: at most one overload for a given name may lack the \'overloadable\' attribute","clang/test/Sema/overloadable.c:236:6: error: at most one overload for a given name may lack the \'overloadable\' attribute","clang/test/Sema/overloadable.c:243:6: error: at most one overload for a given name may lack the \'overloadable\' attribute"}
Line 3,710: Line 3,712:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{n,10621,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (NewFD->hasAttr<OverloadableAttr>() && !NewFD->getType()->getAs<FunctionProtoType>()) {\n    Diag(NewFD->getLocation(), diag::err_attribute_overloadable_no_prototype) << NewFD;"}},
[h]={{m,10621,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (NewFD->hasAttr<OverloadableAttr>() && !NewFD->getType()->getAs<FunctionProtoType>()) {\n    Diag(NewFD->getLocation(), diag::err_attribute_overloadable_no_prototype) << NewFD;"}},
[j]={
[j]={
["clang/test/Sema/overloadable.c"]={"clang/test/Sema/overloadable.c:68:42: error: \'overloadable\' function \'f0\' must have a prototype","clang/test/Sema/overloadable.c:70:39: error: \'overloadable\' function \'f1\' must have a prototype","clang/test/Sema/overloadable.c:78:35: error: \'overloadable\' function \'invalid\' must have a prototype"}
["clang/test/Sema/overloadable.c"]={"clang/test/Sema/overloadable.c:68:42: error: \'overloadable\' function \'f0\' must have a prototype","clang/test/Sema/overloadable.c:70:39: error: \'overloadable\' function \'f1\' must have a prototype","clang/test/Sema/overloadable.c:78:35: error: \'overloadable\' function \'invalid\' must have a prototype"}
Line 3,722: Line 3,724:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={nb,1616787805,ob,pb},
[b]={gb,1616787805,hb,ib},
[h]={{l,1085,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned I = 1; I < AL.getNumArgs(); ++I) {\n    // ...\n    if (T1.getCanonicalType().getUnqualifiedType() != T2.getCanonicalType().getUnqualifiedType()) {\n      S.Diag(IndexExpr->getBeginLoc(), diag::err_attribute_parameter_types) << AL << Index << DeclFD << T2 << I << AttrFD << T1;"}},
[h]={{l,1085,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned I = 1; I < AL.getNumArgs(); ++I) {\n    // ...\n    if (T1.getCanonicalType().getUnqualifiedType() != T2.getCanonicalType().getUnqualifiedType()) {\n      S.Diag(IndexExpr->getBeginLoc(), diag::err_attribute_parameter_types) << AL << Index << DeclFD << T2 << I << AttrFD << T1;"}},
[j]={
[j]={
Line 3,734: Line 3,736:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'\nfunction arguments and ar...","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"},
[b]={"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"},
[h]={{p,16689,"/// 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    // Parameters with the pass_object_size attribute only need to be marked\n    // constant at function definitions. Because we lack information about\n    // whether we\'re on a declaration or definition when we\'re instantiating the\n    // attribute, we need to check for constness here.\n    if (const auto *Attr = Param->getAttr<PassObjectSizeAttr>())\n      if (!Param->getType().isConstQualified())\n        Diag(Param->getLocation(), diag::err_attribute_pointers_only) << Attr->getSpelling() << 1;"},{l,1198,"static void handlePassObjectSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // pass_object_size is only supported on constant pointer parameters; as a\n  // kindness to users, we allow the parameter to be non-const for declarations.\n  // At this point, we have no clue if `D` belongs to a function declaration or\n  // definition, so we defer the constness check until later.\n  if (!cast<ParmVarDecl>(D)->getType()->isPointerType()) {\n    S.Diag(D->getBeginLoc(), diag::err_attribute_pointers_only) << AL << 1;"},{l,5686,"static void handleArgumentWithTypeTagAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (IsPointer) {\n    // ...\n    if (ArgumentIdxAST >= getFunctionOrMethodNumParams(D) || !getFunctionOrMethodParamType(D, ArgumentIdxAST)->isPointerType())\n      S.Diag(AL.getLoc(), diag::err_attribute_pointers_only) << AL << 0;"},{o,7382,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // ...\n  // Check the raw (i.e., desugared) Canonical type to see if it\n  // is a pointer type.\n  if (!isa<PointerType>(Desugared)) {\n    // Pointer type qualifiers can only operate on pointer types, but not\n    // pointer-to-member types.\n    if (Type->isMemberPointerType())\n    // ...\n    else\n      S.Diag(PAttr.getLoc(), diag::err_attribute_pointers_only) << PAttr << 0;"}},
[h]={{o,16689,"/// 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    // Parameters with the pass_object_size attribute only need to be marked\n    // constant at function definitions. Because we lack information about\n    // whether we\'re on a declaration or definition when we\'re instantiating the\n    // attribute, we need to check for constness here.\n    if (const auto *Attr = Param->getAttr<PassObjectSizeAttr>())\n      if (!Param->getType().isConstQualified())\n        Diag(Param->getLocation(), diag::err_attribute_pointers_only) << Attr->getSpelling() << 1;"},{l,1198,"static void handlePassObjectSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // pass_object_size is only supported on constant pointer parameters; as a\n  // kindness to users, we allow the parameter to be non-const for declarations.\n  // At this point, we have no clue if `D` belongs to a function declaration or\n  // definition, so we defer the constness check until later.\n  if (!cast<ParmVarDecl>(D)->getType()->isPointerType()) {\n    S.Diag(D->getBeginLoc(), diag::err_attribute_pointers_only) << AL << 1;"},{l,5686,"static void handleArgumentWithTypeTagAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (IsPointer) {\n    // ...\n    if (ArgumentIdxAST >= getFunctionOrMethodNumParams(D) || !getFunctionOrMethodParamType(D, ArgumentIdxAST)->isPointerType())\n      S.Diag(AL.getLoc(), diag::err_attribute_pointers_only) << AL << 0;"},{n,7382,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // ...\n  // Check the raw (i.e., desugared) Canonical type to see if it\n  // is a pointer type.\n  if (!isa<PointerType>(Desugared)) {\n    // Pointer type qualifiers can only operate on pointer types, but not\n    // pointer-to-member types.\n    if (Type->isMemberPointerType())\n    // ...\n    else\n      S.Diag(PAttr.getLoc(), diag::err_attribute_pointers_only) << PAttr << 0;"}},
[j]={
[j]={
["clang/test/Sema/attr-ownership.c"]={"clang/test/Sema/attr-ownership.c:14:32: error: \'ownership_holds\' attribute only applies to pointer arguments"}
["clang/test/Sema/attr-ownership.c"]={"clang/test/Sema/attr-ownership.c:14:32: error: \'ownership_holds\' attribute only applies to pointer arguments"}
Line 3,746: Line 3,748:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={fb,1590001902,jb,lb},
[b]={kb,1590001902,fb,jb},
[h]={{l,1461,"static void handlePreferredName(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  S.Diag(AL.getLoc(), diag::err_attribute_preferred_name_arg_invalid) << T << CTD;"}},
[h]={{l,1461,"static void handlePreferredName(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  S.Diag(AL.getLoc(), diag::err_attribute_preferred_name_arg_invalid) << T << CTD;"}},
[j]={
[j]={
Line 3,758: Line 3,760:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"7044b7670747",1238188007,"Finish off semantic analysis for regparm, and remove the warning.  Also \nremove a redundant error in...","Finish off semantic analysis for regparm, and remove the warning.  Also \nremove a redundant error in CodeGen.\n\nllvm-svn: 67868"},
[b]={"7044b7670747",1238188007,"Finish off semantic analysis for regparm, and remove the warning.  Also ","Finish off semantic analysis for regparm, and remove the warning.  Also \nremove a redundant error in CodeGen.\n\nllvm-svn: 67868"},
[h]={{l,5587,"/// Checks a regparm attribute, returning true if it is ill-formed and\n/// otherwise setting numParams to the appropriate value.\nbool Sema::CheckRegparmAttr(const ParsedAttr &AL, unsigned &numParams) {\n  // ...\n  if (numParams > Context.getTargetInfo().getRegParmMax()) {\n    Diag(AL.getLoc(), diag::err_attribute_regparm_invalid_number) << Context.getTargetInfo().getRegParmMax() << NumParamsExpr->getSourceRange();"}},
[h]={{l,5587,"/// Checks a regparm attribute, returning true if it is ill-formed and\n/// otherwise setting numParams to the appropriate value.\nbool Sema::CheckRegparmAttr(const ParsedAttr &AL, unsigned &numParams) {\n  // ...\n  if (numParams > Context.getTargetInfo().getRegParmMax()) {\n    Diag(AL.getLoc(), diag::err_attribute_regparm_invalid_number) << Context.getTargetInfo().getRegParmMax() << NumParamsExpr->getSourceRange();"}},
[j]={
[j]={
Line 3,770: Line 3,772:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"7044b7670747",1238188007,"Finish off semantic analysis for regparm, and remove the warning.  Also \nremove a redundant error in...","Finish off semantic analysis for regparm, and remove the warning.  Also \nremove a redundant error in CodeGen.\n\nllvm-svn: 67868"},
[b]={"7044b7670747",1238188007,"Finish off semantic analysis for regparm, and remove the warning.  Also ","Finish off semantic analysis for regparm, and remove the warning.  Also \nremove a redundant error in CodeGen.\n\nllvm-svn: 67868"},
[h]={{l,5579,"/// Checks a regparm attribute, returning true if it is ill-formed and\n/// otherwise setting numParams to the appropriate value.\nbool Sema::CheckRegparmAttr(const ParsedAttr &AL, unsigned &numParams) {\n  // ...\n  if (Context.getTargetInfo().getRegParmMax() == 0) {\n    Diag(AL.getLoc(), diag::err_attribute_regparm_wrong_platform) << NumParamsExpr->getSourceRange();"}},
[h]={{l,5579,"/// Checks a regparm attribute, returning true if it is ill-formed and\n/// otherwise setting numParams to the appropriate value.\nbool Sema::CheckRegparmAttr(const ParsedAttr &AL, unsigned &numParams) {\n  // ...\n  if (Context.getTargetInfo().getRegParmMax() == 0) {\n    Diag(AL.getLoc(), diag::err_attribute_regparm_wrong_platform) << NumParamsExpr->getSourceRange();"}},
[j]={
[j]={
Line 3,781: Line 3,783:
[e]="parentheses must be omitted if (.*?) attribute\'s argument list is empty",
[e]="parentheses must be omitted if (.*?) attribute\'s argument list is empty",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"ef5d94caf067",1397522199,"Fixing a typo, updating the diagnostic wording and logic based on post-commit review feedback. Amend...","Fixing a typo, updating the diagnostic wording and logic based on post-commit review feedback. Amends r206186.\n\nllvm-svn: 206229"},
[b]={"ef5d94caf067",1397522199,"Fixing a typo, updating the diagnostic wording and logic based on post-commit review feedback. Amend...","Fixing a typo, updating the diagnostic wording and logic based on post-commit review feedback. Amends r206186.\n\nllvm-svn: 206229"},
[h]={{A,743,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  // If this attribute\'s args were parsed, and it was expected to have\n  // arguments but none were provided, emit a diagnostic.\n  if (ExistingAttrs < Attrs.size() && Attrs.back().getMaxArgs() && !NumArgs) {\n    Diag(OpenParenLoc, diag::err_attribute_requires_arguments) << AttrName;"},{I,4460,"/// ParseCXX11AttributeArgs -- Parse a C++11 attribute-argument-clause.\n///\n/// [C++11] attribute-argument-clause:\n///        \'(\' balanced-token-seq \')\'\n///\n/// [C++11] balanced-token-seq:\n///        balanced-token\n///        balanced-token-seq balanced-token\n///\n/// [C++11] balanced-token:\n///        \'(\' balanced-token-seq \')\'\n///        \'[\' balanced-token-seq \']\'\n///        \'{\' balanced-token-seq \'}\'\n///        any token but \'(\', \')\', \'[\', \']\', \'{\', or \'}\'\nbool Parser::ParseCXX11AttributeArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, CachedTokens &OpenMPTokens) {\n  // ...\n  if (!Attrs.empty() && IsBuiltInOrStandardCXX11Attribute(AttrName, ScopeName)) {\n    // ...\n    // If the attribute is a standard or built-in attribute and we are\n    // parsing an argument list, we need to determine whether this attribute\n    // was allowed to have an argument list (such as [[deprecated]]), and how\n    // many arguments were parsed (so we can diagnose on [[deprecated()]]).\n    if (Attr.getMaxArgs() && !NumArgs) {\n      // ...\n      Diag(LParenLoc, diag::err_attribute_requires_arguments) << AttrName;"}},
[h]={{B,743,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  // If this attribute\'s args were parsed, and it was expected to have\n  // arguments but none were provided, emit a diagnostic.\n  if (ExistingAttrs < Attrs.size() && Attrs.back().getMaxArgs() && !NumArgs) {\n    Diag(OpenParenLoc, diag::err_attribute_requires_arguments) << AttrName;"},{J,4460,"/// ParseCXX11AttributeArgs -- Parse a C++11 attribute-argument-clause.\n///\n/// [C++11] attribute-argument-clause:\n///        \'(\' balanced-token-seq \')\'\n///\n/// [C++11] balanced-token-seq:\n///        balanced-token\n///        balanced-token-seq balanced-token\n///\n/// [C++11] balanced-token:\n///        \'(\' balanced-token-seq \')\'\n///        \'[\' balanced-token-seq \']\'\n///        \'{\' balanced-token-seq \'}\'\n///        any token but \'(\', \')\', \'[\', \']\', \'{\', or \'}\'\nbool Parser::ParseCXX11AttributeArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, CachedTokens &OpenMPTokens) {\n  // ...\n  if (!Attrs.empty() && IsBuiltInOrStandardCXX11Attribute(AttrName, ScopeName)) {\n    // ...\n    // If the attribute is a standard or built-in attribute and we are\n    // parsing an argument list, we need to determine whether this attribute\n    // was allowed to have an argument list (such as [[deprecated]]), and how\n    // many arguments were parsed (so we can diagnose on [[deprecated()]]).\n    if (Attr.getMaxArgs() && !NumArgs) {\n      // ...\n      Diag(LParenLoc, diag::err_attribute_requires_arguments) << AttrName;"}},
[j]={
[j]={
["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:73:22: error: parentheses must be omitted if \'deprecated\' attribute\'s argument list is empty"}
["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:73:22: error: parentheses must be omitted if \'deprecated\' attribute\'s argument list is empty"}
Line 3,794: Line 3,796:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"6bdbcbb3d91b",1455906611,"[OpenCL] Generate metadata for opencl_unroll_hint attribute\n\nAdd support for opencl_unroll_hint attr...","[OpenCL] Generate metadata for opencl_unroll_hint attribute\n\nAdd support for opencl_unroll_hint attribute from OpenCL v2.0 s6.11.5.\n\nReusing most of metadata generation from CGLoopInfo helper class.\n\nThe code is based on Khronos OpenCL compiler:\nhttps://github.com/KhronosGroup/SPIR/tree/spirv-1.0\n\nPatch by Liu Yaxun (Sam)!\n\nDifferential Revision: http://reviews.llvm.org/D16686\n\nllvm-svn: 261350"},
[b]={"6bdbcbb3d91b",1455906611,"[OpenCL] Generate metadata for opencl_unroll_hint attribute","[OpenCL] Generate metadata for opencl_unroll_hint attribute\n\nAdd support for opencl_unroll_hint attribute from OpenCL v2.0 s6.11.5.\n\nReusing most of metadata generation from CGLoopInfo helper class.\n\nThe code is based on Khronos OpenCL compiler:\nhttps://github.com/KhronosGroup/SPIR/tree/spirv-1.0\n\nPatch by Liu Yaxun (Sam)!\n\nDifferential Revision: http://reviews.llvm.org/D16686\n\nllvm-svn: 261350"},
[h]={{l,8281,"static void handleOpenCLNoSVMAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.LangOpts.getOpenCLCompatibleVersion() < 200)\n    S.Diag(AL.getLoc(), diag::err_attribute_requires_opencl_version) << AL << \"2.0\" << 1;"}},
[h]={{l,8281,"static void handleOpenCLNoSVMAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.LangOpts.getOpenCLCompatibleVersion() < 200)\n    S.Diag(AL.getLoc(), diag::err_attribute_requires_opencl_version) << AL << \"2.0\" << 1;"}},
[j]={
[j]={
Line 3,806: Line 3,808:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"6bdbcbb3d91b",1455906611,"[OpenCL] Generate metadata for opencl_unroll_hint attribute\n\nAdd support for opencl_unroll_hint attr...","[OpenCL] Generate metadata for opencl_unroll_hint attribute\n\nAdd support for opencl_unroll_hint attribute from OpenCL v2.0 s6.11.5.\n\nReusing most of metadata generation from CGLoopInfo helper class.\n\nThe code is based on Khronos OpenCL compiler:\nhttps://github.com/KhronosGroup/SPIR/tree/spirv-1.0\n\nPatch by Liu Yaxun (Sam)!\n\nDifferential Revision: http://reviews.llvm.org/D16686\n\nllvm-svn: 261350"},
[b]={"6bdbcbb3d91b",1455906611,"[OpenCL] Generate metadata for opencl_unroll_hint attribute","[OpenCL] Generate metadata for opencl_unroll_hint attribute\n\nAdd support for opencl_unroll_hint attribute from OpenCL v2.0 s6.11.5.\n\nReusing most of metadata generation from CGLoopInfo helper class.\n\nThe code is based on Khronos OpenCL compiler:\nhttps://github.com/KhronosGroup/SPIR/tree/spirv-1.0\n\nPatch by Liu Yaxun (Sam)!\n\nDifferential Revision: http://reviews.llvm.org/D16686\n\nllvm-svn: 261350"},
[h]={{l,241,"/// If Expr is a valid integer constant, get the value of the integer\n/// expression and return success or failure. May output an error.\n///\n/// Negative argument is implicitly converted to unsigned, unless\n/// \\p StrictlyUnsigned is true.\ntemplate <typename AttrInfo> static bool checkUInt32Argument(Sema &S, const AttrInfo &AI, const Expr *Expr, uint32_t &Val, unsigned Idx = UINT_MAX, bool StrictlyUnsigned = false) {\n  // ...\n  if (StrictlyUnsigned && I->isSigned() && I->isNegative()) {\n    S.Diag(getAttrLoc(AI), diag::err_attribute_requires_positive_integer) << &AI << /*non-negative*/ 1;"},{"clang/lib/Sema/SemaStmtAttr.cpp",471,"static Attr *handleOpenCLUnrollHint(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  // ...\n  if (A.getNumArgs() == 1) {\n    // ...\n    if (Val <= 0) {\n      S.Diag(A.getRange().getBegin(), diag::err_attribute_requires_positive_integer) << A << /* positive */ 0;"}},
[h]={{l,241,"/// If Expr is a valid integer constant, get the value of the integer\n/// expression and return success or failure. May output an error.\n///\n/// Negative argument is implicitly converted to unsigned, unless\n/// \\p StrictlyUnsigned is true.\ntemplate <typename AttrInfo> static bool checkUInt32Argument(Sema &S, const AttrInfo &AI, const Expr *Expr, uint32_t &Val, unsigned Idx = UINT_MAX, bool StrictlyUnsigned = false) {\n  // ...\n  if (StrictlyUnsigned && I->isSigned() && I->isNegative()) {\n    S.Diag(getAttrLoc(AI), diag::err_attribute_requires_positive_integer) << &AI << /*non-negative*/ 1;"},{"clang/lib/Sema/SemaStmtAttr.cpp",471,"static Attr *handleOpenCLUnrollHint(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  // ...\n  if (A.getNumArgs() == 1) {\n    // ...\n    if (Val <= 0) {\n      S.Diag(A.getRange().getBegin(), diag::err_attribute_requires_positive_integer) << A << /* positive */ 0;"}},
[j]={
[j]={
Line 3,818: Line 3,820:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={M,1625925174,K,L},
[b]={N,1625925174,M,L},
[h]={{o,8348,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  if (!VScale || !VScale->first || VScale->first != VScale->second) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_riscv_rvv_bits_unsupported) << Attr;"}}
[h]={{n,8348,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  if (!VScale || !VScale->first || VScale->first != VScale->second) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_riscv_rvv_bits_unsupported) << Attr;"}}
},
},
["err_attribute_section_invalid_for_target"]={
["err_attribute_section_invalid_for_target"]={
Line 3,827: Line 3,829:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"30ba674391ae",1249930984,"fix a couple of problems with section attributes:\n\n1. Passing something that isn\'t a string used to ...","fix a couple of problems with section attributes:\n\n1. Passing something that isn\'t a string used to cause:\n  \"argument to annotate attribute was not a string literal\"\n  make it say \"section attribute\" instead.\n\n2. Fix the location of the above message to point to the\n  bad argument instead of the section token.\n\n3. Implement rdar://4341926, by diagnosing invalid section\n  specifiers in the frontend rather than letting them slip all\n  the way to the assembler (a QoI win).\n\nAn example of #3 is that we used to produce something like this:\n\n/var/folders/n7/n7Yno9ihEm894640nJdSQU+++TI/-Tmp-//ccFPFGtT.s:2:Expected comma after segment-name\n/var/folders/n7/n7Yno9ihEm894640nJdSQU+++TI/-Tmp-//ccFPFGtT.s:2:Rest of line ignored. 1st junk character valued 46 (.).\n\nDaniel improved clang to use llvm_report_error, so now we got:\n\n$ clang t.c -c\nfatal error: error in backend: Global variable \'x\' has an invalid section specifier \'sadf\': mach-o section specifier\n      requires a segment and section separated by a comma.\n\nwith no loc info.  Now we get:\n\n$ clang t.c -fsyntax-only\nt.c:4:30: error: argument to \'section\' attribute is not valid for this target: mach-o section specifier requires a segment\n      and section separated by a comma\nint x __attribute__((section(\"sadf\")));\n                            ^\n\nwhich is nice :)\n\nllvm-svn: 78586"},
[b]={"30ba674391ae",1249930984,"fix a couple of problems with section attributes:","fix a couple of problems with section attributes:\n\n1. Passing something that isn\'t a string used to cause:\n  \"argument to annotate attribute was not a string literal\"\n  make it say \"section attribute\" instead.\n\n2. Fix the location of the above message to point to the\n  bad argument instead of the section token.\n\n3. Implement rdar://4341926, by diagnosing invalid section\n  specifiers in the frontend rather than letting them slip all\n  the way to the assembler (a QoI win).\n\nAn example of #3 is that we used to produce something like this:\n\n/var/folders/n7/n7Yno9ihEm894640nJdSQU+++TI/-Tmp-//ccFPFGtT.s:2:Expected comma after segment-name\n/var/folders/n7/n7Yno9ihEm894640nJdSQU+++TI/-Tmp-//ccFPFGtT.s:2:Rest of line ignored. 1st junk character valued 46 (.).\n\nDaniel improved clang to use llvm_report_error, so now we got:\n\n$ clang t.c -c\nfatal error: error in backend: Global variable \'x\' has an invalid section specifier \'sadf\': mach-o section specifier\n      requires a segment and section separated by a comma.\n\nwith no loc info.  Now we get:\n\n$ clang t.c -fsyntax-only\nt.c:4:30: error: argument to \'section\' attribute is not valid for this target: mach-o section specifier requires a segment\n      and section separated by a comma\nint x __attribute__((section(\"sadf\")));\n                            ^\n\nwhich is nice :)\n\nllvm-svn: 78586"},
[h]={{l,3328,"bool Sema::checkSectionName(SourceLocation LiteralLoc, StringRef SecName) {\n  if (llvm::Error E = isValidSectionSpecifier(SecName)) {\n    Diag(LiteralLoc, diag::err_attribute_section_invalid_for_target) << toString(std::move(E)) << 1 /*\'section\'*/;"},{l,3362,"// This is used for `__declspec(code_seg(\"segname\"))` on a decl.\n// `#pragma code_seg(\"segname\")` uses checkSectionName() instead.\nstatic bool checkCodeSegName(Sema &S, SourceLocation LiteralLoc, StringRef CodeSegName) {\n  if (llvm::Error E = S.isValidSectionSpecifier(CodeSegName)) {\n    S.Diag(LiteralLoc, diag::err_attribute_section_invalid_for_target) << toString(std::move(E)) << 0 /*\'code-seg\'*/;"}},
[h]={{l,3328,"bool Sema::checkSectionName(SourceLocation LiteralLoc, StringRef SecName) {\n  if (llvm::Error E = isValidSectionSpecifier(SecName)) {\n    Diag(LiteralLoc, diag::err_attribute_section_invalid_for_target) << toString(std::move(E)) << 1 /*\'section\'*/;"},{l,3362,"// This is used for `__declspec(code_seg(\"segname\"))` on a decl.\n// `#pragma code_seg(\"segname\")` uses checkSectionName() instead.\nstatic bool checkCodeSegName(Sema &S, SourceLocation LiteralLoc, StringRef CodeSegName) {\n  if (llvm::Error E = S.isValidSectionSpecifier(CodeSegName)) {\n    S.Diag(LiteralLoc, diag::err_attribute_section_invalid_for_target) << toString(std::move(E)) << 0 /*\'code-seg\'*/;"}},
[j]={
[j]={
Line 3,839: Line 3,841:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"b144d366934f",1369058557,"Implement __declspec(selectany) under -fms-extensions\n\nselectany only applies to externally visible ...","Implement __declspec(selectany) under -fms-extensions\n\nselectany only applies to externally visible global variables.  It has\nthe effect of making the data weak_odr.\n\nThe MSDN docs suggest that unused definitions can only be dropped at\nlinktime, so Clang uses weak instead of linkonce.  MSVC optimizes away\nreferences to constant selectany data, so it must assume that there is\nonly one definition, hence weak_odr.\n\nReviewers: espindola\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D814\n\nllvm-svn: 182266"},
[b]={"b144d366934f",1369058557,"Implement __declspec(selectany) under -fms-extensions","Implement __declspec(selectany) under -fms-extensions\n\nselectany only applies to externally visible global variables.  It has\nthe effect of making the data weak_odr.\n\nThe MSDN docs suggest that unused definitions can only be dropped at\nlinktime, so Clang uses weak instead of linkonce.  MSVC optimizes away\nreferences to constant selectany data, so it must assume that there is\nonly one definition, hence weak_odr.\n\nReviewers: espindola\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D814\n\nllvm-svn: 182266"},
[h]={{n,6979,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // ...\n  // \'selectany\' only applies to externally visible variable declarations.\n  // It does not apply to functions.\n  if (SelectAnyAttr *Attr = ND.getAttr<SelectAnyAttr>()) {\n    if (isa<FunctionDecl>(ND) || !ND.isExternallyVisible()) {\n      S.Diag(Attr->getLocation(), diag::err_attribute_selectany_non_extern_data);"}},
[h]={{m,6979,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // ...\n  // \'selectany\' only applies to externally visible variable declarations.\n  // It does not apply to functions.\n  if (SelectAnyAttr *Attr = ND.getAttr<SelectAnyAttr>()) {\n    if (isa<FunctionDecl>(ND) || !ND.isExternallyVisible()) {\n      S.Diag(Attr->getLocation(), diag::err_attribute_selectany_non_extern_data);"}},
[j]={
[j]={
["clang/test/SemaCXX/declspec-selectany.cpp"]={"clang/test/SemaCXX/declspec-selectany.cpp:6:22: error: \'selectany\' can only be applied to data items with external linkage"}
["clang/test/SemaCXX/declspec-selectany.cpp"]={"clang/test/SemaCXX/declspec-selectany.cpp:6:22: error: \'selectany\' can only be applied to data items with external linkage"}
Line 3,851: Line 3,853:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{l,3060,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.getNumArgs() > 0) {\n    // ...\n    if (Idx->isSigned() && Idx->isNegative()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_sentinel_less_than_zero) << E->getSourceRange();"}},
[h]={{l,3060,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.getNumArgs() > 0) {\n    // ...\n    if (Idx->isSigned() && Idx->isNegative()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_sentinel_less_than_zero) << E->getSourceRange();"}},
[j]={
[j]={
Line 3,863: Line 3,865:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{l,3082,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.getNumArgs() > 1) {\n    // ...\n    if ((Idx->isSigned() && Idx->isNegative()) || nullPos > 1) {\n      // ...\n      S.Diag(AL.getLoc(), diag::err_attribute_sentinel_not_zero_or_one) << E->getSourceRange();"}},
[h]={{l,3082,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.getNumArgs() > 1) {\n    // ...\n    if ((Idx->isSigned() && Idx->isNegative()) || nullPos > 1) {\n      // ...\n      S.Diag(AL.getLoc(), diag::err_attribute_sentinel_not_zero_or_one) << E->getSourceRange();"}},
[j]={
[j]={
Line 3,875: Line 3,877:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"efe9fa62f5b4",1374800027,"Tighten type-checking for vector attributes.\n\nBased on patch by Yunzhong Gao.\n\nllvm-svn: 187176","Tighten type-checking for vector attributes.\n\nBased on patch by Yunzhong Gao.\n\nllvm-svn: 187176"},
[b]={"efe9fa62f5b4",1374800027,"Tighten type-checking for vector attributes.","Tighten type-checking for vector attributes.\n\nBased on patch by Yunzhong Gao.\n\nllvm-svn: 187176"},
[h]={{o,2742,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // ...\n  // vecSize is specified in bytes - convert to bits.\n  if (!VecSize->isIntN(61)) {\n    // ...\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << SizeExpr->getSourceRange() << \"vector\";"},{o,2762,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // ...\n  if (VectorSizeBits / TypeSize > std::numeric_limits<uint32_t>::max()) {\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << SizeExpr->getSourceRange() << \"vector\";"},{o,2814,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  // ...\n  if (!ArraySize->isTypeDependent() && !ArraySize->isValueDependent()) {\n    // ...\n    if (!vecSize->isIntN(32)) {\n      Diag(AttrLoc, diag::err_attribute_size_too_large) << ArraySize->getSourceRange() << \"vector\";"},{o,2898,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  if (!ConstantMatrixType::isDimensionValid(MatrixRows)) {\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << RowRange << \"matrix row\";"},{o,2903,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  if (!ConstantMatrixType::isDimensionValid(MatrixColumns)) {\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << ColRange << \"matrix column\";"}},
[h]={{n,2742,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // ...\n  // vecSize is specified in bytes - convert to bits.\n  if (!VecSize->isIntN(61)) {\n    // ...\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << SizeExpr->getSourceRange() << \"vector\";"},{n,2762,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // ...\n  if (VectorSizeBits / TypeSize > std::numeric_limits<uint32_t>::max()) {\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << SizeExpr->getSourceRange() << \"vector\";"},{n,2814,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  // ...\n  if (!ArraySize->isTypeDependent() && !ArraySize->isValueDependent()) {\n    // ...\n    if (!vecSize->isIntN(32)) {\n      Diag(AttrLoc, diag::err_attribute_size_too_large) << ArraySize->getSourceRange() << \"vector\";"},{n,2898,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  if (!ConstantMatrixType::isDimensionValid(MatrixRows)) {\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << RowRange << \"matrix row\";"},{n,2903,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  if (!ConstantMatrixType::isDimensionValid(MatrixColumns)) {\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << ColRange << \"matrix column\";"}},
[j]={
[j]={
["clang/test/SemaTemplate/matrix-type.cpp"]={"clang/test/SemaTemplate/matrix-type.cpp:25:42: error: matrix row size too large"}
["clang/test/SemaTemplate/matrix-type.cpp"]={"clang/test/SemaTemplate/matrix-type.cpp:25:42: error: matrix row size too large"}
Line 3,887: Line 3,889:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={ab,1576908663,Z,Y},
[b]={Z,1576908663,X,Y},
[h]={{l,4610,"void Sema::CheckAlignasUnderalignment(Decl *D) {\n  // ...\n  if (Align && DiagTy->isSizelessType()) {\n    Diag(LastAlignedAttr->getLocation(), diag::err_attribute_sizeless_type) << LastAlignedAttr << DiagTy;"}},
[h]={{l,4610,"void Sema::CheckAlignasUnderalignment(Decl *D) {\n  // ...\n  if (Align && DiagTy->isSizelessType()) {\n    Diag(LastAlignedAttr->getLocation(), diag::err_attribute_sizeless_type) << LastAlignedAttr << DiagTy;"}},
[j]={
[j]={
Line 3,899: Line 3,901:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"63fa667c6874",1311883955,"Added basic parsing for all remaining attributes, thread safety\nanalysis. This includes checking tha...","Added basic parsing for all remaining attributes, thread safety\nanalysis. This includes checking that the attributes are applied in the\ncorrect contexts and with the correct number of arguments.\n\nllvm-svn: 136383"},
[b]={"63fa667c6874",1311883955,"Added basic parsing for all remaining attributes, thread safety","Added basic parsing for all remaining attributes, thread safety\nanalysis. This includes checking that the attributes are applied in the\ncorrect contexts and with the correct number of arguments.\n\nllvm-svn: 136383"},
[h]={{"clang/lib/Sema/ParsedAttr.cpp",289,"bool ParsedAttr::checkAtLeastNumArgs(Sema &S, unsigned Num) const { return checkAttributeNumArgsImpl(S, *this, Num, diag::err_attribute_too_few_arguments, std::less<unsigned>()); }"},{l,1834,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  case OwnershipAttr::Takes:\n  case OwnershipAttr::Holds:\n    if (AL.getNumArgs() < 2) {\n      S.Diag(AL.getLoc(), diag::err_attribute_too_few_arguments) << AL << 2;"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",215,"static void instantiateDependentAnnotationAttr(Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const AnnotateAttr *Attr, Decl *New) {\n  // ...\n  if (HasDelayedArgs) {\n    if (Args.size() < 1) {\n      S.Diag(Attr->getLoc(), diag::err_attribute_too_few_arguments) << Attr << 1;"},{o,8478,"static void HandleAnnotateTypeAttr(TypeProcessingState &State, QualType &CurType, const ParsedAttr &PA) {\n  // ...\n  if (PA.getNumArgs() < 1) {\n    S.Diag(PA.getLoc(), diag::err_attribute_too_few_arguments) << PA << 1;"}},
[h]={{"clang/lib/Sema/ParsedAttr.cpp",289,"bool ParsedAttr::checkAtLeastNumArgs(Sema &S, unsigned Num) const { return checkAttributeNumArgsImpl(S, *this, Num, diag::err_attribute_too_few_arguments, std::less<unsigned>()); }"},{l,1834,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  case OwnershipAttr::Takes:\n  case OwnershipAttr::Holds:\n    if (AL.getNumArgs() < 2) {\n      S.Diag(AL.getLoc(), diag::err_attribute_too_few_arguments) << AL << 2;"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",215,"static void instantiateDependentAnnotationAttr(Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const AnnotateAttr *Attr, Decl *New) {\n  // ...\n  if (HasDelayedArgs) {\n    if (Args.size() < 1) {\n      S.Diag(Attr->getLoc(), diag::err_attribute_too_few_arguments) << Attr << 1;"},{n,8478,"static void HandleAnnotateTypeAttr(TypeProcessingState &State, QualType &CurType, const ParsedAttr &PA) {\n  // ...\n  if (PA.getNumArgs() < 1) {\n    S.Diag(PA.getLoc(), diag::err_attribute_too_few_arguments) << PA << 1;"}},
[j]={
[j]={
["clang/test/SemaCXX/warn-consumed-parsing.cpp"]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:22:41: error: \'callable_when\' attribute takes at least 1 argument"}
["clang/test/SemaCXX/warn-consumed-parsing.cpp"]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:22:41: error: \'callable_when\' attribute takes at least 1 argument"}
Line 3,911: Line 3,913:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"80ee5963fde8",1299068105,"Pretty up the wrong-number-of-arguments-for-attribute diagnostic by\nusing a custom plural form.  Spl...","Pretty up the wrong-number-of-arguments-for-attribute diagnostic by\nusing a custom plural form.  Split out the range diagnostics as their\nown message.\n\nllvm-svn: 126840"},
[b]={"80ee5963fde8",1299068105,"Pretty up the wrong-number-of-arguments-for-attribute diagnostic by","Pretty up the wrong-number-of-arguments-for-attribute diagnostic by\nusing a custom plural form.  Split out the range diagnostics as their\nown message.\n\nllvm-svn: 126840"},
[h]={{"clang/lib/Sema/ParsedAttr.cpp",294,"bool ParsedAttr::checkAtMostNumArgs(Sema &S, unsigned Num) const { return checkAttributeNumArgsImpl(S, *this, Num, diag::err_attribute_too_many_arguments, std::greater<unsigned>()); }"},{l,1840,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  case OwnershipAttr::Returns:\n    if (AL.getNumArgs() > 2) {\n      S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1;"},{l,7354,"static void handleARMInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check the attribute arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1;"},{l,7431,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Only one optional argument permitted.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1;"}},
[h]={{"clang/lib/Sema/ParsedAttr.cpp",294,"bool ParsedAttr::checkAtMostNumArgs(Sema &S, unsigned Num) const { return checkAttributeNumArgsImpl(S, *this, Num, diag::err_attribute_too_many_arguments, std::greater<unsigned>()); }"},{l,1840,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  case OwnershipAttr::Returns:\n    if (AL.getNumArgs() > 2) {\n      S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1;"},{l,7354,"static void handleARMInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check the attribute arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1;"},{l,7431,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Only one optional argument permitted.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1;"}},
[j]={
[j]={
Line 3,923: Line 3,925:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"8c3de546d62e",1379354855,"Add error checking to reject neon_vector_type attribute on targets without NEON.\n\nPatch by Artyom Sk...","Add error checking to reject neon_vector_type attribute on targets without NEON.\n\nPatch by Artyom Skrobov.\n\nllvm-svn: 190801"},
[b]={"8c3de546d62e",1379354855,"Add error checking to reject neon_vector_type attribute on targets without NEON.","Add error checking to reject neon_vector_type attribute on targets without NEON.\n\nPatch by Artyom Skrobov.\n\nllvm-svn: 190801"},
[h]={{o,8211,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  // ...\n  // Target must have NEON (or MVE, whose vectors are similar enough\n  // not to need a separate attribute)\n  if (!(S.Context.getTargetInfo().hasFeature(\"neon\") || S.Context.getTargetInfo().hasFeature(\"mve\") || IsTargetCUDAAndHostARM)) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr << \"\'neon\' or \'mve\'\";"},{o,8256,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Target must have SVE.\n  if (!S.Context.getTargetInfo().hasFeature(\"sve\")) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr << \"\'sve\'\";"},{o,8340,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Target must have vector extension.\n  if (!S.Context.getTargetInfo().hasFeature(\"zve32x\")) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr << \"\'zve32x\'\";"}},
[h]={{n,8211,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  // ...\n  // Target must have NEON (or MVE, whose vectors are similar enough\n  // not to need a separate attribute)\n  if (!(S.Context.getTargetInfo().hasFeature(\"neon\") || S.Context.getTargetInfo().hasFeature(\"mve\") || IsTargetCUDAAndHostARM)) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr << \"\'neon\' or \'mve\'\";"},{n,8256,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Target must have SVE.\n  if (!S.Context.getTargetInfo().hasFeature(\"sve\")) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr << \"\'sve\'\";"},{n,8340,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Target must have vector extension.\n  if (!S.Context.getTargetInfo().hasFeature(\"zve32x\")) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr << \"\'zve32x\'\";"}},
[j]={
[j]={
["clang/test/Sema/riscv-vector-types-support.c"]={"clang/test/Sema/riscv-vector-types-support.c:3:24: error: \'riscv_rvv_vector_bits\' attribute is not supported on targets missing \'zve32x\'; specify an appropriate -march= or -mcpu="}
["clang/test/Sema/riscv-vector-types-support.c"]={"clang/test/Sema/riscv-vector-types-support.c:3:24: error: \'riscv_rvv_vector_bits\' attribute is not supported on targets missing \'zve32x\'; specify an appropriate -march= or -mcpu="}
Line 3,935: Line 3,937:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"7da1166da010",1292809309,"Validate Microsoft\'s uuid attribute string.\n\nllvm-svn: 122220","Validate Microsoft\'s uuid attribute string.\n\nllvm-svn: 122220"},
[b]={"7da1166da010",1292809309,"Validate Microsoft\'s uuid attribute string.","Validate Microsoft\'s uuid attribute string.\n\nllvm-svn: 122220"},
[h]={{I,4738,"/// Parse uuid() attribute when it appears in a [] Microsoft attribute.\nvoid Parser::ParseMicrosoftUuidAttributeArgs(ParsedAttributes &Attrs) {\n  // ...\n  if (Tok.is(tok::string_literal)) {\n  // ...\n  } else {\n    // ...\n    while (Tok.isNot(tok::r_paren)) {\n      if (Tok.hasLeadingSpace() || Tok.isAtStartOfLine()) {\n        Diag(Tok, diag::err_attribute_uuid_malformed_guid);"},{I,4756,"/// Parse uuid() attribute when it appears in a [] Microsoft attribute.\nvoid Parser::ParseMicrosoftUuidAttributeArgs(ParsedAttributes &Attrs) {\n  // ...\n  if (Tok.is(tok::string_literal)) {\n  // ...\n  } else {\n    // ...\n    if (Tok.hasLeadingSpace() || Tok.isAtStartOfLine()) {\n      Diag(Tok, diag::err_attribute_uuid_malformed_guid);"},{l,7007,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Validate GUID length.\n  if (StrRef.size() != 36) {\n    S.Diag(LiteralLoc, diag::err_attribute_uuid_malformed_guid);"},{l,7014,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned i = 0; i < 36; ++i) {\n    if (i == 8 || i == 13 || i == 18 || i == 23) {\n      if (StrRef[i] != \'-\') {\n        S.Diag(LiteralLoc, diag::err_attribute_uuid_malformed_guid);"},{l,7018,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned i = 0; i < 36; ++i) {\n    if (i == 8 || i == 13 || i == 18 || i == 23) {\n    // ...\n    } else if (!isHexDigit(StrRef[i])) {\n      S.Diag(LiteralLoc, diag::err_attribute_uuid_malformed_guid);"}},
[h]={{J,4738,"/// Parse uuid() attribute when it appears in a [] Microsoft attribute.\nvoid Parser::ParseMicrosoftUuidAttributeArgs(ParsedAttributes &Attrs) {\n  // ...\n  if (Tok.is(tok::string_literal)) {\n  // ...\n  } else {\n    // ...\n    while (Tok.isNot(tok::r_paren)) {\n      if (Tok.hasLeadingSpace() || Tok.isAtStartOfLine()) {\n        Diag(Tok, diag::err_attribute_uuid_malformed_guid);"},{J,4756,"/// Parse uuid() attribute when it appears in a [] Microsoft attribute.\nvoid Parser::ParseMicrosoftUuidAttributeArgs(ParsedAttributes &Attrs) {\n  // ...\n  if (Tok.is(tok::string_literal)) {\n  // ...\n  } else {\n    // ...\n    if (Tok.hasLeadingSpace() || Tok.isAtStartOfLine()) {\n      Diag(Tok, diag::err_attribute_uuid_malformed_guid);"},{l,7007,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Validate GUID length.\n  if (StrRef.size() != 36) {\n    S.Diag(LiteralLoc, diag::err_attribute_uuid_malformed_guid);"},{l,7014,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned i = 0; i < 36; ++i) {\n    if (i == 8 || i == 13 || i == 18 || i == 23) {\n      if (StrRef[i] != \'-\') {\n        S.Diag(LiteralLoc, diag::err_attribute_uuid_malformed_guid);"},{l,7018,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned i = 0; i < 36; ++i) {\n    if (i == 8 || i == 13 || i == 18 || i == 23) {\n    // ...\n    } else if (!isHexDigit(StrRef[i])) {\n      S.Diag(LiteralLoc, diag::err_attribute_uuid_malformed_guid);"}},
[j]={
[j]={
["clang/test/Parser/ms-square-bracket-attributes.mm"]={"clang/test/Parser/ms-square-bracket-attributes.mm:21:7: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:23:7: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:58:8: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:60:21: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:63:1: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:65:24: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:67:44: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:70:1: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:73:7: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:95:7: error: uuid attribute contains a malformed GUID"}
["clang/test/Parser/ms-square-bracket-attributes.mm"]={"clang/test/Parser/ms-square-bracket-attributes.mm:21:7: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:23:7: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:58:8: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:60:21: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:63:1: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:65:24: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:67:44: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:70:1: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:73:7: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:95:7: error: uuid attribute contains a malformed GUID"}
Line 3,947: Line 3,949:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"9a587aaaa9e7",1284772327,"Add more error checking to attribute vecreturn\n\nllvm-svn: 114251","Add more error checking to attribute vecreturn\n\nllvm-svn: 114251"},
[b]={"9a587aaaa9e7",1284772327,"Add more error checking to attribute vecreturn","Add more error checking to attribute vecreturn\n\nllvm-svn: 114251"},
[h]={{l,2300,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!cast<CXXRecordDecl>(R)->isPOD()) {\n    S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_pod_record);"}},
[h]={{l,2300,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!cast<CXXRecordDecl>(R)->isPOD()) {\n    S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_pod_record);"}},
[j]={
[j]={
Line 3,959: Line 3,961:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"9a587aaaa9e7",1284772327,"Add more error checking to attribute vecreturn\n\nllvm-svn: 114251","Add more error checking to attribute vecreturn\n\nllvm-svn: 114251"},
[b]={"9a587aaaa9e7",1284772327,"Add more error checking to attribute vecreturn","Add more error checking to attribute vecreturn\n\nllvm-svn: 114251"},
[h]={{l,2295,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!isa<CXXRecordDecl>(R)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_vector_member);"},{l,2306,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (const auto *I : R->fields()) {\n    if ((count == 1) || !I->getType()->isVectorType()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_vector_member);"}},
[h]={{l,2295,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!isa<CXXRecordDecl>(R)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_vector_member);"},{l,2306,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (const auto *I : R->fields()) {\n    if ((count == 1) || !I->getType()->isVectorType()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_vector_member);"}},
[j]={
[j]={
Line 3,971: Line 3,973:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"41136eec6bdb",1247706744,"Generate error on declaration containing \'static\' and \'__attribute__((weak))\'\nPatch by Ryan Flynn\n\nl...","Generate error on declaration containing \'static\' and \'__attribute__((weak))\'\nPatch by Ryan Flynn\n\nllvm-svn: 75879"},
[b]={"41136eec6bdb",1247706744,"Generate error on declaration containing \'static\' and \'__attribute__((weak))\'","Generate error on declaration containing \'static\' and \'__attribute__((weak))\'\nPatch by Ryan Flynn\n\nllvm-svn: 75879"},
[h]={{n,6951,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // ...\n  // \'weak\' only applies to declarations with external linkage.\n  if (WeakAttr *Attr = ND.getAttr<WeakAttr>()) {\n    if (!ND.isExternallyVisible()) {\n      S.Diag(Attr->getLocation(), diag::err_attribute_weak_static);"}},
[h]={{m,6951,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // ...\n  // \'weak\' only applies to declarations with external linkage.\n  if (WeakAttr *Attr = ND.getAttr<WeakAttr>()) {\n    if (!ND.isExternallyVisible()) {\n      S.Diag(Attr->getLocation(), diag::err_attribute_weak_static);"}},
[j]={
[j]={
["clang/test/SemaCXX/attr-weak.cpp"]={"clang/test/SemaCXX/attr-weak.cpp:3:33: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:4:36: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:10:28: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:11:31: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:20:40: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:40:16: error: weak declaration cannot have internal linkage"}
["clang/test/SemaCXX/attr-weak.cpp"]={"clang/test/SemaCXX/attr-weak.cpp:3:33: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:4:36: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:10:28: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:11:31: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:20:40: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:40:16: error: weak declaration cannot have internal linkage"}
Line 3,996: Line 3,998:
[g]=k,
[g]=k,
[b]={"c18086ae1755",1266962430,"Add support for the weakref attribute. We still produce \"alias weak\" as llvm-gcc does, but are more ...","Add support for the weakref attribute. We still produce \"alias weak\" as llvm-gcc does, but are more strict on what uses of weakref we accept.\n\nllvm-svn: 96992"},
[b]={"c18086ae1755",1266962430,"Add support for the weakref attribute. We still produce \"alias weak\" as llvm-gcc does, but are more ...","Add support for the weakref attribute. We still produce \"alias weak\" as llvm-gcc does, but are more strict on what uses of weakref we accept.\n\nllvm-svn: 96992"},
[h]={{n,6957,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // ...\n  if (WeakRefAttr *Attr = ND.getAttr<WeakRefAttr>()) {\n    if (ND.isExternallyVisible()) {\n      S.Diag(Attr->getLocation(), diag::err_attribute_weakref_not_static);"}},
[h]={{m,6957,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // ...\n  if (WeakRefAttr *Attr = ND.getAttr<WeakRefAttr>()) {\n    if (ND.isExternallyVisible()) {\n      S.Diag(Attr->getLocation(), diag::err_attribute_weakref_not_static);"}},
[j]={
[j]={
["clang/test/SemaCXX/attr-weakref.cpp"]={"clang/test/SemaCXX/attr-weakref.cpp:27:25: error: weakref declaration must have internal linkage","clang/test/SemaCXX/attr-weakref.cpp:28:23: error: weakref declaration must have internal linkage","clang/test/SemaCXX/attr-weakref.cpp:38:16: error: weakref declaration must have internal linkage"}
["clang/test/SemaCXX/attr-weakref.cpp"]={"clang/test/SemaCXX/attr-weakref.cpp:27:25: error: weakref declaration must have internal linkage","clang/test/SemaCXX/attr-weakref.cpp:28:23: error: weakref declaration must have internal linkage","clang/test/SemaCXX/attr-weakref.cpp:38:16: error: weakref declaration must have internal linkage"}
Line 4,019: Line 4,021:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={M,1625925174,K,L}
[b]={N,1625925174,M,L}
},
},
["err_attribute_wrong_decl_type"]={
["err_attribute_wrong_decl_type"]={
Line 4,027: Line 4,029:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"96d5c76498b2",1258792989,"Added rudimentary C++0x attribute support.\nThe following attributes are currently supported in C++0x...","Added rudimentary C++0x attribute support.\nThe following attributes are currently supported in C++0x attribute\nlists (and in GNU ones as well):\n - align() - semantics believed to be conformant to n3000, except for\n  redeclarations and what entities it may apply to\n - final - semantics believed to be conformant to CWG issue 817\'s proposed\n  wording, except for redeclarations\n - noreturn - semantics believed to be conformant to n3000, except for\n  redeclarations\n - carries_dependency - currently ignored (this is an optimization hint)\n\nllvm-svn: 89543"},
[b]={"96d5c76498b2",1258792989,"Added rudimentary C++0x attribute support.","Added rudimentary C++0x attribute support.\nThe following attributes are currently supported in C++0x attribute\nlists (and in GNU ones as well):\n - align() - semantics believed to be conformant to n3000, except for\n  redeclarations and what entities it may apply to\n - final - semantics believed to be conformant to CWG issue 817\'s proposed\n  wording, except for redeclarations\n - noreturn - semantics believed to be conformant to n3000, except for\n  redeclarations\n - carries_dependency - currently ignored (this is an optimization hint)\n\nllvm-svn: 89543"},
[h]={{l,2249,"static void handleAnalyzerNoReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The checking path for \'noreturn\' and \'analyzer_noreturn\' are different\n  // because \'analyzer_noreturn\' does not impact the type.\n  if (!isFunctionOrMethodOrBlock(D)) {\n    // ...\n    if (!VD || (!VD->getType()->isBlockPointerType() && !VD->getType()->isFunctionPointerType())) {\n      S.Diag(AL.getLoc(), AL.isStandardAttributeSyntax() ? diag::err_attribute_wrong_decl_type : diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionMethodOrBlock;"},{l,2904,"static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, bool isTypeVisibility) {\n  // ...\n  // \'type_visibility\' can only go on a type or namespace.\n  if (isTypeVisibility && !(isa<TagDecl>(D) || isa<ObjCInterfaceDecl>(D) || isa<NamespaceDecl>(D))) {\n    S.Diag(AL.getRange().getBegin(), diag::err_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedTypeOrNamespace;"},{l,4429,"/// Perform checking of type validity\n///\n/// C++11 [dcl.align]p1:\n///  An alignment-specifier may be applied to a variable or to a class\n///  data member, but it shall not be applied to a bit-field, a function\n///  parameter, the formal parameter of a catch clause, or a variable\n///  declared with the register storage class specifier. An\n///  alignment-specifier may also be applied to the declaration of a class\n///  or enumeration type.\n/// CWG 2354:\n///  CWG agreed to remove permission for alignas to be applied to\n///  enumerations.\n/// C11 6.7.5/2:\n///  An alignment attribute shall not be specified in a declaration of\n///  a typedef, or a bit-field, or a function, or a parameter, or an\n///  object declared with the register storage-class specifier.\nstatic bool validateAlignasAppliedType(Sema &S, Decl *D, const AlignedAttr &Attr, SourceLocation AttrLoc) {\n  // ...\n  if (isa<ParmVarDecl>(D)) {\n  // ...\n  } else if (const auto *VD = dyn_cast<VarDecl>(D)) {\n  // ...\n  } else if (const auto *FD = dyn_cast<FieldDecl>(D)) {\n  // ...\n  } else if (const auto *ED = dyn_cast<EnumDecl>(D)) {\n  // ...\n  } else if (!isa<TagDecl>(D)) {\n    return S.Diag(AttrLoc, diag::err_attribute_wrong_decl_type) << &Attr << Attr.isRegularKeywordAttribute() << (Attr.isC11() ? ExpectedVariableOrField : ExpectedVariableFieldOrTag);"},{l,5706,"static void handleTypeTagForDatatypeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!isa<VarDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedVariable;"},{l,6289,"static void handleObjCOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  S.Diag(D->getBeginLoc(), diag::err_attribute_wrong_decl_type) << AL.getRange() << AL << AL.isRegularKeywordAttribute() << ExpectedVariable;"},{l,8253,"static void handleNoSanitizeSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (isGlobalVar(D) && SanitizerName != \"address\")\n    S.Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{l,9530,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n      // ...\n      // diag::err_attribute_wrong_decl_type + ExpectedKernelFunction."},{l,9544,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    // ...\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"},{l,9548,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    // ...\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUWavesPerEUAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"},{l,9552,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    // ...\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUWavesPerEUAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUNumSGPRAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"},{l,9556,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    // ...\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUWavesPerEUAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUNumSGPRAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUNumVGPRAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"}},
[h]={{l,2249,"static void handleAnalyzerNoReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The checking path for \'noreturn\' and \'analyzer_noreturn\' are different\n  // because \'analyzer_noreturn\' does not impact the type.\n  if (!isFunctionOrMethodOrBlock(D)) {\n    // ...\n    if (!VD || (!VD->getType()->isBlockPointerType() && !VD->getType()->isFunctionPointerType())) {\n      S.Diag(AL.getLoc(), AL.isStandardAttributeSyntax() ? diag::err_attribute_wrong_decl_type : diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionMethodOrBlock;"},{l,2904,"static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, bool isTypeVisibility) {\n  // ...\n  // \'type_visibility\' can only go on a type or namespace.\n  if (isTypeVisibility && !(isa<TagDecl>(D) || isa<ObjCInterfaceDecl>(D) || isa<NamespaceDecl>(D))) {\n    S.Diag(AL.getRange().getBegin(), diag::err_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedTypeOrNamespace;"},{l,4429,"/// Perform checking of type validity\n///\n/// C++11 [dcl.align]p1:\n///  An alignment-specifier may be applied to a variable or to a class\n///  data member, but it shall not be applied to a bit-field, a function\n///  parameter, the formal parameter of a catch clause, or a variable\n///  declared with the register storage class specifier. An\n///  alignment-specifier may also be applied to the declaration of a class\n///  or enumeration type.\n/// CWG 2354:\n///  CWG agreed to remove permission for alignas to be applied to\n///  enumerations.\n/// C11 6.7.5/2:\n///  An alignment attribute shall not be specified in a declaration of\n///  a typedef, or a bit-field, or a function, or a parameter, or an\n///  object declared with the register storage-class specifier.\nstatic bool validateAlignasAppliedType(Sema &S, Decl *D, const AlignedAttr &Attr, SourceLocation AttrLoc) {\n  // ...\n  if (isa<ParmVarDecl>(D)) {\n  // ...\n  } else if (const auto *VD = dyn_cast<VarDecl>(D)) {\n  // ...\n  } else if (const auto *FD = dyn_cast<FieldDecl>(D)) {\n  // ...\n  } else if (const auto *ED = dyn_cast<EnumDecl>(D)) {\n  // ...\n  } else if (!isa<TagDecl>(D)) {\n    return S.Diag(AttrLoc, diag::err_attribute_wrong_decl_type) << &Attr << Attr.isRegularKeywordAttribute() << (Attr.isC11() ? ExpectedVariableOrField : ExpectedVariableFieldOrTag);"},{l,5706,"static void handleTypeTagForDatatypeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!isa<VarDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedVariable;"},{l,6289,"static void handleObjCOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  S.Diag(D->getBeginLoc(), diag::err_attribute_wrong_decl_type) << AL.getRange() << AL << AL.isRegularKeywordAttribute() << ExpectedVariable;"},{l,8253,"static void handleNoSanitizeSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (isGlobalVar(D) && SanitizerName != \"address\")\n    S.Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{l,9530,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n      // ...\n      // diag::err_attribute_wrong_decl_type + ExpectedKernelFunction."},{l,9544,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    // ...\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"},{l,9548,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    // ...\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUWavesPerEUAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"},{l,9552,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    // ...\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUWavesPerEUAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUNumSGPRAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"},{l,9556,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    // ...\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUWavesPerEUAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUNumSGPRAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUNumVGPRAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"}},
[j]={
[j]={
Line 4,051: Line 4,053:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{"clang/lib/Sema/ParsedAttr.cpp",284,"bool ParsedAttr::checkExactlyNumArgs(Sema &S, unsigned Num) const { return checkAttributeNumArgsImpl(S, *this, Num, diag::err_attribute_wrong_number_arguments, std::not_equal_to<unsigned>()); }"},{l,1505,"static void handleIBOutletCollection(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The iboutletcollection attribute can have zero or one arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{l,1917,"static void handleWeakRefAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check the attribute arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{l,3260,"static void handleVecTypeHint(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.hasParsedType()) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{l,4162,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (CalleeFnProtoType->getNumParams() > EncodingIndices.size() - 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << (unsigned)(EncodingIndices.size() - 1);"},{l,4168,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (CalleeFnProtoType->getNumParams() < EncodingIndices.size() - 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << (unsigned)(EncodingIndices.size() - 1);"},{l,4373,"static void handleAlignedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // check the attribute arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{o,6795,"static void HandleBTFTypeTagAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  // ...\n  // Check the number of attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{o,6837,"/// HandleAddressSpaceTypeAttribute - Process an address_space attribute on the\n/// specified type.  The attribute contains 1 argument, the id of the address\n/// space for the type.\nstatic void HandleAddressSpaceTypeAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  // ...\n  if (Attr.getKind() == ParsedAttr::AT_AddressSpace) {\n    // Check the attribute arguments.\n    if (Attr.getNumArgs() != 1) {\n      S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{o,7114,"/// handleObjCGCTypeAttr - Process the __attribute__((objc_gc)) type\n/// attribute on the specified type.  Returns true to indicate that\n/// the attribute was handled, false to indicate that the type does\n/// not permit the attribute.\nstatic bool handleObjCGCTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  if (attr.getNumArgs() > 1) {\n    S.Diag(attr.getLoc(), diag::err_attribute_wrong_number_arguments) << attr << 1;"},{o,8094,"/// HandleVectorSizeAttribute - this attribute is only applicable to integral\n/// and float scalars, although arrays, pointers, and function return values are\n/// allowed in conjunction with this construct. Aggregates with this attribute\n/// are invalid, even if they are of the same size as a corresponding scalar.\n/// The raw attribute should contain precisely 1 argument, the vector size for\n/// the variable, measured in bytes. If curType and rawAttr are well formed,\n/// this routine will return a new vector type.\nstatic void HandleVectorSizeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{o,8114,"/// Process the OpenCL-like ext_vector_type attribute when it occurs on\n/// a type.\nstatic void HandleExtVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  // check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{o,8218,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  // ...\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{o,8273,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{o,8356,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{o,8461,"/// HandleMatrixTypeAttr - \"matrix_type\" attribute, like ext_vector_type\nstatic void HandleMatrixTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  // ...\n  if (Attr.getNumArgs() != 2) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 2;"},{o,8777,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  // ...\n  for (ParsedAttr &attr : AttrsCopy) {\n    // ...\n    case ParsedAttr::AT_AcquireHandle: {\n      // ...\n      if (attr.getNumArgs() != 1) {\n        state.getSema().Diag(attr.getLoc(), diag::err_attribute_wrong_number_arguments) << attr << 1;"}},
[h]={{"clang/lib/Sema/ParsedAttr.cpp",284,"bool ParsedAttr::checkExactlyNumArgs(Sema &S, unsigned Num) const { return checkAttributeNumArgsImpl(S, *this, Num, diag::err_attribute_wrong_number_arguments, std::not_equal_to<unsigned>()); }"},{l,1505,"static void handleIBOutletCollection(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The iboutletcollection attribute can have zero or one arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{l,1917,"static void handleWeakRefAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check the attribute arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{l,3260,"static void handleVecTypeHint(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.hasParsedType()) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{l,4162,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (CalleeFnProtoType->getNumParams() > EncodingIndices.size() - 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << (unsigned)(EncodingIndices.size() - 1);"},{l,4168,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (CalleeFnProtoType->getNumParams() < EncodingIndices.size() - 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << (unsigned)(EncodingIndices.size() - 1);"},{l,4373,"static void handleAlignedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // check the attribute arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{n,6795,"static void HandleBTFTypeTagAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  // ...\n  // Check the number of attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{n,6837,"/// HandleAddressSpaceTypeAttribute - Process an address_space attribute on the\n/// specified type.  The attribute contains 1 argument, the id of the address\n/// space for the type.\nstatic void HandleAddressSpaceTypeAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  // ...\n  if (Attr.getKind() == ParsedAttr::AT_AddressSpace) {\n    // Check the attribute arguments.\n    if (Attr.getNumArgs() != 1) {\n      S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{n,7114,"/// handleObjCGCTypeAttr - Process the __attribute__((objc_gc)) type\n/// attribute on the specified type.  Returns true to indicate that\n/// the attribute was handled, false to indicate that the type does\n/// not permit the attribute.\nstatic bool handleObjCGCTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  if (attr.getNumArgs() > 1) {\n    S.Diag(attr.getLoc(), diag::err_attribute_wrong_number_arguments) << attr << 1;"},{n,8094,"/// HandleVectorSizeAttribute - this attribute is only applicable to integral\n/// and float scalars, although arrays, pointers, and function return values are\n/// allowed in conjunction with this construct. Aggregates with this attribute\n/// are invalid, even if they are of the same size as a corresponding scalar.\n/// The raw attribute should contain precisely 1 argument, the vector size for\n/// the variable, measured in bytes. If curType and rawAttr are well formed,\n/// this routine will return a new vector type.\nstatic void HandleVectorSizeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{n,8114,"/// Process the OpenCL-like ext_vector_type attribute when it occurs on\n/// a type.\nstatic void HandleExtVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  // check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{n,8218,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  // ...\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{n,8273,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{n,8356,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{n,8461,"/// HandleMatrixTypeAttr - \"matrix_type\" attribute, like ext_vector_type\nstatic void HandleMatrixTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  // ...\n  if (Attr.getNumArgs() != 2) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 2;"},{n,8777,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  // ...\n  for (ParsedAttr &attr : AttrsCopy) {\n    // ...\n    case ParsedAttr::AT_AcquireHandle: {\n      // ...\n      if (attr.getNumArgs() != 1) {\n        state.getSema().Diag(attr.getLoc(), diag::err_attribute_wrong_number_arguments) << attr << 1;"}},
[j]={
[j]={
["clang/test/SemaCXX/warn-consumed-parsing.cpp"]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:20:41: error: \'set_typestate\' attribute takes one argument","clang/test/SemaCXX/warn-consumed-parsing.cpp:21:41: error: \'test_typestate\' attribute takes one argument"}
["clang/test/SemaCXX/warn-consumed-parsing.cpp"]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:20:41: error: \'set_typestate\' attribute takes one argument","clang/test/SemaCXX/warn-consumed-parsing.cpp:21:41: error: \'test_typestate\' attribute takes one argument"}
Line 4,063: Line 4,065:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={nb,1616787805,ob,pb},
[b]={gb,1616787805,hb,ib},
[h]={{l,1055,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AttrFD->getNumParams() != AL.getNumArgs() - 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments_for) << AL << AttrFD << AttrFD->getNumParams();"}},
[h]={{l,1055,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AttrFD->getNumParams() != AL.getNumArgs() - 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments_for) << AL << AttrFD << AttrFD->getNumParams();"}},
[j]={
[j]={
Line 4,075: Line 4,077:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{o,2750,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // ...\n  if (VectorSizeBits == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << SizeExpr->getSourceRange() << \"vector\";"},{o,2823,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  // ...\n  if (!ArraySize->isTypeDependent() && !ArraySize->isValueDependent()) {\n    // ...\n    if (vectorSize == 0) {\n      Diag(AttrLoc, diag::err_attribute_zero_size) << ArraySize->getSourceRange() << \"vector\";"},{o,2885,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  if (MatrixRows == 0 && MatrixColumns == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << \"matrix\" << RowRange << ColRange;"},{o,2890,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  if (MatrixRows == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << \"matrix\" << RowRange;"},{o,2894,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  if (MatrixColumns == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << \"matrix\" << ColRange;"}},
[h]={{n,2750,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // ...\n  if (VectorSizeBits == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << SizeExpr->getSourceRange() << \"vector\";"},{n,2823,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  // ...\n  if (!ArraySize->isTypeDependent() && !ArraySize->isValueDependent()) {\n    // ...\n    if (vectorSize == 0) {\n      Diag(AttrLoc, diag::err_attribute_zero_size) << ArraySize->getSourceRange() << \"vector\";"},{n,2885,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  if (MatrixRows == 0 && MatrixColumns == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << \"matrix\" << RowRange << ColRange;"},{n,2890,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  if (MatrixRows == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << \"matrix\" << RowRange;"},{n,2894,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  if (MatrixColumns == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << \"matrix\" << ColRange;"}},
[j]={
[j]={
["clang/test/SemaTemplate/matrix-type.cpp"]={"clang/test/SemaTemplate/matrix-type.cpp:111:28: error: zero matrix size","clang/test/SemaTemplate/matrix-type.cpp:15:42: error: zero matrix size"}
["clang/test/SemaTemplate/matrix-type.cpp"]={"clang/test/SemaTemplate/matrix-type.cpp:111:28: error: zero matrix size","clang/test/SemaTemplate/matrix-type.cpp:15:42: error: zero matrix size"}
Line 4,087: Line 4,089:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{l,277,"/// Diagnose mutually exclusive attributes when present on a given\n/// declaration. Returns true if diagnosed.\ntemplate <typename AttrTy> static bool checkAttrMutualExclusion(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *A = D->getAttr<AttrTy>()) {\n    S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << A << (AL.isRegularKeywordAttribute() || A->isRegularKeywordAttribute());"},{l,289,"template <typename AttrTy> static bool checkAttrMutualExclusion(Sema &S, Decl *D, const Attr &AL) {\n  if (const auto *A = D->getAttr<AttrTy>()) {\n    S.Diag(AL.getLocation(), diag::err_attributes_are_not_compatible) << &AL << A << (AL.isRegularKeywordAttribute() || A->isRegularKeywordAttribute());"},{l,1885,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned i = 1; i < AL.getNumArgs(); ++i) {\n    // ...\n    // Check we don\'t have a conflict with another ownership attribute.\n    for (const auto *I : D->specific_attrs<OwnershipAttr>()) {\n      // Cannot have two ownership attributes of different kinds for the same\n      // index.\n      if (I->getOwnKind() != K && llvm::is_contained(I->args(), Idx)) {\n        S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << I << (AL.isRegularKeywordAttribute() || I->isRegularKeywordAttribute());"},{l,3898,"ErrorAttr *Sema::mergeErrorAttr(Decl *D, const AttributeCommonInfo &CI, StringRef NewUserDiagnostic) {\n  if (const auto *EA = D->getAttr<ErrorAttr>()) {\n    // ...\n    if (!Match) {\n      Diag(EA->getLocation(), diag::err_attributes_are_not_compatible) << CI << EA << (CI.isRegularKeywordAttribute() || EA->isRegularKeywordAttribute());"},{l,4958,"SwiftNameAttr *Sema::mergeSwiftNameAttr(Decl *D, const SwiftNameAttr &SNA, StringRef Name) {\n  if (const auto *PrevSNA = D->getAttr<SwiftNameAttr>()) {\n    if (PrevSNA->getName() != Name && !PrevSNA->isImplicit()) {\n      Diag(PrevSNA->getLocation(), diag::err_attributes_are_not_compatible) << PrevSNA << &SNA << (PrevSNA->isRegularKeywordAttribute() || SNA.isRegularKeywordAttribute());"},{l,5256,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.getKind() == ParsedAttr::AT_Owner) {\n    // ...\n    if (const auto *OAttr = D->getAttr<OwnerAttr>()) {\n      // ...\n      if (ExistingDerefType != ParmType.getTypePtrOrNull()) {\n        S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << OAttr << (AL.isRegularKeywordAttribute() || OAttr->isRegularKeywordAttribute());"},{l,5275,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.getKind() == ParsedAttr::AT_Owner) {\n  // ...\n  } else {\n    // ...\n    if (const auto *PAttr = D->getAttr<PointerAttr>()) {\n      // ...\n      if (ExistingDerefType != ParmType.getTypePtrOrNull()) {\n        S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << PAttr << (AL.isRegularKeywordAttribute() || PAttr->isRegularKeywordAttribute());"},{l,5512,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  // ...\n  if (auto existingAttr = D->getAttr<ParameterABIAttr>()) {\n    if (existingAttr->getABI() != abi) {\n      Diag(CI.getLoc(), diag::err_attributes_are_not_compatible) << getParameterABISpelling(abi) << existingAttr << (CI.isRegularKeywordAttribute() || existingAttr->isRegularKeywordAttribute());"},{o,7363,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // ...\n  // You cannot have both __sptr and __uptr on the same type, nor can you\n  // have __ptr32 and __ptr64.\n  if (Attrs[attr::Ptr32] && Attrs[attr::Ptr64]) {\n    S.Diag(PAttr.getLoc(), diag::err_attributes_are_not_compatible) << \"\'__ptr32\'\""},{o,7368,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // ...\n  // You cannot have both __sptr and __uptr on the same type, nor can you\n  // have __ptr32 and __ptr64.\n  if (Attrs[attr::Ptr32] && Attrs[attr::Ptr64]) {\n  // ...\n  } else if (Attrs[attr::SPtr] && Attrs[attr::UPtr]) {\n    S.Diag(PAttr.getLoc(), diag::err_attributes_are_not_compatible) << \"\'__sptr\'\""},{o,7892,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  if (attr.getKind() == ParsedAttr::AT_Regparm) {\n    // ...\n    if (CC == CC_X86FastCall) {\n      S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible) << FunctionType::getNameForCallConv(CC) << \"regparm\" << attr.isRegularKeywordAttribute();"},{o,7972,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  if (CCOld != CC) {\n    // Error out on when there\'s already an attribute on the type\n    // and the CCs don\'t match.\n    if (S.getCallingConvAttributedType(type)) {\n      S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible) << FunctionType::getNameForCallConv(CC) << FunctionType::getNameForCallConv(CCOld) << attr.isRegularKeywordAttribute();"},{o,8006,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  // Also diagnose fastcall with regparm.\n  if (CC == CC_X86FastCall && fn->getHasRegParm()) {\n    S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible) << \"regparm\" << FunctionType::getNameForCallConv(CC_X86FastCall) << attr.isRegularKeywordAttribute();"},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4022,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // ...\n  // If we discovered any decl or stmt attributes to test for, generate the\n  // predicates for them now.\n  if (!DeclAttrs.empty()) {\n    // ...\n    for (const std::string &A : DeclAttrs) {\n      // ...\n      OS << \"      S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible)\""},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4044,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // ...\n  // If we discovered any decl or stmt attributes to test for, generate the\n  // predicates for them now.\n  if (!DeclAttrs.empty()) {\n    // ...\n    // Also generate the declaration attribute merging logic if the current\n    // attribute is one that can be inheritted on a declaration. It is assumed\n    // this code will be executed in the context of a function with parameters:\n    // Sema &S, Decl *D, Attr *A and that returns a bool (false on diagnostic,\n    // true on success).\n    if (Attr.isSubClassOf(\"InheritableAttr\")) {\n      // ...\n      for (const std::string &A : DeclAttrs) {\n        // ...\n        MergeDeclOS << \"      S.Diag(First->getLocation(), \"\n                    << \"diag::err_attributes_are_not_compatible) << First << \""},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4085,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // ...\n  // Statement attributes are a bit different from declarations. With\n  // declarations, each attribute is added to the declaration as it is\n  // processed, and so you can look on the Decl * itself to see if there is a\n  // conflicting attribute. Statement attributes are processed as a group\n  // because AttributedStmt needs to tail-allocate all of the attribute nodes\n  // at once. This means we cannot check whether the statement already contains\n  // an attribute to check for the conflict. Instead, we need to check whether\n  // the given list of semantic attributes contain any conflicts. It is assumed\n  // this code will be executed in the context of a function with parameters:\n  // Sema &S, const SmallVectorImpl<const Attr *> &C. The code will be within a\n  // loop which loops over the container C with a loop variable named A to\n  // represent the current attribute to check for conflicts.\n  //\n  // FIXME: it would be nice not to walk over the list of potential attributes\n  // to apply to the statement more than once, but statements typically don\'t\n  // have long lists of attributes on them, so re-walking the list should not\n  // be an expensive operation.\n  if (!StmtAttrs.empty()) {\n    // ...\n    MergeStmtOS << \"        S.Diag((*Iter)->getLocation(), \"\n                << \"diag::err_attributes_are_not_compatible) << *Iter << \""}},
[h]={{l,277,"/// Diagnose mutually exclusive attributes when present on a given\n/// declaration. Returns true if diagnosed.\ntemplate <typename AttrTy> static bool checkAttrMutualExclusion(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *A = D->getAttr<AttrTy>()) {\n    S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << A << (AL.isRegularKeywordAttribute() || A->isRegularKeywordAttribute());"},{l,289,"template <typename AttrTy> static bool checkAttrMutualExclusion(Sema &S, Decl *D, const Attr &AL) {\n  if (const auto *A = D->getAttr<AttrTy>()) {\n    S.Diag(AL.getLocation(), diag::err_attributes_are_not_compatible) << &AL << A << (AL.isRegularKeywordAttribute() || A->isRegularKeywordAttribute());"},{l,1885,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned i = 1; i < AL.getNumArgs(); ++i) {\n    // ...\n    // Check we don\'t have a conflict with another ownership attribute.\n    for (const auto *I : D->specific_attrs<OwnershipAttr>()) {\n      // Cannot have two ownership attributes of different kinds for the same\n      // index.\n      if (I->getOwnKind() != K && llvm::is_contained(I->args(), Idx)) {\n        S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << I << (AL.isRegularKeywordAttribute() || I->isRegularKeywordAttribute());"},{l,3898,"ErrorAttr *Sema::mergeErrorAttr(Decl *D, const AttributeCommonInfo &CI, StringRef NewUserDiagnostic) {\n  if (const auto *EA = D->getAttr<ErrorAttr>()) {\n    // ...\n    if (!Match) {\n      Diag(EA->getLocation(), diag::err_attributes_are_not_compatible) << CI << EA << (CI.isRegularKeywordAttribute() || EA->isRegularKeywordAttribute());"},{l,4958,"SwiftNameAttr *Sema::mergeSwiftNameAttr(Decl *D, const SwiftNameAttr &SNA, StringRef Name) {\n  if (const auto *PrevSNA = D->getAttr<SwiftNameAttr>()) {\n    if (PrevSNA->getName() != Name && !PrevSNA->isImplicit()) {\n      Diag(PrevSNA->getLocation(), diag::err_attributes_are_not_compatible) << PrevSNA << &SNA << (PrevSNA->isRegularKeywordAttribute() || SNA.isRegularKeywordAttribute());"},{l,5256,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.getKind() == ParsedAttr::AT_Owner) {\n    // ...\n    if (const auto *OAttr = D->getAttr<OwnerAttr>()) {\n      // ...\n      if (ExistingDerefType != ParmType.getTypePtrOrNull()) {\n        S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << OAttr << (AL.isRegularKeywordAttribute() || OAttr->isRegularKeywordAttribute());"},{l,5275,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.getKind() == ParsedAttr::AT_Owner) {\n  // ...\n  } else {\n    // ...\n    if (const auto *PAttr = D->getAttr<PointerAttr>()) {\n      // ...\n      if (ExistingDerefType != ParmType.getTypePtrOrNull()) {\n        S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << PAttr << (AL.isRegularKeywordAttribute() || PAttr->isRegularKeywordAttribute());"},{l,5512,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  // ...\n  if (auto existingAttr = D->getAttr<ParameterABIAttr>()) {\n    if (existingAttr->getABI() != abi) {\n      Diag(CI.getLoc(), diag::err_attributes_are_not_compatible) << getParameterABISpelling(abi) << existingAttr << (CI.isRegularKeywordAttribute() || existingAttr->isRegularKeywordAttribute());"},{n,7363,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // ...\n  // You cannot have both __sptr and __uptr on the same type, nor can you\n  // have __ptr32 and __ptr64.\n  if (Attrs[attr::Ptr32] && Attrs[attr::Ptr64]) {\n    S.Diag(PAttr.getLoc(), diag::err_attributes_are_not_compatible) << \"\'__ptr32\'\""},{n,7368,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // ...\n  // You cannot have both __sptr and __uptr on the same type, nor can you\n  // have __ptr32 and __ptr64.\n  if (Attrs[attr::Ptr32] && Attrs[attr::Ptr64]) {\n  // ...\n  } else if (Attrs[attr::SPtr] && Attrs[attr::UPtr]) {\n    S.Diag(PAttr.getLoc(), diag::err_attributes_are_not_compatible) << \"\'__sptr\'\""},{n,7892,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  if (attr.getKind() == ParsedAttr::AT_Regparm) {\n    // ...\n    if (CC == CC_X86FastCall) {\n      S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible) << FunctionType::getNameForCallConv(CC) << \"regparm\" << attr.isRegularKeywordAttribute();"},{n,7972,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  if (CCOld != CC) {\n    // Error out on when there\'s already an attribute on the type\n    // and the CCs don\'t match.\n    if (S.getCallingConvAttributedType(type)) {\n      S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible) << FunctionType::getNameForCallConv(CC) << FunctionType::getNameForCallConv(CCOld) << attr.isRegularKeywordAttribute();"},{n,8006,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  // Also diagnose fastcall with regparm.\n  if (CC == CC_X86FastCall && fn->getHasRegParm()) {\n    S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible) << \"regparm\" << FunctionType::getNameForCallConv(CC_X86FastCall) << attr.isRegularKeywordAttribute();"},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4022,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // ...\n  // If we discovered any decl or stmt attributes to test for, generate the\n  // predicates for them now.\n  if (!DeclAttrs.empty()) {\n    // ...\n    for (const std::string &A : DeclAttrs) {\n      // ...\n      OS << \"      S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible)\""},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4044,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // ...\n  // If we discovered any decl or stmt attributes to test for, generate the\n  // predicates for them now.\n  if (!DeclAttrs.empty()) {\n    // ...\n    // Also generate the declaration attribute merging logic if the current\n    // attribute is one that can be inheritted on a declaration. It is assumed\n    // this code will be executed in the context of a function with parameters:\n    // Sema &S, Decl *D, Attr *A and that returns a bool (false on diagnostic,\n    // true on success).\n    if (Attr.isSubClassOf(\"InheritableAttr\")) {\n      // ...\n      for (const std::string &A : DeclAttrs) {\n        // ...\n        MergeDeclOS << \"      S.Diag(First->getLocation(), \"\n                    << \"diag::err_attributes_are_not_compatible) << First << \""},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4085,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // ...\n  // Statement attributes are a bit different from declarations. With\n  // declarations, each attribute is added to the declaration as it is\n  // processed, and so you can look on the Decl * itself to see if there is a\n  // conflicting attribute. Statement attributes are processed as a group\n  // because AttributedStmt needs to tail-allocate all of the attribute nodes\n  // at once. This means we cannot check whether the statement already contains\n  // an attribute to check for the conflict. Instead, we need to check whether\n  // the given list of semantic attributes contain any conflicts. It is assumed\n  // this code will be executed in the context of a function with parameters:\n  // Sema &S, const SmallVectorImpl<const Attr *> &C. The code will be within a\n  // loop which loops over the container C with a loop variable named A to\n  // represent the current attribute to check for conflicts.\n  //\n  // FIXME: it would be nice not to walk over the list of potential attributes\n  // to apply to the statement more than once, but statements typically don\'t\n  // have long lists of attributes on them, so re-walking the list should not\n  // be an expensive operation.\n  if (!StmtAttrs.empty()) {\n    // ...\n    MergeStmtOS << \"        S.Diag((*Iter)->getLocation(), \"\n                << \"diag::err_attributes_are_not_compatible) << *Iter << \""}},
[j]={
[j]={
["clang/test/Sema/mips-interrupt-attr.c"]={"clang/test/Sema/mips-interrupt-attr.c:22:26: error: \'mips16\' and \'interrupt\' attributes are not compatible","clang/test/Sema/mips-interrupt-attr.c:24:23: error: \'interrupt\' and \'mips16\' attributes are not compatible","clang/test/Sema/mips-interrupt-attr.c:26:44: error: \'mips16\' and \'interrupt\' attributes are not compatible","clang/test/Sema/mips-interrupt-attr.c:28:39: error: \'interrupt\' and \'mips16\' attributes are not compatible"}
["clang/test/Sema/mips-interrupt-attr.c"]={"clang/test/Sema/mips-interrupt-attr.c:22:26: error: \'mips16\' and \'interrupt\' attributes are not compatible","clang/test/Sema/mips-interrupt-attr.c:24:23: error: \'interrupt\' and \'mips16\' attributes are not compatible","clang/test/Sema/mips-interrupt-attr.c:26:44: error: \'mips16\' and \'interrupt\' attributes are not compatible","clang/test/Sema/mips-interrupt-attr.c:28:39: error: \'interrupt\' and \'mips16\' attributes are not compatible"}
Line 4,098: Line 4,100:
[e]="misplaced attributes; expected attributes here",
[e]="misplaced attributes; expected attributes here",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"c5089c08d4cd",1514240600,"Add a fixit for attributes incorrectly placed prior to \'struct/class/enum\' keyword.\n\nSuggest moving ...","Add a fixit for attributes incorrectly placed prior to \'struct/class/enum\' keyword.\n\nSuggest moving the following erroneous attrib list (based on location)\n[[]] struct X;  \nto \nstruct [[]] X;\n\nAdditionally, added a fixme for the current implementation that diagnoses misplaced attributes to consider using the newly introduced diagnostic (that I think is more user-friendly).\n\nllvm-svn: 321449"},
[b]={"c5089c08d4cd",1514240600,"Add a fixit for attributes incorrectly placed prior to \'struct/class/enum\' keyword.","Add a fixit for attributes incorrectly placed prior to \'struct/class/enum\' keyword.\n\nSuggest moving the following erroneous attrib list (based on location)\n[[]] struct X;  \nto \nstruct [[]] X;\n\nAdditionally, added a fixme for the current implementation that diagnoses misplaced attributes to consider using the newly introduced diagnostic (that I think is more user-friendly).\n\nllvm-svn: 321449"},
[h]={{A,1719,"void Parser::DiagnoseProhibitedAttributes(const ParsedAttributesView &Attrs, const SourceLocation CorrectLocation) {\n  // ...\n  if (CorrectLocation.isValid()) {\n    // ...\n    (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(CorrectLocation, diag::err_keyword_misplaced) << FirstAttr : Diag(CorrectLocation, diag::err_attributes_misplaced)) << FixItHint::CreateInsertionFromRange(CorrectLocation, AttrRange) << FixItHint::CreateRemoval(AttrRange);"}},
[h]={{B,1719,"void Parser::DiagnoseProhibitedAttributes(const ParsedAttributesView &Attrs, const SourceLocation CorrectLocation) {\n  // ...\n  if (CorrectLocation.isValid()) {\n    // ...\n    (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(CorrectLocation, diag::err_keyword_misplaced) << FirstAttr : Diag(CorrectLocation, diag::err_attributes_misplaced)) << FixItHint::CreateInsertionFromRange(CorrectLocation, AttrRange) << FixItHint::CreateRemoval(AttrRange);"}},
[j]={
[j]={
["clang/test/Parser/cxx0x-attributes.cpp"]={"clang/test/Parser/cxx0x-attributes.cpp:69:12: error: misplaced attributes; expected attributes here","clang/test/Parser/cxx0x-attributes.cpp:70:11: error: misplaced attributes; expected attributes here","clang/test/Parser/cxx0x-attributes.cpp:71:11: error: misplaced attributes; expected attributes here","clang/test/Parser/cxx0x-attributes.cpp:72:10: error: misplaced attributes; expected attributes here","clang/test/Parser/cxx0x-attributes.cpp:101:12: error: misplaced attributes; expected attributes here"}
["clang/test/Parser/cxx0x-attributes.cpp"]={"clang/test/Parser/cxx0x-attributes.cpp:69:12: error: misplaced attributes; expected attributes here","clang/test/Parser/cxx0x-attributes.cpp:70:11: error: misplaced attributes; expected attributes here","clang/test/Parser/cxx0x-attributes.cpp:71:11: error: misplaced attributes; expected attributes here","clang/test/Parser/cxx0x-attributes.cpp:72:10: error: misplaced attributes; expected attributes here","clang/test/Parser/cxx0x-attributes.cpp:101:12: error: misplaced attributes; expected attributes here"}
Line 4,110: Line 4,112:
[e]="an attribute list cannot appear here",
[e]="an attribute list cannot appear here",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"96d5c76498b2",1258792989,"Added rudimentary C++0x attribute support.\nThe following attributes are currently supported in C++0x...","Added rudimentary C++0x attribute support.\nThe following attributes are currently supported in C++0x attribute\nlists (and in GNU ones as well):\n - align() - semantics believed to be conformant to n3000, except for\n  redeclarations and what entities it may apply to\n - final - semantics believed to be conformant to CWG issue 817\'s proposed\n  wording, except for redeclarations\n - noreturn - semantics believed to be conformant to n3000, except for\n  redeclarations\n - carries_dependency - currently ignored (this is an optimization hint)\n\nllvm-svn: 89543"},
[b]={"96d5c76498b2",1258792989,"Added rudimentary C++0x attribute support.","Added rudimentary C++0x attribute support.\nThe following attributes are currently supported in C++0x attribute\nlists (and in GNU ones as well):\n - align() - semantics believed to be conformant to n3000, except for\n  redeclarations and what entities it may apply to\n - final - semantics believed to be conformant to CWG issue 817\'s proposed\n  wording, except for redeclarations\n - noreturn - semantics believed to be conformant to n3000, except for\n  redeclarations\n - carries_dependency - currently ignored (this is an optimization hint)\n\nllvm-svn: 89543"},
[h]={{A,1683,"/// DiagnoseProhibitedCXX11Attribute - We have found the opening square brackets\n/// of a C++11 attribute-specifier in a location where an attribute is not\n/// permitted. By C++11 [dcl.attr.grammar]p6, this is ill-formed. Diagnose this\n/// situation.\n///\n/// \\return \\c true if we skipped an attribute-like chunk of tokens, \\c false if\n/// this doesn\'t appear to actually be an attribute-specifier, and the caller\n/// should try to parse it.\nbool Parser::DiagnoseProhibitedCXX11Attribute() {\n  // ...\n  case CAK_AttributeSpecifier:\n    // ...\n    Diag(BeginLoc, diag::err_attributes_not_allowed) << SourceRange(BeginLoc, EndLoc);"},{A,1707,"/// We have found the opening square brackets of a C++11\n/// attribute-specifier in a location where an attribute is not permitted, but\n/// we know where the attributes ought to be written. Parse them anyway, and\n/// provide a fixit moving them to the right place.\nvoid Parser::DiagnoseMisplacedCXX11Attribute(ParsedAttributes &Attrs, SourceLocation CorrectLocation) {\n  // ...\n  (Keyword ? Diag(Loc, diag::err_keyword_not_allowed) << Keyword : Diag(Loc, diag::err_attributes_not_allowed)) << FixItHint::CreateInsertionFromRange(CorrectLocation, AttrRange) << FixItHint::CreateRemoval(AttrRange);"},{A,1726,"void Parser::DiagnoseProhibitedAttributes(const ParsedAttributesView &Attrs, const SourceLocation CorrectLocation) {\n  // ...\n  if (CorrectLocation.isValid()) {\n  // ...\n  } else {\n    // ...\n    (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Range.getBegin(), diag::err_keyword_not_allowed) << FirstAttr : Diag(Range.getBegin(), diag::err_attributes_not_allowed)) << Range;"},{A,5052,"/// 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  // An elaborated-type-specifier has a much more constrained grammar:\n  //\n  //  \'enum\' nested-name-specifier[opt] identifier\n  //\n  // If we parsed any other bits, reject them now.\n  //\n  // MSVC and (for now at least) Objective-C permit a full enum-specifier\n  // or opaque-enum-declaration anywhere.\n  if (IsElaboratedTypeSpecifier && !getLangOpts().MicrosoftExt && !getLangOpts().ObjC) {\n    ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{A,6052,"/// ParseTypeQualifierListOpt\n///          type-qualifier-list: [C99 6.7.5]\n///            type-qualifier\n/// [vendor]  attributes\n///              [ only if AttrReqs & AR_VendorAttributesParsed ]\n///            type-qualifier-list type-qualifier\n/// [vendor]  type-qualifier-list attributes\n///              [ only if AttrReqs & AR_VendorAttributesParsed ]\n/// [C++0x]    attribute-specifier[opt] is allowed before cv-qualifier-seq\n///              [ only if AttReqs & AR_CXX11AttributesParsed ]\n/// Note: vendor can be GNU, MS, etc and can be explicitly controlled via\n/// AttrRequirements bitmask values.\nvoid Parser::ParseTypeQualifierListOpt(DeclSpec &DS, unsigned AttrReqs, bool AtomicAllowed, bool IdentifierRequired, std::optional<llvm::function_ref<void()>> CodeCompletionHandler) {\n  // ...\n  while (true) {\n    // ...\n    case tok::kw___attribute:\n      if (AttrReqs & AR_GNUAttributesParsedAndRejected)\n        // ...\n        Diag(Tok, diag::err_attributes_not_allowed);"},{I,777,"/// 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 we had any misplaced attributes from earlier, this is where they\n  // should have been written.\n  if (MisplacedAttrs.Range.isValid()) {\n    // ...\n    (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Range.getBegin(), diag::err_keyword_not_allowed) << FirstAttr : Diag(Range.getBegin(), diag::err_attributes_not_allowed)) << FixItHint::CreateInsertionFromRange(Tok.getLocation(), CharSourceRange::getTokenRange(Range)) << FixItHint::CreateRemoval(Range);"},{I,1932,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  // Forbid misplaced attributes. In cases of a reference, we pass attributes\n  // to caller to handle.\n  if (TUK != Sema::TUK_Reference) {\n    // ...\n    if (AttrRange.isValid()) {\n      // ...\n      (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Loc, diag::err_keyword_not_allowed) << FirstAttr : Diag(Loc, diag::err_attributes_not_allowed)) << AttrRange << FixItHint::CreateInsertionFromRange(AttrFixitLoc, CharSourceRange(AttrRange, true)) << FixItHint::CreateRemoval(AttrRange);"},{I,1979,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  if (TemplateId) {\n    // ...\n    if (TemplateId->isInvalid()) {\n    // ...\n    } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n      // ...\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{I,1996,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  if (TemplateId) {\n    // ...\n    if (TemplateId->isInvalid()) {\n    // ...\n    } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n    // ...\n    } else if (TUK == Sema::TUK_Reference || (TUK == Sema::TUK_Friend && TemplateInfo.Kind == ParsedTemplateInfo::NonTemplate)) {\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{I,2066,"#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    ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{I,2077,"#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    if (TUK != Sema::TUK_Declaration && TUK != Sema::TUK_Definition)\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{I,3060,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  // ...\n  while (true) {\n    // ...\n    if (DS.isFriendSpecified()) {\n      // C++11 [dcl.attr.grammar] p4: If an attribute-specifier-seq appertains\n      // to a friend declaration, that declaration shall be a definition.\n      //\n      // Diagnose attributes that appear in a friend member function declarator:\n      //  friend int foo [[]] ();\n      for (const ParsedAttr &AL : DeclaratorInfo.getAttributes())\n        if (AL.isCXX11Attribute() || AL.isRegularKeywordAttribute()) {\n          // ...\n          (AL.isRegularKeywordAttribute() ? Diag(Loc, diag::err_keyword_not_allowed) << AL : Diag(Loc, diag::err_attributes_not_allowed)) << AL.getRange();"},{I,4664,"void Parser::DiagnoseAndSkipCXX11Attributes() {\n  // ...\n  if (EndLoc.isValid()) {\n    // ...\n    (Keyword ? Diag(StartLoc, diag::err_keyword_not_allowed) << Keyword : Diag(StartLoc, diag::err_attributes_not_allowed)) << Range;"}},
[h]={{B,1683,"/// DiagnoseProhibitedCXX11Attribute - We have found the opening square brackets\n/// of a C++11 attribute-specifier in a location where an attribute is not\n/// permitted. By C++11 [dcl.attr.grammar]p6, this is ill-formed. Diagnose this\n/// situation.\n///\n/// \\return \\c true if we skipped an attribute-like chunk of tokens, \\c false if\n/// this doesn\'t appear to actually be an attribute-specifier, and the caller\n/// should try to parse it.\nbool Parser::DiagnoseProhibitedCXX11Attribute() {\n  // ...\n  case CAK_AttributeSpecifier:\n    // ...\n    Diag(BeginLoc, diag::err_attributes_not_allowed) << SourceRange(BeginLoc, EndLoc);"},{B,1707,"/// We have found the opening square brackets of a C++11\n/// attribute-specifier in a location where an attribute is not permitted, but\n/// we know where the attributes ought to be written. Parse them anyway, and\n/// provide a fixit moving them to the right place.\nvoid Parser::DiagnoseMisplacedCXX11Attribute(ParsedAttributes &Attrs, SourceLocation CorrectLocation) {\n  // ...\n  (Keyword ? Diag(Loc, diag::err_keyword_not_allowed) << Keyword : Diag(Loc, diag::err_attributes_not_allowed)) << FixItHint::CreateInsertionFromRange(CorrectLocation, AttrRange) << FixItHint::CreateRemoval(AttrRange);"},{B,1726,"void Parser::DiagnoseProhibitedAttributes(const ParsedAttributesView &Attrs, const SourceLocation CorrectLocation) {\n  // ...\n  if (CorrectLocation.isValid()) {\n  // ...\n  } else {\n    // ...\n    (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Range.getBegin(), diag::err_keyword_not_allowed) << FirstAttr : Diag(Range.getBegin(), diag::err_attributes_not_allowed)) << Range;"},{B,5052,"/// 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  // An elaborated-type-specifier has a much more constrained grammar:\n  //\n  //  \'enum\' nested-name-specifier[opt] identifier\n  //\n  // If we parsed any other bits, reject them now.\n  //\n  // MSVC and (for now at least) Objective-C permit a full enum-specifier\n  // or opaque-enum-declaration anywhere.\n  if (IsElaboratedTypeSpecifier && !getLangOpts().MicrosoftExt && !getLangOpts().ObjC) {\n    ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{B,6052,"/// ParseTypeQualifierListOpt\n///          type-qualifier-list: [C99 6.7.5]\n///            type-qualifier\n/// [vendor]  attributes\n///              [ only if AttrReqs & AR_VendorAttributesParsed ]\n///            type-qualifier-list type-qualifier\n/// [vendor]  type-qualifier-list attributes\n///              [ only if AttrReqs & AR_VendorAttributesParsed ]\n/// [C++0x]    attribute-specifier[opt] is allowed before cv-qualifier-seq\n///              [ only if AttReqs & AR_CXX11AttributesParsed ]\n/// Note: vendor can be GNU, MS, etc and can be explicitly controlled via\n/// AttrRequirements bitmask values.\nvoid Parser::ParseTypeQualifierListOpt(DeclSpec &DS, unsigned AttrReqs, bool AtomicAllowed, bool IdentifierRequired, std::optional<llvm::function_ref<void()>> CodeCompletionHandler) {\n  // ...\n  while (true) {\n    // ...\n    case tok::kw___attribute:\n      if (AttrReqs & AR_GNUAttributesParsedAndRejected)\n        // ...\n        Diag(Tok, diag::err_attributes_not_allowed);"},{J,777,"/// 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 we had any misplaced attributes from earlier, this is where they\n  // should have been written.\n  if (MisplacedAttrs.Range.isValid()) {\n    // ...\n    (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Range.getBegin(), diag::err_keyword_not_allowed) << FirstAttr : Diag(Range.getBegin(), diag::err_attributes_not_allowed)) << FixItHint::CreateInsertionFromRange(Tok.getLocation(), CharSourceRange::getTokenRange(Range)) << FixItHint::CreateRemoval(Range);"},{J,1932,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  // Forbid misplaced attributes. In cases of a reference, we pass attributes\n  // to caller to handle.\n  if (TUK != Sema::TUK_Reference) {\n    // ...\n    if (AttrRange.isValid()) {\n      // ...\n      (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Loc, diag::err_keyword_not_allowed) << FirstAttr : Diag(Loc, diag::err_attributes_not_allowed)) << AttrRange << FixItHint::CreateInsertionFromRange(AttrFixitLoc, CharSourceRange(AttrRange, true)) << FixItHint::CreateRemoval(AttrRange);"},{J,1979,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  if (TemplateId) {\n    // ...\n    if (TemplateId->isInvalid()) {\n    // ...\n    } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n      // ...\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{J,1996,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  if (TemplateId) {\n    // ...\n    if (TemplateId->isInvalid()) {\n    // ...\n    } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n    // ...\n    } else if (TUK == Sema::TUK_Reference || (TUK == Sema::TUK_Friend && TemplateInfo.Kind == ParsedTemplateInfo::NonTemplate)) {\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{J,2066,"#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    ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{J,2077,"#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    if (TUK != Sema::TUK_Declaration && TUK != Sema::TUK_Definition)\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{J,3060,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///      member-declaration:\n///        decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///        function-definition \';\'[opt]\n///        ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///        using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///        template-declaration\n/// [GNU]  \'__extension__\' member-declaration\n///\n///      member-declarator-list:\n///        member-declarator\n///        member-declarator-list \',\' member-declarator\n///\n///      member-declarator:\n///        declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///        declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///        identifier[opt] \':\' constant-expression\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\n///\n///      virt-specifier:\n///        override\n///        final\n/// [MS]    sealed\n///\n///      pure-specifier:\n///        \'= 0\'\n///\n///      constant-initializer:\n///        \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  // ...\n  while (true) {\n    // ...\n    if (DS.isFriendSpecified()) {\n      // C++11 [dcl.attr.grammar] p4: If an attribute-specifier-seq appertains\n      // to a friend declaration, that declaration shall be a definition.\n      //\n      // Diagnose attributes that appear in a friend member function declarator:\n      //  friend int foo [[]] ();\n      for (const ParsedAttr &AL : DeclaratorInfo.getAttributes())\n        if (AL.isCXX11Attribute() || AL.isRegularKeywordAttribute()) {\n          // ...\n          (AL.isRegularKeywordAttribute() ? Diag(Loc, diag::err_keyword_not_allowed) << AL : Diag(Loc, diag::err_attributes_not_allowed)) << AL.getRange();"},{J,4664,"void Parser::DiagnoseAndSkipCXX11Attributes() {\n  // ...\n  if (EndLoc.isValid()) {\n    // ...\n    (Keyword ? Diag(StartLoc, diag::err_keyword_not_allowed) << Keyword : Diag(StartLoc, diag::err_attributes_not_allowed)) << Range;"}},
[j]={
[j]={
["clang/test/SemaCXX/warn-unused-label-error.cpp"]={"clang/test/SemaCXX/warn-unused-label-error.cpp:15:7: error: an attribute list cannot appear here"}
["clang/test/SemaCXX/warn-unused-label-error.cpp"]={"clang/test/SemaCXX/warn-unused-label-error.cpp:15:7: error: an attribute list cannot appear here"}
Line 4,123: Line 4,125:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:\nhttps://gcc.gnu.org/onlinedocs/gc...","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"},
[b]={"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"},
[h]={{Lb,4868,"/// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)\n///\n/// Note that this is done even if the initializer is dependent. (This is\n/// necessary to support partial ordering of templates using \'auto\'.)\n/// A dependent type will be produced when deducing from a dependent type.\n///\n/// \\param Type the type pattern using the auto type-specifier.\n/// \\param Init the initializer for the variable whose type is to be deduced.\n/// \\param Result if type deduction was successful, this will be set to the\n///        deduced type.\n/// \\param Info the argument will be updated to provide additional information\n///        about template argument deduction.\n/// \\param DependentDeduction Set if we should permit deduction in\n///        dependent cases. This is necessary for template partial ordering with\n///        \'auto\' template parameters. The template parameter depth to be used\n///        should be specified in the \'Info\' parameter.\n/// \\param IgnoreConstraints Set if we should not fail if the deduced type does\n///                          not satisfy the type-constraint in the auto type.\nSema::TemplateDeductionResult Sema::DeduceAutoType(TypeLoc Type, Expr *Init, QualType &Result, TemplateDeductionInfo &Info, bool DependentDeduction, bool IgnoreConstraints, TemplateSpecCandidateSet *FailedTSC) {\n  // ...\n  // If this is a \'decltype(auto)\' specifier, do the decltype dance.\n  if (AT->isDecltypeAuto()) {\n  // ...\n  } else {\n    // ...\n    if (InitList) {\n    // ...\n    } else {\n      if (!getLangOpts().CPlusPlus && Init->refersToBitField()) {\n        Diag(Loc, diag::err_auto_bitfield);"}},
[h]={{Ib,4868,"/// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)\n///\n/// Note that this is done even if the initializer is dependent. (This is\n/// necessary to support partial ordering of templates using \'auto\'.)\n/// A dependent type will be produced when deducing from a dependent type.\n///\n/// \\param Type the type pattern using the auto type-specifier.\n/// \\param Init the initializer for the variable whose type is to be deduced.\n/// \\param Result if type deduction was successful, this will be set to the\n///        deduced type.\n/// \\param Info the argument will be updated to provide additional information\n///        about template argument deduction.\n/// \\param DependentDeduction Set if we should permit deduction in\n///        dependent cases. This is necessary for template partial ordering with\n///        \'auto\' template parameters. The template parameter depth to be used\n///        should be specified in the \'Info\' parameter.\n/// \\param IgnoreConstraints Set if we should not fail if the deduced type does\n///                          not satisfy the type-constraint in the auto type.\nSema::TemplateDeductionResult Sema::DeduceAutoType(TypeLoc Type, Expr *Init, QualType &Result, TemplateDeductionInfo &Info, bool DependentDeduction, bool IgnoreConstraints, TemplateSpecCandidateSet *FailedTSC) {\n  // ...\n  // If this is a \'decltype(auto)\' specifier, do the decltype dance.\n  if (AT->isDecltypeAuto()) {\n  // ...\n  } else {\n    // ...\n    if (InitList) {\n    // ...\n    } else {\n      if (!getLangOpts().CPlusPlus && Init->refersToBitField()) {\n        Diag(Loc, diag::err_auto_bitfield);"}},
[j]={
[j]={
["clang/test/Sema/auto-type.c"]={"clang/test/Sema/auto-type.c:20:40: error: cannot pass bit-field as __auto_type initializer in C"}
["clang/test/Sema/auto-type.c"]={"clang/test/Sema/auto-type.c:20:40: error: cannot pass bit-field as __auto_type initializer in C"}
Line 4,135: Line 4,137:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={Ib,1298171975,T,T},
[b]={Jb,1298171975,Hb,Qb},
[h]={{n,14629,"/// BuildDeclaratorGroup - convert a list of declarations into a declaration\n/// group, performing any necessary semantic checking.\nSema::DeclGroupPtrTy Sema::BuildDeclaratorGroup(MutableArrayRef<Decl *> Group) {\n  // C++14 [dcl.spec.auto]p7: (DR1347)\n  //  If the type that replaces the placeholder type is not the same in each\n  //  deduction, the program is ill-formed.\n  if (Group.size() > 1) {\n    // ...\n    for (unsigned i = 0, e = Group.size(); i != e; ++i) {\n      // ...\n      if (Deduced.isNull()) {\n      // ...\n      } else if (!Context.hasSameType(DT->getDeducedType(), Deduced)) {\n        // ...\n        auto Dia = Diag(D->getTypeSourceInfo()->getTypeLoc().getBeginLoc(), diag::err_auto_different_deductions) << (AT ? (unsigned)AT->getKeyword() : 3) << Deduced << DeducedDecl->getDeclName() << DT->getDeducedType() << D->getDeclName();"}},
[h]={{m,14629,"/// BuildDeclaratorGroup - convert a list of declarations into a declaration\n/// group, performing any necessary semantic checking.\nSema::DeclGroupPtrTy Sema::BuildDeclaratorGroup(MutableArrayRef<Decl *> Group) {\n  // C++14 [dcl.spec.auto]p7: (DR1347)\n  //  If the type that replaces the placeholder type is not the same in each\n  //  deduction, the program is ill-formed.\n  if (Group.size() > 1) {\n    // ...\n    for (unsigned i = 0, e = Group.size(); i != e; ++i) {\n      // ...\n      if (Deduced.isNull()) {\n      // ...\n      } else if (!Context.hasSameType(DT->getDeducedType(), Deduced)) {\n        // ...\n        auto Dia = Diag(D->getTypeSourceInfo()->getTypeLoc().getBeginLoc(), diag::err_auto_different_deductions) << (AT ? (unsigned)AT->getKeyword() : 3) << Deduced << DeducedDecl->getDeclName() << DT->getDeducedType() << D->getDeclName();"}},
[j]={
[j]={
["clang/test/SemaCXX/auto-invalid-init-crash.cpp"]={"clang/test/SemaCXX/auto-invalid-init-crash.cpp:7:1: error: \'auto\' deduced as \'int\' in declaration of \'c\' and deduced as \'std::initializer_list<int>\' in declaration of \'d\'"}
["clang/test/SemaCXX/auto-invalid-init-crash.cpp"]={"clang/test/SemaCXX/auto-invalid-init-crash.cpp:7:1: error: \'auto\' deduced as \'int\' in declaration of \'c\' and deduced as \'std::initializer_list<int>\' in declaration of \'d\'"}
Line 4,147: Line 4,149:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handlin...","[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[b]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.","[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[h]={{t,1533,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  // ...\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (Result != TDK_Success && Result != TDK_AlreadyDiagnosed)\n      return ExprError(Diag(TyBeginLoc, diag::err_auto_expr_deduction_failure) << Ty << Deduce->getType() << FullRange << Deduce->getSourceRange());"}},
[h]={{u,1533,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  // ...\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (Result != TDK_Success && Result != TDK_AlreadyDiagnosed)\n      return ExprError(Diag(TyBeginLoc, diag::err_auto_expr_deduction_failure) << Ty << Deduce->getType() << FullRange << Deduce->getSourceRange());"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp"]={"clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:27:7: error: functional-style cast to \'auto\' has incompatible initializer of type \'<overloaded function type>\'"}
["clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp"]={"clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:27:7: error: functional-style cast to \'auto\' has incompatible initializer of type \'<overloaded function type>\'"}
Line 4,159: Line 4,161:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handlin...","[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[b]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.","[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[h]={{t,1516,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  // ...\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (Inits.size() > 1) {\n      // ...\n      return ExprError(Diag(FirstBad->getBeginLoc(), diag::err_auto_expr_init_multiple_expressions) << Ty << FullRange);"}},
[h]={{u,1516,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  // ...\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (Inits.size() > 1) {\n      // ...\n      return ExprError(Diag(FirstBad->getBeginLoc(), diag::err_auto_expr_init_multiple_expressions) << Ty << FullRange);"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp"]={"clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:29:15: error: initializer for functional-style cast to \'auto\' contains multiple expressions","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:30:15: error: initializer for functional-style cast to \'auto\' contains multiple expressions","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:33:17: error: initializer for functional-style cast to \'auto\' contains multiple expressions","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:34:17: error: initializer for functional-style cast to \'auto\' contains multiple expressions","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:36:15: error: initializer for functional-style cast to \'auto\' contains multiple expressions"}
["clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp"]={"clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:29:15: error: initializer for functional-style cast to \'auto\' contains multiple expressions","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:30:15: error: initializer for functional-style cast to \'auto\' contains multiple expressions","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:33:17: error: initializer for functional-style cast to \'auto\' contains multiple expressions","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:34:17: error: initializer for functional-style cast to \'auto\' contains multiple expressions","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:36:15: error: initializer for functional-style cast to \'auto\' contains multiple expressions"}
Line 4,171: Line 4,173:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handlin...","[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[b]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.","[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[h]={{t,1511,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  // ...\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (Inits.empty())\n      return ExprError(Diag(TyBeginLoc, diag::err_auto_expr_init_no_expression) << Ty << FullRange);"}},
[h]={{u,1511,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  // ...\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (Inits.empty())\n      return ExprError(Diag(TyBeginLoc, diag::err_auto_expr_init_no_expression) << Ty << FullRange);"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp"]={"clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:15:7: error: initializer for functional-style cast to \'auto\' is empty","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:16:7: error: initializer for functional-style cast to \'auto\' is empty"}
["clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp"]={"clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:15:7: error: initializer for functional-style cast to \'auto\' is empty","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:16:7: error: initializer for functional-style cast to \'auto\' is empty"}
Line 4,183: Line 4,185:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handlin...","[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[b]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.","[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[h]={{t,1526,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  // ...\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (isa<InitListExpr>(Deduce))\n      return ExprError(Diag(Deduce->getBeginLoc(), diag::err_auto_expr_init_paren_braces) << ListInitialization << Ty << FullRange);"},{t,2065,"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 (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (isa<InitListExpr>(Deduce))\n      return ExprError(Diag(Deduce->getBeginLoc(), diag::err_auto_expr_init_paren_braces) << Braced << AllocType << TypeRange);"}},
[h]={{u,1526,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  // ...\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (isa<InitListExpr>(Deduce))\n      return ExprError(Diag(Deduce->getBeginLoc(), diag::err_auto_expr_init_paren_braces) << ListInitialization << Ty << FullRange);"},{u,2065,"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 (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (isa<InitListExpr>(Deduce))\n      return ExprError(Diag(Deduce->getBeginLoc(), diag::err_auto_expr_init_paren_braces) << Braced << AllocType << TypeRange);"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp:8:22: error: cannot deduce actual type for \'decltype(auto)\' from parenthesized initializer list","clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp:9:22: error: cannot deduce actual type for \'decltype(auto)\' from parenthesized initializer list"}
["clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp:8:22: error: cannot deduce actual type for \'decltype(auto)\' from parenthesized initializer list","clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp:9:22: error: cannot deduce actual type for \'decltype(auto)\' from parenthesized initializer list"}
Line 4,195: Line 4,197:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={tb,1367650832,Bb,vb},
[b]={yb,1367650832,Ab,Bb},
[h]={{Q,3869,"/// 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    default:\n      Diag(RetExpr->getExprLoc(), diag::err_auto_fn_deduction_failure) << OrigResultType.getType() << RetExpr->getType();"}},
[h]={{R,3869,"/// 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    default:\n      Diag(RetExpr->getExprLoc(), diag::err_auto_fn_deduction_failure) << OrigResultType.getType() << RetExpr->getType();"}},
[j]={
[j]={
["clang/test/SemaCXX/deduced-return-void.cpp"]={"clang/test/SemaCXX/deduced-return-void.cpp:74:10: error: cannot deduce return type \'auto *\' from returned value of type \'void\'","clang/test/SemaCXX/deduced-return-void.cpp:82:10: error: cannot deduce return type \'auto *\' from returned value of type \'void\'","clang/test/SemaCXX/deduced-return-void.cpp:90:10: error: cannot deduce return type \'auto *\' from returned value of type \'void\'","clang/test/SemaCXX/deduced-return-void.cpp:98:10: error: cannot deduce return type \'auto *\' from returned value of type \'void\'"}
["clang/test/SemaCXX/deduced-return-void.cpp"]={"clang/test/SemaCXX/deduced-return-void.cpp:74:10: error: cannot deduce return type \'auto *\' from returned value of type \'void\'","clang/test/SemaCXX/deduced-return-void.cpp:82:10: error: cannot deduce return type \'auto *\' from returned value of type \'void\'","clang/test/SemaCXX/deduced-return-void.cpp:90:10: error: cannot deduce return type \'auto *\' from returned value of type \'void\'","clang/test/SemaCXX/deduced-return-void.cpp:98:10: error: cannot deduce return type \'auto *\' from returned value of type \'void\'"}
Line 4,207: Line 4,209:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={tb,1367650832,Bb,vb},
[b]={yb,1367650832,Ab,Bb},
[h]={{Q,3863,"/// 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      // ...\n      else\n        Diag(ReturnLoc, diag::err_auto_fn_different_deductions) << (AT->isDecltypeAuto() ? 1 : 0) << Info.SecondArg << Info.FirstArg;"}},
[h]={{R,3863,"/// 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      // ...\n      else\n        Diag(ReturnLoc, diag::err_auto_fn_different_deductions) << (AT->isDecltypeAuto() ? 1 : 0) << Info.SecondArg << Info.FirstArg;"}},
[j]={
[j]={
["clang/test/SemaCXX/cxx2b-consteval-if.cpp"]={"clang/test/SemaCXX/cxx2b-consteval-if.cpp:6:19: error: \'auto\' in return type deduced as \'double\' here but deduced as \'int\' in earlier return statement","clang/test/SemaCXX/cxx2b-consteval-if.cpp:11:19: error: \'auto\' in return type deduced as \'double\' here but deduced as \'int\' in earlier return statement","clang/test/SemaCXX/cxx2b-consteval-if.cpp:26:5: error: \'auto\' in return type deduced as \'double\' here but deduced as \'int\' in earlier return statement"}
["clang/test/SemaCXX/cxx2b-consteval-if.cpp"]={"clang/test/SemaCXX/cxx2b-consteval-if.cpp:6:19: error: \'auto\' in return type deduced as \'double\' here but deduced as \'int\' in earlier return statement","clang/test/SemaCXX/cxx2b-consteval-if.cpp:11:19: error: \'auto\' in return type deduced as \'double\' here but deduced as \'int\' in earlier return statement","clang/test/SemaCXX/cxx2b-consteval-if.cpp:26:5: error: \'auto\' in return type deduced as \'double\' here but deduced as \'int\' in earlier return statement"}
Line 4,219: Line 4,221:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={tb,1367650832,Bb,vb},
[b]={yb,1367650832,Ab,Bb},
[h]={{n,15589,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  // ...\n  {\n    // ...\n    if (FD) {\n      // ...\n      if (getLangOpts().CPlusPlus14) {\n        if (!FD->isInvalidDecl() && Body && !FD->isDependentContext() && FD->getReturnType()->isUndeducedType()) {\n          // For a function with a deduced result type to return void,\n          // the result type as written must be \'auto\' or \'decltype(auto)\',\n          // possibly cv-qualified or constrained, but not ref-qualified.\n          if (!FD->getReturnType()->getAs<AutoType>()) {\n            Diag(dcl->getLocation(), diag::err_auto_fn_no_return_but_not_auto) << FD->getReturnType();"}},
[h]={{m,15589,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  // ...\n  {\n    // ...\n    if (FD) {\n      // ...\n      if (getLangOpts().CPlusPlus14) {\n        if (!FD->isInvalidDecl() && Body && !FD->isDependentContext() && FD->getReturnType()->isUndeducedType()) {\n          // For a function with a deduced result type to return void,\n          // the result type as written must be \'auto\' or \'decltype(auto)\',\n          // possibly cv-qualified or constrained, but not ref-qualified.\n          if (!FD->getReturnType()->getAs<AutoType>()) {\n            Diag(dcl->getLocation(), diag::err_auto_fn_no_return_but_not_auto) << FD->getReturnType();"}},
[j]={
[j]={
["clang/test/SemaCXX/deduced-return-void.cpp"]={"clang/test/SemaCXX/deduced-return-void.cpp:69:7: error: cannot deduce return type \'auto *\' for function with no return statements","clang/test/SemaCXX/deduced-return-void.cpp:85:11: error: cannot deduce return type \'auto *\' for function with no return statements","clang/test/SemaCXX/deduced-return-void.cpp:104:7: error: cannot deduce return type \'auto &\' for function with no return statements","clang/test/SemaCXX/deduced-return-void.cpp:122:11: error: cannot deduce return type \'auto &\' for function with no return statements"}
["clang/test/SemaCXX/deduced-return-void.cpp"]={"clang/test/SemaCXX/deduced-return-void.cpp:69:7: error: cannot deduce return type \'auto *\' for function with no return statements","clang/test/SemaCXX/deduced-return-void.cpp:85:11: error: cannot deduce return type \'auto *\' for function with no return statements","clang/test/SemaCXX/deduced-return-void.cpp:104:7: error: cannot deduce return type \'auto &\' for function with no return statements","clang/test/SemaCXX/deduced-return-void.cpp:122:11: error: cannot deduce return type \'auto &\' for function with no return statements"}
Line 4,231: Line 4,233:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={tb,1367650832,Bb,vb},
[b]={yb,1367650832,Ab,Bb},
[h]={{Q,3799,"/// 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  if (RetExpr && isa<InitListExpr>(RetExpr)) {\n    // ...\n    Diag(RetExpr->getExprLoc(), getCurLambda() ? diag::err_lambda_return_init_list : diag::err_auto_fn_return_init_list) << RetExpr->getSourceRange();"}},
[h]={{R,3799,"/// 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  if (RetExpr && isa<InitListExpr>(RetExpr)) {\n    // ...\n    Diag(RetExpr->getExprLoc(), getCurLambda() ? diag::err_lambda_return_init_list : diag::err_auto_fn_return_init_list) << RetExpr->getSourceRange();"}},
[j]={
[j]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp:99:29: error: cannot deduce return type from initializer list","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp:100:39: error: cannot deduce return type from initializer list"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp:99:29: error: cannot deduce return type from initializer list","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp:100:39: error: cannot deduce return type from initializer list"}
Line 4,243: Line 4,245:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={tb,1367650832,Bb,vb},
[b]={yb,1367650832,Ab,Bb},
[h]={{Q,3823,"/// 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  if (!RetExpr) {\n    // For a function with a deduced result type to return with omitted\n    // expression, the result type as written must be \'auto\' or\n    // \'decltype(auto)\', possibly cv-qualified or constrained, but not\n    // ref-qualified.\n    if (!OrigResultType.getType()->getAs<AutoType>()) {\n      Diag(ReturnLoc, diag::err_auto_fn_return_void_but_not_auto) << OrigResultType.getType();"}},
[h]={{R,3823,"/// 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  if (!RetExpr) {\n    // For a function with a deduced result type to return with omitted\n    // expression, the result type as written must be \'auto\' or\n    // \'decltype(auto)\', possibly cv-qualified or constrained, but not\n    // ref-qualified.\n    if (!OrigResultType.getType()->getAs<AutoType>()) {\n      Diag(ReturnLoc, diag::err_auto_fn_return_void_but_not_auto) << OrigResultType.getType();"}},
[j]={
[j]={
["clang/test/SemaCXX/deduced-return-void.cpp"]={"clang/test/SemaCXX/deduced-return-void.cpp:71:3: error: cannot deduce return type \'auto *\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:78:3: error: cannot deduce return type \'auto *\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:87:3: error: cannot deduce return type \'auto *\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:94:3: error: cannot deduce return type \'auto *\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:107:3: error: cannot deduce return type \'auto &\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:114:3: error: cannot deduce return type \'auto &\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:124:3: error: cannot deduce return type \'auto &\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:131:3: error: cannot deduce return type \'auto &\' from omitted return expression"}
["clang/test/SemaCXX/deduced-return-void.cpp"]={"clang/test/SemaCXX/deduced-return-void.cpp:71:3: error: cannot deduce return type \'auto *\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:78:3: error: cannot deduce return type \'auto *\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:87:3: error: cannot deduce return type \'auto *\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:94:3: error: cannot deduce return type \'auto *\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:107:3: error: cannot deduce return type \'auto &\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:114:3: error: cannot deduce return type \'auto &\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:124:3: error: cannot deduce return type \'auto &\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:131:3: error: cannot deduce return type \'auto &\' from omitted return expression"}
Line 4,255: Line 4,257:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={tb,1367650832,Bb,vb},
[b]={yb,1367650832,Ab,Bb},
[h]={{Lb,5038,"bool Sema::DeduceReturnType(FunctionDecl *FD, SourceLocation Loc, bool Diagnose) {\n  // ...\n  if (StillUndeduced && Diagnose && !FD->isInvalidDecl()) {\n    Diag(Loc, diag::err_auto_fn_used_before_defined) << FD;"}},
[h]={{Ib,5038,"bool Sema::DeduceReturnType(FunctionDecl *FD, SourceLocation Loc, bool Diagnose) {\n  // ...\n  if (StillUndeduced && Diagnose && !FD->isInvalidDecl()) {\n    Diag(Loc, diag::err_auto_fn_used_before_defined) << FD;"}},
[j]={
[j]={
["clang/test/SemaCXX/deduced-return-type-cxx14.cpp"]={"clang/test/SemaCXX/deduced-return-type-cxx14.cpp:22:14: error: function \'operator auto\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:97:9: error: function \'fwd_decl\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:98:16: error: function \'fwd_decl\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:108:16: error: function \'fac_2\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:142:11: error: function \'fwd_decl<int>\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:259:14: error: function \'f\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:350:15: error: function \'f\' with deduced return type cannot be used before it is defined"}
["clang/test/SemaCXX/deduced-return-type-cxx14.cpp"]={"clang/test/SemaCXX/deduced-return-type-cxx14.cpp:22:14: error: function \'operator auto\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:97:9: error: function \'fwd_decl\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:98:16: error: function \'fwd_decl\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:108:16: error: function \'fac_2\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:142:11: error: function \'fwd_decl<int>\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:259:14: error: function \'f\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:350:15: error: function \'f\' with deduced return type cannot be used before it is defined"}
Line 4,267: Line 4,269:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={tb,1367650832,Bb,vb},
[b]={yb,1367650832,Ab,Bb},
[h]={{n,9898,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    // C++ [dcl.fct.spec]p5:\n    //  The virtual specifier shall only be used in declarations of\n    //  nonstatic class member functions that appear within a\n    //  member-specification of a class declaration; see 10.3.\n    //\n    if (isVirtual && !NewFD->isInvalidDecl()) {\n      // ...\n      if (getLangOpts().CPlusPlus14 && NewFD->getReturnType()->isUndeducedType())\n        Diag(D.getDeclSpec().getVirtualSpecLoc(), diag::err_auto_fn_virtual);"}},
[h]={{m,9898,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    // C++ [dcl.fct.spec]p5:\n    //  The virtual specifier shall only be used in declarations of\n    //  nonstatic class member functions that appear within a\n    //  member-specification of a class declaration; see 10.3.\n    //\n    if (isVirtual && !NewFD->isInvalidDecl()) {\n      // ...\n      if (getLangOpts().CPlusPlus14 && NewFD->getReturnType()->isUndeducedType())\n        Diag(D.getDeclSpec().getVirtualSpecLoc(), diag::err_auto_fn_virtual);"}},
[j]={
[j]={
["clang/test/SemaCXX/deduced-return-type-cxx14.cpp"]={"clang/test/SemaCXX/deduced-return-type-cxx14.cpp:313:5: error: function with deduced return type cannot be virtual","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:324:14: error: function with deduced return type cannot be virtual","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:325:18: error: function with deduced return type cannot be virtual"}
["clang/test/SemaCXX/deduced-return-type-cxx14.cpp"]={"clang/test/SemaCXX/deduced-return-type-cxx14.cpp:313:5: error: function with deduced return type cannot be virtual","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:324:14: error: function with deduced return type cannot be virtual","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:325:18: error: function with deduced return type cannot be virtual"}
Line 4,280: Line 4,282:
[g]=k,
[g]=k,
[b]={"b1efc9b410ea",1504053848,"Give a better error if auto deduction fails due to inconsistent element types in a braced initialize...","Give a better error if auto deduction fails due to inconsistent element types in a braced initializer list.\n\nllvm-svn: 312085"},
[b]={"b1efc9b410ea",1504053848,"Give a better error if auto deduction fails due to inconsistent element types in a braced initialize...","Give a better error if auto deduction fails due to inconsistent element types in a braced initializer list.\n\nllvm-svn: 312085"},
[h]={{Lb,4854,"/// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)\n///\n/// Note that this is done even if the initializer is dependent. (This is\n/// necessary to support partial ordering of templates using \'auto\'.)\n/// A dependent type will be produced when deducing from a dependent type.\n///\n/// \\param Type the type pattern using the auto type-specifier.\n/// \\param Init the initializer for the variable whose type is to be deduced.\n/// \\param Result if type deduction was successful, this will be set to the\n///        deduced type.\n/// \\param Info the argument will be updated to provide additional information\n///        about template argument deduction.\n/// \\param DependentDeduction Set if we should permit deduction in\n///        dependent cases. This is necessary for template partial ordering with\n///        \'auto\' template parameters. The template parameter depth to be used\n///        should be specified in the \'Info\' parameter.\n/// \\param IgnoreConstraints Set if we should not fail if the deduced type does\n///                          not satisfy the type-constraint in the auto type.\nSema::TemplateDeductionResult Sema::DeduceAutoType(TypeLoc Type, Expr *Init, QualType &Result, TemplateDeductionInfo &Info, bool DependentDeduction, bool IgnoreConstraints, TemplateSpecCandidateSet *FailedTSC) {\n  // ...\n  // If this is a \'decltype(auto)\' specifier, do the decltype dance.\n  if (AT->isDecltypeAuto()) {\n  // ...\n  } else {\n    // ...\n    if (InitList) {\n      // ...\n      for (Expr *Init : InitList->inits()) {\n        // ...\n        if (auto TDK = DeduceTemplateArgumentsFromCallArgument(*this, TemplateParamsSt.get(), 0, TemplArg, Init, Info, Deduced, OriginalCallArgs, /*Decomposed=*/true,\n          // ...\n          if (TDK == TDK_Inconsistent) {\n            Diag(Info.getLocation(), diag::err_auto_inconsistent_deduction) << Info.FirstArg << Info.SecondArg << DeducedFromInitRange << Init->getSourceRange();"}},
[h]={{Ib,4854,"/// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)\n///\n/// Note that this is done even if the initializer is dependent. (This is\n/// necessary to support partial ordering of templates using \'auto\'.)\n/// A dependent type will be produced when deducing from a dependent type.\n///\n/// \\param Type the type pattern using the auto type-specifier.\n/// \\param Init the initializer for the variable whose type is to be deduced.\n/// \\param Result if type deduction was successful, this will be set to the\n///        deduced type.\n/// \\param Info the argument will be updated to provide additional information\n///        about template argument deduction.\n/// \\param DependentDeduction Set if we should permit deduction in\n///        dependent cases. This is necessary for template partial ordering with\n///        \'auto\' template parameters. The template parameter depth to be used\n///        should be specified in the \'Info\' parameter.\n/// \\param IgnoreConstraints Set if we should not fail if the deduced type does\n///                          not satisfy the type-constraint in the auto type.\nSema::TemplateDeductionResult Sema::DeduceAutoType(TypeLoc Type, Expr *Init, QualType &Result, TemplateDeductionInfo &Info, bool DependentDeduction, bool IgnoreConstraints, TemplateSpecCandidateSet *FailedTSC) {\n  // ...\n  // If this is a \'decltype(auto)\' specifier, do the decltype dance.\n  if (AT->isDecltypeAuto()) {\n  // ...\n  } else {\n    // ...\n    if (InitList) {\n      // ...\n      for (Expr *Init : InitList->inits()) {\n        // ...\n        if (auto TDK = DeduceTemplateArgumentsFromCallArgument(*this, TemplateParamsSt.get(), 0, TemplArg, Init, Info, Deduced, OriginalCallArgs, /*Decomposed=*/true,\n          // ...\n          if (TDK == TDK_Inconsistent) {\n            Diag(Info.getLocation(), diag::err_auto_inconsistent_deduction) << Info.FirstArg << Info.SecondArg << DeducedFromInitRange << Init->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:139:13: error: deduced conflicting types (\'int\' vs \'double\') for initializer list element type","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:144:13: error: deduced conflicting types (\'void (*)(int)\' vs \'void (*)(float)\') for initializer list element type","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:147:16: error: deduced conflicting types (\'double\' vs \'float\') for initializer list element type"}
["clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:139:13: error: deduced conflicting types (\'int\' vs \'double\') for initializer list element type","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:144:13: error: deduced conflicting types (\'void (*)(int)\' vs \'void (*)(float)\') for initializer list element type","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:147:16: error: deduced conflicting types (\'double\' vs \'float\') for initializer list element type"}
Line 4,291: Line 4,293:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:\nhttps://gcc.gnu.org/onlinedocs/gc...","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"},
[b]={"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"},
[h]={{Lb,4791,"/// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)\n///\n/// Note that this is done even if the initializer is dependent. (This is\n/// necessary to support partial ordering of templates using \'auto\'.)\n/// A dependent type will be produced when deducing from a dependent type.\n///\n/// \\param Type the type pattern using the auto type-specifier.\n/// \\param Init the initializer for the variable whose type is to be deduced.\n/// \\param Result if type deduction was successful, this will be set to the\n///        deduced type.\n/// \\param Info the argument will be updated to provide additional information\n///        about template argument deduction.\n/// \\param DependentDeduction Set if we should permit deduction in\n///        dependent cases. This is necessary for template partial ordering with\n///        \'auto\' template parameters. The template parameter depth to be used\n///        should be specified in the \'Info\' parameter.\n/// \\param IgnoreConstraints Set if we should not fail if the deduced type does\n///                          not satisfy the type-constraint in the auto type.\nSema::TemplateDeductionResult Sema::DeduceAutoType(TypeLoc Type, Expr *Init, QualType &Result, TemplateDeductionInfo &Info, bool DependentDeduction, bool IgnoreConstraints, TemplateSpecCandidateSet *FailedTSC) {\n  // ...\n  if (!getLangOpts().CPlusPlus && InitList) {\n    Diag(Init->getBeginLoc(), diag::err_auto_init_list_from_c);"}}
[h]={{Ib,4791,"/// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)\n///\n/// Note that this is done even if the initializer is dependent. (This is\n/// necessary to support partial ordering of templates using \'auto\'.)\n/// A dependent type will be produced when deducing from a dependent type.\n///\n/// \\param Type the type pattern using the auto type-specifier.\n/// \\param Init the initializer for the variable whose type is to be deduced.\n/// \\param Result if type deduction was successful, this will be set to the\n///        deduced type.\n/// \\param Info the argument will be updated to provide additional information\n///        about template argument deduction.\n/// \\param DependentDeduction Set if we should permit deduction in\n///        dependent cases. This is necessary for template partial ordering with\n///        \'auto\' template parameters. The template parameter depth to be used\n///        should be specified in the \'Info\' parameter.\n/// \\param IgnoreConstraints Set if we should not fail if the deduced type does\n///                          not satisfy the type-constraint in the auto type.\nSema::TemplateDeductionResult Sema::DeduceAutoType(TypeLoc Type, Expr *Init, QualType &Result, TemplateDeductionInfo &Info, bool DependentDeduction, bool IgnoreConstraints, TemplateSpecCandidateSet *FailedTSC) {\n  // ...\n  if (!getLangOpts().CPlusPlus && InitList) {\n    Diag(Init->getBeginLoc(), diag::err_auto_init_list_from_c);"}}
},
},
["err_auto_missing_trailing_return"]={
["err_auto_missing_trailing_return"]={
Line 4,300: Line 4,302:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"7fb25418ed72",1285958690,"Implement the C++0x \"trailing return type\" feature, e.g.,\n\n  auto f(int) -> int\n\nfrom Daniel Wallin!...","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"},
[b]={"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"},
[h]={{o,5198,"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          if (!S.getLangOpts().CPlusPlus14) {\n            S.Diag(D.getDeclSpec().getTypeSpecTypeLoc(), D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_auto ? diag::err_auto_missing_trailing_return : diag::err_deduced_return_type);"}},
[h]={{n,5198,"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          if (!S.getLangOpts().CPlusPlus14) {\n            S.Diag(D.getDeclSpec().getTypeSpecTypeLoc(), D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_auto ? diag::err_auto_missing_trailing_return : diag::err_deduced_return_type);"}},
[j]={
[j]={
["clang/test/ParserHLSL/group_shared_202x.hlsl"]={"clang/test/ParserHLSL/group_shared_202x.hlsl:21:1: error: \'auto\' return without trailing return type; deduced return types are a C++14 extension"}
["clang/test/ParserHLSL/group_shared_202x.hlsl"]={"clang/test/ParserHLSL/group_shared_202x.hlsl:21:1: error: \'auto\' return without trailing return type; deduced return types are a C++14 extension"}
Line 4,312: Line 4,314:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={Ib,1298171975,T,T},
[b]={Jb,1298171975,Hb,Qb},
[h]={{t,2056,"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 (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (Inits.size() > 1) {\n      // ...\n      return ExprError(Diag(FirstBad->getBeginLoc(), diag::err_auto_new_ctor_multiple_expressions) << AllocType << TypeRange);"}},
[h]={{u,2056,"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 (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (Inits.size() > 1) {\n      // ...\n      return ExprError(Diag(FirstBad->getBeginLoc(), diag::err_auto_new_ctor_multiple_expressions) << AllocType << TypeRange);"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp:6:16: error: new expression for type \'auto\' contains multiple constructor arguments"}
["clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp:6:16: error: new expression for type \'auto\' contains multiple constructor arguments"}
Line 4,324: Line 4,326:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={Ib,1298171975,T,T},
[b]={Jb,1298171975,Hb,Qb},
[h]={{t,2072,"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 (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (Result != TDK_Success && Result != TDK_AlreadyDiagnosed)\n      return ExprError(Diag(StartLoc, diag::err_auto_new_deduction_failure) << AllocType << Deduce->getType() << TypeRange << Deduce->getSourceRange());"}},
[h]={{u,2072,"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 (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (Result != TDK_Success && Result != TDK_AlreadyDiagnosed)\n      return ExprError(Diag(StartLoc, diag::err_auto_new_deduction_failure) << AllocType << Deduce->getType() << TypeRange << Deduce->getSourceRange());"}},
[j]={
[j]={
["clang/test/SemaCXX/auto-subst-failure.cpp"]={"clang/test/SemaCXX/auto-subst-failure.cpp:14:9: error: new expression for type \'auto *\' has incompatible constructor argument of type \'void\'"}
["clang/test/SemaCXX/auto-subst-failure.cpp"]={"clang/test/SemaCXX/auto-subst-failure.cpp:14:9: error: new expression for type \'auto *\' has incompatible constructor argument of type \'void\'"}
Line 4,336: Line 4,338:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={Ib,1298171975,T,T},
[b]={Jb,1298171975,Hb,Qb},
[h]={{t,2051,"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 (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (initStyle == CXXNewExpr::NoInit || Inits.empty())\n      return ExprError(Diag(StartLoc, diag::err_auto_new_requires_ctor_arg) << AllocType << TypeRange);"}},
[h]={{u,2051,"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 (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (initStyle == CXXNewExpr::NoInit || Inits.empty())\n      return ExprError(Diag(StartLoc, diag::err_auto_new_requires_ctor_arg) << AllocType << TypeRange);"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp:7:3: error: new expression for type \'auto\' requires a constructor argument"}
["clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp:7:3: error: new expression for type \'auto\' requires a constructor argument"}
Line 4,348: Line 4,350:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"8210ed558662",1484274121,"Implement DR1265 (wg21.link/cwg1265).\n\nDiasllow a declaration using the \'auto\' type specifier from u...","Implement DR1265 (wg21.link/cwg1265).\n\nDiasllow a declaration using the \'auto\' type specifier from using two different\nmeanings of it at once, or from declaring multiple functions with deduced\nreturn types or introducing multiple trailing return types.\n\nThe standard does not technically disallow the multiple trailing return types\ncase if all the declarators declare variables (such as function pointers with\ntrailing return types), but we disallow that too, following the clear intent.\n\nllvm-svn: 291880"},
[b]={"8210ed558662",1484274121,"Implement DR1265 (wg21.link/cwg1265).","Implement DR1265 (wg21.link/cwg1265).\n\nDiasllow a declaration using the \'auto\' type specifier from using two different\nmeanings of it at once, or from declaring multiple functions with deduced\nreturn types or introducing multiple trailing return types.\n\nThe standard does not technically disallow the multiple trailing return types\ncase if all the declarators declare variables (such as function pointers with\ntrailing return types), but we disallow that too, following the clear intent.\n\nllvm-svn: 291880"},
[h]={{n,14580,"Sema::DeclGroupPtrTy Sema::FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS, ArrayRef<Decl *> Group) {\n  // ...\n  for (unsigned i = 0, e = Group.size(); i != e; ++i) {\n    if (Decl *D = Group[i]) {\n      // ...\n      // For declarators, there are some additional syntactic-ish checks we need\n      // to perform.\n      if (auto *DD = dyn_cast<DeclaratorDecl>(D)) {\n        // ...\n        if (FirstDeclaratorInGroup != DD) {\n          // ...\n          // A declarator that uses \'auto\' in any way other than to declare a\n          // variable with a deduced type cannot be combined with any other\n          // declarator in the same group.\n          if (FirstNonDeducedAutoInGroup && !DiagnosedNonDeducedAuto) {\n            Diag(FirstNonDeducedAutoInGroup->getLocation(), diag::err_auto_non_deduced_not_alone) << FirstNonDeducedAutoInGroup->getType()->hasAutoForTrailingReturnType() << FirstDeclaratorInGroup->getSourceRange() << DD->getSourceRange();"}},
[h]={{m,14580,"Sema::DeclGroupPtrTy Sema::FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS, ArrayRef<Decl *> Group) {\n  // ...\n  for (unsigned i = 0, e = Group.size(); i != e; ++i) {\n    if (Decl *D = Group[i]) {\n      // ...\n      // For declarators, there are some additional syntactic-ish checks we need\n      // to perform.\n      if (auto *DD = dyn_cast<DeclaratorDecl>(D)) {\n        // ...\n        if (FirstDeclaratorInGroup != DD) {\n          // ...\n          // A declarator that uses \'auto\' in any way other than to declare a\n          // variable with a deduced type cannot be combined with any other\n          // declarator in the same group.\n          if (FirstNonDeducedAutoInGroup && !DiagnosedNonDeducedAuto) {\n            Diag(FirstNonDeducedAutoInGroup->getLocation(), diag::err_auto_non_deduced_not_alone) << FirstNonDeducedAutoInGroup->getType()->hasAutoForTrailingReturnType() << FirstDeclaratorInGroup->getSourceRange() << DD->getSourceRange();"}},
[j]={
[j]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp:25:10: error: declaration with trailing return type must be the only declaration in its group","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp:28:8: error: declaration with trailing return type must be the only declaration in its group","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp:30:8: error: declaration with trailing return type must be the only declaration in its group","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp:41:15: error: declaration with trailing return type must be the only declaration in its group"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp:25:10: error: declaration with trailing return type must be the only declaration in its group","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp:28:8: error: declaration with trailing return type must be the only declaration in its group","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp:30:8: error: declaration with trailing return type must be the only declaration in its group","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp:41:15: error: declaration with trailing return type must be the only declaration in its group"}
Line 4,360: Line 4,362:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"94ff77a356a7",1246054739,"More auto work.\n\nllvm-svn: 74339","More auto work.\n\nllvm-svn: 74339"},
[b]={"94ff77a356a7",1246054739,"More auto work.","More auto work.\n\nllvm-svn: 74339"},
[h]={{o,3735,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  // ...\n  // C++11 [dcl.spec.auto]p5: reject \'auto\' if it is not in an allowed context.\n  if (Deduced) {\n    // ...\n    if (Error != -1) {\n      // ...\n      SemaRef.Diag(AutoRange.getBegin(), diag::err_auto_not_allowed) << Kind << Error << (int)SemaRef.getTemplateNameKindForDiagnostics(TN) << QualType(Deduced, 0) << AutoRange;"}},
[h]={{n,3735,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  // ...\n  // C++11 [dcl.spec.auto]p5: reject \'auto\' if it is not in an allowed context.\n  if (Deduced) {\n    // ...\n    if (Error != -1) {\n      // ...\n      SemaRef.Diag(AutoRange.getBegin(), diag::err_auto_not_allowed) << Kind << Error << (int)SemaRef.getTemplateNameKindForDiagnostics(TN) << QualType(Deduced, 0) << AutoRange;"}},
[j]={
[j]={
["clang/test/Sema/auto-type.c"]={"clang/test/Sema/auto-type.c:12:12: error: \'__auto_type\' not allowed in struct member","clang/test/Sema/auto-type.c:16:1: error: \'__auto_type\' not allowed in function return type","clang/test/Sema/auto-type.c:25:1: error: \'__auto_type\' not allowed in K&R-style function parameter","clang/test/Sema/auto-type.c:39:11: error: \'__auto_type\' not allowed here"}
["clang/test/Sema/auto-type.c"]={"clang/test/Sema/auto-type.c:12:12: error: \'__auto_type\' not allowed in struct member","clang/test/Sema/auto-type.c:16:1: error: \'__auto_type\' not allowed in function return type","clang/test/Sema/auto-type.c:25:1: error: \'__auto_type\' not allowed in K&R-style function parameter","clang/test/Sema/auto-type.c:39:11: error: \'__auto_type\' not allowed here"}
Line 4,373: Line 4,375:
[g]=k,
[g]=k,
[b]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som...","Started implementing variable templates. Top level declarations should be fully supported, up to some limitations documented as FIXMEs or TODO. Static data member templates work very partially. Static data member templates of class templates need particular attention...\n\nllvm-svn: 187762"},
[b]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som...","Started implementing variable templates. Top level declarations should be fully supported, up to some limitations documented as FIXMEs or TODO. Static data member templates work very partially. Static data member templates of class templates need particular attention...\n\nllvm-svn: 187762"},
[h]={{Yb,10482,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  // ...\n  if (!R->isFunctionType()) {\n    // ...\n    if (!PrevTemplate) {\n    // ...\n    } else {\n      // ...\n      // C++1y [dcl.spec.auto]p6:\n      //  ... A program that uses auto or decltype(auto) in a context not\n      //  explicitly allowed in this section is ill-formed.\n      //\n      // This includes auto-typed variable template instantiations.\n      if (R->isUndeducedType()) {\n        Diag(T->getTypeLoc().getBeginLoc(), diag::err_auto_not_allowed_var_inst);"}},
[h]={{ac,10482,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  // ...\n  if (!R->isFunctionType()) {\n    // ...\n    if (!PrevTemplate) {\n    // ...\n    } else {\n      // ...\n      // C++1y [dcl.spec.auto]p6:\n      //  ... A program that uses auto or decltype(auto) in a context not\n      //  explicitly allowed in this section is ill-formed.\n      //\n      // This includes auto-typed variable template instantiations.\n      if (R->isUndeducedType()) {\n        Diag(T->getTypeLoc().getBeginLoc(), diag::err_auto_not_allowed_var_inst);"}},
[j]={
[j]={
["clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp"]={"clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:161:14: error: \'auto\' variable template instantiation is not allowed"}
["clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp"]={"clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:161:14: error: \'auto\' variable template instantiation is not allowed"}
Line 4,384: Line 4,386:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={Ib,1298171975,T,T},
[b]={Jb,1298171975,Hb,Qb},
[h]={{Lb,4977,"void Sema::DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init) {\n  if (isa<InitListExpr>(Init))\n  // ...\n  else\n    Diag(VDecl->getLocation(), VDecl->isInitCapture() ? diag::err_init_capture_deduction_failure : diag::err_auto_var_deduction_failure) << VDecl->getDeclName() << VDecl->getType() << Init->getType() << Init->getSourceRange();"}},
[h]={{Ib,4977,"void Sema::DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init) {\n  if (isa<InitListExpr>(Init))\n  // ...\n  else\n    Diag(VDecl->getLocation(), VDecl->isInitCapture() ? diag::err_init_capture_deduction_failure : diag::err_auto_var_deduction_failure) << VDecl->getDeclName() << VDecl->getType() << Init->getType() << Init->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCXX/auto-subst-failure.cpp"]={"clang/test/SemaCXX/auto-subst-failure.cpp:6:9: error: variable \'c\' with type \'auto *\' has incompatible initializer of type \'void\'","clang/test/SemaCXX/auto-subst-failure.cpp:10:9: error: variable \'g\' with type \'auto *\' has incompatible initializer of type \'void\'"}
["clang/test/SemaCXX/auto-subst-failure.cpp"]={"clang/test/SemaCXX/auto-subst-failure.cpp:6:9: error: variable \'c\' with type \'auto *\' has incompatible initializer of type \'void\'","clang/test/SemaCXX/auto-subst-failure.cpp:10:9: error: variable \'g\' with type \'auto *\' has incompatible initializer of type \'void\'"}
Line 4,397: Line 4,399:
[g]=k,
[g]=k,
[b]={"42acd4a05b52",1326840608,"Auto deduction support for std::initializer_list, including for-range support. This means you can no...","Auto deduction support for std::initializer_list, including for-range support. This means you can now write:\n\nfor (int i : {1, 4, 512, 23, 251}) {}\n\nllvm-svn: 148353"},
[b]={"42acd4a05b52",1326840608,"Auto deduction support for std::initializer_list, including for-range support. This means you can no...","Auto deduction support for std::initializer_list, including for-range support. This means you can now write:\n\nfor (int i : {1, 4, 512, 23, 251}) {}\n\nllvm-svn: 148353"},
[h]={{Lb,4972,"void Sema::DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init) {\n  if (isa<InitListExpr>(Init))\n    Diag(VDecl->getLocation(), VDecl->isInitCapture() ? diag::err_init_capture_deduction_failure_from_init_list : diag::err_auto_var_deduction_failure_from_init_list) << VDecl->getDeclName() << VDecl->getType() << Init->getSourceRange();"}},
[h]={{Ib,4972,"void Sema::DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init) {\n  if (isa<InitListExpr>(Init))\n    Diag(VDecl->getLocation(), VDecl->isInitCapture() ? diag::err_init_capture_deduction_failure_from_init_list : diag::err_auto_var_deduction_failure_from_init_list) << VDecl->getDeclName() << VDecl->getType() << Init->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:352:12: error: cannot deduce actual type for variable \'x\' with type \'auto no_conversion_after_auto_list_deduction::X::*\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:355:10: error: cannot deduce actual type for variable \'y\' with type \'auto (*)()\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:359:18: error: cannot deduce actual type for variable \'a\' with type \'const auto\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:360:18: error: cannot deduce actual type for variable \'b\' with type \'const auto\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:361:18: error: cannot deduce actual type for variable \'c\' with type \'const auto\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:362:18: error: cannot deduce actual type for variable \'d\' with type \'const auto\' from initializer list"}
["clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:352:12: error: cannot deduce actual type for variable \'x\' with type \'auto no_conversion_after_auto_list_deduction::X::*\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:355:10: error: cannot deduce actual type for variable \'y\' with type \'auto (*)()\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:359:18: error: cannot deduce actual type for variable \'a\' with type \'const auto\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:360:18: error: cannot deduce actual type for variable \'b\' with type \'const auto\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:361:18: error: cannot deduce actual type for variable \'c\' with type \'const auto\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:362:18: error: cannot deduce actual type for variable \'d\' with type \'const auto\' from initializer list"}
Line 4,408: Line 4,410:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={Ib,1298171975,T,T},
[b]={Jb,1298171975,Hb,Qb},
[h]={{n,12740,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  if (DeduceInits.size() > 1) {\n    Diag(DeduceInits[1]->getBeginLoc(), IsInitCapture ? diag::err_init_capture_multiple_expressions : diag::err_auto_var_init_multiple_expressions) << VN << Type << Range;"}},
[h]={{m,12740,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  if (DeduceInits.size() > 1) {\n    Diag(DeduceInits[1]->getBeginLoc(), IsInitCapture ? diag::err_init_capture_multiple_expressions : diag::err_auto_var_init_multiple_expressions) << VN << Type << Range;"}},
[j]={
[j]={
["clang/test/SemaCXX/dependent-auto.cpp"]={"clang/test/SemaCXX/dependent-auto.cpp:11:10: error: initializer for variable \'x\' with type \'auto\' contains multiple expressions"}
["clang/test/SemaCXX/dependent-auto.cpp"]={"clang/test/SemaCXX/dependent-auto.cpp:11:10: error: initializer for variable \'x\' with type \'auto\' contains multiple expressions"}
Line 4,421: Line 4,423:
[g]=k,
[g]=k,
[b]={"de30e523b40d",1325802848,"Tweak the fix to PR8977: an empty expression-list represents value initialization, not default initi...","Tweak the fix to PR8977: an empty expression-list represents value initialization, not default initialization.  Fixes PR11712.\n\nllvm-svn: 147620"},
[b]={"de30e523b40d",1325802848,"Tweak the fix to PR8977: an empty expression-list represents value initialization, not default initi...","Tweak the fix to PR8977: an empty expression-list represents value initialization, not default initialization.  Fixes PR11712.\n\nllvm-svn: 147620"},
[h]={{n,12732,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  // Deduction only works if we have exactly one source expression.\n  if (DeduceInits.empty()) {\n    // ...\n    Diag(Init->getBeginLoc(), IsInitCapture ? diag::err_init_capture_no_expression : diag::err_auto_var_init_no_expression) << VN << Type << Range;"}},
[h]={{m,12732,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  // Deduction only works if we have exactly one source expression.\n  if (DeduceInits.empty()) {\n    // ...\n    Diag(Init->getBeginLoc(), IsInitCapture ? diag::err_init_capture_no_expression : diag::err_auto_var_init_no_expression) << VN << Type << Range;"}},
[j]={
[j]={
["clang/test/SemaCXX/dependent-auto.cpp"]={"clang/test/SemaCXX/dependent-auto.cpp:11:9: error: initializer for variable \'x\' with type \'auto\' is empty"}
["clang/test/SemaCXX/dependent-auto.cpp"]={"clang/test/SemaCXX/dependent-auto.cpp:11:9: error: initializer for variable \'x\' with type \'auto\' is empty"}
Line 4,432: Line 4,434:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"66204ecff985",1394646165,"DR1346: a parenthesized braced-init-list cannot be used as the initializer when\nperforming auto type...","DR1346: a parenthesized braced-init-list cannot be used as the initializer when\nperforming auto type deduction.\n\nllvm-svn: 203683"},
[b]={"66204ecff985",1394646165,"DR1346: a parenthesized braced-init-list cannot be used as the initializer when","DR1346: a parenthesized braced-init-list cannot be used as the initializer when\nperforming auto type deduction.\n\nllvm-svn: 203683"},
[h]={{n,12749,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  if (DirectInit && isa<InitListExpr>(DeduceInit)) {\n    Diag(Init->getBeginLoc(), IsInitCapture ? diag::err_init_capture_paren_braces : diag::err_auto_var_init_paren_braces) << isa<InitListExpr>(Init) << VN << Type << Range;"}},
[h]={{m,12749,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  if (DirectInit && isa<InitListExpr>(DeduceInit)) {\n    Diag(Init->getBeginLoc(), IsInitCapture ? diag::err_init_capture_paren_braces : diag::err_auto_var_init_paren_braces) << isa<InitListExpr>(Init) << VN << Type << Range;"}},
[j]={
[j]={
["clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:217:10: error: cannot deduce type for variable \'x\' with type \'auto\' from nested initializer list"}
["clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:217:10: error: cannot deduce type for variable \'x\' with type \'auto\' from nested initializer list"}
Line 4,445: Line 4,447:
[g]=k,
[g]=k,
[b]={"ae01993a12d6",1247272479,"Implement more of C++0x \'auto\'. A variable with an auto type specifier must have an initializer. Als...","Implement more of C++0x \'auto\'. A variable with an auto type specifier must have an initializer. Also, move some tests around to match the C++0x draft better.\n\nllvm-svn: 75322"},
[b]={"ae01993a12d6",1247272479,"Implement more of C++0x \'auto\'. A variable with an auto type specifier must have an initializer. Als...","Implement more of C++0x \'auto\'. A variable with an auto type specifier must have an initializer. Also, move some tests around to match the C++0x draft better.\n\nllvm-svn: 75322"},
[h]={{n,12696,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  // C++11 [dcl.spec.auto]p3\n  if (!Init) {\n    // ...\n    // Except for class argument deduction, and then for an initializing\n    // declaration only, i.e. no static at class scope or extern.\n    if (!isa<DeducedTemplateSpecializationType>(Deduced) || VDecl->hasExternalStorage() || VDecl->isStaticDataMember()) {\n      Diag(VDecl->getLocation(), diag::err_auto_var_requires_init) << VDecl->getDeclName() << Type;"}},
[h]={{m,12696,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  // C++11 [dcl.spec.auto]p3\n  if (!Init) {\n    // ...\n    // Except for class argument deduction, and then for an initializing\n    // declaration only, i.e. no static at class scope or extern.\n    if (!isa<DeducedTemplateSpecializationType>(Deduced) || VDecl->hasExternalStorage() || VDecl->isStaticDataMember()) {\n      Diag(VDecl->getLocation(), diag::err_auto_var_requires_init) << VDecl->getDeclName() << Type;"}},
[j]={
[j]={
["clang/test/SemaCXX/crash-auto-36064.cpp"]={"clang/test/SemaCXX/crash-auto-36064.cpp:5:15: error: declaration of variable \'c\' with deduced type \'auto\' requires an initializer"}
["clang/test/SemaCXX/crash-auto-36064.cpp"]={"clang/test/SemaCXX/crash-auto-36064.cpp:5:15: error: declaration of variable \'c\' with deduced type \'auto\' requires an initializer"}
Line 4,456: Line 4,458:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"364035d1a821",1246043767,"An auto variable can\'t appear in its own initializer.\n\nllvm-svn: 74312","An auto variable can\'t appear in its own initializer.\n\nllvm-svn: 74312"},
[b]={"364035d1a821",1246043767,"An auto variable can\'t appear in its own initializer.","An auto variable can\'t appear in its own initializer.\n\nllvm-svn: 74312"},
[h]={{u,260,"/// 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  // See if this is an auto-typed variable whose initializer we are parsing.\n  if (ParsingInitForAutoVars.count(D)) {\n    if (isa<BindingDecl>(D)) {\n    // ...\n    } else {\n      Diag(Loc, diag::err_auto_variable_cannot_appear_in_own_initializer) << D->getDeclName() << cast<VarDecl>(D)->getType();"}},
[h]={{v,260,"/// 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  // See if this is an auto-typed variable whose initializer we are parsing.\n  if (ParsingInitForAutoVars.count(D)) {\n    if (isa<BindingDecl>(D)) {\n    // ...\n    } else {\n      Diag(Loc, diag::err_auto_variable_cannot_appear_in_own_initializer) << D->getDeclName() << cast<VarDecl>(D)->getType();"}},
[j]={
[j]={
["clang/test/Sema/auto-type.c"]={"clang/test/Sema/auto-type.c:10:17: error: variable \'e\' declared with deduced type \'__auto_type\' cannot appear in its own initializer"}
["clang/test/Sema/auto-type.c"]={"clang/test/Sema/auto-type.c:10:17: error: variable \'e\' declared with deduced type \'__auto_type\' cannot appear in its own initializer"}
Line 4,467: Line 4,469:
[e]="expected a platform name here",
[e]="expected a platform name here",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={dc,1468629323,Zb,Sb},
[b]={Zb,1468629323,Yb,Xb},
[h]={{Cb,3773,"/// Parse availability query specification.\n///\n///  availability-spec:\n///    \'*\'\n///    identifier version-tuple\nstd::optional<AvailabilitySpec> Parser::ParseAvailabilitySpec() {\n  if (Tok.is(tok::star)) {\n  // ...\n  } else {\n    // ...\n    if (Tok.isNot(tok::identifier)) {\n      Diag(Tok, diag::err_avail_query_expected_platform_name);"}},
[h]={{tb,3773,"/// Parse availability query specification.\n///\n///  availability-spec:\n///    \'*\'\n///    identifier version-tuple\nstd::optional<AvailabilitySpec> Parser::ParseAvailabilitySpec() {\n  if (Tok.is(tok::star)) {\n  // ...\n  } else {\n    // ...\n    if (Tok.isNot(tok::identifier)) {\n      Diag(Tok, diag::err_avail_query_expected_platform_name);"}},
[j]={
[j]={
["clang/test/Parser/objc-available.m"]={"clang/test/Parser/objc-available.m:18:20: error: expected a platform name here","clang/test/Parser/objc-available.m:19:32: error: expected a platform name here"}
["clang/test/Parser/objc-available.m"]={"clang/test/Parser/objc-available.m:18:20: error: expected a platform name here","clang/test/Parser/objc-available.m:19:32: error: expected a platform name here"}
Line 4,479: Line 4,481:
[e]="unrecognized platform name (.*?)",
[e]="unrecognized platform name (.*?)",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={dc,1468629323,Zb,Sb},
[b]={Zb,1468629323,Yb,Xb},
[h]={{Cb,3790,"/// Parse availability query specification.\n///\n///  availability-spec:\n///    \'*\'\n///    identifier version-tuple\nstd::optional<AvailabilitySpec> Parser::ParseAvailabilitySpec() {\n  if (Tok.is(tok::star)) {\n  // ...\n  } else {\n    // ...\n    if (AvailabilityAttr::getPrettyPlatformName(Platform).empty()) {\n      Diag(PlatformIdentifier->Loc, diag::err_avail_query_unrecognized_platform_name) << GivenPlatform;"}},
[h]={{tb,3790,"/// Parse availability query specification.\n///\n///  availability-spec:\n///    \'*\'\n///    identifier version-tuple\nstd::optional<AvailabilitySpec> Parser::ParseAvailabilitySpec() {\n  if (Tok.is(tok::star)) {\n  // ...\n  } else {\n    // ...\n    if (AvailabilityAttr::getPrettyPlatformName(Platform).empty()) {\n      Diag(PlatformIdentifier->Loc, diag::err_avail_query_unrecognized_platform_name) << GivenPlatform;"}},
[j]={
[j]={
["clang/test/Parser/objc-available.m"]={"clang/test/Parser/objc-available.m:14:20: error: unrecognized platform name erik_os","clang/test/Parser/objc-available.m:16:20: error: unrecognized platform name erik_os","clang/test/Parser/objc-available.m:16:35: error: unrecognized platform name hat_os"}
["clang/test/Parser/objc-available.m"]={"clang/test/Parser/objc-available.m:14:20: error: unrecognized platform name erik_os","clang/test/Parser/objc-available.m:16:20: error: unrecognized platform name erik_os","clang/test/Parser/objc-available.m:16:35: error: unrecognized platform name hat_os"}
Line 4,491: Line 4,493:
[e]="expected \'introduced\', \'deprecated\', or \'obsoleted\'",
[e]="expected \'introduced\', \'deprecated\', or \'obsoleted\'",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify\nwhich versions of an OS provide...","Implement a new \'availability\' attribute, that allows one to specify\nwhich versions of an OS provide a certain facility. For example,\n\n  void foo()\n  __attribute__((availability(macosx,introduced=10.2,deprecated=10.4,obsoleted=10.6)));\n\nsays that the function \"foo\" was introduced in 10.2, deprecated in\n10.4, and completely obsoleted in 10.6. This attribute ties in with\nthe deployment targets (e.g., -mmacosx-version-min=10.1 specifies that\nwe want to deploy back to Mac OS X 10.1). There are several concrete\nbehaviors that this attribute enables, as illustrated with the\nfunction foo() above:\n\n  - If we choose a deployment target >= Mac OS X 10.4, uses of \"foo\"\n    will result in a deprecation warning, as if we had placed\n    attribute((deprecated)) on it (but with a better diagnostic)\n  - If we choose a deployment target >= Mac OS X 10.6, uses of \"foo\"\n    will result in an \"unavailable\" warning (in C)/error (in C++), as\n    if we had placed attribute((unavailable)) on it\n  - If we choose a deployment target prior to 10.2, foo() is\n    weak-imported (if it is a kind of entity that can be weak\n    imported), as if we had placed the weak_import attribute on it.\n\nNaturally, there can be multiple availability attributes on a\ndeclaration, for different platforms; only the current platform\nmatters when checking availability attributes.\n\nThe only platforms this attribute currently works for are \"ios\" and\n\"macosx\", since we already have -mxxxx-version-min flags for them and we\nhave experience there with macro tricks translating down to the\ndeprecated/unavailable/weak_import attributes. The end goal is to open\nthis up to other platforms, and even extension to other \"platforms\"\nthat are really libraries (say, through a #pragma clang\ndefine_system), but that hasn\'t yet been designed and we may want to\nshake out more issues with this narrower problem first.\n\nAddresses <rdar://problem/6690412>.\n\nAs a drive-by bug-fix, if an entity is both deprecated and\nunavailable, we only emit the \"unavailable\" diagnostic.\n\nllvm-svn: 128127"},
[b]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify","Implement a new \'availability\' attribute, that allows one to specify\nwhich versions of an OS provide a certain facility. For example,\n\n  void foo()\n  __attribute__((availability(macosx,introduced=10.2,deprecated=10.4,obsoleted=10.6)));\n\nsays that the function \"foo\" was introduced in 10.2, deprecated in\n10.4, and completely obsoleted in 10.6. This attribute ties in with\nthe deployment targets (e.g., -mmacosx-version-min=10.1 specifies that\nwe want to deploy back to Mac OS X 10.1). There are several concrete\nbehaviors that this attribute enables, as illustrated with the\nfunction foo() above:\n\n  - If we choose a deployment target >= Mac OS X 10.4, uses of \"foo\"\n    will result in a deprecation warning, as if we had placed\n    attribute((deprecated)) on it (but with a better diagnostic)\n  - If we choose a deployment target >= Mac OS X 10.6, uses of \"foo\"\n    will result in an \"unavailable\" warning (in C)/error (in C++), as\n    if we had placed attribute((unavailable)) on it\n  - If we choose a deployment target prior to 10.2, foo() is\n    weak-imported (if it is a kind of entity that can be weak\n    imported), as if we had placed the weak_import attribute on it.\n\nNaturally, there can be multiple availability attributes on a\ndeclaration, for different platforms; only the current platform\nmatters when checking availability attributes.\n\nThe only platforms this attribute currently works for are \"ios\" and\n\"macosx\", since we already have -mxxxx-version-min flags for them and we\nhave experience there with macro tricks translating down to the\ndeprecated/unavailable/weak_import attributes. The end goal is to open\nthis up to other platforms, and even extension to other \"platforms\"\nthat are really libraries (say, through a #pragma clang\ndefine_system), but that hasn\'t yet been designed and we may want to\nshake out more issues with this narrower problem first.\n\nAddresses <rdar://problem/6690412>.\n\nAs a drive-by bug-fix, if an entity is both deprecated and\nunavailable, we only emit the \"unavailable\" diagnostic.\n\nllvm-svn: 128127"},
[h]={{A,1187,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    if (Tok.isNot(tok::identifier)) {\n      Diag(Tok, diag::err_availability_expected_change);"}}
[h]={{B,1187,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    if (Tok.isNot(tok::identifier)) {\n      Diag(Tok, diag::err_availability_expected_change);"}}
},
},
["err_availability_expected_platform"]={
["err_availability_expected_platform"]={
Line 4,500: Line 4,502:
[e]="expected a platform name, e\\.g\\., \'macos\'",
[e]="expected a platform name, e\\.g\\., \'macos\'",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify\nwhich versions of an OS provide...","Implement a new \'availability\' attribute, that allows one to specify\nwhich versions of an OS provide a certain facility. For example,\n\n  void foo()\n  __attribute__((availability(macosx,introduced=10.2,deprecated=10.4,obsoleted=10.6)));\n\nsays that the function \"foo\" was introduced in 10.2, deprecated in\n10.4, and completely obsoleted in 10.6. This attribute ties in with\nthe deployment targets (e.g., -mmacosx-version-min=10.1 specifies that\nwe want to deploy back to Mac OS X 10.1). There are several concrete\nbehaviors that this attribute enables, as illustrated with the\nfunction foo() above:\n\n  - If we choose a deployment target >= Mac OS X 10.4, uses of \"foo\"\n    will result in a deprecation warning, as if we had placed\n    attribute((deprecated)) on it (but with a better diagnostic)\n  - If we choose a deployment target >= Mac OS X 10.6, uses of \"foo\"\n    will result in an \"unavailable\" warning (in C)/error (in C++), as\n    if we had placed attribute((unavailable)) on it\n  - If we choose a deployment target prior to 10.2, foo() is\n    weak-imported (if it is a kind of entity that can be weak\n    imported), as if we had placed the weak_import attribute on it.\n\nNaturally, there can be multiple availability attributes on a\ndeclaration, for different platforms; only the current platform\nmatters when checking availability attributes.\n\nThe only platforms this attribute currently works for are \"ios\" and\n\"macosx\", since we already have -mxxxx-version-min flags for them and we\nhave experience there with macro tricks translating down to the\ndeprecated/unavailable/weak_import attributes. The end goal is to open\nthis up to other platforms, and even extension to other \"platforms\"\nthat are really libraries (say, through a #pragma clang\ndefine_system), but that hasn\'t yet been designed and we may want to\nshake out more issues with this narrower problem first.\n\nAddresses <rdar://problem/6690412>.\n\nAs a drive-by bug-fix, if an entity is both deprecated and\nunavailable, we only emit the \"unavailable\" diagnostic.\n\nllvm-svn: 128127"},
[b]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify","Implement a new \'availability\' attribute, that allows one to specify\nwhich versions of an OS provide a certain facility. For example,\n\n  void foo()\n  __attribute__((availability(macosx,introduced=10.2,deprecated=10.4,obsoleted=10.6)));\n\nsays that the function \"foo\" was introduced in 10.2, deprecated in\n10.4, and completely obsoleted in 10.6. This attribute ties in with\nthe deployment targets (e.g., -mmacosx-version-min=10.1 specifies that\nwe want to deploy back to Mac OS X 10.1). There are several concrete\nbehaviors that this attribute enables, as illustrated with the\nfunction foo() above:\n\n  - If we choose a deployment target >= Mac OS X 10.4, uses of \"foo\"\n    will result in a deprecation warning, as if we had placed\n    attribute((deprecated)) on it (but with a better diagnostic)\n  - If we choose a deployment target >= Mac OS X 10.6, uses of \"foo\"\n    will result in an \"unavailable\" warning (in C)/error (in C++), as\n    if we had placed attribute((unavailable)) on it\n  - If we choose a deployment target prior to 10.2, foo() is\n    weak-imported (if it is a kind of entity that can be weak\n    imported), as if we had placed the weak_import attribute on it.\n\nNaturally, there can be multiple availability attributes on a\ndeclaration, for different platforms; only the current platform\nmatters when checking availability attributes.\n\nThe only platforms this attribute currently works for are \"ios\" and\n\"macosx\", since we already have -mxxxx-version-min flags for them and we\nhave experience there with macro tricks translating down to the\ndeprecated/unavailable/weak_import attributes. The end goal is to open\nthis up to other platforms, and even extension to other \"platforms\"\nthat are really libraries (say, through a #pragma clang\ndefine_system), but that hasn\'t yet been designed and we may want to\nshake out more issues with this narrower problem first.\n\nAddresses <rdar://problem/6690412>.\n\nAs a drive-by bug-fix, if an entity is both deprecated and\nunavailable, we only emit the \"unavailable\" diagnostic.\n\nllvm-svn: 128127"},
[h]={{A,1146,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  // Parse the platform name.\n  if (Tok.isNot(tok::identifier)) {\n    Diag(Tok, diag::err_availability_expected_platform);"}}
[h]={{B,1146,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  // Parse the platform name.\n  if (Tok.isNot(tok::identifier)) {\n    Diag(Tok, diag::err_availability_expected_platform);"}}
},
},
["err_availability_query_repeated_platform"]={
["err_availability_query_repeated_platform"]={
Line 4,509: Line 4,511:
[e]="version for \'(.*?)\' already specified",
[e]="version for \'(.*?)\' already specified",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={dc,1468629323,Zb,Sb},
[b]={Zb,1468629323,Yb,Xb},
[h]={{Cb,3741,"/// Validate availability spec list, emitting diagnostics if necessary. Returns\n/// true if invalid.\nstatic bool CheckAvailabilitySpecList(Parser &P, ArrayRef<AvailabilitySpec> AvailSpecs) {\n  // ...\n  for (const auto &Spec : AvailSpecs) {\n    // ...\n    if (!Inserted) {\n      // ...\n      P.Diag(Spec.getBeginLoc(), diag::err_availability_query_repeated_platform) << Spec.getEndLoc() << Platform;"}},
[h]={{tb,3741,"/// Validate availability spec list, emitting diagnostics if necessary. Returns\n/// true if invalid.\nstatic bool CheckAvailabilitySpecList(Parser &P, ArrayRef<AvailabilitySpec> AvailSpecs) {\n  // ...\n  for (const auto &Spec : AvailSpecs) {\n    // ...\n    if (!Inserted) {\n      // ...\n      P.Diag(Spec.getBeginLoc(), diag::err_availability_query_repeated_platform) << Spec.getEndLoc() << Platform;"}},
[j]={
[j]={
["clang/test/Parser/objc-available.m"]={"clang/test/Parser/objc-available.m:12:33: error: version for \'macos\' already specified"}
["clang/test/Parser/objc-available.m"]={"clang/test/Parser/objc-available.m:12:33: error: version for \'macos\' already specified"}
Line 4,521: Line 4,523:
[e]="\'\\*\' query has already been specified",
[e]="\'\\*\' query has already been specified",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={dc,1468629323,Zb,Sb},
[b]={Zb,1468629323,Yb,Xb},
[h]={{Cb,3727,"/// Validate availability spec list, emitting diagnostics if necessary. Returns\n/// true if invalid.\nstatic bool CheckAvailabilitySpecList(Parser &P, ArrayRef<AvailabilitySpec> AvailSpecs) {\n  // ...\n  for (const auto &Spec : AvailSpecs) {\n    if (Spec.isOtherPlatformSpec()) {\n      if (HasOtherPlatformSpec) {\n        P.Diag(Spec.getBeginLoc(), diag::err_availability_query_repeated_star);"}}
[h]={{tb,3727,"/// Validate availability spec list, emitting diagnostics if necessary. Returns\n/// true if invalid.\nstatic bool CheckAvailabilitySpecList(Parser &P, ArrayRef<AvailabilitySpec> AvailSpecs) {\n  // ...\n  for (const auto &Spec : AvailSpecs) {\n    if (Spec.isOtherPlatformSpec()) {\n      if (HasOtherPlatformSpec) {\n        P.Diag(Spec.getBeginLoc(), diag::err_availability_query_repeated_star);"}}
},
},
["err_availability_query_wildcard_required"]={
["err_availability_query_wildcard_required"]={
Line 4,530: Line 4,532:
[e]="must handle potential future platforms with \'\\*\'",
[e]="must handle potential future platforms with \'\\*\'",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={dc,1468629323,Zb,Sb},
[b]={Zb,1468629323,Yb,Xb},
[h]={{Cb,3749,"/// Validate availability spec list, emitting diagnostics if necessary. Returns\n/// true if invalid.\nstatic bool CheckAvailabilitySpecList(Parser &P, ArrayRef<AvailabilitySpec> AvailSpecs) {\n  // ...\n  if (!HasOtherPlatformSpec) {\n    // ...\n    P.Diag(InsertWildcardLoc, diag::err_availability_query_wildcard_required) << FixItHint::CreateInsertion(InsertWildcardLoc, \", *\");"}},
[h]={{tb,3749,"/// Validate availability spec list, emitting diagnostics if necessary. Returns\n/// true if invalid.\nstatic bool CheckAvailabilitySpecList(Parser &P, ArrayRef<AvailabilitySpec> AvailSpecs) {\n  // ...\n  if (!HasOtherPlatformSpec) {\n    // ...\n    P.Diag(InsertWildcardLoc, diag::err_availability_query_wildcard_required) << FixItHint::CreateInsertion(InsertWildcardLoc, \", *\");"}},
[j]={
[j]={
["clang/test/Parser/objc-available.m"]={"clang/test/Parser/objc-available.m:11:31: error: must handle potential future platforms with \'*\'"}
["clang/test/Parser/objc-available.m"]={"clang/test/Parser/objc-available.m:11:31: error: must handle potential future platforms with \'*\'"}
Line 4,542: Line 4,544:
[e]="redundant (.*?) availability change; only the last specified change will be used",
[e]="redundant (.*?) availability change; only the last specified change will be used",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify\nwhich versions of an OS provide...","Implement a new \'availability\' attribute, that allows one to specify\nwhich versions of an OS provide a certain facility. For example,\n\n  void foo()\n  __attribute__((availability(macosx,introduced=10.2,deprecated=10.4,obsoleted=10.6)));\n\nsays that the function \"foo\" was introduced in 10.2, deprecated in\n10.4, and completely obsoleted in 10.6. This attribute ties in with\nthe deployment targets (e.g., -mmacosx-version-min=10.1 specifies that\nwe want to deploy back to Mac OS X 10.1). There are several concrete\nbehaviors that this attribute enables, as illustrated with the\nfunction foo() above:\n\n  - If we choose a deployment target >= Mac OS X 10.4, uses of \"foo\"\n    will result in a deprecation warning, as if we had placed\n    attribute((deprecated)) on it (but with a better diagnostic)\n  - If we choose a deployment target >= Mac OS X 10.6, uses of \"foo\"\n    will result in an \"unavailable\" warning (in C)/error (in C++), as\n    if we had placed attribute((unavailable)) on it\n  - If we choose a deployment target prior to 10.2, foo() is\n    weak-imported (if it is a kind of entity that can be weak\n    imported), as if we had placed the weak_import attribute on it.\n\nNaturally, there can be multiple availability attributes on a\ndeclaration, for different platforms; only the current platform\nmatters when checking availability attributes.\n\nThe only platforms this attribute currently works for are \"ios\" and\n\"macosx\", since we already have -mxxxx-version-min flags for them and we\nhave experience there with macro tricks translating down to the\ndeprecated/unavailable/weak_import attributes. The end goal is to open\nthis up to other platforms, and even extension to other \"platforms\"\nthat are really libraries (say, through a #pragma clang\ndefine_system), but that hasn\'t yet been designed and we may want to\nshake out more issues with this narrower problem first.\n\nAddresses <rdar://problem/6690412>.\n\nAs a drive-by bug-fix, if an entity is both deprecated and\nunavailable, we only emit the \"unavailable\" diagnostic.\n\nllvm-svn: 128127"},
[b]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify","Implement a new \'availability\' attribute, that allows one to specify\nwhich versions of an OS provide a certain facility. For example,\n\n  void foo()\n  __attribute__((availability(macosx,introduced=10.2,deprecated=10.4,obsoleted=10.6)));\n\nsays that the function \"foo\" was introduced in 10.2, deprecated in\n10.4, and completely obsoleted in 10.6. This attribute ties in with\nthe deployment targets (e.g., -mmacosx-version-min=10.1 specifies that\nwe want to deploy back to Mac OS X 10.1). There are several concrete\nbehaviors that this attribute enables, as illustrated with the\nfunction foo() above:\n\n  - If we choose a deployment target >= Mac OS X 10.4, uses of \"foo\"\n    will result in a deprecation warning, as if we had placed\n    attribute((deprecated)) on it (but with a better diagnostic)\n  - If we choose a deployment target >= Mac OS X 10.6, uses of \"foo\"\n    will result in an \"unavailable\" warning (in C)/error (in C++), as\n    if we had placed attribute((unavailable)) on it\n  - If we choose a deployment target prior to 10.2, foo() is\n    weak-imported (if it is a kind of entity that can be weak\n    imported), as if we had placed the weak_import attribute on it.\n\nNaturally, there can be multiple availability attributes on a\ndeclaration, for different platforms; only the current platform\nmatters when checking availability attributes.\n\nThe only platforms this attribute currently works for are \"ios\" and\n\"macosx\", since we already have -mxxxx-version-min flags for them and we\nhave experience there with macro tricks translating down to the\ndeprecated/unavailable/weak_import attributes. The end goal is to open\nthis up to other platforms, and even extension to other \"platforms\"\nthat are really libraries (say, through a #pragma clang\ndefine_system), but that hasn\'t yet been designed and we may want to\nshake out more issues with this narrower problem first.\n\nAddresses <rdar://problem/6690412>.\n\nAs a drive-by bug-fix, if an entity is both deprecated and\nunavailable, we only emit the \"unavailable\" diagnostic.\n\nllvm-svn: 128127"},
[h]={{A,1196,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    // ...\n    if (Keyword == Ident_strict) {\n      if (StrictLoc.isValid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(StrictLoc);"},{A,1205,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    // ...\n    if (Keyword == Ident_unavailable) {\n      if (UnavailableLoc.isValid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(UnavailableLoc);"},{A,1216,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    // ...\n    if (Keyword == Ident_deprecated && Platform->Ident && Platform->Ident->isStr(\"swift\")) {\n      // For swift, we deprecate for all versions.\n      if (Changes[Deprecated].KeywordLoc.isValid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(Changes[Deprecated].KeywordLoc);"},{A,1294,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    // ...\n    if (Index < Unknown) {\n      if (!Changes[Index].KeywordLoc.isInvalid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(Changes[Index].KeywordLoc, Changes[Index].VersionRange.getEnd());"}},
[h]={{B,1196,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    // ...\n    if (Keyword == Ident_strict) {\n      if (StrictLoc.isValid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(StrictLoc);"},{B,1205,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    // ...\n    if (Keyword == Ident_unavailable) {\n      if (UnavailableLoc.isValid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(UnavailableLoc);"},{B,1216,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    // ...\n    if (Keyword == Ident_deprecated && Platform->Ident && Platform->Ident->isStr(\"swift\")) {\n      // For swift, we deprecate for all versions.\n      if (Changes[Deprecated].KeywordLoc.isValid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(Changes[Deprecated].KeywordLoc);"},{B,1294,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    // ...\n    if (Index < Unknown) {\n      if (!Changes[Index].KeywordLoc.isInvalid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(Changes[Index].KeywordLoc, Changes[Index].VersionRange.getEnd());"}},
[j]={
[j]={
["clang/test/Parser/attr-availability.c"]={"clang/test/Parser/attr-availability.c:13:94: error: redundant \'introduced\' availability change; only the last specified change will be used","clang/test/Parser/attr-availability.c:17:98: error: redundant \'unavailable\' availability change; only the last specified change will be used"}
["clang/test/Parser/attr-availability.c"]={"clang/test/Parser/attr-availability.c:13:94: error: redundant \'introduced\' availability change; only the last specified change will be used","clang/test/Parser/attr-availability.c:17:98: error: redundant \'unavailable\' availability change; only the last specified change will be used"}
Line 4,554: Line 4,556:
[e]="(.*?) is not an availability stage; use \'introduced\', \'deprecated\', or \'obsoleted\'",
[e]="(.*?) is not an availability stage; use \'introduced\', \'deprecated\', or \'obsoleted\'",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify\nwhich versions of an OS provide...","Implement a new \'availability\' attribute, that allows one to specify\nwhich versions of an OS provide a certain facility. For example,\n\n  void foo()\n  __attribute__((availability(macosx,introduced=10.2,deprecated=10.4,obsoleted=10.6)));\n\nsays that the function \"foo\" was introduced in 10.2, deprecated in\n10.4, and completely obsoleted in 10.6. This attribute ties in with\nthe deployment targets (e.g., -mmacosx-version-min=10.1 specifies that\nwe want to deploy back to Mac OS X 10.1). There are several concrete\nbehaviors that this attribute enables, as illustrated with the\nfunction foo() above:\n\n  - If we choose a deployment target >= Mac OS X 10.4, uses of \"foo\"\n    will result in a deprecation warning, as if we had placed\n    attribute((deprecated)) on it (but with a better diagnostic)\n  - If we choose a deployment target >= Mac OS X 10.6, uses of \"foo\"\n    will result in an \"unavailable\" warning (in C)/error (in C++), as\n    if we had placed attribute((unavailable)) on it\n  - If we choose a deployment target prior to 10.2, foo() is\n    weak-imported (if it is a kind of entity that can be weak\n    imported), as if we had placed the weak_import attribute on it.\n\nNaturally, there can be multiple availability attributes on a\ndeclaration, for different platforms; only the current platform\nmatters when checking availability attributes.\n\nThe only platforms this attribute currently works for are \"ios\" and\n\"macosx\", since we already have -mxxxx-version-min flags for them and we\nhave experience there with macro tricks translating down to the\ndeprecated/unavailable/weak_import attributes. The end goal is to open\nthis up to other platforms, and even extension to other \"platforms\"\nthat are really libraries (say, through a #pragma clang\ndefine_system), but that hasn\'t yet been designed and we may want to\nshake out more issues with this narrower problem first.\n\nAddresses <rdar://problem/6690412>.\n\nAs a drive-by bug-fix, if an entity is both deprecated and\nunavailable, we only emit the \"unavailable\" diagnostic.\n\nllvm-svn: 128127"},
[b]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify","Implement a new \'availability\' attribute, that allows one to specify\nwhich versions of an OS provide a certain facility. For example,\n\n  void foo()\n  __attribute__((availability(macosx,introduced=10.2,deprecated=10.4,obsoleted=10.6)));\n\nsays that the function \"foo\" was introduced in 10.2, deprecated in\n10.4, and completely obsoleted in 10.6. This attribute ties in with\nthe deployment targets (e.g., -mmacosx-version-min=10.1 specifies that\nwe want to deploy back to Mac OS X 10.1). There are several concrete\nbehaviors that this attribute enables, as illustrated with the\nfunction foo() above:\n\n  - If we choose a deployment target >= Mac OS X 10.4, uses of \"foo\"\n    will result in a deprecation warning, as if we had placed\n    attribute((deprecated)) on it (but with a better diagnostic)\n  - If we choose a deployment target >= Mac OS X 10.6, uses of \"foo\"\n    will result in an \"unavailable\" warning (in C)/error (in C++), as\n    if we had placed attribute((unavailable)) on it\n  - If we choose a deployment target prior to 10.2, foo() is\n    weak-imported (if it is a kind of entity that can be weak\n    imported), as if we had placed the weak_import attribute on it.\n\nNaturally, there can be multiple availability attributes on a\ndeclaration, for different platforms; only the current platform\nmatters when checking availability attributes.\n\nThe only platforms this attribute currently works for are \"ios\" and\n\"macosx\", since we already have -mxxxx-version-min flags for them and we\nhave experience there with macro tricks translating down to the\ndeprecated/unavailable/weak_import attributes. The end goal is to open\nthis up to other platforms, and even extension to other \"platforms\"\nthat are really libraries (say, through a #pragma clang\ndefine_system), but that hasn\'t yet been designed and we may want to\nshake out more issues with this narrower problem first.\n\nAddresses <rdar://problem/6690412>.\n\nAs a drive-by bug-fix, if an entity is both deprecated and\nunavailable, we only emit the \"unavailable\" diagnostic.\n\nllvm-svn: 128127"},
[h]={{A,1304,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    // ...\n    if (Index < Unknown) {\n    // ...\n    } else {\n      Diag(KeywordLoc, diag::err_availability_unknown_change) << Keyword << VersionRange;"}},
[h]={{B,1304,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///  \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///  identifier\n///\n/// opt-strict:\n///  \'strict\' \',\'\n///\n/// version-arg-list:\n///  version-arg\n///  version-arg \',\' version-arg-list\n///\n/// version-arg:\n///  \'introduced\' \'=\' version\n///  \'deprecated\' \'=\' version\n///  \'obsoleted\' = version\n///  \'unavailable\'\n/// opt-replacement:\n///  \'replacement\' \'=\' <string>\n/// opt-message:\n///  \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    // ...\n    if (Index < Unknown) {\n    // ...\n    } else {\n      Diag(KeywordLoc, diag::err_availability_unknown_change) << Keyword << VersionRange;"}},
[j]={
[j]={
["clang/test/Sema/attr-availability-square-brackets.c"]={"clang/test/Sema/attr-availability-square-brackets.c:25:35: error: \'should\' is not an availability stage; use \'introduced\', \'deprecated\', or \'obsoleted\'"}
["clang/test/Sema/attr-availability-square-brackets.c"]={"clang/test/Sema/attr-availability-square-brackets.c:25:35: error: \'should\' is not an availability stage; use \'introduced\', \'deprecated\', or \'obsoleted\'"}
Line 4,567: Line 4,569:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"2831a317b689",1592939649,"Implement AVX ABI Warning/error\n\nThe x86-64 \"avx\" feature changes how >128 bit vector types are pass...","Implement AVX ABI Warning/error\n\nThe x86-64 \"avx\" feature changes how >128 bit vector types are passed,\ninstead of being passed in separate 128 bit registers, they can be\npassed in 256 bit registers.\n\n\"avx512f\" does the same thing, except it switches from 256 bit registers\nto 512 bit registers.\n\nThe result of both of these is an ABI incompatibility between functions\ncompiled with and without these features.\n\nThis patch implements a warning/error pair upon an attempt to call a\nfunction that would run afoul of this. First, if a function is called\nthat would have its ABI changed, we issue a warning.\n\nSecond, if said call is made in a situation where the caller and callee\nare known to have different calling conventions (such as the case of\n\'target\'), we instead issue an error.\n\nDifferential Revision: https://reviews.llvm.org/D82562"},
[b]={"2831a317b689",1592939649,"Implement AVX ABI Warning/error","Implement AVX ABI Warning/error\n\nThe x86-64 \"avx\" feature changes how >128 bit vector types are passed,\ninstead of being passed in separate 128 bit registers, they can be\npassed in 256 bit registers.\n\n\"avx512f\" does the same thing, except it switches from 256 bit registers\nto 512 bit registers.\n\nThe result of both of these is an ABI incompatibility between functions\ncompiled with and without these features.\n\nThis patch implements a warning/error pair upon an attempt to call a\nfunction that would run afoul of this. First, if a function is called\nthat would have its ABI changed, we issue a warning.\n\nSecond, if said call is made in a situation where the caller and callee\nare known to have different calling conventions (such as the case of\n\'target\'), we instead issue an error.\n\nDifferential Revision: https://reviews.llvm.org/D82562"},
[h]={{"clang/lib/CodeGen/Targets/X86.cpp",1504,"static bool checkAVXParamFeature(DiagnosticsEngine &Diag, SourceLocation CallLoc, const llvm::StringMap<bool> &CallerMap, const llvm::StringMap<bool> &CalleeMap, QualType Ty, StringRef Feature, bool IsArgument) {\n  // ...\n  // Mixing calling conventions here is very clearly an error.\n  if (!CallerHasFeat || !CalleeHasFeat)\n    return Diag.Report(CallLoc, diag::err_avx_calling_convention) << IsArgument << Ty << Feature;"}},
[h]={{"clang/lib/CodeGen/Targets/X86.cpp",1504,"static bool checkAVXParamFeature(DiagnosticsEngine &Diag, SourceLocation CallLoc, const llvm::StringMap<bool> &CallerMap, const llvm::StringMap<bool> &CalleeMap, QualType Ty, StringRef Feature, bool IsArgument) {\n  // ...\n  // Mixing calling conventions here is very clearly an error.\n  if (!CallerHasFeat || !CalleeHasFeat)\n    return Diag.Report(CallLoc, diag::err_avx_calling_convention) << IsArgument << Ty << Feature;"}},
[j]={
[j]={
Line 4,591: Line 4,593:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming ...","[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming static analyzer check\nthat finds handle leaks, use after releases, and double releases.\n\nDifferential Revision: https://reviews.llvm.org/D70469"},
[b]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming static analyzer check\nthat finds handle leaks, use after releases, and double releases.\n\nDifferential Revision: https://reviews.llvm.org/D70469"},
[h]={{s,816,"/// 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  if (DestPointee->isVoidType()) {\n  // ...\n  } else if (DestRecord) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestPointee, diag::err_bad_cast_incomplete, DestRange)) {"},{s,861,"/// 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  if (SrcRecord) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), SrcPointee, diag::err_bad_cast_incomplete, SrcExpr.get())) {"},{s,1400,"/// TryStaticCast - Check if a static cast can be performed, and do so if\n/// possible. If @p CStyle, ignore access restrictions on hierarchy casting\n/// and casting away constness.\nstatic TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath, bool ListInitialization) {\n  // ...\n  // Reverse integral promotion/conversion. All such conversions are themselves\n  // again integral promotions or conversions and are thus already handled by\n  // p2 (TryDirectInitialization above).\n  // (Note: any data loss warnings should be suppressed.)\n  // The exception is the reverse of enum->integer, i.e. integer->enum (and\n  // enum->enum). See also C++ 5.2.9p7.\n  // The same goes for reverse floating point promotion/conversion and\n  // floating-integral conversions. Again, only floating->enum is relevant.\n  if (DestType->isEnumeralType()) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_bad_cast_incomplete)) {"},{s,1883,"/// TryStaticImplicitCast - Tests whether a conversion according to C++ 5.2.9p2\n/// is valid:\n///\n///  An expression e can be explicitly converted to a type T using a\n///  @c static_cast if the declaration \"T t(e);\" is well-formed [...].\nTryCastResult TryStaticImplicitCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, bool ListInitialization) {\n  if (DestType->isRecordType()) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_bad_cast_incomplete) || Self.RequireNonAbstractType(OpRange.getBegin(), DestType, diag::err_allocation_of_abstract_type)) {"}},
[h]={{t,816,"/// 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  if (DestPointee->isVoidType()) {\n  // ...\n  } else if (DestRecord) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestPointee, diag::err_bad_cast_incomplete, DestRange)) {"},{t,861,"/// 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  if (SrcRecord) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), SrcPointee, diag::err_bad_cast_incomplete, SrcExpr.get())) {"},{t,1400,"/// TryStaticCast - Check if a static cast can be performed, and do so if\n/// possible. If @p CStyle, ignore access restrictions on hierarchy casting\n/// and casting away constness.\nstatic TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath, bool ListInitialization) {\n  // ...\n  // Reverse integral promotion/conversion. All such conversions are themselves\n  // again integral promotions or conversions and are thus already handled by\n  // p2 (TryDirectInitialization above).\n  // (Note: any data loss warnings should be suppressed.)\n  // The exception is the reverse of enum->integer, i.e. integer->enum (and\n  // enum->enum). See also C++ 5.2.9p7.\n  // The same goes for reverse floating point promotion/conversion and\n  // floating-integral conversions. Again, only floating->enum is relevant.\n  if (DestType->isEnumeralType()) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_bad_cast_incomplete)) {"},{t,1883,"/// TryStaticImplicitCast - Tests whether a conversion according to C++ 5.2.9p2\n/// is valid:\n///\n///  An expression e can be explicitly converted to a type T using a\n///  @c static_cast if the declaration \"T t(e);\" is well-formed [...].\nTryCastResult TryStaticImplicitCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, bool ListInitialization) {\n  if (DestType->isRecordType()) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_bad_cast_incomplete) || Self.RequireNonAbstractType(OpRange.getBegin(), DestType, diag::err_allocation_of_abstract_type)) {"}},
[j]={
[j]={
[Ab]={"clang/test/SemaCXX/dynamic-cast.cpp:37:9: error: \'Incomplete\' is an incomplete type","clang/test/SemaCXX/dynamic-cast.cpp:39:9: error: \'Incomplete\' is an incomplete type"}
[zb]={"clang/test/SemaCXX/dynamic-cast.cpp:37:9: error: \'Incomplete\' is an incomplete type","clang/test/SemaCXX/dynamic-cast.cpp:39:9: error: \'Incomplete\' is an incomplete type"}
}
}
},
},
Line 4,603: Line 4,605:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={Mb,1480718311,V,V},
[b]={Lb,1480718311,Mb,Ob},
[h]={{P,1194,"/// 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 (!property) {\n      Diag(PropertyLoc, diag::err_bad_category_property_decl) << Category->getDeclName();"}},
[h]={{Q,1194,"/// 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 (!property) {\n      Diag(PropertyLoc, diag::err_bad_category_property_decl) << Category->getDeclName();"}},
[j]={
[j]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:27:10: error: property implementation must have its declaration in the category \'CAT\'"}
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:27:10: error: property implementation must have its declaration in the category \'CAT\'"}
Line 4,615: Line 4,617:
[f]=a,
[f]=a,
[g]=mb,
[g]=mb,
[b]={"8b2b677f390d",1326889624,"Improves support for Unicode in character literals\n\nUpdates ProcessUCNExcape() for C++. C++11 allows...","Improves support for Unicode in character literals\n\nUpdates ProcessUCNExcape() for C++. C++11 allows UCNs in character\nand string literals that represent control characters and basic\nsource characters. Also C++03 allows UCNs that refer to surrogate\ncodepoints.\n\nUTF-8 sequences in character literals are now handled as single\nc-chars.\n\nAdded error for multiple characters in Unicode character literals.\n\nAdded errors for when a the execution charset encoding of a c-char\ncannot be represented as a single code unit in the associated\ncharacter type. Note that for the purposes of this error the asso-\nciated character type for a narrow character literal is char, not\nint, even though in C narrow character literals have type int.\n\nllvm-svn: 148389"},
[b]={"8b2b677f390d",1326889624,"Improves support for Unicode in character literals","Improves support for Unicode in character literals\n\nUpdates ProcessUCNExcape() for C++. C++11 allows UCNs in character\nand string literals that represent control characters and basic\nsource characters. Also C++03 allows UCNs that refer to surrogate\ncodepoints.\n\nUTF-8 sequences in character literals are now handled as single\nc-chars.\n\nAdded error for multiple characters in Unicode character literals.\n\nAdded errors for when a the execution charset encoding of a c-char\ncannot be represented as a single code unit in the associated\ncharacter type. Note that for the purposes of this error the asso-\nciated character type for a narrow character literal is char, not\nint, even though in C narrow character literals have type int.\n\nllvm-svn: 148389"},
[h]={{"clang/lib/Lex/LiteralSupport.cpp",1745,"/// \\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  while (begin != end) {\n    // Is this a span of non-escape characters?\n    if (begin[0] != \'\\\\\') {\n      // ...\n      if (res != llvm::conversionOK) {\n        // ...\n        unsigned Msg = diag::err_bad_character_encoding;"}},
[h]={{"clang/lib/Lex/LiteralSupport.cpp",1745,"/// \\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  while (begin != end) {\n    // Is this a span of non-escape characters?\n    if (begin[0] != \'\\\\\') {\n      // ...\n      if (res != llvm::conversionOK) {\n        // ...\n        unsigned Msg = diag::err_bad_character_encoding;"}},
[j]={
[j]={
Line 4,627: Line 4,629:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{s,1998,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  // ...\n  if (!DestType->isPointerType() && !DestType->isMemberPointerType() && !DestType->isObjCObjectPointerType()) {\n    // Cannot cast to non-pointer, non-reference type. Note that, if DestType\n    // was a reference type, we converted it to a pointer above.\n    // The status of rvalue references isn\'t entirely clear, but it looks like\n    // conversion to them is simply invalid.\n    // C++ 5.2.11p3: For two pointer types [...]\n    if (!CStyle)\n      msg = diag::err_bad_const_cast_dest;"},{s,2007,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  // ...\n  if (DestType->isFunctionPointerType() || DestType->isMemberFunctionPointerType()) {\n    // Cannot cast direct function pointers.\n    // C++ 5.2.11p2: [...] where T is any object type or the void type [...]\n    // T is the ultimate pointee of source and target type.\n    if (!CStyle)\n      msg = diag::err_bad_const_cast_dest;"}},
[h]={{t,1998,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  // ...\n  if (!DestType->isPointerType() && !DestType->isMemberPointerType() && !DestType->isObjCObjectPointerType()) {\n    // Cannot cast to non-pointer, non-reference type. Note that, if DestType\n    // was a reference type, we converted it to a pointer above.\n    // The status of rvalue references isn\'t entirely clear, but it looks like\n    // conversion to them is simply invalid.\n    // C++ 5.2.11p3: For two pointer types [...]\n    if (!CStyle)\n      msg = diag::err_bad_const_cast_dest;"},{t,2007,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  // ...\n  if (DestType->isFunctionPointerType() || DestType->isMemberFunctionPointerType()) {\n    // Cannot cast direct function pointers.\n    // C++ 5.2.11p2: [...] where T is any object type or the void type [...]\n    // T is the ultimate pointee of source and target type.\n    if (!CStyle)\n      msg = diag::err_bad_const_cast_dest;"}},
[j]={
[j]={
["clang/test/SemaCXX/const-cast.cpp"]={"clang/test/SemaCXX/const-cast.cpp:59:12: error: const_cast to \'char\', which is not a reference, pointer-to-object, or pointer-to-data-member","clang/test/SemaCXX/const-cast.cpp:71:11: error: const_cast to \'f\' (aka \'int (*)(int)\'), which is not a reference, pointer-to-object, or pointer-to-data-member","clang/test/SemaCXX/const-cast.cpp:73:9: error: const_cast to \'void (A::*)()\', which is not a reference, pointer-to-object, or pointer-to-data-member"}
["clang/test/SemaCXX/const-cast.cpp"]={"clang/test/SemaCXX/const-cast.cpp:59:12: error: const_cast to \'char\', which is not a reference, pointer-to-object, or pointer-to-data-member","clang/test/SemaCXX/const-cast.cpp:71:11: error: const_cast to \'f\' (aka \'int (*)(int)\'), which is not a reference, pointer-to-object, or pointer-to-data-member","clang/test/SemaCXX/const-cast.cpp:73:9: error: const_cast to \'void (A::*)()\', which is not a reference, pointer-to-object, or pointer-to-data-member"}
Line 4,639: Line 4,641:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"b491ed36b4ef",1298151169,"Handle the resolution of a reference to a function template (which\nincludes explicitly-specified tem...","Handle the resolution of a reference to a function template (which\nincludes explicitly-specified template arguments) to a function\ntemplate specialization in cases where no deduction is performed or\ndeduction fails. Patch by Faisal Vali, fixes PR7505!\n\nllvm-svn: 126048"},
[b]={"b491ed36b4ef",1298151169,"Handle the resolution of a reference to a function template (which","Handle the resolution of a reference to a function template (which\nincludes explicitly-specified template arguments) to a function\ntemplate specialization in cases where no deduction is performed or\ndeduction fails. Patch by Faisal Vali, fixes PR7505!\n\nllvm-svn: 126048"},
[h]={{s,2738,"void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle, bool ListInitialization) {\n  // ...\n  // C++ 5.2.9p4: Any expression can be explicitly converted to type \"cv void\".\n  // This test is outside everything else because it\'s the only case where\n  // a non-lvalue-reference target type does not lead to decay.\n  if (DestType->isVoidType()) {\n    // ...\n    if (claimPlaceholder(BuiltinType::Overload)) {\n      Self.ResolveAndFixSingleFunctionTemplateSpecialization(SrcExpr, /* Decay Function to ptr */ false,\n                                                            /* Complain */ true, DestRange, DestType, diag::err_bad_cstyle_cast_overload);"},{s,2848,"void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle, bool ListInitialization) {\n  // ...\n  if (tcr != TC_Success && msg != 0) {\n    if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {\n      // ...\n      if (Fn) {\n        // ...\n        Self.Diag(OpRange.getBegin(), diag::err_bad_cstyle_cast_overload) << OE->getName() << DestType << OpRange << OE->getQualifierLoc().getSourceRange();"}},
[h]={{t,2738,"void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle, bool ListInitialization) {\n  // ...\n  // C++ 5.2.9p4: Any expression can be explicitly converted to type \"cv void\".\n  // This test is outside everything else because it\'s the only case where\n  // a non-lvalue-reference target type does not lead to decay.\n  if (DestType->isVoidType()) {\n    // ...\n    if (claimPlaceholder(BuiltinType::Overload)) {\n      Self.ResolveAndFixSingleFunctionTemplateSpecialization(SrcExpr, /* Decay Function to ptr */ false,\n                                                            /* Complain */ true, DestRange, DestType, diag::err_bad_cstyle_cast_overload);"},{t,2848,"void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle, bool ListInitialization) {\n  // ...\n  if (tcr != TC_Success && msg != 0) {\n    if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {\n      // ...\n      if (Fn) {\n        // ...\n        Self.Diag(OpRange.getBegin(), diag::err_bad_cstyle_cast_overload) << OE->getName() << DestType << OpRange << OE->getQualifierLoc().getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp"]={"clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:68:16: error: address of overloaded function \'f\' cannot be cast to type \'FnType\' (aka \'void (int)\')"}
["clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp"]={"clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:68:16: error: address of overloaded function \'f\' cannot be cast to type \'FnType\' (aka \'void (int)\')"}
Line 4,651: Line 4,653:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"6f7c536e083b",1551978390,"[Sema] Change addr space diagnostics in casts to follow C++ style.\n\nThis change adds a new diagnosti...","[Sema] Change addr space diagnostics in casts to follow C++ style.\n\nThis change adds a new diagnostic for mismatching address spaces\nto be used for C++ casts (only enabled in C style cast for now,\nthe rest will follow!).\n\nThe change extends C-style cast rules to account for address spaces.\nIt also adds a separate function for address space cast checking that\ncan be used to map from a separate address space cast operator\naddrspace_cast (to be added as a follow up patch).\n\nNote, that after this change clang will no longer allows arbitrary\naddress space conversions in reinterpret_casts because they can lead\nto accidental errors. The implicit safe conversions would still be\nallowed.\n\nDifferential Revision: https://reviews.llvm.org/D58346\n\nllvm-svn: 355609"},
[b]={"6f7c536e083b",1551978390,"[Sema] Change addr space diagnostics in casts to follow C++ style.","[Sema] Change addr space diagnostics in casts to follow C++ style.\n\nThis change adds a new diagnostic for mismatching address spaces\nto be used for C++ casts (only enabled in C style cast for now,\nthe rest will follow!).\n\nThe change extends C-style cast rules to account for address spaces.\nIt also adds a separate function for address space cast checking that\ncan be used to map from a separate address space cast operator\naddrspace_cast (to be added as a follow up patch).\n\nNote, that after this change clang will no longer allows arbitrary\naddress space conversions in reinterpret_casts because they can lead\nto accidental errors. The implicit safe conversions would still be\nallowed.\n\nDifferential Revision: https://reviews.llvm.org/D58346\n\nllvm-svn: 355609"},
[h]={{s,2622,"static TryCastResult TryAddressSpaceCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (!DestPointeeType.isAddressSpaceOverlapping(SrcPointeeType)) {\n    msg = diag::err_bad_cxx_cast_addr_space_mismatch;"}},
[h]={{t,2622,"static TryCastResult TryAddressSpaceCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (!DestPointeeType.isAddressSpaceOverlapping(SrcPointeeType)) {\n    msg = diag::err_bad_cxx_cast_addr_space_mismatch;"}},
[j]={
[j]={
["clang/test/SemaOpenCLCXX/addrspace_cast.clcpp"]={"clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:11:20: error: addrspace_cast from \'__global int *__private\' to \'__local int *\' converts between mismatching address spaces","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:23:13: error: addrspace_cast from \'__global int *__private\' to \'__private int *\' converts between mismatching address spaces","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:24:23: error: addrspace_cast from \'__global int *__private\' to \'__private int *\' converts between mismatching address spaces"}
["clang/test/SemaOpenCLCXX/addrspace_cast.clcpp"]={"clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:11:20: error: addrspace_cast from \'__global int *__private\' to \'__local int *\' converts between mismatching address spaces","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:23:13: error: addrspace_cast from \'__global int *__private\' to \'__private int *\' converts between mismatching address spaces","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:24:23: error: addrspace_cast from \'__global int *__private\' to \'__private int *\' converts between mismatching address spaces"}
Line 4,663: Line 4,665:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"d25db7ed0f8e",1367876352,"Grab-bag of bit-field fixes:\n\n  - References to ObjC bit-field ivars are bit-field lvalues;\n    fixe...","Grab-bag of bit-field fixes:\n\n  - References to ObjC bit-field ivars are bit-field lvalues;\n    fixes rdar://13794269, which got me started down this.\n  - Introduce Expr::refersToBitField, switch a couple users to\n    it where semantically important, and comment the difference\n    between this and the existing API.\n  - Discourage Expr::getBitField by making it a bit longer and\n    less general-sounding.\n  - Lock down on const_casts of bit-field gl-values until we\n    hear back from the committee as to whether they\'re allowed.\n\nllvm-svn: 181252"},
[b]={"d25db7ed0f8e",1367876352,"Grab-bag of bit-field fixes:","Grab-bag of bit-field fixes:\n\n  - References to ObjC bit-field ivars are bit-field lvalues;\n    fixes rdar://13794269, which got me started down this.\n  - Introduce Expr::refersToBitField, switch a couple users to\n    it where semantically important, and comment the difference\n    between this and the existing API.\n  - Discourage Expr::getBitField by making it a bit longer and\n    less general-sounding.\n  - Lock down on const_casts of bit-field gl-values until we\n    hear back from the committee as to whether they\'re allowed.\n\nllvm-svn: 181252"},
[h]={{s,1978,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    // ...\n    // It\'s not completely clear under the standard whether we can\n    // const_cast bit-field gl-values.  Doing so would not be\n    // intrinsically complicated, but for now, we say no for\n    // consistency with other compilers and await the word of the\n    // committee.\n    if (SrcExpr.get()->refersToBitField()) {\n      msg = diag::err_bad_cxx_cast_bitfield;"},{s,2290,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    // ...\n    case OK_BitField:\n      msg = diag::err_bad_cxx_cast_bitfield;"}},
[h]={{t,1978,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    // ...\n    // It\'s not completely clear under the standard whether we can\n    // const_cast bit-field gl-values.  Doing so would not be\n    // intrinsically complicated, but for now, we say no for\n    // consistency with other compilers and await the word of the\n    // committee.\n    if (SrcExpr.get()->refersToBitField()) {\n      msg = diag::err_bad_cxx_cast_bitfield;"},{t,2290,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    // ...\n    case OK_BitField:\n      msg = diag::err_bad_cxx_cast_bitfield;"}},
[j]={
[j]={
["clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5.cpp:53:20: error: C-style cast from bit-field lvalue to reference type \'unsigned int &\'","clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5.cpp:54:20: error: const_cast from bit-field lvalue to reference type \'unsigned int &\'"}
["clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5.cpp:53:20: error: C-style cast from bit-field lvalue to reference type \'unsigned int &\'","clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5.cpp:54:20: error: const_cast from bit-field lvalue to reference type \'unsigned int &\'"}
Line 4,675: Line 4,677:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{s,521,"/// Diagnose a failed cast.\nstatic void diagnoseBadCast(Sema &S, unsigned msg, CastType castType, SourceRange opRange, Expr *src, QualType destType, bool listInitialization) {\n  if (msg == diag::err_bad_cxx_cast_generic && tryDiagnoseOverloadedCast(S, castType, opRange, src, destType, listInitialization))"},{s,966,"/// CheckConstCast - Check that a const_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.11 for details. const_cast is typically used in code\n/// like this:\n/// const char *str = \"literal\";\n/// legacy_function(const_cast\\<char*\\>(str));\nvoid CastOperation::CheckConstCast() {\n  // ...\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{s,977,"void CastOperation::CheckAddrspaceCast() {\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{s,1193,"/// CheckReinterpretCast - Check that a reinterpret_cast\\<DestType\\>(SrcExpr) is\n/// valid.\n/// Refer to C++ 5.2.10 for details. reinterpret_cast is typically used in code\n/// like this:\n/// char *bytes = reinterpret_cast\\<char*\\>(int_ptr);\nvoid CastOperation::CheckReinterpretCast() {\n  // ...\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{s,1265,"/// CheckStaticCast - Check that a static_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.9 for details. Static casts are mostly used for making\n/// implicit conversions explicit and getting rid of data loss warnings.\nvoid CastOperation::CheckStaticCast() {\n  // ...\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{s,2798,"void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle, bool ListInitialization) {\n  // ...\n  unsigned msg = diag::err_bad_cxx_cast_generic;"}},
[h]={{t,521,"/// Diagnose a failed cast.\nstatic void diagnoseBadCast(Sema &S, unsigned msg, CastType castType, SourceRange opRange, Expr *src, QualType destType, bool listInitialization) {\n  if (msg == diag::err_bad_cxx_cast_generic && tryDiagnoseOverloadedCast(S, castType, opRange, src, destType, listInitialization))"},{t,966,"/// CheckConstCast - Check that a const_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.11 for details. const_cast is typically used in code\n/// like this:\n/// const char *str = \"literal\";\n/// legacy_function(const_cast\\<char*\\>(str));\nvoid CastOperation::CheckConstCast() {\n  // ...\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{t,977,"void CastOperation::CheckAddrspaceCast() {\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{t,1193,"/// CheckReinterpretCast - Check that a reinterpret_cast\\<DestType\\>(SrcExpr) is\n/// valid.\n/// Refer to C++ 5.2.10 for details. reinterpret_cast is typically used in code\n/// like this:\n/// char *bytes = reinterpret_cast\\<char*\\>(int_ptr);\nvoid CastOperation::CheckReinterpretCast() {\n  // ...\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{t,1265,"/// CheckStaticCast - Check that a static_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.9 for details. Static casts are mostly used for making\n/// implicit conversions explicit and getting rid of data loss warnings.\nvoid CastOperation::CheckStaticCast() {\n  // ...\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{t,2798,"void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle, bool ListInitialization) {\n  // ...\n  unsigned msg = diag::err_bad_cxx_cast_generic;"}},
[j]={
[j]={
["clang/test/SemaOpenCLCXX/addrspace_cast.clcpp"]={"clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:5:19: error: addrspace_cast from \'__global int *__private\' to \'__generic float *\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:7:11: error: addrspace_cast from \'__global int *__private\' to \'int\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:9:14: error: addrspace_cast from \'__global int\' to \'__generic int *\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:13:15: error: addrspace_cast from \'const __global int *__private\' to \'__generic int *\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:16:18: error: addrspace_cast from \'__global int\' to \'__generic int &\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:25:12: error: addrspace_cast from \'__global int *__private\' to \'int\' is not allowed"}
["clang/test/SemaOpenCLCXX/addrspace_cast.clcpp"]={"clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:5:19: error: addrspace_cast from \'__global int *__private\' to \'__generic float *\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:7:11: error: addrspace_cast from \'__global int *__private\' to \'int\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:9:14: error: addrspace_cast from \'__global int\' to \'__generic int *\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:13:15: error: addrspace_cast from \'const __global int *__private\' to \'__generic int *\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:16:18: error: addrspace_cast from \'__global int\' to \'__generic int &\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:25:12: error: addrspace_cast from \'__global int *__private\' to \'int\' is not allowed"}
Line 4,687: Line 4,689:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"ebab1ed5d30c",1281936644,"Error out if reinterpret_casting between member pointers of two different\nsizes.\n\nllvm-svn: 111119","Error out if reinterpret_casting between member pointers of two different\nsizes.\n\nllvm-svn: 111119"},
[b]={"ebab1ed5d30c",1281936644,"Error out if reinterpret_casting between member pointers of two different","Error out if reinterpret_casting between member pointers of two different\nsizes.\n\nllvm-svn: 111119"},
[h]={{s,2340,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (DestMemPtr && SrcMemPtr) {\n    // ...\n    // Don\'t allow casting between member pointers of different sizes.\n    if (Self.Context.getTypeSize(DestMemPtr) != Self.Context.getTypeSize(SrcMemPtr)) {\n      msg = diag::err_bad_cxx_cast_member_pointer_size;"}},
[h]={{t,2340,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (DestMemPtr && SrcMemPtr) {\n    // ...\n    // Don\'t allow casting between member pointers of different sizes.\n    if (Self.Context.getTypeSize(DestMemPtr) != Self.Context.getTypeSize(SrcMemPtr)) {\n      msg = diag::err_bad_cxx_cast_member_pointer_size;"}},
[j]={
[j]={
["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:231:26: error: cannot reinterpret_cast from member pointer type \'int AA::*\' to member pointer type \'int Virtual::*\' of different size"}
["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:231:26: error: cannot reinterpret_cast from member pointer type \'int AA::*\' to member pointer type \'int Virtual::*\' of different size"}
Line 4,699: Line 4,701:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"b472e93af799",1302890394,"Implement appropriate semantics for C++ casting and conversion when\ndealing with address-space- and ...","Implement appropriate semantics for C++ casting and conversion when\ndealing with address-space- and GC-qualified pointers. Previously,\nthese qualifiers were being treated just like cvr-qualifiers (in some\ncases) or were completely ignored, leading to uneven behavior. For\nexample, const_cast would allow conversion between pointers to\ndifferent address spaces.\n\nThe new semantics are fairly simple: reinterpret_cast can be used to\nexplicitly cast between pointers to different address spaces\n(including adding/removing addresss spaces), while\nstatic_cast/dynamic_cast/const_cast do not tolerate any changes in the\naddress space. C-style casts can add/remove/change address spaces\nthrough the reinterpret_cast mechanism. Other non-CVR qualifiers\n(e.g., Objective-C GC qualifiers) work similarly.\n\nAs part of this change, I tweaked the \"casts away constness\"\ndiagnostic to use the term \"casts away qualifiers\". The term\n\"constness\" actually comes from the C++ standard, despite the fact\nthat removing \"volatile\" also falls under that category. In Clang, we\nalso have restrict, address spaces, ObjC GC attributes, etc., so the\nmore general \"qualifiers\" is clearer.\n\nllvm-svn: 129583"},
[b]={"b472e93af799",1302890394,"Implement appropriate semantics for C++ casting and conversion when","Implement appropriate semantics for C++ casting and conversion when\ndealing with address-space- and GC-qualified pointers. Previously,\nthese qualifiers were being treated just like cvr-qualifiers (in some\ncases) or were completely ignored, leading to uneven behavior. For\nexample, const_cast would allow conversion between pointers to\ndifferent address spaces.\n\nThe new semantics are fairly simple: reinterpret_cast can be used to\nexplicitly cast between pointers to different address spaces\n(including adding/removing addresss spaces), while\nstatic_cast/dynamic_cast/const_cast do not tolerate any changes in the\naddress space. C-style casts can add/remove/change address spaces\nthrough the reinterpret_cast mechanism. Other non-CVR qualifiers\n(e.g., Objective-C GC qualifiers) work similarly.\n\nAs part of this change, I tweaked the \"casts away constness\"\ndiagnostic to use the term \"casts away qualifiers\". The term\n\"constness\" actually comes from the C++ standard, despite the fact\nthat removing \"volatile\" also falls under that category. In Clang, we\nalso have restrict, address spaces, ObjC GC attributes, etc., so the\nmore general \"qualifiers\" is clearer.\n\nllvm-svn: 129583"},
[h]={{s,767,"static TryCastResult getCastAwayConstnessCastKind(CastAwayConstnessKind CACK, unsigned &DiagID) {\n  // ...\n  case CastAwayConstnessKind::CACK_SimilarKind:\n    DiagID = diag::err_bad_cxx_cast_qualifiers_away;"},{s,881,"/// 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  // C++ 5.2.7p1: The dynamic_cast operator shall not cast away constness.\n  if (!DestPointee.isAtLeastAsQualifiedAs(SrcPointee)) {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_qualifiers_away) << CT_Dynamic << OrigSrcType << this->DestType << OpRange;"},{s,1455,"/// TryStaticCast - Check if a static cast can be performed, and do so if\n/// possible. If @p CStyle, ignore access restrictions on hierarchy casting\n/// and casting away constness.\nstatic TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath, bool ListInitialization) {\n  // ...\n  // Reverse pointer conversion to void*. C++ 4.10.p2 specifies conversion to\n  // void*. C++ 5.2.9p10 specifies additional restrictions, which really is\n  // just the usual constness stuff.\n  if (const PointerType *SrcPointer = SrcType->getAs<PointerType>()) {\n    // ...\n    if (SrcPointee->isVoidType()) {\n      if (const PointerType *DestPointer = DestType->getAs<PointerType>()) {\n        // ...\n        if (DestPointee->isIncompleteOrObjectType()) {\n          // This is definitely the intended conversion, but it might fail due\n          // to a qualifier violation. Note that we permit Objective-C lifetime\n          // and GC qualifier mismatches here.\n          if (!CStyle) {\n            // ...\n            if (DestPointeeQuals != SrcPointeeQuals && !DestPointeeQuals.compatiblyIncludes(SrcPointeeQuals)) {\n              msg = diag::err_bad_cxx_cast_qualifiers_away;"},{s,1687,"/// 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  // Must preserve cv, as always, unless we\'re in C-style mode.\n  if (!CStyle && !DestType.isAtLeastAsQualifiedAs(SrcType)) {\n    msg = diag::err_bad_cxx_cast_qualifiers_away;"}},
[h]={{t,767,"static TryCastResult getCastAwayConstnessCastKind(CastAwayConstnessKind CACK, unsigned &DiagID) {\n  // ...\n  case CastAwayConstnessKind::CACK_SimilarKind:\n    DiagID = diag::err_bad_cxx_cast_qualifiers_away;"},{t,881,"/// 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  // C++ 5.2.7p1: The dynamic_cast operator shall not cast away constness.\n  if (!DestPointee.isAtLeastAsQualifiedAs(SrcPointee)) {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_qualifiers_away) << CT_Dynamic << OrigSrcType << this->DestType << OpRange;"},{t,1455,"/// TryStaticCast - Check if a static cast can be performed, and do so if\n/// possible. If @p CStyle, ignore access restrictions on hierarchy casting\n/// and casting away constness.\nstatic TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath, bool ListInitialization) {\n  // ...\n  // Reverse pointer conversion to void*. C++ 4.10.p2 specifies conversion to\n  // void*. C++ 5.2.9p10 specifies additional restrictions, which really is\n  // just the usual constness stuff.\n  if (const PointerType *SrcPointer = SrcType->getAs<PointerType>()) {\n    // ...\n    if (SrcPointee->isVoidType()) {\n      if (const PointerType *DestPointer = DestType->getAs<PointerType>()) {\n        // ...\n        if (DestPointee->isIncompleteOrObjectType()) {\n          // This is definitely the intended conversion, but it might fail due\n          // to a qualifier violation. Note that we permit Objective-C lifetime\n          // and GC qualifier mismatches here.\n          if (!CStyle) {\n            // ...\n            if (DestPointeeQuals != SrcPointeeQuals && !DestPointeeQuals.compatiblyIncludes(SrcPointeeQuals)) {\n              msg = diag::err_bad_cxx_cast_qualifiers_away;"},{t,1687,"/// 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  // Must preserve cv, as always, unless we\'re in C-style mode.\n  if (!CStyle && !DestType.isAtLeastAsQualifiedAs(SrcType)) {\n    msg = diag::err_bad_cxx_cast_qualifiers_away;"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp"]={"clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:8:9: error: reinterpret_cast from \'const int *X::*Y::**\' to \'int *X::*Y::**\' casts away qualifiers","clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:10:9: error: reinterpret_cast from \'const int *X::*Y::**\' to \'float *X::*Y::**\' casts away qualifiers","clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:12:9: error: reinterpret_cast from \'const int *X::*Y::**\' to \'int *Y::*X::**\' casts away qualifiers"}
["clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp"]={"clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:8:9: error: reinterpret_cast from \'const int *X::*Y::**\' to \'int *X::*Y::**\' casts away qualifiers","clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:10:9: error: reinterpret_cast from \'const int *X::*Y::**\' to \'float *X::*Y::**\' casts away qualifiers","clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:12:9: error: reinterpret_cast from \'const int *X::*Y::**\' to \'int *Y::*X::**\' casts away qualifiers"}
Line 4,711: Line 4,713:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{s,845,"/// 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  if (DestPointer) {\n  // ...\n  } else if (DestReference->isLValueReferenceType()) {\n    if (!SrcExpr.get()->isLValue()) {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_rvalue) << CT_Dynamic << OrigSrcType << this->DestType << OpRange;"},{s,1595,"/// Tests whether a conversion according to C++ 5.2.9p5 is valid.\nTryCastResult TryStaticReferenceDowncast(Sema &Self, Expr *SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  // ...\n  if (!RValueRef && !SrcExpr->isLValue()) {\n    // ...\n    msg = diag::err_bad_cxx_cast_rvalue;"},{s,1955,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    // ...\n    if (isa<LValueReferenceType>(DestTypeTmp) && !SrcExpr.get()->isLValue()) {\n      // ...\n      msg = diag::err_bad_cxx_cast_rvalue;"},{s,1963,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    // ...\n    if (isa<RValueReferenceType>(DestTypeTmp) && SrcExpr.get()->isPRValue()) {\n      if (!SrcType->isRecordType()) {\n        // ...\n        msg = diag::err_bad_cxx_cast_rvalue;"},{s,2272,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    if (!SrcExpr.get()->isGLValue()) {\n      // ...\n      msg = diag::err_bad_cxx_cast_rvalue;"}},
[h]={{t,845,"/// 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  if (DestPointer) {\n  // ...\n  } else if (DestReference->isLValueReferenceType()) {\n    if (!SrcExpr.get()->isLValue()) {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_rvalue) << CT_Dynamic << OrigSrcType << this->DestType << OpRange;"},{t,1595,"/// Tests whether a conversion according to C++ 5.2.9p5 is valid.\nTryCastResult TryStaticReferenceDowncast(Sema &Self, Expr *SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  // ...\n  if (!RValueRef && !SrcExpr->isLValue()) {\n    // ...\n    msg = diag::err_bad_cxx_cast_rvalue;"},{t,1955,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    // ...\n    if (isa<LValueReferenceType>(DestTypeTmp) && !SrcExpr.get()->isLValue()) {\n      // ...\n      msg = diag::err_bad_cxx_cast_rvalue;"},{t,1963,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    // ...\n    if (isa<RValueReferenceType>(DestTypeTmp) && SrcExpr.get()->isPRValue()) {\n      if (!SrcType->isRecordType()) {\n        // ...\n        msg = diag::err_bad_cxx_cast_rvalue;"},{t,2272,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    if (!SrcExpr.get()->isGLValue()) {\n      // ...\n      msg = diag::err_bad_cxx_cast_rvalue;"}},
[j]={
[j]={
[Ab]={"clang/test/SemaCXX/dynamic-cast.cpp:41:9: error: dynamic_cast from rvalue to reference type \'A &\'"}
[zb]={"clang/test/SemaCXX/dynamic-cast.cpp:41:9: error: dynamic_cast from rvalue to reference type \'A &\'"}
}
}
},
},
Line 4,723: Line 4,725:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"570af5d42678",1253128783,Gb,Gb},
[b]={"570af5d42678",1253128783,"Improve handling of vector casts in C++.","Improve handling of vector casts in C++.\n\nllvm-svn: 82072"},
[h]={{s,2419,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (srcIsVector || destIsVector) {\n    // ...\n    // Otherwise, pick a reasonable diagnostic.\n    if (!destIsVector)\n    // ...\n    else if (!srcIsVector)\n      msg = diag::err_bad_cxx_cast_scalar_to_vector_different_size;"}},
[h]={{t,2419,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (srcIsVector || destIsVector) {\n    // ...\n    // Otherwise, pick a reasonable diagnostic.\n    if (!destIsVector)\n    // ...\n    else if (!srcIsVector)\n      msg = diag::err_bad_cxx_cast_scalar_to_vector_different_size;"}},
[j]={
[j]={
["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:42:9: error: reinterpret_cast from scalar \'unsigned char\' to vector \'__v2si\' (vector of 2 \'int\' values) of different size"}
["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:42:9: error: reinterpret_cast from scalar \'unsigned char\' to vector \'__v2si\' (vector of 2 \'int\' values) of different size"}
Line 4,735: Line 4,737:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"ffa7dc379f2e",1422480686,"PR 17456\nMore helpful diagnostic on casts between unrelated class hierarchies.\n\nllvm-svn: 227371","PR 17456\nMore helpful diagnostic on casts between unrelated class hierarchies.\n\nllvm-svn: 227371"},
[b]={"ffa7dc379f2e",1422480686,"PR 17456","PR 17456\nMore helpful diagnostic on casts between unrelated class hierarchies.\n\nllvm-svn: 227371"},
[h]={{s,1505,"/// TryStaticCast - Check if a static cast can be performed, and do so if\n/// possible. If @p CStyle, ignore access restrictions on hierarchy casting\n/// and casting away constness.\nstatic TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath, bool ListInitialization) {\n  // ...\n  // See if it looks like the user is trying to convert between\n  // related record types, and select a better diagnostic if so.\n  if (auto SrcPointer = SrcType->getAs<PointerType>())\n    if (auto DestPointer = DestType->getAs<PointerType>())\n      if (SrcPointer->getPointeeType()->getAs<RecordType>() && DestPointer->getPointeeType()->getAs<RecordType>())\n        msg = diag::err_bad_cxx_cast_unrelated_class;"}},
[h]={{t,1505,"/// TryStaticCast - Check if a static cast can be performed, and do so if\n/// possible. If @p CStyle, ignore access restrictions on hierarchy casting\n/// and casting away constness.\nstatic TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath, bool ListInitialization) {\n  // ...\n  // See if it looks like the user is trying to convert between\n  // related record types, and select a better diagnostic if so.\n  if (auto SrcPointer = SrcType->getAs<PointerType>())\n    if (auto DestPointer = DestType->getAs<PointerType>())\n      if (SrcPointer->getPointeeType()->getAs<RecordType>() && DestPointer->getPointeeType()->getAs<RecordType>())\n        msg = diag::err_bad_cxx_cast_unrelated_class;"}},
[j]={
[j]={
["clang/test/SemaCXX/address-space-conversion.cpp"]={"clang/test/SemaCXX/address-space-conversion.cpp:72:9: error: static_cast from \'B_ptr_1\' (aka \'__attribute__((address_space(1))) B *\') to \'A_ptr\' (aka \'A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:73:9: error: static_cast from \'B_ptr_2\' (aka \'__attribute__((address_space(2))) B *\') to \'A_ptr\' (aka \'A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:74:9: error: static_cast from \'B_ptr\' (aka \'B *\') to \'A_ptr_1\' (aka \'__attribute__((address_space(1))) A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:75:9: error: static_cast from \'B_ptr_2\' (aka \'__attribute__((address_space(2))) B *\') to \'A_ptr_1\' (aka \'__attribute__((address_space(1))) A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:76:9: error: static_cast from \'B_ptr\' (aka \'B *\') to \'A_ptr_2\' (aka \'__attribute__((address_space(2))) A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:77:9: error: static_cast from \'B_ptr_1\' (aka \'__attribute__((address_space(1))) B *\') to \'A_ptr_2\' (aka \'__attribute__((address_space(2))) A *\'), which are not related by inheritance, is not allowed"}
["clang/test/SemaCXX/address-space-conversion.cpp"]={"clang/test/SemaCXX/address-space-conversion.cpp:72:9: error: static_cast from \'B_ptr_1\' (aka \'__attribute__((address_space(1))) B *\') to \'A_ptr\' (aka \'A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:73:9: error: static_cast from \'B_ptr_2\' (aka \'__attribute__((address_space(2))) B *\') to \'A_ptr\' (aka \'A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:74:9: error: static_cast from \'B_ptr\' (aka \'B *\') to \'A_ptr_1\' (aka \'__attribute__((address_space(1))) A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:75:9: error: static_cast from \'B_ptr_2\' (aka \'__attribute__((address_space(2))) B *\') to \'A_ptr_1\' (aka \'__attribute__((address_space(1))) A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:76:9: error: static_cast from \'B_ptr\' (aka \'B *\') to \'A_ptr_2\' (aka \'__attribute__((address_space(2))) A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:77:9: error: static_cast from \'B_ptr_1\' (aka \'__attribute__((address_space(1))) B *\') to \'A_ptr_2\' (aka \'__attribute__((address_space(2))) A *\'), which are not related by inheritance, is not allowed"}
Line 4,747: Line 4,749:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"570af5d42678",1253128783,Gb,Gb},
[b]={"570af5d42678",1253128783,"Improve handling of vector casts in C++.","Improve handling of vector casts in C++.\n\nllvm-svn: 82072"},
[h]={{s,2417,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (srcIsVector || destIsVector) {\n    // ...\n    // Otherwise, pick a reasonable diagnostic.\n    if (!destIsVector)\n      msg = diag::err_bad_cxx_cast_vector_to_scalar_different_size;"}},
[h]={{t,2417,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (srcIsVector || destIsVector) {\n    // ...\n    // Otherwise, pick a reasonable diagnostic.\n    if (!destIsVector)\n      msg = diag::err_bad_cxx_cast_vector_to_scalar_different_size;"}},
[j]={
[j]={
["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:40:9: error: reinterpret_cast from vector \'__v2si\' (vector of 2 \'int\' values) to scalar \'unsigned char\' of different size","clang/test/SemaCXX/vector-casts.cpp:41:9: error: C-style cast from vector \'__v2si\' (vector of 2 \'int\' values) to scalar \'unsigned char\' of different size"}
["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:40:9: error: reinterpret_cast from vector \'__v2si\' (vector of 2 \'int\' values) to scalar \'unsigned char\' of different size","clang/test/SemaCXX/vector-casts.cpp:41:9: error: C-style cast from vector \'__v2si\' (vector of 2 \'int\' values) to scalar \'unsigned char\' of different size"}
Line 4,759: Line 4,761:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"570af5d42678",1253128783,Gb,Gb},
[b]={"570af5d42678",1253128783,"Improve handling of vector casts in C++.","Improve handling of vector casts in C++.\n\nllvm-svn: 82072"},
[h]={{s,2421,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (srcIsVector || destIsVector) {\n    // ...\n    // Otherwise, pick a reasonable diagnostic.\n    if (!destIsVector)\n    // ...\n    else if (!srcIsVector)\n    // ...\n    else\n      msg = diag::err_bad_cxx_cast_vector_to_vector_different_size;"}},
[h]={{t,2421,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (srcIsVector || destIsVector) {\n    // ...\n    // Otherwise, pick a reasonable diagnostic.\n    if (!destIsVector)\n    // ...\n    else if (!srcIsVector)\n    // ...\n    else\n      msg = diag::err_bad_cxx_cast_vector_to_vector_different_size;"}},
[j]={
[j]={
["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:44:9: error: reinterpret_cast from vector \'__v4hi\' (vector of 4 \'short\' values) to vector \'__v8hi\' (vector of 8 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:45:9: error: C-style cast from vector \'__v4hi\' (vector of 4 \'short\' values) to vector \'__v8hi\' (vector of 8 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:46:9: error: reinterpret_cast from vector \'__v8hi\' (vector of 8 \'short\' values) to vector \'__v4hi\' (vector of 4 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:47:9: error: C-style cast from vector \'__v8hi\' (vector of 8 \'short\' values) to vector \'__v4hi\' (vector of 4 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:49:9: error: C-style cast from vector \'__v4hi\' (vector of 4 \'short\' values) to vector \'__v3hi\' (vector of 3 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:50:9: error: C-style cast from vector \'__v2si\' (vector of 2 \'int\' values) to vector \'__v3hi\' (vector of 3 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:51:9: error: C-style cast from vector \'__v3hi\' (vector of 3 \'short\' values) to vector \'__v4hi\' (vector of 4 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:52:9: error: C-style cast from vector \'__v3hi\' (vector of 3 \'short\' values) to vector \'__v2si\' (vector of 2 \'int\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:53:9: error: reinterpret_cast from vector \'__v4hi\' (vector of 4 \'short\' values) to vector \'__v3hi\' (vector of 3 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:54:9: error: reinterpret_cast from vector \'__v2si\' (vector of 2 \'int\' values) to vector \'__v3hi\' (vector of 3 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:55:9: error: reinterpret_cast from vector \'__v3hi\' (vector of 3 \'short\' values) to vector \'__v4hi\' (vector of 4 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:56:9: error: reinterpret_cast from vector \'__v3hi\' (vector of 3 \'short\' values) to vector \'__v2si\' (vector of 2 \'int\' values) of different size"}
["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:44:9: error: reinterpret_cast from vector \'__v4hi\' (vector of 4 \'short\' values) to vector \'__v8hi\' (vector of 8 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:45:9: error: C-style cast from vector \'__v4hi\' (vector of 4 \'short\' values) to vector \'__v8hi\' (vector of 8 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:46:9: error: reinterpret_cast from vector \'__v8hi\' (vector of 8 \'short\' values) to vector \'__v4hi\' (vector of 4 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:47:9: error: C-style cast from vector \'__v8hi\' (vector of 8 \'short\' values) to vector \'__v4hi\' (vector of 4 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:49:9: error: C-style cast from vector \'__v4hi\' (vector of 4 \'short\' values) to vector \'__v3hi\' (vector of 3 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:50:9: error: C-style cast from vector \'__v2si\' (vector of 2 \'int\' values) to vector \'__v3hi\' (vector of 3 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:51:9: error: C-style cast from vector \'__v3hi\' (vector of 3 \'short\' values) to vector \'__v4hi\' (vector of 4 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:52:9: error: C-style cast from vector \'__v3hi\' (vector of 3 \'short\' values) to vector \'__v2si\' (vector of 2 \'int\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:53:9: error: reinterpret_cast from vector \'__v4hi\' (vector of 4 \'short\' values) to vector \'__v3hi\' (vector of 3 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:54:9: error: reinterpret_cast from vector \'__v2si\' (vector of 2 \'int\' values) to vector \'__v3hi\' (vector of 3 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:55:9: error: reinterpret_cast from vector \'__v3hi\' (vector of 3 \'short\' values) to vector \'__v4hi\' (vector of 4 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:56:9: error: reinterpret_cast from vector \'__v3hi\' (vector of 3 \'short\' values) to vector \'__v2si\' (vector of 2 \'int\' values) of different size"}
Line 4,771: Line 4,773:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{s,822,"/// 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  if (DestPointee->isVoidType()) {\n  // ...\n  } else if (DestRecord) {\n  // ...\n  } else {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class) << DestPointee.getUnqualifiedType() << DestRange;"},{s,867,"/// 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  if (SrcRecord) {\n  // ...\n  } else {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class) << SrcPointee.getUnqualifiedType() << SrcExpr.get()->getSourceRange();"}},
[h]={{t,822,"/// 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  if (DestPointee->isVoidType()) {\n  // ...\n  } else if (DestRecord) {\n  // ...\n  } else {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class) << DestPointee.getUnqualifiedType() << DestRange;"},{t,867,"/// 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  if (SrcRecord) {\n  // ...\n  } else {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class) << SrcPointee.getUnqualifiedType() << SrcExpr.get()->getSourceRange();"}},
[j]={
[j]={
[Ab]={"clang/test/SemaCXX/dynamic-cast.cpp:29:9: error: \'int\' is not a class type","clang/test/SemaCXX/dynamic-cast.cpp:31:9: error: \'int\' is not a class type","clang/test/SemaCXX/dynamic-cast.cpp:33:9: error: \'int\' is not a class type","clang/test/SemaCXX/dynamic-cast.cpp:35:9: error: \'int\' is not a class type"}
[zb]={"clang/test/SemaCXX/dynamic-cast.cpp:29:9: error: \'int\' is not a class type","clang/test/SemaCXX/dynamic-cast.cpp:31:9: error: \'int\' is not a class type","clang/test/SemaCXX/dynamic-cast.cpp:33:9: error: \'int\' is not a class type","clang/test/SemaCXX/dynamic-cast.cpp:35:9: error: \'int\' is not a class type"}
}
}
},
},
Line 4,783: Line 4,785:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{s,913,"/// 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  if (!cast<CXXRecordDecl>(SrcDecl)->isPolymorphic()) {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_polymorphic) << SrcPointee.getUnqualifiedType() << SrcExpr.get()->getSourceRange();"}},
[h]={{t,913,"/// 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  if (!cast<CXXRecordDecl>(SrcDecl)->isPolymorphic()) {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_polymorphic) << SrcPointee.getUnqualifiedType() << SrcExpr.get()->getSourceRange();"}},
[j]={
[j]={
[Ab]={"clang/test/SemaCXX/dynamic-cast.cpp:74:9: error: \'A\' is not polymorphic","clang/test/SemaCXX/dynamic-cast.cpp:75:9: error: \'A\' is not polymorphic"}
[zb]={"clang/test/SemaCXX/dynamic-cast.cpp:74:9: error: \'A\' is not polymorphic","clang/test/SemaCXX/dynamic-cast.cpp:75:9: error: \'A\' is not polymorphic"}
}
}
},
},
Line 4,795: Line 4,797:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{s,838,"/// 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  if (DestPointer) {\n    if (const PointerType *SrcPointer = SrcType->getAs<PointerType>()) {\n    // ...\n    } else {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ptr) << OrigSrcType << this->DestType << SrcExpr.get()->getSourceRange();"}},
[h]={{t,838,"/// 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  if (DestPointer) {\n    if (const PointerType *SrcPointer = SrcType->getAs<PointerType>()) {\n    // ...\n    } else {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ptr) << OrigSrcType << this->DestType << SrcExpr.get()->getSourceRange();"}},
[j]={
[j]={
[Ab]={"clang/test/SemaCXX/dynamic-cast.cpp:27:9: error: cannot use dynamic_cast to convert from \'int\' to \'A *\'"}
[zb]={"clang/test/SemaCXX/dynamic-cast.cpp:27:9: error: cannot use dynamic_cast to convert from \'int\' to \'A *\'"}
}
}
},
},
Line 4,807: Line 4,809:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{s,805,"/// 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  if (DestPointer) {\n  // ...\n  } else if ((DestReference = DestType->getAs<ReferenceType>())) {\n  // ...\n  } else {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ref_or_ptr) << this->DestType << DestRange;"}},
[h]={{t,805,"/// 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  if (DestPointer) {\n  // ...\n  } else if ((DestReference = DestType->getAs<ReferenceType>())) {\n  // ...\n  } else {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ref_or_ptr) << this->DestType << DestRange;"}},
[j]={
[j]={
[Ab]={"clang/test/SemaCXX/dynamic-cast.cpp:25:9: error: invalid target type \'A\' for dynamic_cast; target type must be a reference or pointer type to a defined class"}
[zb]={"clang/test/SemaCXX/dynamic-cast.cpp:25:9: error: invalid target type \'A\' for dynamic_cast; target type must be a reference or pointer type to a defined class"}
}
}
},
},
Line 4,819: Line 4,821:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL\n\nbool, half, pointers and structs / unions co...","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"},
[b]={"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"},
[h]={{n,9480,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  // ...\n  case InvalidKernelParam:\n    // OpenCL v1.2 s6.8 n:\n    // A kernel function argument cannot be declared\n    // of event_t type.\n    // Do not diagnose half type since it is diagnosed as invalid argument\n    // type for any function elsewhere.\n    if (!PT->isHalfType()) {\n      S.Diag(Param->getLocation(), diag::err_bad_kernel_param_type) << PT;"},{n,9582,"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      // ...\n      } else {\n        S.Diag(Param->getLocation(), diag::err_bad_kernel_param_type) << PT;"}},
[h]={{m,9480,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  // ...\n  case InvalidKernelParam:\n    // OpenCL v1.2 s6.8 n:\n    // A kernel function argument cannot be declared\n    // of event_t type.\n    // Do not diagnose half type since it is diagnosed as invalid argument\n    // type for any function elsewhere.\n    if (!PT->isHalfType()) {\n      S.Diag(Param->getLocation(), diag::err_bad_kernel_param_type) << PT;"},{m,9582,"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      // ...\n      } else {\n        S.Diag(Param->getLocation(), diag::err_bad_kernel_param_type) << PT;"}},
[j]={
[j]={
["clang/test/SemaOpenCL/event_t.cl"]={"clang/test/SemaOpenCL/event_t.cl:11:25: error: \'__private event_t\' cannot be used as the type of a kernel parameter"}
["clang/test/SemaOpenCL/event_t.cl"]={"clang/test/SemaOpenCL/event_t.cl:11:25: error: \'__private event_t\' cannot be used as the type of a kernel parameter"}
Line 4,831: Line 4,833:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e97585f7177e",1237761006,"Implement static_cast from lvalue to rvalue reference.\n\nllvm-svn: 67487","Implement static_cast from lvalue to rvalue reference.\n\nllvm-svn: 67487"},
[b]={"e97585f7177e",1237761006,"Implement static_cast from lvalue to rvalue reference.","Implement static_cast from lvalue to rvalue reference.\n\nllvm-svn: 67487"},
[h]={{s,1553,"/// Tests whether a conversion according to N2844 is valid.\nTryCastResult TryLValueToRValueCast(Sema &Self, Expr *SrcExpr, QualType DestType, bool CStyle, CastKind &Kind, CXXCastPath &BasePath, unsigned &msg) {\n  // ...\n  if (RefResult != Sema::Ref_Compatible) {\n    // ...\n    msg = SrcExpr->isLValue() ? diag::err_bad_lvalue_to_rvalue_cast : diag::err_bad_rvalue_to_rvalue_cast;"}},
[h]={{t,1553,"/// Tests whether a conversion according to N2844 is valid.\nTryCastResult TryLValueToRValueCast(Sema &Self, Expr *SrcExpr, QualType DestType, bool CStyle, CastKind &Kind, CXXCastPath &BasePath, unsigned &msg) {\n  // ...\n  if (RefResult != Sema::Ref_Compatible) {\n    // ...\n    msg = SrcExpr->isLValue() ? diag::err_bad_lvalue_to_rvalue_cast : diag::err_bad_rvalue_to_rvalue_cast;"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.post/expr.static.cast/p3-p4-0x.cpp"]={"clang/test/CXX/expr/expr.post/expr.static.cast/p3-p4-0x.cpp:32:13: error: cannot cast from lvalue of type \'const A\' to rvalue reference type \'A &&\'; types are not compatible"}
["clang/test/CXX/expr/expr.post/expr.static.cast/p3-p4-0x.cpp"]={"clang/test/CXX/expr/expr.post/expr.static.cast/p3-p4-0x.cpp:32:13: error: cannot cast from lvalue of type \'const A\' to rvalue reference type \'A &&\'; types are not compatible"}
Line 4,843: Line 4,845:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{t,6022,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  if (isIndirect) {\n    if (const PointerType *Ptr = LHSType->getAs<PointerType>())\n    // ...\n    else {\n      Diag(Loc, diag::err_bad_memptr_lhs) << OpSpelling << 1 << LHSType << FixItHint::CreateReplacement(SourceRange(Loc), \".*\");"},{t,6031,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  if (!Context.hasSameUnqualifiedType(Class, LHSType)) {\n    // ...\n    if (RequireCompleteType(Loc, LHSType, diag::err_bad_memptr_lhs, OpSpelling, (int)isIndirect)) {"},{t,6037,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  if (!Context.hasSameUnqualifiedType(Class, LHSType)) {\n    // ...\n    if (!IsDerivedFrom(Loc, LHSType, Class)) {\n      Diag(Loc, diag::err_bad_memptr_lhs) << OpSpelling << (int)isIndirect << LHS.get()->getType();"}},
[h]={{u,6022,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  if (isIndirect) {\n    if (const PointerType *Ptr = LHSType->getAs<PointerType>())\n    // ...\n    else {\n      Diag(Loc, diag::err_bad_memptr_lhs) << OpSpelling << 1 << LHSType << FixItHint::CreateReplacement(SourceRange(Loc), \".*\");"},{u,6031,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  if (!Context.hasSameUnqualifiedType(Class, LHSType)) {\n    // ...\n    if (RequireCompleteType(Loc, LHSType, diag::err_bad_memptr_lhs, OpSpelling, (int)isIndirect)) {"},{u,6037,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  if (!Context.hasSameUnqualifiedType(Class, LHSType)) {\n    // ...\n    if (!IsDerivedFrom(Loc, LHSType, Class)) {\n      Diag(Loc, diag::err_bad_memptr_lhs) << OpSpelling << (int)isIndirect << LHS.get()->getType();"}},
[j]={
[j]={
["clang/test/SemaCXX/member-pointer.cpp"]={"clang/test/SemaCXX/member-pointer.cpp:116:12: error: left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is \'HasMembers\'","clang/test/SemaCXX/member-pointer.cpp:117:13: error: left hand operand to .* must be a class compatible with the right hand operand, but is \'HasMembers *\'","clang/test/SemaCXX/member-pointer.cpp:118:11: error: left hand operand to .* must be a class compatible with the right hand operand, but is \'int\'","clang/test/SemaCXX/member-pointer.cpp:120:13: error: left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is \'int *\'","clang/test/SemaCXX/member-pointer.cpp:170:18: error: left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is \'X\'"}
["clang/test/SemaCXX/member-pointer.cpp"]={"clang/test/SemaCXX/member-pointer.cpp:116:12: error: left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is \'HasMembers\'","clang/test/SemaCXX/member-pointer.cpp:117:13: error: left hand operand to .* must be a class compatible with the right hand operand, but is \'HasMembers *\'","clang/test/SemaCXX/member-pointer.cpp:118:11: error: left hand operand to .* must be a class compatible with the right hand operand, but is \'int\'","clang/test/SemaCXX/member-pointer.cpp:120:13: error: left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is \'int *\'","clang/test/SemaCXX/member-pointer.cpp:170:18: error: left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is \'X\'"}
Line 4,855: Line 4,857:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{t,6000,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  if (!MemPtr) {\n    Diag(Loc, diag::err_bad_memptr_rhs) << OpSpelling << RHSType << RHS.get()->getSourceRange();"}},
[h]={{u,6000,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  if (!MemPtr) {\n    Diag(Loc, diag::err_bad_memptr_rhs) << OpSpelling << RHSType << RHS.get()->getSourceRange();"}},
[j]={
[j]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp:20:4: error: right hand operand to .* has non-pointer-to-member type \'int *\'"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp:20:4: error: right hand operand to .* has non-pointer-to-member type \'int *\'"}
Line 4,867: Line 4,869:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"281d20b601c8",1515447257,"Implement Attribute Target MultiVersioning\n\nGCC\'s attribute \'target\', in addition to being an optimi...","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"},
[b]={"281d20b601c8",1515447257,"Implement Attribute Target MultiVersioning","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"},
[h]={{n,10957,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  // ...\n  if (TA) {\n    // ...\n    if (!ParseInfo.CPU.empty() && !TargetInfo.validateCpuIs(ParseInfo.CPU)) {\n      S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Architecture << ParseInfo.CPU;"},{n,10964,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  // ...\n  if (TA) {\n    // ...\n    for (const auto &Feat : ParseInfo.Features) {\n      // ...\n      if (Feat[0] == \'-\') {\n        S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Feature << (\"no-\" + BareFeat).str();"},{n,10971,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  // ...\n  if (TA) {\n    // ...\n    for (const auto &Feat : ParseInfo.Features) {\n      // ...\n      if (!TargetInfo.validateCpuSupports(BareFeat) || !TargetInfo.isValidFeatureName(BareFeat)) {\n        S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Feature << BareFeat;"},{n,10983,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  // ...\n  if (TVA) {\n    // ...\n    for (const auto &Feat : Feats) {\n      if (!TargetInfo.validateCpuSupports(Feat)) {\n        S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Feature << Feat;"}},
[h]={{m,10957,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  // ...\n  if (TA) {\n    // ...\n    if (!ParseInfo.CPU.empty() && !TargetInfo.validateCpuIs(ParseInfo.CPU)) {\n      S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Architecture << ParseInfo.CPU;"},{m,10964,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  // ...\n  if (TA) {\n    // ...\n    for (const auto &Feat : ParseInfo.Features) {\n      // ...\n      if (Feat[0] == \'-\') {\n        S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Feature << (\"no-\" + BareFeat).str();"},{m,10971,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  // ...\n  if (TA) {\n    // ...\n    for (const auto &Feat : ParseInfo.Features) {\n      // ...\n      if (!TargetInfo.validateCpuSupports(BareFeat) || !TargetInfo.isValidFeatureName(BareFeat)) {\n        S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Feature << BareFeat;"},{m,10983,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  // ...\n  if (TVA) {\n    // ...\n    for (const auto &Feat : Feats) {\n      if (!TargetInfo.validateCpuSupports(Feat)) {\n        S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Feature << Feat;"}},
[j]={
[j]={
["clang/test/SemaCXX/attr-target-mv.cpp"]={"clang/test/SemaCXX/attr-target-mv.cpp:7:43: error: function multiversioning doesn\'t support feature \'no-sse4.2\'"}
["clang/test/SemaCXX/attr-target-mv.cpp"]={"clang/test/SemaCXX/attr-target-mv.cpp:7:43: error: function multiversioning doesn\'t support feature \'no-sse4.2\'"}
Line 4,879: Line 4,881:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{t,2458,"/// 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  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //  abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n    return Diag(Loc, diag::err_bad_new_type) << AllocType << 0 << R;"},{t,2461,"/// 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  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //  abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n  // ...\n  else if (AllocType->isReferenceType())\n    return Diag(Loc, diag::err_bad_new_type) << AllocType << 1 << R;"}},
[h]={{u,2458,"/// 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  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //  abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n    return Diag(Loc, diag::err_bad_new_type) << AllocType << 0 << R;"},{u,2461,"/// 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  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //  abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n  // ...\n  else if (AllocType->isReferenceType())\n    return Diag(Loc, diag::err_bad_new_type) << AllocType << 1 << R;"}},
[j]={
[j]={
["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:140:13: error: cannot allocate reference type \'int &\' with new"}
["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:140:13: error: cannot allocate reference type \'int &\' with new"}
Line 4,891: Line 4,893:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"a56cbccfc413",1288746426,"Provide an error when a non-identifier name (such as an operator) is used as a\nparameter name.\n\nFixe...","Provide an error when a non-identifier name (such as an operator) is used as a\nparameter name.\n\nFixes PR8012.\n\nllvm-svn: 118138"},
[b]={"a56cbccfc413",1288746426,"Provide an error when a non-identifier name (such as an operator) is used as a","Provide an error when a non-identifier name (such as an operator) is used as a\nparameter name.\n\nFixes PR8012.\n\nllvm-svn: 118138"},
[h]={{n,14711,"/// 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  case UnqualifiedIdKind::IK_OperatorFunctionId:\n  case UnqualifiedIdKind::IK_ConversionFunctionId:\n  case UnqualifiedIdKind::IK_LiteralOperatorId:\n  case UnqualifiedIdKind::IK_ConstructorName:\n  case UnqualifiedIdKind::IK_DestructorName:\n  case UnqualifiedIdKind::IK_ImplicitSelfParam:\n  case UnqualifiedIdKind::IK_DeductionGuideName:\n    Diag(D.getIdentifierLoc(), diag::err_bad_parameter_name) << GetNameForDeclarator(D).getName();"}},
[h]={{m,14711,"/// 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  case UnqualifiedIdKind::IK_OperatorFunctionId:\n  case UnqualifiedIdKind::IK_ConversionFunctionId:\n  case UnqualifiedIdKind::IK_LiteralOperatorId:\n  case UnqualifiedIdKind::IK_ConstructorName:\n  case UnqualifiedIdKind::IK_DestructorName:\n  case UnqualifiedIdKind::IK_ImplicitSelfParam:\n  case UnqualifiedIdKind::IK_DeductionGuideName:\n    Diag(D.getIdentifierLoc(), diag::err_bad_parameter_name) << GetNameForDeclarator(D).getName();"}},
[j]={
[j]={
["clang/test/SemaCXX/PR8012.cpp"]={"clang/test/SemaCXX/PR8012.cpp:3:14: error: \'operator+\' cannot be the name of a parameter"}
["clang/test/SemaCXX/PR8012.cpp"]={"clang/test/SemaCXX/PR8012.cpp:3:14: error: \'operator+\' cannot be the name of a parameter"}
Line 4,903: Line 4,905:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"da70fc0c5f5b",1560542514,"PR42071: Reject weird names for non-type template parameters.\n\nAlso reject default arguments appeari...","PR42071: Reject weird names for non-type template parameters.\n\nAlso reject default arguments appearing in invalid locations.\n\nllvm-svn: 363447"},
[b]={"da70fc0c5f5b",1560542514,"PR42071: Reject weird names for non-type template parameters.","PR42071: Reject weird names for non-type template parameters.\n\nAlso reject default arguments appearing in invalid locations.\n\nllvm-svn: 363447"},
[h]={{n,14718,"/// 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  case UnqualifiedIdKind::IK_TemplateId:\n  case UnqualifiedIdKind::IK_ConstructorTemplateId:\n    // ...\n    Diag(D.getIdentifierLoc(), diag::err_bad_parameter_name_template_id);"}},
[h]={{m,14718,"/// 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  case UnqualifiedIdKind::IK_TemplateId:\n  case UnqualifiedIdKind::IK_ConstructorTemplateId:\n    // ...\n    Diag(D.getIdentifierLoc(), diag::err_bad_parameter_name_template_id);"}},
[j]={
[j]={
["clang/test/Parser/cxx-template-decl.cpp"]={"clang/test/Parser/cxx-template-decl.cpp:261:16: error: parameter name cannot have template arguments"}
["clang/test/Parser/cxx-template-decl.cpp"]={"clang/test/Parser/cxx-template-decl.cpp:261:16: error: parameter name cannot have template arguments"}
Line 4,915: Line 4,917:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={Mb,1480718311,V,V},
[b]={Lb,1480718311,Mb,Ob},
[h]={{P,1199,"/// 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  } else {\n    Diag(AtLoc, diag::err_bad_property_context);"}}
[h]={{Q,1199,"/// 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  } else {\n    Diag(AtLoc, diag::err_bad_property_context);"}}
},
},
["err_bad_property_decl"]={
["err_bad_property_decl"]={
Line 4,924: Line 4,926:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={Mb,1480718311,V,V},
[b]={Lb,1480718311,Mb,Ob},
[h]={{P,1114,"/// 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) {\n      Diag(PropertyLoc, diag::err_bad_property_decl) << IDecl->getDeclName();"}},
[h]={{Q,1114,"/// 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) {\n      Diag(PropertyLoc, diag::err_bad_property_decl) << IDecl->getDeclName();"}},
[j]={
[j]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:19:13: error: property implementation must have its declaration in interface \'I\' or one of its extensions","clang/test/SemaObjC/property.m:31:10: error: property implementation must have its declaration in interface \'E\' or one of its extensions"}
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:19:13: error: property implementation must have its declaration in interface \'I\' or one of its extensions","clang/test/SemaObjC/property.m:31:10: error: property implementation must have its declaration in interface \'E\' or one of its extensions"}
Line 4,936: Line 4,938:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{C,3130,"/// 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) {\n    // ...\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    // ...\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    // ...\n    } else {\n      // ...\n      // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n      // long as one of the protocols implements the selector (if not, warn).\n      // And as long as message is not deprecated/unavailable (warn if it is).\n      if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n      // ...\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n      // ...\n      } else {\n        // ...\n        Diag(Loc, diag::err_bad_receiver_type) << ReceiverType << RecRange;"}},
[h]={{C,3130,"/// 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) {\n    // ...\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    // ...\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    // ...\n    } else {\n      // ...\n      // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n      // long as one of the protocols implements the selector (if not, warn).\n      // And as long as message is not deprecated/unavailable (warn if it is).\n      if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n      // ...\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n      // ...\n      } else {\n        // ...\n        Diag(Loc, diag::err_bad_receiver_type) << ReceiverType << RecRange;"}},
[j]={
[j]={
Line 4,948: Line 4,950:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e81f58e18011",1289187648,"Properly diagnose invalid casts to function references. Patch by\nFaisal Vali, tweaked by me. Fixes P...","Properly diagnose invalid casts to function references. Patch by\nFaisal Vali, tweaked by me. Fixes PR8230.\n\nllvm-svn: 118400"},
[b]={"e81f58e18011",1289187648,"Properly diagnose invalid casts to function references. Patch by","Properly diagnose invalid casts to function references. Patch by\nFaisal Vali, tweaked by me. Fixes PR8230.\n\nllvm-svn: 118400"},
[h]={{s,1202,"/// CheckReinterpretCast - Check that a reinterpret_cast\\<DestType\\>(SrcExpr) is\n/// valid.\n/// Refer to C++ 5.2.10 for details. reinterpret_cast is typically used in code\n/// like this:\n/// char *bytes = reinterpret_cast\\<char*\\>(int_ptr);\nvoid CastOperation::CheckReinterpretCast() {\n  // ...\n  if (tcr != TC_Success && msg != 0) {\n    // ...\n    if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {\n      // ...\n      Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_overload) << OverloadExpr::find(SrcExpr.get()).Expression->getName() << DestType << OpRange;"}},
[h]={{t,1202,"/// CheckReinterpretCast - Check that a reinterpret_cast\\<DestType\\>(SrcExpr) is\n/// valid.\n/// Refer to C++ 5.2.10 for details. reinterpret_cast is typically used in code\n/// like this:\n/// char *bytes = reinterpret_cast\\<char*\\>(int_ptr);\nvoid CastOperation::CheckReinterpretCast() {\n  // ...\n  if (tcr != TC_Success && msg != 0) {\n    // ...\n    if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {\n      // ...\n      Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_overload) << OverloadExpr::find(SrcExpr.get()).Expression->getName() << DestType << OpRange;"}},
[j]={
[j]={
["clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp"]={"clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:31:14: error: reinterpret_cast cannot resolve overloaded function \'f\' to type \'void (&)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:32:14: error: reinterpret_cast cannot resolve overloaded function \'f\' to type \'void (*)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:37:14: error: reinterpret_cast cannot resolve overloaded function \'f\' to type \'void (&)(int)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:38:14: error: reinterpret_cast cannot resolve overloaded function \'f\' to type \'void (*)(int)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:53:14: error: reinterpret_cast cannot resolve overloaded function \'t\' to type \'void (&)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:54:14: error: reinterpret_cast cannot resolve overloaded function \'t\' to type \'void (*)(char)\'"}
["clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp"]={"clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:31:14: error: reinterpret_cast cannot resolve overloaded function \'f\' to type \'void (&)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:32:14: error: reinterpret_cast cannot resolve overloaded function \'f\' to type \'void (*)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:37:14: error: reinterpret_cast cannot resolve overloaded function \'f\' to type \'void (&)(int)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:38:14: error: reinterpret_cast cannot resolve overloaded function \'f\' to type \'void (*)(int)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:53:14: error: reinterpret_cast cannot resolve overloaded function \'t\' to type \'void (&)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:54:14: error: reinterpret_cast cannot resolve overloaded function \'t\' to type \'void (*)(char)\'"}
Line 4,961: Line 4,963:
[g]=k,
[g]=k,
[b]={"bf04231a7254",1303516677,"Don\'t allow reinterpret_cast to reference of vector element and property expression. Thanks goes to ...","Don\'t allow reinterpret_cast to reference of vector element and property expression. Thanks goes to Eli Friedman!\n\nllvm-svn: 130036"},
[b]={"bf04231a7254",1303516677,"Don\'t allow reinterpret_cast to reference of vector element and property expression. Thanks goes to ...","Don\'t allow reinterpret_cast to reference of vector element and property expression. Thanks goes to Eli Friedman!\n\nllvm-svn: 130036"},
[h]={{s,2302,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    // ...\n    if (inappropriate) {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_reference) << inappropriate << DestType << OpRange << SrcExpr.get()->getSourceRange();"}},
[h]={{t,2302,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    // ...\n    if (inappropriate) {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_reference) << inappropriate << DestType << OpRange << SrcExpr.get()->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCXX/reinterpret-cast.cpp"]={"clang/test/SemaCXX/reinterpret-cast.cpp:144:28: error: reinterpret_cast of a vector element to \'float &\' needs its address, which is not allowed"}
["clang/test/SemaCXX/reinterpret-cast.cpp"]={"clang/test/SemaCXX/reinterpret-cast.cpp:144:28: error: reinterpret_cast of a vector element to \'float &\' needs its address, which is not allowed"}
Line 4,972: Line 4,974:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{s,2367,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  // See below for the enumeral issue.\n  if (SrcType->isNullPtrType() && DestType->isIntegralType(Self.Context)) {\n    // C++0x 5.2.10p4: A pointer can be explicitly converted to any integral\n    //  type large enough to hold it. A value of std::nullptr_t can be\n    //  converted to an integral type; the conversion has the same meaning\n    //  and validity as a conversion of (void*)0 to the integral type.\n    if (Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType)) {\n      msg = diag::err_bad_reinterpret_cast_small_int;"},{s,2471,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (DestType->isIntegralType(Self.Context)) {\n    // ...\n    // C++ 5.2.10p4: A pointer can be explicitly converted to any integral\n    //  type large enough to hold it; except in Microsoft mode, where the\n    //  integral type size doesn\'t matter (except we don\'t allow bool).\n    if ((Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType))) {\n      // ...\n      if (MicrosoftException) {\n      // ...\n      } else {\n        msg = diag::err_bad_reinterpret_cast_small_int;"}},
[h]={{t,2367,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  // See below for the enumeral issue.\n  if (SrcType->isNullPtrType() && DestType->isIntegralType(Self.Context)) {\n    // C++0x 5.2.10p4: A pointer can be explicitly converted to any integral\n    //  type large enough to hold it. A value of std::nullptr_t can be\n    //  converted to an integral type; the conversion has the same meaning\n    //  and validity as a conversion of (void*)0 to the integral type.\n    if (Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType)) {\n      msg = diag::err_bad_reinterpret_cast_small_int;"},{t,2471,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (DestType->isIntegralType(Self.Context)) {\n    // ...\n    // C++ 5.2.10p4: A pointer can be explicitly converted to any integral\n    //  type large enough to hold it; except in Microsoft mode, where the\n    //  integral type size doesn\'t matter (except we don\'t allow bool).\n    if ((Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType))) {\n      // ...\n      if (MicrosoftException) {\n      // ...\n      } else {\n        msg = diag::err_bad_reinterpret_cast_small_int;"}},
[j]={
[j]={
["clang/test/SemaCXX/nullptr.cpp"]={"clang/test/SemaCXX/nullptr.cpp:68:9: error: cast from pointer to smaller type \'char\' loses information"}
["clang/test/SemaCXX/nullptr.cpp"]={"clang/test/SemaCXX/nullptr.cpp:68:9: error: cast from pointer to smaller type \'char\' loses information"}
Line 4,984: Line 4,986:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e4e9e281a1fb",1478139197,"[Sema] Allow static_cast<T&&>(e) to check explicit conversions for non-reference-related types.\n\nSum...","[Sema] Allow static_cast<T&&>(e) to check explicit conversions for non-reference-related types.\n\nSummary:\n[expr.cast.static] states:\n> 3. A glvalue of type “cv1 T1” can be cast to type “rvalue reference to cv2 T2” if “cv2 T2” is reference-compatible\n> with “cv1 T1”. The result refers to the object or the specified base class subobject thereof. If T2 is\n> an inaccessible or ambiguous base class of T1, a program that necessitates such a cast is\n> ill-formed.\n> \n> 4. Otherwise, an expression e can be explicitly converted to a type T using a static_cast of the form static_-\n> cast<T>(e) if the declaration T t(e); is well-formed, for some invented temporary variable t. [...]\n\nCurrently when checking p3 Clang will diagnose `static_cast<T&&>(e)` as invalid if the argument is not reference compatible with `T`. However I believe the correct behavior is to also check p4 in those cases.  For example:\n\n```\ndouble y = 42;\nstatic_cast<int&&>(y); // this should be OK.  \'int&& t(y)\' is well formed\n```\n\nNote that we still don\'t check p4 for non-reference-compatible types which are reference-related since  `T&& t(e);` should never be well formed in those cases.\n\n\nReviewers: rsmith\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D26231\n\nllvm-svn: 285872"},
[b]={"e4e9e281a1fb",1478139197,"[Sema] Allow static_cast<T&&>(e) to check explicit conversions for non-reference-related types.","[Sema] Allow static_cast<T&&>(e) to check explicit conversions for non-reference-related types.\n\nSummary:\n[expr.cast.static] states:\n> 3. A glvalue of type “cv1 T1” can be cast to type “rvalue reference to cv2 T2” if “cv2 T2” is reference-compatible\n> with “cv1 T1”. The result refers to the object or the specified base class subobject thereof. If T2 is\n> an inaccessible or ambiguous base class of T1, a program that necessitates such a cast is\n> ill-formed.\n> \n> 4. Otherwise, an expression e can be explicitly converted to a type T using a static_cast of the form static_-\n> cast<T>(e) if the declaration T t(e); is well-formed, for some invented temporary variable t. [...]\n\nCurrently when checking p3 Clang will diagnose `static_cast<T&&>(e)` as invalid if the argument is not reference compatible with `T`. However I believe the correct behavior is to also check p4 in those cases.  For example:\n\n```\ndouble y = 42;\nstatic_cast<int&&>(y); // this should be OK.  \'int&& t(y)\' is well formed\n```\n\nNote that we still don\'t check p4 for non-reference-compatible types which are reference-related since  `T&& t(e);` should never be well formed in those cases.\n\n\nReviewers: rsmith\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D26231\n\nllvm-svn: 285872"},
[h]={{s,1554,"/// Tests whether a conversion according to N2844 is valid.\nTryCastResult TryLValueToRValueCast(Sema &Self, Expr *SrcExpr, QualType DestType, bool CStyle, CastKind &Kind, CXXCastPath &BasePath, unsigned &msg) {\n  // ...\n  if (RefResult != Sema::Ref_Compatible) {\n    // ...\n    msg = SrcExpr->isLValue() ? diag::err_bad_lvalue_to_rvalue_cast : diag::err_bad_rvalue_to_rvalue_cast;"}},
[h]={{t,1554,"/// Tests whether a conversion according to N2844 is valid.\nTryCastResult TryLValueToRValueCast(Sema &Self, Expr *SrcExpr, QualType DestType, bool CStyle, CastKind &Kind, CXXCastPath &BasePath, unsigned &msg) {\n  // ...\n  if (RefResult != Sema::Ref_Compatible) {\n    // ...\n    msg = SrcExpr->isLValue() ? diag::err_bad_lvalue_to_rvalue_cast : diag::err_bad_rvalue_to_rvalue_cast;"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.post/expr.static.cast/p3-p4-0x.cpp"]={"clang/test/CXX/expr/expr.post/expr.static.cast/p3-p4-0x.cpp:33:14: error: cannot cast from rvalue of type \'const A\' to rvalue reference type \'A &&\'; types are not compatible"}
["clang/test/CXX/expr/expr.post/expr.static.cast/p3-p4-0x.cpp"]={"clang/test/CXX/expr/expr.post/expr.static.cast/p3-p4-0x.cpp:33:14: error: cannot cast from rvalue of type \'const A\' to rvalue reference type \'A &&\'; types are not compatible"}
Line 4,997: Line 4,999:
[g]=k,
[g]=k,
[b]={"9f831dbbcdfa",1248536498,"Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conve...","Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conversions, like vectors, but allows conversions via constructors and conversion operators.\nAdd custom conversions to static_cast.\n\nllvm-svn: 77076"},
[b]={"9f831dbbcdfa",1248536498,"Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conve...","Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conversions, like vectors, but allows conversions via constructors and conversion operators.\nAdd custom conversions to static_cast.\n\nllvm-svn: 77076"},
[h]={{s,1783,"/// 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 (!SrcMemPtr) {\n    msg = diag::err_bad_static_cast_member_pointer_nonmp;"}},
[h]={{t,1783,"/// 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 (!SrcMemPtr) {\n    msg = diag::err_bad_static_cast_member_pointer_nonmp;"}},
[j]={
[j]={
["clang/test/SemaTemplate/member-access-ambig.cpp"]={"clang/test/SemaTemplate/member-access-ambig.cpp:51:7: error: cannot cast from type \'int *\' to member pointer type \'P\' (aka \'int (AddrOfMember::A::*)\')"}
["clang/test/SemaTemplate/member-access-ambig.cpp"]={"clang/test/SemaTemplate/member-access-ambig.cpp:51:7: error: cannot cast from type \'int *\' to member pointer type \'P\' (aka \'int (AddrOfMember::A::*)\')"}
Line 5,008: Line 5,010:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e81f58e18011",1289187648,"Properly diagnose invalid casts to function references. Patch by\nFaisal Vali, tweaked by me. Fixes P...","Properly diagnose invalid casts to function references. Patch by\nFaisal Vali, tweaked by me. Fixes PR8230.\n\nllvm-svn: 118400"},
[b]={"e81f58e18011",1289187648,"Properly diagnose invalid casts to function references. Patch by","Properly diagnose invalid casts to function references. Patch by\nFaisal Vali, tweaked by me. Fixes PR8230.\n\nllvm-svn: 118400"},
[h]={{s,1249,"/// CheckStaticCast - Check that a static_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.9 for details. Static casts are mostly used for making\n/// implicit conversions explicit and getting rid of data loss warnings.\nvoid CastOperation::CheckStaticCast() {\n  // ...\n  // This test is outside everything else because it\'s the only case where\n  // a non-lvalue-reference target type does not lead to decay.\n  // C++ 5.2.9p4: Any expression can be explicitly converted to type \"cv void\".\n  if (DestType->isVoidType()) {\n    // ...\n    if (claimPlaceholder(BuiltinType::Overload)) {\n      Self.ResolveAndFixSingleFunctionTemplateSpecialization(SrcExpr,\n                                                            // ...\n                                                            OpRange, DestType, diag::err_bad_static_cast_overload);"},{s,1274,"/// CheckStaticCast - Check that a static_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.9 for details. Static casts are mostly used for making\n/// implicit conversions explicit and getting rid of data loss warnings.\nvoid CastOperation::CheckStaticCast() {\n  // ...\n  if (tcr != TC_Success && msg != 0) {\n    // ...\n    if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {\n      // ...\n      Self.Diag(OpRange.getBegin(), diag::err_bad_static_cast_overload) << oe->getName() << DestType << OpRange << oe->getQualifierLoc().getSourceRange();"}},
[h]={{t,1249,"/// CheckStaticCast - Check that a static_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.9 for details. Static casts are mostly used for making\n/// implicit conversions explicit and getting rid of data loss warnings.\nvoid CastOperation::CheckStaticCast() {\n  // ...\n  // This test is outside everything else because it\'s the only case where\n  // a non-lvalue-reference target type does not lead to decay.\n  // C++ 5.2.9p4: Any expression can be explicitly converted to type \"cv void\".\n  if (DestType->isVoidType()) {\n    // ...\n    if (claimPlaceholder(BuiltinType::Overload)) {\n      Self.ResolveAndFixSingleFunctionTemplateSpecialization(SrcExpr,\n                                                            // ...\n                                                            OpRange, DestType, diag::err_bad_static_cast_overload);"},{t,1274,"/// CheckStaticCast - Check that a static_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.9 for details. Static casts are mostly used for making\n/// implicit conversions explicit and getting rid of data loss warnings.\nvoid CastOperation::CheckStaticCast() {\n  // ...\n  if (tcr != TC_Success && msg != 0) {\n    // ...\n    if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {\n      // ...\n      Self.Diag(OpRange.getBegin(), diag::err_bad_static_cast_overload) << oe->getName() << DestType << OpRange << oe->getQualifierLoc().getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp"]={"clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:25:14: error: address of overloaded function \'f\' cannot be static_cast to type \'void (*)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:57:14: error: address of overloaded function \'t\' cannot be static_cast to type \'int (*)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:67:16: error: address of overloaded function \'f\' cannot be static_cast to type \'FnType\' (aka \'void (int)\')"}
["clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp"]={"clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:25:14: error: address of overloaded function \'f\' cannot be static_cast to type \'void (*)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:57:14: error: address of overloaded function \'t\' cannot be static_cast to type \'int (*)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:67:16: error: address of overloaded function \'f\' cannot be static_cast to type \'FnType\' (aka \'void (int)\')"}
Line 5,021: Line 5,023:
[g]=k,
[g]=k,
[b]={"9f831dbbcdfa",1248536498,"Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conve...","Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conversions, like vectors, but allows conversions via constructors and conversion operators.\nAdd custom conversions to static_cast.\n\nllvm-svn: 77076"},
[b]={"9f831dbbcdfa",1248536498,"Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conve...","Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conversions, like vectors, but allows conversions via constructors and conversion operators.\nAdd custom conversions to static_cast.\n\nllvm-svn: 77076"},
[h]={{s,1632,"/// Tests whether a conversion according to C++ 5.2.9p8 is valid.\nTryCastResult TryStaticPointerDowncast(Sema &Self, QualType SrcType, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  // ...\n  if (!SrcPointer) {\n    msg = diag::err_bad_static_cast_pointer_nonpointer;"}},
[h]={{t,1632,"/// Tests whether a conversion according to C++ 5.2.9p8 is valid.\nTryCastResult TryStaticPointerDowncast(Sema &Self, QualType SrcType, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  // ...\n  if (!SrcPointer) {\n    msg = diag::err_bad_static_cast_pointer_nonpointer;"}},
[j]={
[j]={
["clang/test/SemaCXX/ptrtomember.cpp"]={"clang/test/SemaCXX/ptrtomember.cpp:31:11: error: cannot cast from type \'void\' to pointer type \'void *\'"}
["clang/test/SemaCXX/ptrtomember.cpp"]={"clang/test/SemaCXX/ptrtomember.cpp:31:11: error: cannot cast from type \'void\' to pointer type \'void *\'"}
Line 5,044: Line 5,046:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{n,7462,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (D.isDecompositionDeclarator()) {\n  // ...\n  } else if (!II) {\n    Diag(D.getIdentifierLoc(), diag::err_bad_variable_name) << Name;"},{r,3545,"/// 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    // Data members must have identifiers for names.\n    if (!Name.isIdentifier()) {\n      Diag(Loc, diag::err_bad_variable_name) << Name;"}},
[h]={{m,7462,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (D.isDecompositionDeclarator()) {\n  // ...\n  } else if (!II) {\n    Diag(D.getIdentifierLoc(), diag::err_bad_variable_name) << Name;"},{s,3545,"/// 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    // Data members must have identifiers for names.\n    if (!Name.isIdentifier()) {\n      Diag(Loc, diag::err_bad_variable_name) << Name;"}},
[j]={
[j]={
["clang/test/SemaCXX/overloaded-operator-decl.cpp"]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:39:5: error: \'operator+\' cannot be the name of a variable or data member","clang/test/SemaCXX/overloaded-operator-decl.cpp:48:3: error: \'operator int\' cannot be the name of a variable or data member","clang/test/SemaCXX/overloaded-operator-decl.cpp:49:7: error: \'operator+\' cannot be the name of a variable or data member"}
["clang/test/SemaCXX/overloaded-operator-decl.cpp"]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:39:5: error: \'operator+\' cannot be the name of a variable or data member","clang/test/SemaCXX/overloaded-operator-decl.cpp:48:3: error: \'operator int\' cannot be the name of a variable or data member","clang/test/SemaCXX/overloaded-operator-decl.cpp:49:7: error: \'operator+\' cannot be the name of a variable or data member"}
Line 5,056: Line 5,058:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"9b1754d05840",1383393636,"Sema: Disallow inheriting from classes with flexible array members\n\nFlexible array members inherentl...","Sema: Disallow inheriting from classes with flexible array members\n\nFlexible array members inherently index off of the end of their parent\ntype.\n\nWe shouldn\'t allow this type to be used as a base, virtual or otherwise,\nbecause indexing off the end may find us inside of another base or the\nderived types members.\n\nllvm-svn: 193923"},
[b]={"9b1754d05840",1383393636,"Sema: Disallow inheriting from classes with flexible array members","Sema: Disallow inheriting from classes with flexible array members\n\nFlexible array members inherently index off of the end of their parent\ntype.\n\nWe shouldn\'t allow this type to be used as a base, virtual or otherwise,\nbecause indexing off the end may find us inside of another base or the\nderived types members.\n\nllvm-svn: 193923"},
[h]={{r,2771,"/// 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  // A class which contains a flexible array member is not suitable for use as a\n  // base class:\n  //  - If the layout determines that a base comes before another base,\n  //    the flexible array member would index into the subsequent base.\n  //  - If the layout determines that base comes before the derived class,\n  //    the flexible array member would index into the derived class.\n  if (CXXBaseDecl->hasFlexibleArrayMember()) {\n    Diag(BaseLoc, diag::err_base_class_has_flexible_array_member) << CXXBaseDecl->getDeclName();"}},
[h]={{s,2771,"/// 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  // A class which contains a flexible array member is not suitable for use as a\n  // base class:\n  //  - If the layout determines that a base comes before another base,\n  //    the flexible array member would index into the subsequent base.\n  //  - If the layout determines that base comes before the derived class,\n  //    the flexible array member would index into the derived class.\n  if (CXXBaseDecl->hasFlexibleArrayMember()) {\n    Diag(BaseLoc, diag::err_base_class_has_flexible_array_member) << CXXBaseDecl->getDeclName();"}},
[j]={
[j]={
["clang/test/SemaCXX/inherit.cpp"]={"clang/test/SemaCXX/inherit.cpp:35:12: error: base class \'J\' has a flexible array member"}
["clang/test/SemaCXX/inherit.cpp"]={"clang/test/SemaCXX/inherit.cpp:35:12: error: base class \'J\' has a flexible array member"}
Line 5,068: Line 5,070:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{r,2663,"/// 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  // C++ [class.union]p1:\n  //  A union shall not have base classes.\n  if (Class->isUnion()) {\n    Diag(Class->getLocation(), diag::err_base_clause_on_union) << SpecifierRange;"}},
[h]={{s,2663,"/// 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  // C++ [class.union]p1:\n  //  A union shall not have base classes.\n  if (Class->isUnion()) {\n    Diag(Class->getLocation(), diag::err_base_clause_on_union) << SpecifierRange;"}},
[j]={
[j]={
["clang/test/SemaCXX/inherit.cpp"]={"clang/test/SemaCXX/inherit.cpp:21:7: error: unions cannot have base classes"}
["clang/test/SemaCXX/inherit.cpp"]={"clang/test/SemaCXX/inherit.cpp:21:7: error: unions cannot have base classes"}
Line 5,080: Line 5,082:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{r,4763,"MemInitResult Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, Expr *Init, CXXRecordDecl *ClassDecl, SourceLocation EllipsisLoc) {\n  // ...\n  // C++ [base.class.init]p2:\n  //  If a mem-initializer-id is ambiguous because it designates both\n  //  a direct non-virtual base class and an inherited virtual base\n  //  class, the mem-initializer is ill-formed.\n  if (DirectBaseSpec && VirtualBaseSpec)\n    return Diag(BaseLoc, diag::err_base_init_direct_and_virtual) << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();"}},
[h]={{s,4763,"MemInitResult Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, Expr *Init, CXXRecordDecl *ClassDecl, SourceLocation EllipsisLoc) {\n  // ...\n  // C++ [base.class.init]p2:\n  //  If a mem-initializer-id is ambiguous because it designates both\n  //  a direct non-virtual base class and an inherited virtual base\n  //  class, the mem-initializer is ill-formed.\n  if (DirectBaseSpec && VirtualBaseSpec)\n    return Diag(BaseLoc, diag::err_base_init_direct_and_virtual) << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCXX/constructor-initializer.cpp"]={"clang/test/SemaCXX/constructor-initializer.cpp:34:9: error: base class initializer \'B\' names both a direct base class and an inherited virtual base class"}
["clang/test/SemaCXX/constructor-initializer.cpp"]={"clang/test/SemaCXX/constructor-initializer.cpp:34:9: error: base class initializer \'B\' names both a direct base class and an inherited virtual base class"}
Line 5,092: Line 5,094:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{r,4685,"MemInitResult Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, Expr *Init, CXXRecordDecl *ClassDecl, SourceLocation EllipsisLoc) {\n  // ...\n  if (!BaseType->isDependentType() && !BaseType->isRecordType())\n    return Diag(BaseLoc, diag::err_base_init_does_not_name_class) << BaseType << BaseTInfo->getTypeLoc().getSourceRange();"}},
[h]={{s,4685,"MemInitResult Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, Expr *Init, CXXRecordDecl *ClassDecl, SourceLocation EllipsisLoc) {\n  // ...\n  if (!BaseType->isDependentType() && !BaseType->isRecordType())\n    return Diag(BaseLoc, diag::err_base_init_does_not_name_class) << BaseType << BaseTInfo->getTypeLoc().getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCXX/class-base-member-init.cpp"]={"clang/test/SemaCXX/class-base-member-init.cpp:87:14: error: constructor initializer \'decltype(int())\' (aka \'int\') does not name a class"}
["clang/test/SemaCXX/class-base-member-init.cpp"]={"clang/test/SemaCXX/class-base-member-init.cpp:87:14: error: constructor initializer \'decltype(int())\' (aka \'int\') does not name a class"}
Line 5,104: Line 5,106:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{r,2711,"/// 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  // Base specifiers must be record types.\n  if (!BaseType->isRecordType()) {\n    Diag(BaseLoc, diag::err_base_must_be_class) << SpecifierRange;"}},
[h]={{s,2711,"/// 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  // Base specifiers must be record types.\n  if (!BaseType->isRecordType()) {\n    Diag(BaseLoc, diag::err_base_must_be_class) << SpecifierRange;"}},
[j]={
[j]={
["clang/test/CXX/class.derived/p1.cpp"]={"clang/test/CXX/class.derived/p1.cpp:27:21: error: base specifier must name a class"}
["clang/test/CXX/class.derived/p1.cpp"]={"clang/test/CXX/class.derived/p1.cpp:27:21: error: base specifier must name a class"}
Line 5,116: Line 5,118:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"4c96e99235b3",1361317635,"PR15300: Support C++11 attributes on base-specifiers. We don\'t support any such\nattributes yet, so j...","PR15300: Support C++11 attributes on base-specifiers. We don\'t support any such\nattributes yet, so just issue the appropriate diagnostics. Also generalize the\nfixit for attributes-in-the-wrong-place code and reuse it here, if attributes\nare placed after the access-specifier or \'virtual\' in a base specifier.\n\nllvm-svn: 175575"},
[b]={"4c96e99235b3",1361317635,"PR15300: Support C++11 attributes on base-specifiers. We don\'t support any such","PR15300: Support C++11 attributes on base-specifiers. We don\'t support any such\nattributes yet, so just issue the appropriate diagnostics. Also generalize the\nfixit for attributes-in-the-wrong-place code and reuse it here, if attributes\nare placed after the access-specifier or \'virtual\' in a base specifier.\n\nllvm-svn: 175575"},
[h]={{r,2827,"/// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is\n/// one entry in the base class list of a class specifier, for\n/// example:\n///    class foo : public bar, virtual private baz {\n/// \'public bar\' and \'virtual private baz\' are each base-specifiers.\nBaseResult Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange, const ParsedAttributesView &Attributes, bool Virtual, AccessSpecifier Access, ParsedType basetype, SourceLocation BaseLoc, SourceLocation EllipsisLoc) {\n  // ...\n  // We do not support any C++11 attributes on base-specifiers yet.\n  // Diagnose any attributes we see.\n  for (const ParsedAttr &AL : Attributes) {\n    // ...\n    if (AL.getKind() == ParsedAttr::UnknownAttribute)\n    // ...\n    else\n      Diag(AL.getLoc(), diag::err_base_specifier_attribute) << AL << AL.isRegularKeywordAttribute() << AL.getRange();"}},
[h]={{s,2827,"/// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is\n/// one entry in the base class list of a class specifier, for\n/// example:\n///    class foo : public bar, virtual private baz {\n/// \'public bar\' and \'virtual private baz\' are each base-specifiers.\nBaseResult Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange, const ParsedAttributesView &Attributes, bool Virtual, AccessSpecifier Access, ParsedType basetype, SourceLocation BaseLoc, SourceLocation EllipsisLoc) {\n  // ...\n  // We do not support any C++11 attributes on base-specifiers yet.\n  // Diagnose any attributes we see.\n  for (const ParsedAttr &AL : Attributes) {\n    // ...\n    if (AL.getKind() == ParsedAttr::UnknownAttribute)\n    // ...\n    else\n      Diag(AL.getLoc(), diag::err_base_specifier_attribute) << AL << AL.isRegularKeywordAttribute() << AL.getRange();"}},
[j]={
[j]={
["clang/test/Parser/cxx11-base-spec-attributes.cpp"]={"clang/test/Parser/cxx11-base-spec-attributes.cpp:9:14: error: \'noreturn\' attribute cannot be applied to a base specifier"}
["clang/test/Parser/cxx11-base-spec-attributes.cpp"]={"clang/test/Parser/cxx11-base-spec-attributes.cpp:9:14: error: \'noreturn\' attribute cannot be applied to a base specifier"}
Line 5,128: Line 5,130:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"bdb84f374cde",1469230619,"P0217R3: Parsing support and framework for AST representation of C++1z\ndecomposition declarations.\n\n...","P0217R3: Parsing support and framework for AST representation of C++1z\ndecomposition declarations.\n\nThere are a couple of things in the wording that seem strange here:\ndecomposition declarations are permitted at namespace scope (which we partially\nsupport here) and they are permitted as the declaration in a template (which we\nreject).\n\nllvm-svn: 276492"},
[b]={"bdb84f374cde",1469230619,"P0217R3: Parsing support and framework for AST representation of C++1z","P0217R3: Parsing support and framework for AST representation of C++1z\ndecomposition declarations.\n\nThere are a couple of things in the wording that seem strange here:\ndecomposition declarations are permitted at namespace scope (which we partially\nsupport here) and they are permitted as the declaration in a template (which we\nreject).\n\nllvm-svn: 276492"},
[h]={{u,257,"/// 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  // See if this is an auto-typed variable whose initializer we are parsing.\n  if (ParsingInitForAutoVars.count(D)) {\n    if (isa<BindingDecl>(D)) {\n      Diag(Loc, diag::err_binding_cannot_appear_in_own_initializer) << D->getDeclName();"}},
[h]={{v,257,"/// 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  // See if this is an auto-typed variable whose initializer we are parsing.\n  if (ParsingInitForAutoVars.count(D)) {\n    if (isa<BindingDecl>(D)) {\n      Diag(Loc, diag::err_binding_cannot_appear_in_own_initializer) << D->getDeclName();"}},
[j]={
[j]={
["clang/test/SemaCXX/cxx1z-decomposition.cpp"]={"clang/test/SemaCXX/cxx1z-decomposition.cpp:5:14: error: binding \'a\' cannot appear in the initializer of its own decomposition declaration"}
["clang/test/SemaCXX/cxx1z-decomposition.cpp"]={"clang/test/SemaCXX/cxx1z-decomposition.cpp:5:14: error: binding \'a\' cannot appear in the initializer of its own decomposition declaration"}
Line 5,140: Line 5,142:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"eee944e7f9e6",1562092093,"[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast\n\nThis commit adds a new builtin, __b...","[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast\n\nThis commit adds a new builtin, __builtin_bit_cast(T, v), which performs a\nbit_cast from a value v to a type T. This expression can be evaluated at\ncompile time under specific circumstances.\n\nThe compile time evaluation currently doesn\'t support bit-fields, but I\'m\nplanning on fixing this in a follow up (some of the logic for figuring this out\nis in CodeGen). I\'m also planning follow-ups for supporting some more esoteric\ntypes that the constexpr evaluator supports, as well as extending\n__builtin_memcpy constexpr evaluation to use the same infrastructure.\n\nrdar://44987528\n\nDifferential revision: https://reviews.llvm.org/D62825\n\nllvm-svn: 364954"},
[b]={"eee944e7f9e6",1562092093,"[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast","[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast\n\nThis commit adds a new builtin, __builtin_bit_cast(T, v), which performs a\nbit_cast from a value v to a type T. This expression can be evaluated at\ncompile time under specific circumstances.\n\nThe compile time evaluation currently doesn\'t support bit-fields, but I\'m\nplanning on fixing this in a follow up (some of the logic for figuring this out\nis in CodeGen). I\'m also planning follow-ups for supporting some more esoteric\ntypes that the constexpr evaluator supports, as well as extending\n__builtin_memcpy constexpr evaluation to use the same infrastructure.\n\nrdar://44987528\n\nDifferential revision: https://reviews.llvm.org/D62825\n\nllvm-svn: 364954"},
[h]={{s,3278,"void CastOperation::CheckBuiltinBitCast() {\n  // ...\n  if (!DestType.isTriviallyCopyableType(Self.Context)) {\n    Self.Diag(OpRange.getBegin(), diag::err_bit_cast_non_trivially_copyable) << 1;"},{s,3285,"void CastOperation::CheckBuiltinBitCast() {\n  // ...\n  if (!SrcType.isTriviallyCopyableType(Self.Context)) {\n    Self.Diag(OpRange.getBegin(), diag::err_bit_cast_non_trivially_copyable) << 0;"}},
[h]={{t,3278,"void CastOperation::CheckBuiltinBitCast() {\n  // ...\n  if (!DestType.isTriviallyCopyableType(Self.Context)) {\n    Self.Diag(OpRange.getBegin(), diag::err_bit_cast_non_trivially_copyable) << 1;"},{t,3285,"void CastOperation::CheckBuiltinBitCast() {\n  // ...\n  if (!SrcType.isTriviallyCopyableType(Self.Context)) {\n    Self.Diag(OpRange.getBegin(), diag::err_bit_cast_non_trivially_copyable) << 0;"}},
[j]={
[j]={
["clang/test/SemaCXX/builtin-bit-cast.cpp"]={"clang/test/SemaCXX/builtin-bit-cast.cpp:36:30: error: __builtin_bit_cast source type must be trivially copyable","clang/test/SemaCXX/builtin-bit-cast.cpp:39:21: error: __builtin_bit_cast destination type must be trivially copyable"}
["clang/test/SemaCXX/builtin-bit-cast.cpp"]={"clang/test/SemaCXX/builtin-bit-cast.cpp:36:30: error: __builtin_bit_cast source type must be trivially copyable","clang/test/SemaCXX/builtin-bit-cast.cpp:39:21: error: __builtin_bit_cast destination type must be trivially copyable"}
Line 5,152: Line 5,154:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"eee944e7f9e6",1562092093,"[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast\n\nThis commit adds a new builtin, __b...","[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast\n\nThis commit adds a new builtin, __builtin_bit_cast(T, v), which performs a\nbit_cast from a value v to a type T. This expression can be evaluated at\ncompile time under specific circumstances.\n\nThe compile time evaluation currently doesn\'t support bit-fields, but I\'m\nplanning on fixing this in a follow up (some of the logic for figuring this out\nis in CodeGen). I\'m also planning follow-ups for supporting some more esoteric\ntypes that the constexpr evaluator supports, as well as extending\n__builtin_memcpy constexpr evaluation to use the same infrastructure.\n\nrdar://44987528\n\nDifferential revision: https://reviews.llvm.org/D62825\n\nllvm-svn: 364954"},
[b]={"eee944e7f9e6",1562092093,"[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast","[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast\n\nThis commit adds a new builtin, __builtin_bit_cast(T, v), which performs a\nbit_cast from a value v to a type T. This expression can be evaluated at\ncompile time under specific circumstances.\n\nThe compile time evaluation currently doesn\'t support bit-fields, but I\'m\nplanning on fixing this in a follow up (some of the logic for figuring this out\nis in CodeGen). I\'m also planning follow-ups for supporting some more esoteric\ntypes that the constexpr evaluator supports, as well as extending\n__builtin_memcpy constexpr evaluation to use the same infrastructure.\n\nrdar://44987528\n\nDifferential revision: https://reviews.llvm.org/D62825\n\nllvm-svn: 364954"},
[h]={{s,3271,"void CastOperation::CheckBuiltinBitCast() {\n  // ...\n  if (DestSize != SourceSize) {\n    Self.Diag(OpRange.getBegin(), diag::err_bit_cast_type_size_mismatch) << (int)SourceSize.getQuantity() << (int)DestSize.getQuantity();"}},
[h]={{t,3271,"void CastOperation::CheckBuiltinBitCast() {\n  // ...\n  if (DestSize != SourceSize) {\n    Self.Diag(OpRange.getBegin(), diag::err_bit_cast_type_size_mismatch) << (int)SourceSize.getQuantity() << (int)DestSize.getQuantity();"}},
[j]={
[j]={
["clang/test/SemaCXX/builtin-bit-cast.cpp"]={"clang/test/SemaCXX/builtin-bit-cast.cpp:28:22: error: __builtin_bit_cast source size does not equal destination size (4 vs 1)"}
["clang/test/SemaCXX/builtin-bit-cast.cpp"]={"clang/test/SemaCXX/builtin-bit-cast.cpp:28:22: error: __builtin_bit_cast source size does not equal destination size (4 vs 1)"}
Line 5,164: Line 5,166:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={nb,1616787805,ob,pb},
[b]={gb,1616787805,hb,ib},
[h]={{o,2359,"/// Build a bit-precise integer type.\n///\n/// \\param IsUnsigned Boolean representing the signedness of the type.\n///\n/// \\param BitWidth Size of this int type in bits, or an expression representing\n/// that.\n///\n/// \\param Loc Location of the keyword.\nQualType Sema::BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc) {\n  // ...\n  if (!IsUnsigned && NumBits < 2) {\n    Diag(Loc, diag::err_bit_int_bad_size) << 0;"},{o,2364,"/// Build a bit-precise integer type.\n///\n/// \\param IsUnsigned Boolean representing the signedness of the type.\n///\n/// \\param BitWidth Size of this int type in bits, or an expression representing\n/// that.\n///\n/// \\param Loc Location of the keyword.\nQualType Sema::BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc) {\n  // ...\n  if (IsUnsigned && NumBits < 1) {\n    Diag(Loc, diag::err_bit_int_bad_size) << 1;"}},
[h]={{n,2359,"/// Build a bit-precise integer type.\n///\n/// \\param IsUnsigned Boolean representing the signedness of the type.\n///\n/// \\param BitWidth Size of this int type in bits, or an expression representing\n/// that.\n///\n/// \\param Loc Location of the keyword.\nQualType Sema::BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc) {\n  // ...\n  if (!IsUnsigned && NumBits < 2) {\n    Diag(Loc, diag::err_bit_int_bad_size) << 0;"},{n,2364,"/// Build a bit-precise integer type.\n///\n/// \\param IsUnsigned Boolean representing the signedness of the type.\n///\n/// \\param BitWidth Size of this int type in bits, or an expression representing\n/// that.\n///\n/// \\param Loc Location of the keyword.\nQualType Sema::BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc) {\n  // ...\n  if (IsUnsigned && NumBits < 1) {\n    Diag(Loc, diag::err_bit_int_bad_size) << 1;"}},
[j]={
[j]={
["clang/test/SemaCXX/ext-int.cpp"]={"clang/test/SemaCXX/ext-int.cpp:21:3: error: signed _BitInt must have a bit size of at least 2","clang/test/SemaCXX/ext-int.cpp:22:3: error: signed _BitInt must have a bit size of at least 2","clang/test/SemaCXX/ext-int.cpp:24:3: error: unsigned _BitInt must have a bit size of at least 1","clang/test/SemaCXX/ext-int.cpp:26:3: error: signed _BitInt must have a bit size of at least 2","clang/test/SemaCXX/ext-int.cpp:5:3: error: signed _BitInt must have a bit size of at least 2","clang/test/SemaCXX/ext-int.cpp:6:12: error: unsigned _BitInt must have a bit size of at least 1","clang/test/SemaCXX/ext-int.cpp:5:3: error: signed _BitInt must have a bit size of at least 2"}
["clang/test/SemaCXX/ext-int.cpp"]={"clang/test/SemaCXX/ext-int.cpp:21:3: error: signed _BitInt must have a bit size of at least 2","clang/test/SemaCXX/ext-int.cpp:22:3: error: signed _BitInt must have a bit size of at least 2","clang/test/SemaCXX/ext-int.cpp:24:3: error: unsigned _BitInt must have a bit size of at least 1","clang/test/SemaCXX/ext-int.cpp:26:3: error: signed _BitInt must have a bit size of at least 2","clang/test/SemaCXX/ext-int.cpp:5:3: error: signed _BitInt must have a bit size of at least 2","clang/test/SemaCXX/ext-int.cpp:6:12: error: unsigned _BitInt must have a bit size of at least 1","clang/test/SemaCXX/ext-int.cpp:5:3: error: signed _BitInt must have a bit size of at least 2"}
Line 5,176: Line 5,178:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={nb,1616787805,ob,pb},
[b]={gb,1616787805,hb,ib},
[h]={{o,2370,"/// Build a bit-precise integer type.\n///\n/// \\param IsUnsigned Boolean representing the signedness of the type.\n///\n/// \\param BitWidth Size of this int type in bits, or an expression representing\n/// that.\n///\n/// \\param Loc Location of the keyword.\nQualType Sema::BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc) {\n  // ...\n  if (NumBits > TI.getMaxBitIntWidth()) {\n    Diag(Loc, diag::err_bit_int_max_size) << IsUnsigned << static_cast<uint64_t>(TI.getMaxBitIntWidth());"}},
[h]={{n,2370,"/// Build a bit-precise integer type.\n///\n/// \\param IsUnsigned Boolean representing the signedness of the type.\n///\n/// \\param BitWidth Size of this int type in bits, or an expression representing\n/// that.\n///\n/// \\param Loc Location of the keyword.\nQualType Sema::BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc) {\n  // ...\n  if (NumBits > TI.getMaxBitIntWidth()) {\n    Diag(Loc, diag::err_bit_int_max_size) << IsUnsigned << static_cast<uint64_t>(TI.getMaxBitIntWidth());"}},
[j]={
[j]={
["clang/test/Sema/large-bit-int.c"]={"clang/test/Sema/large-bit-int.c:9:3: error: signed _BitInt of bit sizes greater than 1024 not supported","clang/test/Sema/large-bit-int.c:10:3: error: unsigned _BitInt of bit sizes greater than 1024 not supported"}
["clang/test/Sema/large-bit-int.c"]={"clang/test/Sema/large-bit-int.c:9:3: error: signed _BitInt of bit sizes greater than 1024 not supported","clang/test/Sema/large-bit-int.c:10:3: error: unsigned _BitInt of bit sizes greater than 1024 not supported"}
Line 5,188: Line 5,190:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{n,17924,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  if (Value.isSigned() && Value.isNegative()) {\n    if (FieldName)\n      return Diag(FieldLoc, diag::err_bitfield_has_negative_width) << FieldName << toString(Value, 10);"}},
[h]={{m,17924,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  if (Value.isSigned() && Value.isNegative()) {\n    if (FieldName)\n      return Diag(FieldLoc, diag::err_bitfield_has_negative_width) << FieldName << toString(Value, 10);"}},
[j]={
[j]={
["clang/test/SemaObjC/class-bitfield.m"]={"clang/test/SemaObjC/class-bitfield.m:5:7: error: bit-field \'a\' has negative width (-1)"}
["clang/test/SemaObjC/class-bitfield.m"]={"clang/test/SemaObjC/class-bitfield.m:5:7: error: bit-field \'a\' has negative width (-1)"}
Line 5,200: Line 5,202:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{n,17920,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  // Zero-width bitfield is ok for anonymous field.\n  if (Value == 0 && FieldName)\n    return Diag(FieldLoc, diag::err_bitfield_has_zero_width) << FieldName;"}},
[h]={{m,17920,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  // Zero-width bitfield is ok for anonymous field.\n  if (Value == 0 && FieldName)\n    return Diag(FieldLoc, diag::err_bitfield_has_zero_width) << FieldName;"}},
[j]={
[j]={
["clang/test/SemaObjC/class-bitfield.m"]={"clang/test/SemaObjC/class-bitfield.m:14:7: error: named bit-field \'e\' has zero width"}
["clang/test/SemaObjC/class-bitfield.m"]={"clang/test/SemaObjC/class-bitfield.m:14:7: error: named bit-field \'e\' has zero width"}
Line 5,212: Line 5,214:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={fb,1590001902,jb,lb},
[b]={kb,1590001902,fb,jb},
[h]={{n,17933,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  // The size of the bit-field must not exceed our maximum permitted object\n  // size.\n  if (Value.getActiveBits() > ConstantArrayType::getMaxSizeBits(Context)) {\n    return Diag(FieldLoc, diag::err_bitfield_too_wide) << !FieldName << FieldName << toString(Value, 10);"}},
[h]={{m,17933,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  // The size of the bit-field must not exceed our maximum permitted object\n  // size.\n  if (Value.getActiveBits() > ConstantArrayType::getMaxSizeBits(Context)) {\n    return Diag(FieldLoc, diag::err_bitfield_too_wide) << !FieldName << FieldName << toString(Value, 10);"}},
[j]={
[j]={
["clang/test/SemaCXX/bitfield-layout.cpp"]={"clang/test/SemaCXX/bitfield-layout.cpp:45:8: error: bit-field \'c\' is too wide (18446744073709551617 bits)"}
["clang/test/SemaCXX/bitfield-layout.cpp"]={"clang/test/SemaCXX/bitfield-layout.cpp:45:8: error: bit-field \'c\' is too wide (18446744073709551617 bits)"}
Line 5,224: Line 5,226:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"022bdc7d7361",1442266056,"C11 _Bool bitfield diagnostic\n\nSummary: Implement DR262 (for C). This patch will mainly affect bitfi...","C11 _Bool bitfield diagnostic\n\nSummary: Implement DR262 (for C). This patch will mainly affect bitfields of type _Bool\n\nReviewers: fraggamuffin, rsmith\n\nSubscribers: hubert.reinterpretcast, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D10018\n\nllvm-svn: 247618"},
[b]={"022bdc7d7361",1442266056,"C11 _Bool bitfield diagnostic","C11 _Bool bitfield diagnostic\n\nSummary: Implement DR262 (for C). This patch will mainly affect bitfields of type _Bool\n\nReviewers: fraggamuffin, rsmith\n\nSubscribers: hubert.reinterpretcast, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D10018\n\nllvm-svn: 247618"},
[h]={{n,17952,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  if (!FieldTy->isDependentType()) {\n    // ...\n    if (CStdConstraintViolation || MSBitfieldViolation) {\n      // ...\n      return Diag(FieldLoc, diag::err_bitfield_width_exceeds_type_width) << (bool)FieldName << FieldName << toString(Value, 10) << !CStdConstraintViolation << DiagWidth;"}},
[h]={{m,17952,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  if (!FieldTy->isDependentType()) {\n    // ...\n    if (CStdConstraintViolation || MSBitfieldViolation) {\n      // ...\n      return Diag(FieldLoc, diag::err_bitfield_width_exceeds_type_width) << (bool)FieldName << FieldName << toString(Value, 10) << !CStdConstraintViolation << DiagWidth;"}},
[j]={
[j]={
["clang/test/Sema/ext-int.c"]={"clang/test/Sema/ext-int.c:15:14: error: width of bit-field \'A\' (8 bits) exceeds the width of its type (4 bits)"}
["clang/test/Sema/ext-int.c"]={"clang/test/Sema/ext-int.c:15:14: error: width of bit-field \'A\' (8 bits) exceeds the width of its type (4 bits)"}
Line 5,236: Line 5,238:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{u,14282,"/// 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    // Use a specialized diagnostic when we\'re assigning to an object\n    // from an enclosing function or block.\n    if (NonConstCaptureKind NCCK = isReferenceToNonConstCapture(S, E)) {\n      if (NCCK == NCCK_Block)\n        DiagID = diag::err_block_decl_ref_not_modifiable_lvalue;"}},
[h]={{v,14282,"/// 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    // Use a specialized diagnostic when we\'re assigning to an object\n    // from an enclosing function or block.\n    if (NonConstCaptureKind NCCK = isReferenceToNonConstCapture(S, E)) {\n      if (NCCK == NCCK_Block)\n        DiagID = diag::err_block_decl_ref_not_modifiable_lvalue;"}},
[j]={
[j]={
["clang/test/SemaCXX/instantiate-blocks.cpp"]={"clang/test/SemaCXX/instantiate-blocks.cpp:11:20: error: variable is not assignable (missing __block type specifier)"}
["clang/test/SemaCXX/instantiate-blocks.cpp"]={"clang/test/SemaCXX/instantiate-blocks.cpp:11:20: error: variable is not assignable (missing __block type specifier)"}
Line 5,248: Line 5,250:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{n,13189,"/// 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  // C99 6.7.8p5. If the declaration of an identifier has block scope, and\n  // the identifier has external or internal linkage, the declaration shall\n  // have no initializer for the identifier.\n  // C++14 [dcl.init]p5 is the same restriction for C++.\n  if (VDecl->isLocalVarDecl() && VDecl->hasExternalStorage()) {\n    Diag(VDecl->getLocation(), diag::err_block_extern_cant_init);"}},
[h]={{m,13189,"/// 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  // C99 6.7.8p5. If the declaration of an identifier has block scope, and\n  // the identifier has external or internal linkage, the declaration shall\n  // have no initializer for the identifier.\n  // C++14 [dcl.init]p5 is the same restriction for C++.\n  if (VDecl->isLocalVarDecl() && VDecl->hasExternalStorage()) {\n    Diag(VDecl->getLocation(), diag::err_block_extern_cant_init);"}},
[j]={
[j]={
["clang/test/Sema/err-decl-block-extern-no-init.c"]={"clang/test/Sema/err-decl-block-extern-no-init.c:6:16: error: declaration of block scope identifier with linkage cannot have an initializer","clang/test/Sema/err-decl-block-extern-no-init.c:13:16: error: declaration of block scope identifier with linkage cannot have an initializer"}
["clang/test/Sema/err-decl-block-extern-no-init.c"]={"clang/test/Sema/err-decl-block-extern-no-init.c:6:16: error: declaration of block scope identifier with linkage cannot have an initializer","clang/test/Sema/err-decl-block-extern-no-init.c:13:16: error: declaration of block scope identifier with linkage cannot have an initializer"}
Line 5,260: Line 5,262:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e9efa80c003e",1241050780,"Sema checking for incorrect placement of __block.  Radar 6441502\n\nllvm-svn: 70452","Sema checking for incorrect placement of __block.  Radar 6441502\n\nllvm-svn: 70452"},
[b]={"e9efa80c003e",1241050780,"Sema checking for incorrect placement of __block.  Radar 6441502","Sema checking for incorrect placement of __block.  Radar 6441502\n\nllvm-svn: 70452"},
[h]={{n,8742,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (!NewVD->hasLocalStorage() && NewVD->hasAttr<BlocksAttr>()) {\n    Diag(NewVD->getLocation(), diag::err_block_on_nonlocal);"},{n,14821,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (New->hasAttr<BlocksAttr>()) {\n    Diag(New->getLocation(), diag::err_block_on_nonlocal);"},{G,4813,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  for (unsigned i = 0, e = Sel.getNumArgs(); i != e; ++i) {\n    // ...\n    if (Param->hasAttr<BlocksAttr>()) {\n      Diag(Param->getLocation(), diag::err_block_on_nonlocal);"},{G,5239,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  // ...\n  if (New->hasAttr<BlocksAttr>())\n    Diag(New->getLocation(), diag::err_block_on_nonlocal);"}},
[h]={{m,8742,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (!NewVD->hasLocalStorage() && NewVD->hasAttr<BlocksAttr>()) {\n    Diag(NewVD->getLocation(), diag::err_block_on_nonlocal);"},{m,14821,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (New->hasAttr<BlocksAttr>()) {\n    Diag(New->getLocation(), diag::err_block_on_nonlocal);"},{G,4813,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  for (unsigned i = 0, e = Sel.getNumArgs(); i != e; ++i) {\n    // ...\n    if (Param->hasAttr<BlocksAttr>()) {\n      Diag(Param->getLocation(), diag::err_block_on_nonlocal);"},{G,5239,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  // ...\n  if (New->hasAttr<BlocksAttr>())\n    Diag(New->getLocation(), diag::err_block_on_nonlocal);"}},
[j]={
[j]={
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:150:13: error: __block attribute not allowed, only allowed on local variables","clang/test/Sema/block-misc.c:152:25: error: __block attribute not allowed, only allowed on local variables","clang/test/Sema/block-misc.c:154:25: error: __block attribute not allowed, only allowed on local variables","clang/test/Sema/block-misc.c:155:25: error: __block attribute not allowed, only allowed on local variables"}
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:150:13: error: __block attribute not allowed, only allowed on local variables","clang/test/Sema/block-misc.c:152:25: error: __block attribute not allowed, only allowed on local variables","clang/test/Sema/block-misc.c:154:25: error: __block attribute not allowed, only allowed on local variables","clang/test/Sema/block-misc.c:155:25: error: __block attribute not allowed, only allowed on local variables"}
Line 5,272: Line 5,274:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"a71286315f9d",1241221307,"Add Sema checking for __block on vm declarations.  Radar 6441502\n\nllvm-svn: 70601","Add Sema checking for __block on vm declarations.  Radar 6441502\n\nllvm-svn: 70601"},
[b]={"a71286315f9d",1241221307,"Add Sema checking for __block on vm declarations.  Radar 6441502","Add Sema checking for __block on vm declarations.  Radar 6441502\n\nllvm-svn: 70601"},
[h]={{n,8755,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (isVM && NewVD->hasAttr<BlocksAttr>()) {\n    Diag(NewVD->getLocation(), diag::err_block_on_vm);"}},
[h]={{m,8755,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (isVM && NewVD->hasAttr<BlocksAttr>()) {\n    Diag(NewVD->getLocation(), diag::err_block_on_vm);"}},
[j]={
[j]={
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:156:15: error: __block attribute not allowed on declaration with a variably modified type","clang/test/Sema/block-misc.c:157:17: error: __block attribute not allowed on declaration with a variably modified type"}
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:156:15: error: __block attribute not allowed on declaration with a variably modified type","clang/test/Sema/block-misc.c:157:17: error: __block attribute not allowed on declaration with a variably modified type"}
Line 5,284: Line 5,286:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{Q,3693,"/// 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  // ...\n  } else if (!RetValExp) {\n    return StmtError(Diag(ReturnLoc, diag::err_block_return_missing_expr));"}}
[h]={{R,3693,"/// 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  // ...\n  } else if (!RetValExp) {\n    return StmtError(Diag(ReturnLoc, diag::err_block_return_missing_expr));"}}
},
},
["err_block_returning_array_function"]={
["err_block_returning_array_function"]={
Line 5,294: Line 5,296:
[g]=k,
[g]=k,
[b]={"20ad245e3e22",1295997393,"Change error \"function cannot return array type\" -> \"blocks cannot return array type\" when blocks ar...","Change error \"function cannot return array type\" -> \"blocks cannot return array type\" when blocks are involved.\nAddresses rdar://8876238.\n\nllvm-svn: 124242"},
[b]={"20ad245e3e22",1295997393,"Change error \"function cannot return array type\" -> \"blocks cannot return array type\" when blocks ar...","Change error \"function cannot return array type\" -> \"blocks cannot return array type\" when blocks are involved.\nAddresses rdar://8876238.\n\nllvm-svn: 124242"},
[h]={{u,21269,"/// Rebuilds a call expression which yielded __unknown_anytype.\nExprResult RebuildUnknownAnyExpr::VisitCallExpr(CallExpr *E) {\n  // ...\n  // Verify that this is a legal result type of a function.\n  if (DestType->isArrayType() || DestType->isFunctionType()) {\n    // ...\n    if (Kind == FK_BlockPointer)\n      diagID = diag::err_block_returning_array_function;"},{o,5272,"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      // C99 6.7.5.3p1: The return type may not be a function or array type.\n      // For conversion functions, we\'ll diagnose this particular error later.\n      if (!D.isInvalidType() && (T->isArrayType() || T->isFunctionType()) && (D.getName().getKind() != UnqualifiedIdKind::IK_ConversionFunctionId)) {\n        // ...\n        // Last processing chunk in block context means this function chunk\n        // represents the block.\n        if (chunkIndex == 0 && D.getContext() == DeclaratorContext::BlockLiteral)\n          diagID = diag::err_block_returning_array_function;"}},
[h]={{v,21269,"/// Rebuilds a call expression which yielded __unknown_anytype.\nExprResult RebuildUnknownAnyExpr::VisitCallExpr(CallExpr *E) {\n  // ...\n  // Verify that this is a legal result type of a function.\n  if (DestType->isArrayType() || DestType->isFunctionType()) {\n    // ...\n    if (Kind == FK_BlockPointer)\n      diagID = diag::err_block_returning_array_function;"},{n,5272,"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      // C99 6.7.5.3p1: The return type may not be a function or array type.\n      // For conversion functions, we\'ll diagnose this particular error later.\n      if (!D.isInvalidType() && (T->isArrayType() || T->isFunctionType()) && (D.getName().getKind() != UnqualifiedIdKind::IK_ConversionFunctionId)) {\n        // ...\n        // Last processing chunk in block context means this function chunk\n        // represents the block.\n        if (chunkIndex == 0 && D.getContext() == DeclaratorContext::BlockLiteral)\n          diagID = diag::err_block_returning_array_function;"}},
[j]={
[j]={
["clang/test/Sema/block-return.c"]={"clang/test/Sema/block-return.c:101:19: error: block cannot return array type \'int (*[5])(long)\'"}
["clang/test/Sema/block-return.c"]={"clang/test/Sema/block-return.c:101:19: error: block cannot return array type \'int (*[5])(long)\'"}
Line 5,305: Line 5,307:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"9eac931b5f29",1238127486,"Fix rdar://6719156 - clang should emit a better error when blocks are disabled but are used anyway\nb...","Fix rdar://6719156 - clang should emit a better error when blocks are disabled but are used anyway\nby changing blocks from being disabled in the parser to being disabled\nin Sema.\n\nllvm-svn: 67816"},
[b]={"9eac931b5f29",1238127486,"Fix rdar://6719156 - clang should emit a better error when blocks are disabled but are used anyway","Fix rdar://6719156 - clang should emit a better error when blocks are disabled but are used anyway\nby changing blocks from being disabled in the parser to being disabled\nin Sema.\n\nllvm-svn: 67816"},
[h]={{u,17158,"/// ActOnBlockStmtExpr - This is called when the body of a block statement\n/// literal was successfully completed.  ^(int x){...}\nExprResult Sema::ActOnBlockStmtExpr(SourceLocation CaretLoc, Stmt *Body, Scope *CurScope) {\n  // If blocks are disabled, emit an error.\n  if (!LangOpts.Blocks)\n    Diag(CaretLoc, diag::err_blocks_disable) << LangOpts.OpenCL;"},{o,5034,"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::BlockPointer:\n      // If blocks are disabled, emit an error.\n      if (!LangOpts.Blocks)\n        S.Diag(DeclType.Loc, diag::err_blocks_disable) << LangOpts.OpenCL;"}},
[h]={{v,17158,"/// ActOnBlockStmtExpr - This is called when the body of a block statement\n/// literal was successfully completed.  ^(int x){...}\nExprResult Sema::ActOnBlockStmtExpr(SourceLocation CaretLoc, Stmt *Body, Scope *CurScope) {\n  // If blocks are disabled, emit an error.\n  if (!LangOpts.Blocks)\n    Diag(CaretLoc, diag::err_blocks_disable) << LangOpts.OpenCL;"},{n,5034,"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::BlockPointer:\n      // If blocks are disabled, emit an error.\n      if (!LangOpts.Blocks)\n        S.Diag(DeclType.Loc, diag::err_blocks_disable) << LangOpts.OpenCL;"}},
[j]={
[j]={
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:131:19: error: blocks support disabled - compile with -fblocks or pick a deployment target that supports them","clang/test/Sema/exprs.c:133:7: error: blocks support disabled - compile with -fblocks or pick a deployment target that supports them"}
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:131:19: error: blocks support disabled - compile with -fblocks or pick a deployment target that supports them","clang/test/Sema/exprs.c:133:7: error: blocks support disabled - compile with -fblocks or pick a deployment target that supports them"}
Line 5,316: Line 5,318:
[e]="redeclaration of C\\+\\+ built\\-in type \'bool\'",
[e]="redeclaration of C\\+\\+ built\\-in type \'bool\'",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"20ee5ae8710a",1289931493,"Emit a specific diagnostic when typedefing C++ bool, mirroring gcc.\nFixes rdar://8365458\n\nllvm-svn: ...","Emit a specific diagnostic when typedefing C++ bool, mirroring gcc.\nFixes rdar://8365458\n\nllvm-svn: 119359"},
[b]={"20ee5ae8710a",1289931493,"Emit a specific diagnostic when typedefing C++ bool, mirroring gcc.","Emit a specific diagnostic when typedefing C++ bool, mirroring gcc.\nFixes rdar://8365458\n\nllvm-svn: 119359"},
[h]={{A,4255,"/// 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    case tok::kw__Bool:\n      // ...\n      if (Tok.is(tok::kw_bool) && DS.getTypeSpecType() != DeclSpec::TST_unspecified && DS.getStorageClassSpec() == DeclSpec::SCS_typedef) {\n        // ...\n        DiagID = diag::err_bool_redeclaration;"},{A,4500,"#include \"clang/Basic/TransformTypeTraits.def\"\n    // ...\n    if (DiagID != diag::err_bool_redeclaration && ConsumedEnd.isInvalid())"}},
[h]={{B,4255,"/// 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    case tok::kw__Bool:\n      // ...\n      if (Tok.is(tok::kw_bool) && DS.getTypeSpecType() != DeclSpec::TST_unspecified && DS.getStorageClassSpec() == DeclSpec::SCS_typedef) {\n        // ...\n        DiagID = diag::err_bool_redeclaration;"},{B,4500,"#include \"clang/Basic/TransformTypeTraits.def\"\n    // ...\n    if (DiagID != diag::err_bool_redeclaration && ConsumedEnd.isInvalid())"}},
[j]={
[j]={
["clang/test/Parser/cxx-decl.cpp"]={"clang/test/Parser/cxx-decl.cpp:17:14: error: redeclaration of C++ built-in type \'bool\'"}
["clang/test/Parser/cxx-decl.cpp"]={"clang/test/Parser/cxx-decl.cpp:17:14: error: redeclaration of C++ built-in type \'bool\'"}
Line 5,329: Line 5,331:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"50a2c2c19de5",1318374870,"Catch placeholder types in DefaultLvalueConversion\nand DefaultFunctionArrayLvalueConversion.  To pre...","Catch placeholder types in DefaultLvalueConversion\nand DefaultFunctionArrayLvalueConversion.  To prevent\nsignificant regression for should-this-be-a-call fixits,\nand to repair some such regression from the introduction of\nbound member placeholders, make those placeholder checks\ntry to build calls appropriately.  Harden the build-a-call\nlogic while we\'re at it.\n\nllvm-svn: 141738"},
[b]={"50a2c2c19de5",1318374870,"Catch placeholder types in DefaultLvalueConversion","Catch placeholder types in DefaultLvalueConversion\nand DefaultFunctionArrayLvalueConversion.  To prevent\nsignificant regression for should-this-be-a-call fixits,\nand to repair some such regression from the introduction of\nbound member placeholders, make those placeholder checks\ntry to build calls appropriately.  Harden the build-a-call\nlogic while we\'re at it.\n\nllvm-svn: 141738"},
[h]={{u,21549,"/// 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  // Bound member functions.\n  case BuiltinType::BoundMember: {\n    // ...\n    PartialDiagnostic PD = PDiag(diag::err_bound_member_function);"},{R,12958,"// Resolve and fix an overloaded expression that can be resolved\n// because it identifies a single function template specialization.\n//\n// Last three arguments should only be supplied if Complain = true\n//\n// Return true if it was logically possible to so resolve the\n// expression, regardless of whether or not it succeeded.  Always\n// returns true if \'complain\' is set.\nbool Sema::ResolveAndFixSingleFunctionTemplateSpecialization(ExprResult &SrcExpr, bool doFunctionPointerConversion, bool complain, SourceRange OpRangeForComplaining, QualType DestTypeForComplaining, unsigned DiagIDForComplaining) {\n  // ...\n  if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization(ovl.Expression, /*complain*/ false, &found)) {\n    // ...\n    // It is only correct to resolve to an instance method if we\'re\n    // resolving a form that\'s permitted to be a pointer to member.\n    // Otherwise we\'ll end up making a bound member expression, which\n    // is illegal in all the contexts we resolve like this.\n    if (!ovl.HasFormOfMemberPointer && isa<CXXMethodDecl>(fn) && cast<CXXMethodDecl>(fn)->isInstance()) {\n      // ...\n      Diag(ovl.Expression->getExprLoc(), diag::err_bound_member_function) << 0 << ovl.Expression->getSourceRange();"}},
[h]={{v,21549,"/// 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  // Bound member functions.\n  case BuiltinType::BoundMember: {\n    // ...\n    PartialDiagnostic PD = PDiag(diag::err_bound_member_function);"},{S,12958,"// Resolve and fix an overloaded expression that can be resolved\n// because it identifies a single function template specialization.\n//\n// Last three arguments should only be supplied if Complain = true\n//\n// Return true if it was logically possible to so resolve the\n// expression, regardless of whether or not it succeeded.  Always\n// returns true if \'complain\' is set.\nbool Sema::ResolveAndFixSingleFunctionTemplateSpecialization(ExprResult &SrcExpr, bool doFunctionPointerConversion, bool complain, SourceRange OpRangeForComplaining, QualType DestTypeForComplaining, unsigned DiagIDForComplaining) {\n  // ...\n  if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization(ovl.Expression, /*complain*/ false, &found)) {\n    // ...\n    // It is only correct to resolve to an instance method if we\'re\n    // resolving a form that\'s permitted to be a pointer to member.\n    // Otherwise we\'ll end up making a bound member expression, which\n    // is illegal in all the contexts we resolve like this.\n    if (!ovl.HasFormOfMemberPointer && isa<CXXMethodDecl>(fn) && cast<CXXMethodDecl>(fn)->isInstance()) {\n      // ...\n      Diag(ovl.Expression->getExprLoc(), diag::err_bound_member_function) << 0 << ovl.Expression->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCXX/overloaded-name.cpp"]={"clang/test/SemaCXX/overloaded-name.cpp:25:9: error: reference to non-static member function must be called; did you mean to call it with no arguments?","clang/test/SemaCXX/overloaded-name.cpp:27:9: error: reference to non-static member function must be called; did you mean to call it with no arguments?"}
["clang/test/SemaCXX/overloaded-name.cpp"]={"clang/test/SemaCXX/overloaded-name.cpp:25:9: error: reference to non-static member function must be called; did you mean to call it with no arguments?","clang/test/SemaCXX/overloaded-name.cpp:27:9: error: reference to non-static member function must be called; did you mean to call it with no arguments?"}
Line 5,341: Line 5,343:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,\nNSNumber, and boolea...","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"},
[b]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,","Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,\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"},
[h]={{C,438,"/// Check that the given expression is a valid element of an Objective-C\n/// collection literal.\nstatic ExprResult CheckObjCCollectionLiteralElement(Sema &S, Expr *Element, QualType T, bool ArrayLiteral = false) {\n  // ...\n  // Make sure that we have an Objective-C pointer type or block.\n  if (!Element->getType()->isObjCObjectPointerType() && !Element->getType()->isBlockPointerType()) {\n    // ...\n    // If this is potentially an Objective-C numeric literal, add the \'@\'.\n    if (isa<IntegerLiteral>(OrigElement) || isa<CharacterLiteral>(OrigElement) || isa<FloatingLiteral>(OrigElement) || isa<ObjCBoolLiteralExpr>(OrigElement) || isa<CXXBoolLiteralExpr>(OrigElement)) {\n      if (S.NSAPIObj->getNSNumberFactoryMethodKind(OrigElement->getType())) {\n        // ...\n        S.Diag(OrigElement->getBeginLoc(), diag::err_box_literal_collection) << Which << OrigElement->getSourceRange() << FixItHint::CreateInsertion(OrigElement->getBeginLoc(), \"@\");"},{C,454,"/// Check that the given expression is a valid element of an Objective-C\n/// collection literal.\nstatic ExprResult CheckObjCCollectionLiteralElement(Sema &S, Expr *Element, QualType T, bool ArrayLiteral = false) {\n  // ...\n  // Make sure that we have an Objective-C pointer type or block.\n  if (!Element->getType()->isObjCObjectPointerType() && !Element->getType()->isBlockPointerType()) {\n    // ...\n    }\n    // If this is potentially an Objective-C string literal, add the \'@\'.\n    else if (StringLiteral *String = dyn_cast<StringLiteral>(OrigElement)) {\n      if (String->isOrdinary()) {\n        S.Diag(OrigElement->getBeginLoc(), diag::err_box_literal_collection) << 0 << OrigElement->getSourceRange() << FixItHint::CreateInsertion(OrigElement->getBeginLoc(), \"@\");"}},
[h]={{C,438,"/// Check that the given expression is a valid element of an Objective-C\n/// collection literal.\nstatic ExprResult CheckObjCCollectionLiteralElement(Sema &S, Expr *Element, QualType T, bool ArrayLiteral = false) {\n  // ...\n  // Make sure that we have an Objective-C pointer type or block.\n  if (!Element->getType()->isObjCObjectPointerType() && !Element->getType()->isBlockPointerType()) {\n    // ...\n    // If this is potentially an Objective-C numeric literal, add the \'@\'.\n    if (isa<IntegerLiteral>(OrigElement) || isa<CharacterLiteral>(OrigElement) || isa<FloatingLiteral>(OrigElement) || isa<ObjCBoolLiteralExpr>(OrigElement) || isa<CXXBoolLiteralExpr>(OrigElement)) {\n      if (S.NSAPIObj->getNSNumberFactoryMethodKind(OrigElement->getType())) {\n        // ...\n        S.Diag(OrigElement->getBeginLoc(), diag::err_box_literal_collection) << Which << OrigElement->getSourceRange() << FixItHint::CreateInsertion(OrigElement->getBeginLoc(), \"@\");"},{C,454,"/// Check that the given expression is a valid element of an Objective-C\n/// collection literal.\nstatic ExprResult CheckObjCCollectionLiteralElement(Sema &S, Expr *Element, QualType T, bool ArrayLiteral = false) {\n  // ...\n  // Make sure that we have an Objective-C pointer type or block.\n  if (!Element->getType()->isObjCObjectPointerType() && !Element->getType()->isBlockPointerType()) {\n    // ...\n    }\n    // If this is potentially an Objective-C string literal, add the \'@\'.\n    else if (StringLiteral *String = dyn_cast<StringLiteral>(OrigElement)) {\n      if (String->isOrdinary()) {\n        S.Diag(OrigElement->getBeginLoc(), diag::err_box_literal_collection) << 0 << OrigElement->getSourceRange() << FixItHint::CreateInsertion(OrigElement->getBeginLoc(), \"@\");"}},
[j]={
[j]={
Line 5,349: Line 5,351:
["err_bracket_depth_exceeded"]={
["err_bracket_depth_exceeded"]={
[c]="bracket nesting level exceeded maximum of %0",
[c]="bracket nesting level exceeded maximum of %0",
[d]=cc,
[d]=Vb,
[e]="bracket nesting level exceeded maximum of (.*?)",
[e]="bracket nesting level exceeded maximum of (.*?)",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"b3a145293dc8",1361498391,"Add -fbracket-depth=N, analogous to -ftemplate-depth= and -fconstexpr-depth=,\nto control the check f...","Add -fbracket-depth=N, analogous to -ftemplate-depth= and -fconstexpr-depth=,\nto control the check for the C 5.2.4.1 / C++ [implimits] restriction on nesting\nlevels for parentheses, brackets and braces.\n\nSome code with heavy macro use exceeds the default limit of 256, but we don\'t\nwant to increase it generally to avoid stack overflow on stack-constrained\nsystems.\n\nllvm-svn: 175855"},
[b]={"b3a145293dc8",1361498391,"Add -fbracket-depth=N, analogous to -ftemplate-depth= and -fconstexpr-depth=,","Add -fbracket-depth=N, analogous to -ftemplate-depth= and -fconstexpr-depth=,\nto control the check for the C 5.2.4.1 / C++ [implimits] restriction on nesting\nlevels for parentheses, brackets and braces.\n\nSome code with heavy macro use exceeds the default limit of 256, but we don\'t\nwant to increase it generally to avoid stack overflow on stack-constrained\nsystems.\n\nllvm-svn: 175855"},
[h]={{ac,2696,"bool BalancedDelimiterTracker::diagnoseOverflow() {\n  P.Diag(P.Tok, diag::err_bracket_depth_exceeded) << P.getLangOpts().BracketDepth;"}}
[h]={{ec,2696,"bool BalancedDelimiterTracker::diagnoseOverflow() {\n  P.Diag(P.Tok, diag::err_bracket_depth_exceeded) << P.getLangOpts().BracketDepth;"}}
},
},
["err_brackets_go_after_unqualified_id"]={
["err_brackets_go_after_unqualified_id"]={
Line 5,361: Line 5,363:
[e]="brackets are not allowed here; to declare an array, place the brackets after the (?:identifier|name)",
[e]="brackets are not allowed here; to declare an array, place the brackets after the (?:identifier|name)",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"f4b81d002965",1403651664,"Provide a better diagnostic when braces are put before the identifier.\n\nWhen a user types:\n  int [4]...","Provide a better diagnostic when braces are put before the identifier.\n\nWhen a user types:\n  int [4] foo;\nassume that the user means:\n  int foo[4];\n\nUpdate the information for \'foo\' to prevent additional errors, and provide\na fix-it hint to move the brackets to the correct location.\n\nAdditionally, suggest parens for types that require it, such as:\n  int [4] *foo;\nto:\n  int (*foo)[4];\n\nllvm-svn: 211641"},
[b]={"f4b81d002965",1403651664,"Provide a better diagnostic when braces are put before the identifier.","Provide a better diagnostic when braces are put before the identifier.\n\nWhen a user types:\n  int [4] foo;\nassume that the user means:\n  int foo[4];\n\nUpdate the information for \'foo\' to prevent additional errors, and provide\na fix-it hint to move the brackets to the correct location.\n\nAdditionally, suggest parens for types that require it, such as:\n  int [4] *foo;\nto:\n  int (*foo)[4];\n\nllvm-svn: 211641"},
[h]={{A,7725,"/// Diagnose brackets before an identifier.\nvoid Parser::ParseMisplacedBracketDeclarator(Declarator &D) {\n  // ...\n  if (NeedParens) {\n    Diag(EndLoc, diag::err_brackets_go_after_unqualified_id) << getLangOpts().CPlusPlus << FixItHint::CreateInsertion(SuggestParenLoc, \"(\") << FixItHint::CreateInsertion(EndLoc, \")\") << FixItHint::CreateInsertionFromRange(EndLoc, CharSourceRange(BracketRange, true)) << FixItHint::CreateRemoval(BracketRange);"},{A,7733,"/// Diagnose brackets before an identifier.\nvoid Parser::ParseMisplacedBracketDeclarator(Declarator &D) {\n  // ...\n  if (NeedParens) {\n  // ...\n  } else {\n    Diag(EndLoc, diag::err_brackets_go_after_unqualified_id) << getLangOpts().CPlusPlus << FixItHint::CreateInsertionFromRange(EndLoc, CharSourceRange(BracketRange, true)) << FixItHint::CreateRemoval(BracketRange);"}},
[h]={{B,7725,"/// Diagnose brackets before an identifier.\nvoid Parser::ParseMisplacedBracketDeclarator(Declarator &D) {\n  // ...\n  if (NeedParens) {\n    Diag(EndLoc, diag::err_brackets_go_after_unqualified_id) << getLangOpts().CPlusPlus << FixItHint::CreateInsertion(SuggestParenLoc, \"(\") << FixItHint::CreateInsertion(EndLoc, \")\") << FixItHint::CreateInsertionFromRange(EndLoc, CharSourceRange(BracketRange, true)) << FixItHint::CreateRemoval(BracketRange);"},{B,7733,"/// Diagnose brackets before an identifier.\nvoid Parser::ParseMisplacedBracketDeclarator(Declarator &D) {\n  // ...\n  if (NeedParens) {\n  // ...\n  } else {\n    Diag(EndLoc, diag::err_brackets_go_after_unqualified_id) << getLangOpts().CPlusPlus << FixItHint::CreateInsertionFromRange(EndLoc, CharSourceRange(BracketRange, true)) << FixItHint::CreateRemoval(BracketRange);"}},
[j]={
[j]={
["clang/test/Parser/cxx1z-decomposition.cpp"]={"clang/test/Parser/cxx1z-decomposition.cpp:109:16: error: brackets are not allowed here; to declare an array, place the brackets after the name"}
["clang/test/Parser/cxx1z-decomposition.cpp"]={"clang/test/Parser/cxx1z-decomposition.cpp:109:16: error: brackets are not allowed here; to declare an array, place the brackets after the name"}
Line 5,374: Line 5,376:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{Q,3349,"StmtResult Sema::ActOnBreakStmt(SourceLocation BreakLoc, Scope *CurScope) {\n  // ...\n  if (!S) {\n    // ...\n    return StmtError(Diag(BreakLoc, diag::err_break_not_in_loop_or_switch));"}},
[h]={{R,3349,"StmtResult Sema::ActOnBreakStmt(SourceLocation BreakLoc, Scope *CurScope) {\n  // ...\n  if (!S) {\n    // ...\n    return StmtError(Diag(BreakLoc, diag::err_break_not_in_loop_or_switch));"}},
[j]={
[j]={
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:108:8: error: \'break\' statement not in loop or switch statement","clang/test/Sema/block-misc.c:112:8: error: \'break\' statement not in loop or switch statement"}
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:108:8: error: \'break\' statement not in loop or switch statement","clang/test/Sema/block-misc.c:112:8: error: \'break\' statement not in loop or switch statement"}
Line 5,386: Line 5,388:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={ab,1576908663,Z,Y},
[b]={Z,1576908663,X,Y},
[h]={{p,3514,"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      kind = diag::err_btf_type_id_not_const;"}},
[h]={{o,3514,"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      kind = diag::err_btf_type_id_not_const;"}},
[j]={
[j]={
["clang/test/Sema/builtin-bpf-btf-type-id.c"]={"clang/test/Sema/builtin-bpf-btf-type-id.c:8:59: error: __builtin_btf_type_id argument 2 not a constant"}
["clang/test/Sema/builtin-bpf-btf-type-id.c"]={"clang/test/Sema/builtin-bpf-btf-type-id.c:8:59: error: __builtin_btf_type_id argument 2 not a constant"}
Line 5,398: Line 5,400:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"4a5b4443711e",1335634756,"Currently __builtin_annotation() only annotates an i32.\n\n        i32 __builtin_annotation(i32, strin...","Currently __builtin_annotation() only annotates an i32.\n\n        i32 __builtin_annotation(i32, string);\n\nApplying it to i64 (e.g., long long) generates the following IR.\n\n        trunc i64 {{.*}} to i32\n        call i32 @llvm.annotation.i32\n        zext i32 {{.*}} to i64\n\nThe redundant truncation and extension make the result difficult to use.\n\nThis patch makes __builtin_annotation() generic.\n\n        type __builtin_annotation(type, string);\n\nFor the i64 example, it simplifies the generated IR to:\n\n        call i64 @llvm.annotation.i64\n\nPatch by Xi Wang!\n\nllvm-svn: 155764"},
[b]={"4a5b4443711e",1335634756,"Currently __builtin_annotation() only annotates an i32.","Currently __builtin_annotation() only annotates an i32.\n\n        i32 __builtin_annotation(i32, string);\n\nApplying it to i64 (e.g., long long) generates the following IR.\n\n        trunc i64 {{.*}} to i32\n        call i32 @llvm.annotation.i32\n        zext i32 {{.*}} to i64\n\nThe redundant truncation and extension make the result difficult to use.\n\nThis patch makes __builtin_annotation() generic.\n\n        type __builtin_annotation(type, string);\n\nFor the i64 example, it simplifies the generated IR to:\n\n        call i64 @llvm.annotation.i64\n\nPatch by Xi Wang!\n\nllvm-svn: 155764"},
[h]={{p,198,"/// Check that the first argument to __builtin_annotation is an integer\n/// and the second argument is a non-wide string literal.\nstatic bool SemaBuiltinAnnotation(Sema &S, CallExpr *TheCall) {\n  // ...\n  if (!Ty->isIntegerType()) {\n    S.Diag(ValArg->getBeginLoc(), diag::err_builtin_annotation_first_arg) << ValArg->getSourceRange();"}},
[h]={{o,198,"/// Check that the first argument to __builtin_annotation is an integer\n/// and the second argument is a non-wide string literal.\nstatic bool SemaBuiltinAnnotation(Sema &S, CallExpr *TheCall) {\n  // ...\n  if (!Ty->isIntegerType()) {\n    S.Diag(ValArg->getBeginLoc(), diag::err_builtin_annotation_first_arg) << ValArg->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/annotate.c"]={"clang/test/Sema/annotate.c:14:34: error: first argument to __builtin_annotation must be an integer"}
["clang/test/Sema/annotate.c"]={"clang/test/Sema/annotate.c:14:34: error: first argument to __builtin_annotation must be an integer"}
Line 5,410: Line 5,412:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"4a5b4443711e",1335634756,"Currently __builtin_annotation() only annotates an i32.\n\n        i32 __builtin_annotation(i32, strin...","Currently __builtin_annotation() only annotates an i32.\n\n        i32 __builtin_annotation(i32, string);\n\nApplying it to i64 (e.g., long long) generates the following IR.\n\n        trunc i64 {{.*}} to i32\n        call i32 @llvm.annotation.i32\n        zext i32 {{.*}} to i64\n\nThe redundant truncation and extension make the result difficult to use.\n\nThis patch makes __builtin_annotation() generic.\n\n        type __builtin_annotation(type, string);\n\nFor the i64 example, it simplifies the generated IR to:\n\n        call i64 @llvm.annotation.i64\n\nPatch by Xi Wang!\n\nllvm-svn: 155764"},
[b]={"4a5b4443711e",1335634756,"Currently __builtin_annotation() only annotates an i32.","Currently __builtin_annotation() only annotates an i32.\n\n        i32 __builtin_annotation(i32, string);\n\nApplying it to i64 (e.g., long long) generates the following IR.\n\n        trunc i64 {{.*}} to i32\n        call i32 @llvm.annotation.i32\n        zext i32 {{.*}} to i64\n\nThe redundant truncation and extension make the result difficult to use.\n\nThis patch makes __builtin_annotation() generic.\n\n        type __builtin_annotation(type, string);\n\nFor the i64 example, it simplifies the generated IR to:\n\n        call i64 @llvm.annotation.i64\n\nPatch by Xi Wang!\n\nllvm-svn: 155764"},
[h]={{p,207,"/// Check that the first argument to __builtin_annotation is an integer\n/// and the second argument is a non-wide string literal.\nstatic bool SemaBuiltinAnnotation(Sema &S, CallExpr *TheCall) {\n  // ...\n  if (!Literal || !Literal->isOrdinary()) {\n    S.Diag(StrArg->getBeginLoc(), diag::err_builtin_annotation_second_arg) << StrArg->getSourceRange();"}},
[h]={{o,207,"/// Check that the first argument to __builtin_annotation is an integer\n/// and the second argument is a non-wide string literal.\nstatic bool SemaBuiltinAnnotation(Sema &S, CallExpr *TheCall) {\n  // ...\n  if (!Literal || !Literal->isOrdinary()) {\n    S.Diag(StrArg->getBeginLoc(), diag::err_builtin_annotation_second_arg) << StrArg->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/annotate.c"]={"clang/test/Sema/annotate.c:11:43: error: second argument to __builtin_annotation must be a non-wide string constant","clang/test/Sema/annotate.c:12:43: error: second argument to __builtin_annotation must be a non-wide string constant"}
["clang/test/Sema/annotate.c"]={"clang/test/Sema/annotate.c:11:43: error: second argument to __builtin_annotation must be a non-wide string constant","clang/test/Sema/annotate.c:12:43: error: second argument to __builtin_annotation must be a non-wide string constant"}
Line 5,422: Line 5,424:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{n,15334,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // ...\n  // Builtin functions cannot be defined.\n  if (unsigned BuiltinID = FD->getBuiltinID()) {\n    if (!Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID) && !Context.BuiltinInfo.isPredefinedRuntimeFunction(BuiltinID)) {\n      Diag(FD->getLocation(), diag::err_builtin_definition) << FD;"}}
[h]={{m,15334,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // ...\n  // Builtin functions cannot be defined.\n  if (unsigned BuiltinID = FD->getBuiltinID()) {\n    if (!Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID) && !Context.BuiltinInfo.isPredefinedRuntimeFunction(BuiltinID)) {\n      Diag(FD->getLocation(), diag::err_builtin_definition) << FD;"}}
},
},
["err_builtin_fn_use"]={
["err_builtin_fn_use"]={
Line 5,431: Line 5,433:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"34866c7719f8",1346372047,"Change the representation of builtin functions in the AST\n(__builtin_* etc.) so that it isn\'t possib...","Change the representation of builtin functions in the AST\n(__builtin_* etc.) so that it isn\'t possible to take their address.\nSpecifically, introduce a new type to represent a reference to a builtin\nfunction, and a new cast kind to convert it to a function pointer in the\noperand of a call.  Fixes PR13195.\n\nllvm-svn: 162962"},
[b]={"34866c7719f8",1346372047,"Change the representation of builtin functions in the AST","Change the representation of builtin functions in the AST\n(__builtin_* etc.) so that it isn\'t possible to take their address.\nSpecifically, introduce a new type to represent a reference to a builtin\nfunction, and a new cast kind to convert it to a function pointer in the\noperand of a call.  Fixes PR13195.\n\nllvm-svn: 162962"},
[h]={{u,21629,"/// 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::BuiltinFn: {\n    // ...\n    Diag(E->getBeginLoc(), diag::err_builtin_fn_use);"}},
[h]={{v,21629,"/// 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::BuiltinFn: {\n    // ...\n    Diag(E->getBeginLoc(), diag::err_builtin_fn_use);"}},
[j]={
[j]={
["clang/test/Parser/builtin_classify_type.c"]={"clang/test/Parser/builtin_classify_type.c:13:21: error: builtin functions must be directly called"}
["clang/test/Parser/builtin_classify_type.c"]={"clang/test/Parser/builtin_classify_type.c:13:21: error: builtin functions must be directly called"}
Line 5,443: Line 5,445:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{D,9814,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_TooManyInitsForScalar: {\n    // ...\n    if (Kind.isCStyleOrFunctionalCast())\n      S.Diag(Kind.getLocation(), diag::err_builtin_func_cast_more_than_one_arg) << R;"}}
[h]={{E,9814,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_TooManyInitsForScalar: {\n    // ...\n    if (Kind.isCStyleOrFunctionalCast())\n      S.Diag(Kind.getLocation(), diag::err_builtin_func_cast_more_than_one_arg) << R;"}}
},
},
["err_builtin_invalid_arg_type"]={
["err_builtin_invalid_arg_type"]={
Line 5,452: Line 5,454:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={nb,1616787805,ob,pb},
[b]={gb,1616787805,hb,ib},
[h]={{p,2045,"// Check if \\p Ty is a valid type for the elementwise math builtins. If it is\n// not a valid type, emit an error message and return true. Otherwise return\n// false.\nstatic bool checkMathBuiltinElementType(Sema &S, SourceLocation Loc, QualType Ty) {\n  if (!Ty->getAs<VectorType>() && !ConstantMatrixType::isValidElementType(Ty)) {\n    return S.Diag(Loc, diag::err_builtin_invalid_arg_type) << 1 << /* vector, integer or float ty*/ 0 << Ty;"},{p,2059,"static bool checkFPMathBuiltinElementType(Sema &S, SourceLocation Loc, QualType ArgTy, int ArgIndex) {\n  // ...\n  if (!EltTy->isRealFloatingType()) {\n    return S.Diag(Loc, diag::err_builtin_invalid_arg_type) << ArgIndex << /* vector or float ty*/ 5 << ArgTy;"},{p,2623,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  // __builtin_elementwise_abs restricts the element type to signed integers or\n  // floating point types only.\n  case Builtin::BI__builtin_elementwise_abs: {\n    // ...\n    if (EltTy->isUnsignedIntegerType()) {\n      Diag(TheCall->getArg(0)->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* signed integer or float ty*/ 3 << ArgTy;"},{p,2692,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_elementwise_add_sat:\n  case Builtin::BI__builtin_elementwise_sub_sat: {\n    // ...\n    if (!EltTy->isIntegerType()) {\n      Diag(Arg->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* integer ty */ 6 << ArgTy;"},{p,2741,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_reduce_max:\n  case Builtin::BI__builtin_reduce_min: {\n    // ...\n    if (!TyA) {\n      Diag(Arg->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* vector ty*/ 4 << Arg->getType();"},{p,2763,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_reduce_add:\n  case Builtin::BI__builtin_reduce_mul:\n  case Builtin::BI__builtin_reduce_xor:\n  case Builtin::BI__builtin_reduce_or:\n  case Builtin::BI__builtin_reduce_and: {\n    // ...\n    if (!TyA || !TyA->getElementType()->isIntegerType()) {\n      Diag(Arg->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* vector of integers */ 6 << Arg->getType();"},{p,18725,"bool Sema::SemaBuiltinNonDeterministicValue(CallExpr *TheCall) {\n  // ...\n  if (!TyArg->isBuiltinType() && !TyArg->isVectorType())\n    return Diag(TheCall->getArg(0)->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /*vector, integer or floating point ty*/ 0 << TyArg;"},{p,18744,"ExprResult Sema::SemaBuiltinMatrixTranspose(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!MType) {\n    Diag(Matrix->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* matrix ty*/ 1 << Matrix->getType();"},{p,18816,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!PtrTy) {\n    Diag(PtrExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << PtrArgIdx + 1 << /*pointer to element ty*/ 2 << PtrExpr->getType();"},{p,18823,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!PtrTy) {\n  // ...\n  } else {\n    // ...\n    if (!ConstantMatrixType::isValidElementType(ElementTy)) {\n      Diag(PtrExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << PtrArgIdx + 1 << /* pointer to element ty*/ 2 << PtrExpr->getType();"},{p,18924,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!MatrixTy) {\n    Diag(MatrixExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /*matrix ty */ 1 << MatrixExpr->getType();"},{p,18944,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!PtrTy) {\n    Diag(PtrExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << PtrArgIdx + 1 << /*pointer to element ty*/ 2 << PtrExpr->getType();"}},
[h]={{o,2045,"// Check if \\p Ty is a valid type for the elementwise math builtins. If it is\n// not a valid type, emit an error message and return true. Otherwise return\n// false.\nstatic bool checkMathBuiltinElementType(Sema &S, SourceLocation Loc, QualType Ty) {\n  if (!Ty->getAs<VectorType>() && !ConstantMatrixType::isValidElementType(Ty)) {\n    return S.Diag(Loc, diag::err_builtin_invalid_arg_type) << 1 << /* vector, integer or float ty*/ 0 << Ty;"},{o,2059,"static bool checkFPMathBuiltinElementType(Sema &S, SourceLocation Loc, QualType ArgTy, int ArgIndex) {\n  // ...\n  if (!EltTy->isRealFloatingType()) {\n    return S.Diag(Loc, diag::err_builtin_invalid_arg_type) << ArgIndex << /* vector or float ty*/ 5 << ArgTy;"},{o,2623,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  // __builtin_elementwise_abs restricts the element type to signed integers or\n  // floating point types only.\n  case Builtin::BI__builtin_elementwise_abs: {\n    // ...\n    if (EltTy->isUnsignedIntegerType()) {\n      Diag(TheCall->getArg(0)->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* signed integer or float ty*/ 3 << ArgTy;"},{o,2692,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_elementwise_add_sat:\n  case Builtin::BI__builtin_elementwise_sub_sat: {\n    // ...\n    if (!EltTy->isIntegerType()) {\n      Diag(Arg->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* integer ty */ 6 << ArgTy;"},{o,2741,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_reduce_max:\n  case Builtin::BI__builtin_reduce_min: {\n    // ...\n    if (!TyA) {\n      Diag(Arg->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* vector ty*/ 4 << Arg->getType();"},{o,2763,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_reduce_add:\n  case Builtin::BI__builtin_reduce_mul:\n  case Builtin::BI__builtin_reduce_xor:\n  case Builtin::BI__builtin_reduce_or:\n  case Builtin::BI__builtin_reduce_and: {\n    // ...\n    if (!TyA || !TyA->getElementType()->isIntegerType()) {\n      Diag(Arg->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* vector of integers */ 6 << Arg->getType();"},{o,18725,"bool Sema::SemaBuiltinNonDeterministicValue(CallExpr *TheCall) {\n  // ...\n  if (!TyArg->isBuiltinType() && !TyArg->isVectorType())\n    return Diag(TheCall->getArg(0)->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /*vector, integer or floating point ty*/ 0 << TyArg;"},{o,18744,"ExprResult Sema::SemaBuiltinMatrixTranspose(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!MType) {\n    Diag(Matrix->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* matrix ty*/ 1 << Matrix->getType();"},{o,18816,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!PtrTy) {\n    Diag(PtrExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << PtrArgIdx + 1 << /*pointer to element ty*/ 2 << PtrExpr->getType();"},{o,18823,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!PtrTy) {\n  // ...\n  } else {\n    // ...\n    if (!ConstantMatrixType::isValidElementType(ElementTy)) {\n      Diag(PtrExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << PtrArgIdx + 1 << /* pointer to element ty*/ 2 << PtrExpr->getType();"},{o,18924,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!MatrixTy) {\n    Diag(MatrixExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /*matrix ty */ 1 << MatrixExpr->getType();"},{o,18944,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!PtrTy) {\n    Diag(PtrExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << PtrArgIdx + 1 << /*pointer to element ty*/ 2 << PtrExpr->getType();"}},
[j]={
[j]={
["clang/test/SemaObjC/matrix-type-builtins.m"]={"clang/test/SemaObjC/matrix-type-builtins.m:28:49: error: 2nd argument must be a pointer to a valid matrix element type (was \'double4x4\' (aka \'double __attribute__((matrix_type(4, 4)))\'))"}
["clang/test/SemaObjC/matrix-type-builtins.m"]={"clang/test/SemaObjC/matrix-type-builtins.m:28:49: error: 2nd argument must be a pointer to a valid matrix element type (was \'double4x4\' (aka \'double __attribute__((matrix_type(4, 4)))\'))"}
Line 5,464: Line 5,466:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"261875054e5e",1544821888,"[Clang] Add __builtin_launder\n\nSummary:\nThis patch adds `__builtin_launder`, which is required to im...","[Clang] Add __builtin_launder\n\nSummary:\nThis patch adds `__builtin_launder`, which is required to implement `std::launder`. Additionally GCC provides `__builtin_launder`, so thing brings Clang in-line with GCC.\n\nI\'m not exactly sure what magic `__builtin_launder` requires, but  based on previous discussions this patch applies a `@llvm.invariant.group.barrier`. As noted in previous discussions, this may not be enough to correctly handle vtables.\n\nReviewers: rnk, majnemer, rsmith\n\nReviewed By: rsmith\n\nSubscribers: kristina, Romain-Geissler-1A, erichkeane, amharc, jroelofs, cfe-commits, Prazek\n\nDifferential Revision: https://reviews.llvm.org/D40218\n\nllvm-svn: 349195"},
[b]={"261875054e5e",1544821888,"[Clang] Add __builtin_launder","[Clang] Add __builtin_launder\n\nSummary:\nThis patch adds `__builtin_launder`, which is required to implement `std::launder`. Additionally GCC provides `__builtin_launder`, so thing brings Clang in-line with GCC.\n\nI\'m not exactly sure what magic `__builtin_launder` requires, but  based on previous discussions this patch applies a `@llvm.invariant.group.barrier`. As noted in previous discussions, this may not be enough to correctly handle vtables.\n\nReviewers: rnk, majnemer, rsmith\n\nReviewed By: rsmith\n\nSubscribers: kristina, Romain-Geissler-1A, erichkeane, amharc, jroelofs, cfe-commits, Prazek\n\nDifferential Revision: https://reviews.llvm.org/D40218\n\nllvm-svn: 349195"},
[h]={{p,1925,"static ExprResult SemaBuiltinLaunder(Sema &S, CallExpr *TheCall) {\n  // ...\n  if (DiagSelect) {\n    S.Diag(TheCall->getBeginLoc(), diag::err_builtin_launder_invalid_arg) << *DiagSelect << TheCall->getSourceRange();"}},
[h]={{o,1925,"static ExprResult SemaBuiltinLaunder(Sema &S, CallExpr *TheCall) {\n  // ...\n  if (DiagSelect) {\n    S.Diag(TheCall->getBeginLoc(), diag::err_builtin_launder_invalid_arg) << *DiagSelect << TheCall->getSourceRange();"}},
[j]={
[j]={
[ub]={"clang/test/Sema/builtins.c:269:3: error: non-pointer argument to \'__builtin_launder\' is not allowed","clang/test/Sema/builtins.c:271:3: error: void pointer argument to \'__builtin_launder\' is not allowed","clang/test/Sema/builtins.c:272:3: error: void pointer argument to \'__builtin_launder\' is not allowed","clang/test/Sema/builtins.c:276:3: error: function pointer argument to \'__builtin_launder\' is not allowed"}
[pb]={"clang/test/Sema/builtins.c:269:3: error: non-pointer argument to \'__builtin_launder\' is not allowed","clang/test/Sema/builtins.c:271:3: error: void pointer argument to \'__builtin_launder\' is not allowed","clang/test/Sema/builtins.c:272:3: error: void pointer argument to \'__builtin_launder\' is not allowed","clang/test/Sema/builtins.c:276:3: error: function pointer argument to \'__builtin_launder\' is not allowed"}
}
}
},
},
Line 5,476: Line 5,478:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"7903ca0993a4",1241326928,"Add diagnostic for r70658.\n\nllvm-svn: 70659","Add diagnostic for r70658.\n\nllvm-svn: 70659"},
[b]={"7903ca0993a4",1241326928,"Add diagnostic for r70658.","Add diagnostic for r70658.\n\nllvm-svn: 70659"},
[h]={{p,9321,"/// SemaBuiltinLongjmp - Handle __builtin_longjmp(void *env[5], int val).\n/// This checks that the target supports __builtin_longjmp and\n/// that val is a constant 1.\nbool Sema::SemaBuiltinLongjmp(CallExpr *TheCall) {\n  // ...\n  if (Result != 1)\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_longjmp_invalid_val) << SourceRange(Arg->getBeginLoc(), Arg->getEndLoc());"}}
[h]={{o,9321,"/// SemaBuiltinLongjmp - Handle __builtin_longjmp(void *env[5], int val).\n/// This checks that the target supports __builtin_longjmp and\n/// that val is a constant 1.\nbool Sema::SemaBuiltinLongjmp(CallExpr *TheCall) {\n  // ...\n  if (Result != 1)\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_longjmp_invalid_val) << SourceRange(Arg->getBeginLoc(), Arg->getEndLoc());"}}
},
},
["err_builtin_longjmp_unsupported"]={
["err_builtin_longjmp_unsupported"]={
Line 5,485: Line 5,487:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"27173288c296",1426117592,"Under duress, move check for target support of __builtin_setjmp/\n__builtin_longjmp to Sema as reques...","Under duress, move check for target support of __builtin_setjmp/\n__builtin_longjmp to Sema as requested by John McCall.\n\nllvm-svn: 231986"},
[b]={"27173288c296",1426117592,"Under duress, move check for target support of __builtin_setjmp/","Under duress, move check for target support of __builtin_setjmp/\n__builtin_longjmp to Sema as requested by John McCall.\n\nllvm-svn: 231986"},
[h]={{p,9310,"/// SemaBuiltinLongjmp - Handle __builtin_longjmp(void *env[5], int val).\n/// This checks that the target supports __builtin_longjmp and\n/// that val is a constant 1.\nbool Sema::SemaBuiltinLongjmp(CallExpr *TheCall) {\n  if (!Context.getTargetInfo().hasSjLjLowering())\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_longjmp_unsupported) << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());"}},
[h]={{o,9310,"/// SemaBuiltinLongjmp - Handle __builtin_longjmp(void *env[5], int val).\n/// This checks that the target supports __builtin_longjmp and\n/// that val is a constant 1.\nbool Sema::SemaBuiltinLongjmp(CallExpr *TheCall) {\n  if (!Context.getTargetInfo().hasSjLjLowering())\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_longjmp_unsupported) << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());"}},
[j]={
[j]={
["clang/test/Sema/builtin-longjmp.c"]={"clang/test/Sema/builtin-longjmp.c:27:3: error: __builtin_longjmp is not supported for the current target"}
["clang/test/Sema/builtin-longjmp.c"]={"clang/test/Sema/builtin-longjmp.c:27:3: error: __builtin_longjmp is not supported for the current target"}
Line 5,497: Line 5,499:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={ab,1576908663,Z,Y},
[b]={Z,1576908663,X,Y},
[h]={{p,18785,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  if (!getLangOpts().MatrixTypes) {\n    Diag(TheCall->getBeginLoc(), diag::err_builtin_matrix_disabled);"},{o,8456,"/// HandleMatrixTypeAttr - \"matrix_type\" attribute, like ext_vector_type\nstatic void HandleMatrixTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  if (!S.getLangOpts().MatrixTypes) {\n    S.Diag(Attr.getLoc(), diag::err_builtin_matrix_disabled);"}},
[h]={{o,18785,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  if (!getLangOpts().MatrixTypes) {\n    Diag(TheCall->getBeginLoc(), diag::err_builtin_matrix_disabled);"},{n,8456,"/// HandleMatrixTypeAttr - \"matrix_type\" attribute, like ext_vector_type\nstatic void HandleMatrixTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  if (!S.getLangOpts().MatrixTypes) {\n    S.Diag(Attr.getLoc(), diag::err_builtin_matrix_disabled);"}},
[j]={
[j]={
["clang/test/Parser/matrix-type-disabled.c"]={"clang/test/Parser/matrix-type-disabled.c:9:39: error: matrix types extension is disabled. Pass -fenable-matrix to enable it"}
["clang/test/Parser/matrix-type-disabled.c"]={"clang/test/Parser/matrix-type-disabled.c:9:39: error: matrix types extension is disabled. Pass -fenable-matrix to enable it"}
Line 5,509: Line 5,511:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={X,1582847864,W,S},
[b]={T,1582847864,U,V},
[h]={{p,18775,"// Get and verify the matrix dimensions.\nstatic std::optional<unsigned> getAndVerifyMatrixDimension(Expr *Expr, StringRef Name, Sema &S) {\n  // ...\n  if (!ConstantMatrixType::isDimensionValid(Dim)) {\n    S.Diag(Expr->getBeginLoc(), diag::err_builtin_matrix_invalid_dimension) << Name << ConstantMatrixType::getMaxElementsPerDimension();"}},
[h]={{o,18775,"// Get and verify the matrix dimensions.\nstatic std::optional<unsigned> getAndVerifyMatrixDimension(Expr *Expr, StringRef Name, Sema &S) {\n  // ...\n  if (!ConstantMatrixType::isDimensionValid(Dim)) {\n    S.Diag(Expr->getBeginLoc(), diag::err_builtin_matrix_invalid_dimension) << Name << ConstantMatrixType::getMaxElementsPerDimension();"}},
[j]={
[j]={
["clang/test/Sema/matrix-type-builtins.c"]={"clang/test/Sema/matrix-type-builtins.c:67:57: error: row dimension is outside the allowed range [1, 1048575]","clang/test/Sema/matrix-type-builtins.c:69:61: error: column dimension is outside the allowed range [1, 1048575]","clang/test/Sema/matrix-type-builtins.c:74:7: error: row dimension is outside the allowed range [1, 1048575]","clang/test/Sema/matrix-type-builtins.c:75:7: error: column dimension is outside the allowed range [1, 1048575]"}
["clang/test/Sema/matrix-type-builtins.c"]={"clang/test/Sema/matrix-type-builtins.c:67:57: error: row dimension is outside the allowed range [1, 1048575]","clang/test/Sema/matrix-type-builtins.c:69:61: error: column dimension is outside the allowed range [1, 1048575]","clang/test/Sema/matrix-type-builtins.c:74:7: error: row dimension is outside the allowed range [1, 1048575]","clang/test/Sema/matrix-type-builtins.c:75:7: error: column dimension is outside the allowed range [1, 1048575]"}
Line 5,521: Line 5,523:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={X,1582847864,W,S},
[b]={T,1582847864,U,V},
[h]={{p,18957,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!PtrTy) {\n  // ...\n  } else {\n    // ...\n    if (MatrixTy && !Context.hasSameType(ElementTy, MatrixTy->getElementType())) {\n      Diag(PtrExpr->getBeginLoc(), diag::err_builtin_matrix_pointer_arg_mismatch) << ElementTy << MatrixTy->getElementType();"}},
[h]={{o,18957,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!PtrTy) {\n  // ...\n  } else {\n    // ...\n    if (MatrixTy && !Context.hasSameType(ElementTy, MatrixTy->getElementType())) {\n      Diag(PtrExpr->getBeginLoc(), diag::err_builtin_matrix_pointer_arg_mismatch) << ElementTy << MatrixTy->getElementType();"}},
[j]={
[j]={
["clang/test/SemaObjC/matrix-type-builtins.m"]={"clang/test/SemaObjC/matrix-type-builtins.m:24:49: error: the pointee of the 2nd argument must match the element type of the 1st argument (\'float\' != \'double\')"}
["clang/test/SemaObjC/matrix-type-builtins.m"]={"clang/test/SemaObjC/matrix-type-builtins.m:24:49: error: the pointee of the 2nd argument must match the element type of the 1st argument (\'float\' != \'double\')"}
Line 5,533: Line 5,535:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={X,1582847864,W,S},
[b]={T,1582847864,U,V},
[h]={{p,18769,"// Get and verify the matrix dimensions.\nstatic std::optional<unsigned> getAndVerifyMatrixDimension(Expr *Expr, StringRef Name, Sema &S) {\n  // ...\n  if (!Value) {\n    S.Diag(Expr->getBeginLoc(), diag::err_builtin_matrix_scalar_unsigned_arg) << Name;"}},
[h]={{o,18769,"// Get and verify the matrix dimensions.\nstatic std::optional<unsigned> getAndVerifyMatrixDimension(Expr *Expr, StringRef Name, Sema &S) {\n  // ...\n  if (!Value) {\n    S.Diag(Expr->getBeginLoc(), diag::err_builtin_matrix_scalar_unsigned_arg) << Name;"}},
[j]={
[j]={
["clang/test/Sema/matrix-type-builtins.c"]={"clang/test/Sema/matrix-type-builtins.c:81:7: error: column argument must be a constant unsigned integer expression"}
["clang/test/Sema/matrix-type-builtins.c"]={"clang/test/Sema/matrix-type-builtins.c:81:7: error: column argument must be a constant unsigned integer expression"}
Line 5,545: Line 5,547:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={X,1582847864,W,S},
[b]={T,1582847864,U,V},
[h]={{p,18950,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!PtrTy) {\n  // ...\n  } else {\n    // ...\n    if (ElementTy.isConstQualified()) {\n      Diag(PtrExpr->getBeginLoc(), diag::err_builtin_matrix_store_to_const);"}},
[h]={{o,18950,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!PtrTy) {\n  // ...\n  } else {\n    // ...\n    if (ElementTy.isConstQualified()) {\n      Diag(PtrExpr->getBeginLoc(), diag::err_builtin_matrix_store_to_const);"}},
[j]={
[j]={
["clang/test/Sema/matrix-type-builtins.c"]={"clang/test/Sema/matrix-type-builtins.c:112:44: error: cannot store matrix to read-only pointer"}
["clang/test/Sema/matrix-type-builtins.c"]={"clang/test/Sema/matrix-type-builtins.c:112:44: error: cannot store matrix to read-only pointer"}
Line 5,557: Line 5,559:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={X,1582847864,W,S},
[b]={T,1582847864,U,V},
[h]={{p,18884,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (MaybeRows) {\n    if (std::optional<llvm::APSInt> Value = StrideExpr->getIntegerConstantExpr(Context)) {\n      // ...\n      if (Stride < *MaybeRows) {\n        Diag(StrideExpr->getBeginLoc(), diag::err_builtin_matrix_stride_too_small);"},{p,18984,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  // Check stride argument.\n  if (MatrixTy) {\n    if (std::optional<llvm::APSInt> Value = StrideExpr->getIntegerConstantExpr(Context)) {\n      // ...\n      if (Stride < MatrixTy->getNumRows()) {\n        Diag(StrideExpr->getBeginLoc(), diag::err_builtin_matrix_stride_too_small);"}},
[h]={{o,18884,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (MaybeRows) {\n    if (std::optional<llvm::APSInt> Value = StrideExpr->getIntegerConstantExpr(Context)) {\n      // ...\n      if (Stride < *MaybeRows) {\n        Diag(StrideExpr->getBeginLoc(), diag::err_builtin_matrix_stride_too_small);"},{o,18984,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  // Check stride argument.\n  if (MatrixTy) {\n    if (std::optional<llvm::APSInt> Value = StrideExpr->getIntegerConstantExpr(Context)) {\n      // ...\n      if (Stride < MatrixTy->getNumRows()) {\n        Diag(StrideExpr->getBeginLoc(), diag::err_builtin_matrix_stride_too_small);"}},
[j]={
[j]={
["clang/test/SemaObjC/matrix-type-builtins.m"]={"clang/test/SemaObjC/matrix-type-builtins.m:24:54: error: stride must be greater or equal to the number of rows"}
["clang/test/SemaObjC/matrix-type-builtins.m"]={"clang/test/SemaObjC/matrix-type-builtins.m:24:54: error: stride must be greater or equal to the number of rows"}
Line 5,569: Line 5,571:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/cla...","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
[b]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
[h]={{p,2512,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BIaddressof:\n  case Builtin::BI__addressof:\n  case Builtin::BIforward:\n  case Builtin::BIforward_like:\n  case Builtin::BImove:\n  case Builtin::BImove_if_noexcept:\n  case Builtin::BIas_const: {\n    // ...\n    if (!(Param->isReferenceType() && (ReturnsPointer ? Result->isAnyPointerType() : Result->isReferenceType()) && Context.hasSameUnqualifiedType(Param->getPointeeType(), Result->getPointeeType()))) {\n      Diag(TheCall->getBeginLoc(), diag::err_builtin_move_forward_unsupported) << FDecl;"}},
[h]={{o,2512,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BIaddressof:\n  case Builtin::BI__addressof:\n  case Builtin::BIforward:\n  case Builtin::BIforward_like:\n  case Builtin::BImove:\n  case Builtin::BImove_if_noexcept:\n  case Builtin::BIas_const: {\n    // ...\n    if (!(Param->isReferenceType() && (ReturnsPointer ? Result->isAnyPointerType() : Result->isReferenceType()) && Context.hasSameUnqualifiedType(Param->getPointeeType(), Result->getPointeeType()))) {\n      Diag(TheCall->getBeginLoc(), diag::err_builtin_move_forward_unsupported) << FDecl;"}},
[j]={
[j]={
["clang/test/SemaCXX/builtin-std-move.cpp"]={"clang/test/SemaCXX/builtin-std-move.cpp:169:21: error: unsupported signature for \'std::move<int>\'"}
["clang/test/SemaCXX/builtin-std-move.cpp"]={"clang/test/SemaCXX/builtin-std-move.cpp:169:21: error: unsupported signature for \'std::move<int>\'"}
Line 5,581: Line 5,583:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"15709991d09d",1444952831,"Add an error when calling a builtin that requires features that don\'t\nmatch the feature set of the f...","Add an error when calling a builtin that requires features that don\'t\nmatch the feature set of the function that they\'re being called from.\n\nThis ensures that we can effectively diagnose some[1] code that would\ninstead ICE in the backend with a failure to select message.\n\nExample:\n\n__m128d foo(__m128d a, __m128d b) {\n  return __builtin_ia32_addsubps(b, a);\n}\n\ncompiled for normal x86_64 via:\n\nclang -target x86_64-linux-gnu -c\n\nwould fail to compile in the back end because the normal subtarget\nfeatures for x86_64 only include sse2 and the builtin requires sse3.\n\n[1] We\'re still not erroring on:\n\n__m128i bar(__m128i const *p) { return _mm_lddqu_si128(p); }\n\nwhere we should fail and error on an always_inline function being\ninlined into a function that doesn\'t support the subtarget features\nrequired.\n\nllvm-svn: 250473"},
[b]={"15709991d09d",1444952831,"Add an error when calling a builtin that requires features that don\'t","Add an error when calling a builtin that requires features that don\'t\nmatch the feature set of the function that they\'re being called from.\n\nThis ensures that we can effectively diagnose some[1] code that would\ninstead ICE in the backend with a failure to select message.\n\nExample:\n\n__m128d foo(__m128d a, __m128d b) {\n  return __builtin_ia32_addsubps(b, a);\n}\n\ncompiled for normal x86_64 via:\n\nclang -target x86_64-linux-gnu -c\n\nwould fail to compile in the back end because the normal subtarget\nfeatures for x86_64 only include sse2 and the builtin requires sse3.\n\n[1] We\'re still not erroring on:\n\n__m128i bar(__m128i const *p) { return _mm_lddqu_si128(p); }\n\nwhere we should fail and error on an always_inline function being\ninlined into a function that doesn\'t support the subtarget features\nrequired.\n\nllvm-svn: 250473"},
[h]={{"clang/lib/CodeGen/CodeGenFunction.cpp",2603,"// Emits an error if we don\'t have a valid set of target features for the\n// called function.\nvoid CodeGenFunction::checkTargetFeatures(SourceLocation Loc, const FunctionDecl *TargetDecl) {\n  // ...\n  if (BuiltinID) {\n    // ...\n    if (!Builtin::evaluateRequiredTargetFeatures(FeatureList, CallerFeatureMap)) {\n      CGM.getDiags().Report(Loc, diag::err_builtin_needs_feature) << TargetDecl->getDeclName() << FeatureList;"}},
[h]={{"clang/lib/CodeGen/CodeGenFunction.cpp",2603,"// Emits an error if we don\'t have a valid set of target features for the\n// called function.\nvoid CodeGenFunction::checkTargetFeatures(SourceLocation Loc, const FunctionDecl *TargetDecl) {\n  // ...\n  if (BuiltinID) {\n    // ...\n    if (!Builtin::evaluateRequiredTargetFeatures(FeatureList, CallerFeatureMap)) {\n      CGM.getDiags().Report(Loc, diag::err_builtin_needs_feature) << TargetDecl->getDeclName() << FeatureList;"}},
[j]={
[j]={
Line 5,594: Line 5,596:
[g]=k,
[g]=k,
[b]={"fa752f23cc20",1521659988,"[Builtins] Overload __builtin_operator_new/delete to allow forwarding to usual allocation/deallocati...","[Builtins] Overload __builtin_operator_new/delete to allow forwarding to usual allocation/deallocation functions.\n\nSummary:\nLibc++\'s default allocator uses `__builtin_operator_new` and `__builtin_operator_delete` in order to allow the calls to new/delete to be ellided. However, libc++ now needs to support over-aligned types in the default allocator. In order to support this without disabling the existing optimization Clang needs to support calling the aligned new overloads from the builtins.\n\nSee llvm.org/PR22634 for more information about the libc++ bug.\n\nThis patch changes `__builtin_operator_new`/`__builtin_operator_delete` to call any usual `operator new`/`operator delete` function. It does this by performing overload resolution with the arguments passed to the builtin to determine which allocation function to call. If the selected function is not a usual allocation function a diagnostic is issued.\n\nOne open issue is if the `align_val_t` overloads should be considered \"usual\" when `LangOpts::AlignedAllocation` is disabled.\n\n\nIn order to allow libc++ to detect this new behavior the value for `__has_builtin(__builtin_operator_new)` has been updated to `201802`.\n\nReviewers: rsmith, majnemer, aaron.ballman, erik.pilkington, bogner, ahatanak\n\nReviewed By: rsmith\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D43047\n\nllvm-svn: 328134"},
[b]={"fa752f23cc20",1521659988,"[Builtins] Overload __builtin_operator_new/delete to allow forwarding to usual allocation/deallocati...","[Builtins] Overload __builtin_operator_new/delete to allow forwarding to usual allocation/deallocation functions.\n\nSummary:\nLibc++\'s default allocator uses `__builtin_operator_new` and `__builtin_operator_delete` in order to allow the calls to new/delete to be ellided. However, libc++ now needs to support over-aligned types in the default allocator. In order to support this without disabling the existing optimization Clang needs to support calling the aligned new overloads from the builtins.\n\nSee llvm.org/PR22634 for more information about the libc++ bug.\n\nThis patch changes `__builtin_operator_new`/`__builtin_operator_delete` to call any usual `operator new`/`operator delete` function. It does this by performing overload resolution with the arguments passed to the builtin to determine which allocation function to call. If the selected function is not a usual allocation function a diagnostic is issued.\n\nOne open issue is if the `align_val_t` overloads should be considered \"usual\" when `LangOpts::AlignedAllocation` is disabled.\n\n\nIn order to allow libc++ to detect this new behavior the value for `__has_builtin(__builtin_operator_new)` has been updated to `201802`.\n\nReviewers: rsmith, majnemer, aaron.ballman, erik.pilkington, bogner, ahatanak\n\nReviewed By: rsmith\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D43047\n\nllvm-svn: 328134"},
[h]={{t,3859,"static bool resolveBuiltinNewDeleteOverload(Sema &S, CallExpr *TheCall, bool IsDelete, FunctionDecl *&Operator) {\n  // ...\n  case OR_Success: {\n    // ...\n    if (!FnDecl->isReplaceableGlobalAllocationFunction()) {\n      S.Diag(R.getNameLoc(), diag::err_builtin_operator_new_delete_not_usual) << (IsDelete ? 1 : 0) << Range;"}},
[h]={{u,3859,"static bool resolveBuiltinNewDeleteOverload(Sema &S, CallExpr *TheCall, bool IsDelete, FunctionDecl *&Operator) {\n  // ...\n  case OR_Success: {\n    // ...\n    if (!FnDecl->isReplaceableGlobalAllocationFunction()) {\n      S.Diag(R.getNameLoc(), diag::err_builtin_operator_new_delete_not_usual) << (IsDelete ? 1 : 0) << Range;"}},
[j]={
[j]={
["clang/test/SemaCXX/builtin-operator-new-delete.cpp"]={"clang/test/SemaCXX/builtin-operator-new-delete.cpp:93:13: error: call to \'__builtin_operator_new\' selects non-usual allocation function","clang/test/SemaCXX/builtin-operator-new-delete.cpp:94:3: error: call to \'__builtin_operator_delete\' selects non-usual deallocation function","clang/test/SemaCXX/builtin-operator-new-delete.cpp:112:3: error: call to \'__builtin_operator_new\' selects non-usual allocation function","clang/test/SemaCXX/builtin-operator-new-delete.cpp:113:3: error: call to \'__builtin_operator_delete\' selects non-usual deallocation function"}
["clang/test/SemaCXX/builtin-operator-new-delete.cpp"]={"clang/test/SemaCXX/builtin-operator-new-delete.cpp:93:13: error: call to \'__builtin_operator_new\' selects non-usual allocation function","clang/test/SemaCXX/builtin-operator-new-delete.cpp:94:3: error: call to \'__builtin_operator_delete\' selects non-usual deallocation function","clang/test/SemaCXX/builtin-operator-new-delete.cpp:112:3: error: call to \'__builtin_operator_new\' selects non-usual allocation function","clang/test/SemaCXX/builtin-operator-new-delete.cpp:113:3: error: call to \'__builtin_operator_delete\' selects non-usual deallocation function"}
Line 5,605: Line 5,607:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={M,1625925174,K,L},
[b]={N,1625925174,M,L},
[h]={{t,5393,"static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT, SourceLocation KeyLoc, QualType T) {\n  // ...\n  case UTT_CanPassInRegs:\n    // ...\n    Self.Diag(KeyLoc, diag::err_builtin_pass_in_regs_non_class) << T;"}},
[h]={{u,5393,"static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT, SourceLocation KeyLoc, QualType T) {\n  // ...\n  case UTT_CanPassInRegs:\n    // ...\n    Self.Diag(KeyLoc, diag::err_builtin_pass_in_regs_non_class) << T;"}},
[j]={
[j]={
["clang/test/SemaCXX/type-traits.cpp"]={"clang/test/SemaCXX/type-traits.cpp:3505:9: error: argument \'const A\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3506:9: error: argument \'A &\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3507:9: error: argument \'A &&\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3508:9: error: argument \'const A &\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3510:9: error: argument \'int\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3511:9: error: argument \'int &\' is not an unqualified class type"}
["clang/test/SemaCXX/type-traits.cpp"]={"clang/test/SemaCXX/type-traits.cpp:3505:9: error: argument \'const A\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3506:9: error: argument \'A &\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3507:9: error: argument \'A &&\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3508:9: error: argument \'const A &\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3510:9: error: argument \'int\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3511:9: error: argument \'int &\' is not an unqualified class type"}
Line 5,617: Line 5,619:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"41af97137572",1523914208,"Limit types of builtins that can be redeclared.\n\nAs reported here: https://bugs.llvm.org/show_bug.cg...","Limit types of builtins that can be redeclared.\n\nAs reported here: https://bugs.llvm.org/show_bug.cgi?id=37033\nAny usage of a builtin function that uses a va_list by reference\nwill cause an assertion when redeclaring it.\n\nAfter discussion in the review, it was concluded that the correct\nway of accomplishing this fix is to make attempts to redeclare certain\nbuiltins an error. Unfortunately, doing this limitation for all builtins\nis likely a breaking change, so this commit simply limits it to\ntypes with custom type checking and those that take a reference.\n\nTwo tests needed to be updated to make this work.\n\nDifferential Revision: https://reviews.llvm.org/D45383\n\nllvm-svn: 330160"},
[b]={"41af97137572",1523914208,"Limit types of builtins that can be redeclared.","Limit types of builtins that can be redeclared.\n\nAs reported here: https://bugs.llvm.org/show_bug.cgi?id=37033\nAny usage of a builtin function that uses a va_list by reference\nwill cause an assertion when redeclaring it.\n\nAfter discussion in the review, it was concluded that the correct\nway of accomplishing this fix is to make attempts to redeclare certain\nbuiltins an error. Unfortunately, doing this limitation for all builtins\nis likely a breaking change, so this commit simply limits it to\ntypes with custom type checking and those that take a reference.\n\nTwo tests needed to be updated to make this work.\n\nDifferential Revision: https://reviews.llvm.org/D45383\n\nllvm-svn: 330160"},
[h]={{n,3678,"/// 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  // Disallow redeclaration of some builtins.\n  if (!getASTContext().canBuiltinBeRedeclared(Old)) {\n    Diag(New->getLocation(), diag::err_builtin_redeclare) << Old->getDeclName();"}},
[h]={{m,3678,"/// 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  // Disallow redeclaration of some builtins.\n  if (!getASTContext().canBuiltinBeRedeclared(Old)) {\n    Diag(New->getLocation(), diag::err_builtin_redeclare) << Old->getDeclName();"}},
[j]={
[j]={
["clang/test/Sema/crash-invalid-builtin.c"]={"clang/test/Sema/crash-invalid-builtin.c:4:1: error: cannot redeclare builtin function \'__builtin_isinf\'"}
["clang/test/Sema/crash-invalid-builtin.c"]={"clang/test/Sema/crash-invalid-builtin.c:4:1: error: cannot redeclare builtin function \'__builtin_isinf\'"}
Line 5,629: Line 5,631:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"760520bcb78d",1401838064,"Add __builtin_operator_new and __builtin_operator_delete, which act like calls\nto the normal non-pla...","Add __builtin_operator_new and __builtin_operator_delete, which act like calls\nto the normal non-placement ::operator new and ::operator delete, but allow\noptimizations like new-expressions and delete-expressions do.\n\nllvm-svn: 210137"},
[b]={"760520bcb78d",1401838064,"Add __builtin_operator_new and __builtin_operator_delete, which act like calls","Add __builtin_operator_new and __builtin_operator_delete, which act like calls\nto the normal non-placement ::operator new and ::operator delete, but allow\noptimizations like new-expressions and delete-expressions do.\n\nllvm-svn: 210137"},
[h]={{t,3902,"ExprResult Sema::SemaBuiltinOperatorNewDeleteOverloaded(ExprResult TheCallResult, bool IsDelete) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n    Diag(TheCall->getExprLoc(), diag::err_builtin_requires_language) << (IsDelete ? \"__builtin_operator_delete\" : \"__builtin_operator_new\") << \"C++\";"}},
[h]={{u,3902,"ExprResult Sema::SemaBuiltinOperatorNewDeleteOverloaded(ExprResult TheCallResult, bool IsDelete) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n    Diag(TheCall->getExprLoc(), diag::err_builtin_requires_language) << (IsDelete ? \"__builtin_operator_delete\" : \"__builtin_operator_new\") << \"C++\";"}},
[j]={
[j]={
[ub]={"clang/test/Sema/builtins.c:216:3: error: \'__builtin_operator_new\' is only available in C++","clang/test/Sema/builtins.c:217:3: error: \'__builtin_operator_delete\' is only available in C++"}
[pb]={"clang/test/Sema/builtins.c:216:3: error: \'__builtin_operator_new\' is only available in C++","clang/test/Sema/builtins.c:217:3: error: \'__builtin_operator_delete\' is only available in C++"}
}
}
},
},
Line 5,641: Line 5,643:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"27173288c296",1426117592,"Under duress, move check for target support of __builtin_setjmp/\n__builtin_longjmp to Sema as reques...","Under duress, move check for target support of __builtin_setjmp/\n__builtin_longjmp to Sema as requested by John McCall.\n\nllvm-svn: 231986"},
[b]={"27173288c296",1426117592,"Under duress, move check for target support of __builtin_setjmp/","Under duress, move check for target support of __builtin_setjmp/\n__builtin_longjmp to Sema as requested by John McCall.\n\nllvm-svn: 231986"},
[h]={{p,9331,"/// SemaBuiltinSetjmp - Handle __builtin_setjmp(void *env[5]).\n/// This checks that the target supports __builtin_setjmp.\nbool Sema::SemaBuiltinSetjmp(CallExpr *TheCall) {\n  if (!Context.getTargetInfo().hasSjLjLowering())\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_setjmp_unsupported) << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());"}},
[h]={{o,9331,"/// SemaBuiltinSetjmp - Handle __builtin_setjmp(void *env[5]).\n/// This checks that the target supports __builtin_setjmp.\nbool Sema::SemaBuiltinSetjmp(CallExpr *TheCall) {\n  if (!Context.getTargetInfo().hasSjLjLowering())\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_setjmp_unsupported) << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());"}},
[j]={
[j]={
["clang/test/Sema/builtin-longjmp.c"]={"clang/test/Sema/builtin-longjmp.c:33:8: error: __builtin_setjmp is not supported for the current target"}
["clang/test/Sema/builtin-longjmp.c"]={"clang/test/Sema/builtin-longjmp.c:33:8: error: __builtin_setjmp is not supported for the current target"}
Line 5,653: Line 5,655:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"aa46ed927860",1528407544,"[MS] Re-add support for the ARM interlocked bittest intrinscs\n\nAdds support for these intrinsics, wh...","[MS] Re-add support for the ARM interlocked bittest intrinscs\n\nAdds support for these intrinsics, which are ARM and ARM64 only:\n  _interlockedbittestandreset_acq\n  _interlockedbittestandreset_rel\n  _interlockedbittestandreset_nf\n  _interlockedbittestandset_acq\n  _interlockedbittestandset_rel\n  _interlockedbittestandset_nf\n\nRefactor the bittest intrinsic handling to decompose each intrinsic into\nits action, its width, and its atomicity.\n\nllvm-svn: 334239"},
[b]={"aa46ed927860",1528407544,"[MS] Re-add support for the ARM interlocked bittest intrinscs","[MS] Re-add support for the ARM interlocked bittest intrinscs\n\nAdds support for these intrinsics, which are ARM and ARM64 only:\n  _interlockedbittestandreset_acq\n  _interlockedbittestandreset_rel\n  _interlockedbittestandreset_nf\n  _interlockedbittestandset_acq\n  _interlockedbittestandset_rel\n  _interlockedbittestandset_nf\n\nRefactor the bittest intrinsic handling to decompose each intrinsic into\nits action, its width, and its atomicity.\n\nllvm-svn: 334239"},
[h]={{p,1962,"// Emit an error and return true if the current object format type is in the\n// list of unsupported types.\nstatic bool CheckBuiltinTargetNotInUnsupported(Sema &S, unsigned BuiltinID, CallExpr *TheCall, ArrayRef<llvm::Triple::ObjectFormatType> UnsupportedObjectFormatTypes) {\n  // ...\n  if (llvm::is_contained(UnsupportedObjectFormatTypes, CurObjFormat)) {\n    S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) << TheCall->getSourceRange();"},{p,1978,"// Emit an error and return true if the current architecture is not in the list\n// of supported architectures.\nstatic bool CheckBuiltinTargetInSupported(Sema &S, unsigned BuiltinID, CallExpr *TheCall, ArrayRef<llvm::Triple::ArchType> SupportedArchs) {\n  // ...\n  S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) << TheCall->getSourceRange();"},{p,8577,"/// SemaBuiltinArithmeticFence - Handle __arithmetic_fence.\nbool Sema::SemaBuiltinArithmeticFence(CallExpr *TheCall) {\n  if (!Context.getTargetInfo().checkArithmeticFenceSupported())\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());"}},
[h]={{o,1962,"// Emit an error and return true if the current object format type is in the\n// list of unsupported types.\nstatic bool CheckBuiltinTargetNotInUnsupported(Sema &S, unsigned BuiltinID, CallExpr *TheCall, ArrayRef<llvm::Triple::ObjectFormatType> UnsupportedObjectFormatTypes) {\n  // ...\n  if (llvm::is_contained(UnsupportedObjectFormatTypes, CurObjFormat)) {\n    S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) << TheCall->getSourceRange();"},{o,1978,"// Emit an error and return true if the current architecture is not in the list\n// of supported architectures.\nstatic bool CheckBuiltinTargetInSupported(Sema &S, unsigned BuiltinID, CallExpr *TheCall, ArrayRef<llvm::Triple::ArchType> SupportedArchs) {\n  // ...\n  S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) << TheCall->getSourceRange();"},{o,8577,"/// SemaBuiltinArithmeticFence - Handle __arithmetic_fence.\nbool Sema::SemaBuiltinArithmeticFence(CallExpr *TheCall) {\n  if (!Context.getTargetInfo().checkArithmeticFenceSupported())\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());"}},
[j]={
[j]={
["clang/test/Sema/builtin_set_flt_rounds.c"]={"clang/test/Sema/builtin_set_flt_rounds.c:5:3: error: builtin is not supported on this target"}
["clang/test/Sema/builtin_set_flt_rounds.c"]={"clang/test/Sema/builtin_set_flt_rounds.c:5:3: error: builtin is not supported on this target"}
Line 5,665: Line 5,667:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"022e782e7576",1500324585,"[AArch64] Add support for __builtin_ms_va_list on aarch64\n\nMove builtins from the x86 specific scope...","[AArch64] Add support for __builtin_ms_va_list on aarch64\n\nMove builtins from the x86 specific scope into the global\nscope. Their use is still limited to x86_64 and aarch64 though.\n\nThis allows wine on aarch64 to properly handle variadic functions.\n\nDifferential Revision: https://reviews.llvm.org/D34475\n\nllvm-svn: 308218"},
[b]={"022e782e7576",1500324585,"[AArch64] Add support for __builtin_ms_va_list on aarch64","[AArch64] Add support for __builtin_ms_va_list on aarch64\n\nMove builtins from the x86 specific scope into the global\nscope. Their use is still limited to x86_64 and aarch64 though.\n\nThis allows wine on aarch64 to properly handle variadic functions.\n\nDifferential Revision: https://reviews.llvm.org/D34475\n\nllvm-svn: 308218"},
[h]={{p,8059,"/// 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 (IsMSVAStart)\n    return S.Diag(Fn->getBeginLoc(), diag::err_builtin_x64_aarch64_only);"}},
[h]={{o,8059,"/// 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 (IsMSVAStart)\n    return S.Diag(Fn->getBeginLoc(), diag::err_builtin_x64_aarch64_only);"}},
[j]={
[j]={
["clang/test/Sema/varargs-x86-32.c"]={"clang/test/Sema/varargs-x86-32.c:4:3: error: this builtin is only available on x86-64 and aarch64 targets"}
["clang/test/Sema/varargs-x86-32.c"]={"clang/test/Sema/varargs-x86-32.c:4:3: error: this builtin is only available on x86-64 and aarch64 targets"}
Line 5,676: Line 5,678:
[e]="\'_Noreturn\' keyword must precede function declarator",
[e]="\'_Noreturn\' keyword must precede function declarator",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"99c464c3f377",1415653832,"Improve diagnostics if _Noreturn is placed after a function declarator. (This sometimes happens when...","Improve diagnostics if _Noreturn is placed after a function declarator. (This sometimes happens when a macro is used that expands to either the GNU noreturn attribute or _Noreturn.)\n\nllvm-svn: 221630"},
[b]={"99c464c3f377",1415653832,"Improve diagnostics if _Noreturn is placed after a function declarator. (This sometimes happens when...","Improve diagnostics if _Noreturn is placed after a function declarator. (This sometimes happens when a macro is used that expands to either the GNU noreturn attribute or _Noreturn.)\n\nllvm-svn: 221630"},
[h]={{A,2155,"/// ParseDeclGroup - Having concluded that this is either a function\n/// definition or a group of object declarations, actually parse the\n/// result.\nParser::DeclGroupPtrTy Parser::ParseDeclGroup(ParsingDeclSpec &DS, DeclaratorContext Context, ParsedAttributes &Attrs, SourceLocation *DeclEnd, ForRangeInit *FRI) {\n  // ...\n  if (D.isFunctionDeclarator()) {\n    // ...\n    // The _Noreturn keyword can\'t appear here, unlike the GNU noreturn\n    // attribute. If we find the keyword here, tell the user to put it\n    // at the start instead.\n    if (Tok.is(tok::kw__Noreturn)) {\n      // ...\n      Diag(Loc, diag::err_c11_noreturn_misplaced) << (Fixit ? FixItHint::CreateRemoval(Loc) : FixItHint()) << (Fixit ? FixItHint::CreateInsertion(D.getBeginLoc(), \"_Noreturn \") : FixItHint());"}},
[h]={{B,2155,"/// ParseDeclGroup - Having concluded that this is either a function\n/// definition or a group of object declarations, actually parse the\n/// result.\nParser::DeclGroupPtrTy Parser::ParseDeclGroup(ParsingDeclSpec &DS, DeclaratorContext Context, ParsedAttributes &Attrs, SourceLocation *DeclEnd, ForRangeInit *FRI) {\n  // ...\n  if (D.isFunctionDeclarator()) {\n    // ...\n    // The _Noreturn keyword can\'t appear here, unlike the GNU noreturn\n    // attribute. If we find the keyword here, tell the user to put it\n    // at the start instead.\n    if (Tok.is(tok::kw__Noreturn)) {\n      // ...\n      Diag(Loc, diag::err_c11_noreturn_misplaced) << (Fixit ? FixItHint::CreateRemoval(Loc) : FixItHint()) << (Fixit ? FixItHint::CreateInsertion(D.getBeginLoc(), \"_Noreturn \") : FixItHint());"}},
[j]={
[j]={
["clang/test/Parser/c11-noreturn.c"]={"clang/test/Parser/c11-noreturn.c:7:13: error: \'_Noreturn\' keyword must precede function declarator"}
["clang/test/Parser/c11-noreturn.c"]={"clang/test/Parser/c11-noreturn.c:7:13: error: \'_Noreturn\' keyword must precede function declarator"}
Line 5,689: Line 5,691:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"73341c4e6319",1252628338,"Diagnose VLAs as an error in C++.\n\nAlso, treat the GNU __null as an integral constant expression to ...","Diagnose VLAs as an error in C++.\n\nAlso, treat the GNU __null as an integral constant expression to match\nGCC\'s behavior.\n\nllvm-svn: 81490"},
[b]={"73341c4e6319",1252628338,"Diagnose VLAs as an error in C++.","Diagnose VLAs as an error in C++.\n\nAlso, treat the GNU __null as an integral constant expression to match\nGCC\'s behavior.\n\nllvm-svn: 81490"},
[h]={{o,2680,"/// 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 this is not C99, diagnose array size modifiers on non-VLAs.\n  if (!getLangOpts().C99 && !T->isVariableArrayType() && (ASM != ArrayType::Normal || Quals != 0)) {\n    Diag(Loc, getLangOpts().CPlusPlus ? diag::err_c99_array_usage_cxx : diag::ext_c99_array_usage) << ASM;"}},
[h]={{n,2680,"/// 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 this is not C99, diagnose array size modifiers on non-VLAs.\n  if (!getLangOpts().C99 && !T->isVariableArrayType() && (ASM != ArrayType::Normal || Quals != 0)) {\n    Diag(Loc, getLangOpts().CPlusPlus ? diag::err_c99_array_usage_cxx : diag::ext_c99_array_usage) << ASM;"}},
[j]={
[j]={
["clang/test/SemaCXX/attr-gnu.cpp"]={"clang/test/SemaCXX/attr-gnu.cpp:13:13: error: static array size is a C99 feature, not permitted in C++"}
["clang/test/SemaCXX/attr-gnu.cpp"]={"clang/test/SemaCXX/attr-gnu.cpp:13:13: error: static array size is a C99 feature, not permitted in C++"}
Line 5,702: Line 5,704:
[g]=k,
[g]=k,
[b]={"7f84ed928721",1255132315,"Add CheckCallReturnType and start using it for regular call expressions. This will improve error mes...","Add CheckCallReturnType and start using it for regular call expressions. This will improve error messages. For \n\nstruct B;\n\nB f();\n\nvoid g() {\nf();\n}\n\nWe now get\n\nt.cpp:6:3: error: calling \'f\' with incomplete return type \'struct B\'\n  f();\n  ^~~\nt.cpp:3:3: note: \'f\' declared here\nB f();\n  ^\nt.cpp:1:8: note: forward declaration of \'struct B\'\nstruct B;\n      ^\n\nllvm-svn: 83692"},
[b]={"7f84ed928721",1255132315,"Add CheckCallReturnType and start using it for regular call expressions. This will improve error mes...","Add CheckCallReturnType and start using it for regular call expressions. This will improve error messages. For \n\nstruct B;\n\nB f();\n\nvoid g() {\nf();\n}\n\nWe now get\n\nt.cpp:6:3: error: calling \'f\' with incomplete return type \'struct B\'\n  f();\n  ^~~\nt.cpp:3:3: note: \'f\' declared here\nB f();\n  ^\nt.cpp:1:8: note: forward declaration of \'struct B\'\nstruct B;\n      ^\n\nllvm-svn: 83692"},
[h]={{u,20821,"bool Sema::CheckCallReturnType(QualType ReturnType, SourceLocation Loc, CallExpr *CE, FunctionDecl *FD) {\n  // ...\n  class CallReturnIncompleteDiagnoser : public TypeDiagnoser {\n    // ...\n    void diagnose(Sema &S, SourceLocation Loc, QualType T) override {\n      // ...\n      S.Diag(Loc, diag::err_call_function_incomplete_return) << CE->getSourceRange() << FD << T;"}},
[h]={{v,20821,"bool Sema::CheckCallReturnType(QualType ReturnType, SourceLocation Loc, CallExpr *CE, FunctionDecl *FD) {\n  // ...\n  class CallReturnIncompleteDiagnoser : public TypeDiagnoser {\n    // ...\n    void diagnose(Sema &S, SourceLocation Loc, QualType T) override {\n      // ...\n      S.Diag(Loc, diag::err_call_function_incomplete_return) << CE->getSourceRange() << FD << T;"}},
[j]={
[j]={
["clang/test/Sema/incomplete-call.c"]={"clang/test/Sema/incomplete-call.c:10:3: error: calling \'a\' with incomplete return type \'struct foo\'"}
["clang/test/Sema/incomplete-call.c"]={"clang/test/Sema/incomplete-call.c:10:3: error: calling \'a\' with incomplete return type \'struct foo\'"}
Line 5,713: Line 5,715:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"3164fb15e286",1237759250,"Check that the return/argument types of calls are complete.\n\nllvm-svn: 67485","Check that the return/argument types of calls are complete.\n\nllvm-svn: 67485"},
[b]={"3164fb15e286",1237759250,"Check that the return/argument types of calls are complete.","Check that the return/argument types of calls are complete.\n\nllvm-svn: 67485"},
[h]={{u,1092,"/// DefaultVariadicArgumentPromotion - Like DefaultArgumentPromotion, but\n/// will create a trap if the resulting type is not a POD type.\nExprResult Sema::DefaultVariadicArgumentPromotion(Expr *E, VariadicCallType CT, FunctionDecl *FDecl) {\n  // ...\n  if (!getLangOpts().CPlusPlus && RequireCompleteType(E->getExprLoc(), E->getType(), diag::err_call_incomplete_argument))"},{u,6655,"bool Sema::GatherArgumentsForCall(SourceLocation CallLoc, FunctionDecl *FDecl, const FunctionProtoType *Proto, unsigned FirstParam, ArrayRef<Expr *> Args, SmallVectorImpl<Expr *> &AllArgs, VariadicCallType CallType, bool AllowExplicit, bool IsListInitialization) {\n  // ...\n  // Continue to check argument types (even if we have too few/many args).\n  for (unsigned i = FirstParam; i < NumParams; i++) {\n    // ...\n    if (ArgIx < Args.size()) {\n      // ...\n      if (RequireCompleteType(Arg->getBeginLoc(), ProtoArgType, diag::err_call_incomplete_argument, Arg))"},{u,7594,"/// 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 (Proto) {\n  // ...\n  } else {\n    // ...\n    // Promote the arguments (C99 6.5.2.2p6).\n    for (unsigned i = 0, e = Args.size(); i != e; i++) {\n      // ...\n      if (RequireCompleteType(Arg->getBeginLoc(), Arg->getType(), diag::err_call_incomplete_argument, Arg))"},{C,1861,"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  for (unsigned i = 0; i < NumNamedArgs; i++) {\n    // ...\n    if (RequireCompleteType(argExpr->getSourceRange().getBegin(), paramType, diag::err_call_incomplete_argument, argExpr))"},{D,6837,"/// 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 (IsExtraneousCopy) {\n    // ...\n    // Instantiate the default arguments of any extra parameters in\n    // the selected copy constructor, as if we were going to create a\n    // proper call to the copy constructor.\n    for (unsigned I = 1, N = Constructor->getNumParams(); I != N; ++I) {\n      // ...\n      if (S.RequireCompleteType(Loc, Parm->getType(), diag::err_call_incomplete_argument))"}},
[h]={{v,1092,"/// DefaultVariadicArgumentPromotion - Like DefaultArgumentPromotion, but\n/// will create a trap if the resulting type is not a POD type.\nExprResult Sema::DefaultVariadicArgumentPromotion(Expr *E, VariadicCallType CT, FunctionDecl *FDecl) {\n  // ...\n  if (!getLangOpts().CPlusPlus && RequireCompleteType(E->getExprLoc(), E->getType(), diag::err_call_incomplete_argument))"},{v,6655,"bool Sema::GatherArgumentsForCall(SourceLocation CallLoc, FunctionDecl *FDecl, const FunctionProtoType *Proto, unsigned FirstParam, ArrayRef<Expr *> Args, SmallVectorImpl<Expr *> &AllArgs, VariadicCallType CallType, bool AllowExplicit, bool IsListInitialization) {\n  // ...\n  // Continue to check argument types (even if we have too few/many args).\n  for (unsigned i = FirstParam; i < NumParams; i++) {\n    // ...\n    if (ArgIx < Args.size()) {\n      // ...\n      if (RequireCompleteType(Arg->getBeginLoc(), ProtoArgType, diag::err_call_incomplete_argument, Arg))"},{v,7594,"/// 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 (Proto) {\n  // ...\n  } else {\n    // ...\n    // Promote the arguments (C99 6.5.2.2p6).\n    for (unsigned i = 0, e = Args.size(); i != e; i++) {\n      // ...\n      if (RequireCompleteType(Arg->getBeginLoc(), Arg->getType(), diag::err_call_incomplete_argument, Arg))"},{C,1861,"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  for (unsigned i = 0; i < NumNamedArgs; i++) {\n    // ...\n    if (RequireCompleteType(argExpr->getSourceRange().getBegin(), paramType, diag::err_call_incomplete_argument, argExpr))"},{E,6837,"/// 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 (IsExtraneousCopy) {\n    // ...\n    // Instantiate the default arguments of any extra parameters in\n    // the selected copy constructor, as if we were going to create a\n    // proper call to the copy constructor.\n    for (unsigned I = 1, N = Constructor->getNumParams(); I != N; ++I) {\n      // ...\n      if (S.RequireCompleteType(Loc, Parm->getType(), diag::err_call_incomplete_argument))"}},
[j]={
[j]={
["clang/test/Sema/incomplete-call.c"]={"clang/test/Sema/incomplete-call.c:11:5: error: argument type \'struct foo\' is incomplete","clang/test/Sema/incomplete-call.c:12:5: error: argument type \'struct foo\' is incomplete"}
["clang/test/Sema/incomplete-call.c"]={"clang/test/Sema/incomplete-call.c:11:5: error: argument type \'struct foo\' is incomplete","clang/test/Sema/incomplete-call.c:12:5: error: argument type \'struct foo\' is incomplete"}
Line 5,725: Line 5,727:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"3164fb15e286",1237759250,"Check that the return/argument types of calls are complete.\n\nllvm-svn: 67485","Check that the return/argument types of calls are complete.\n\nllvm-svn: 67485"},
[b]={"3164fb15e286",1237759250,"Check that the return/argument types of calls are complete.","Check that the return/argument types of calls are complete.\n\nllvm-svn: 67485"},
[h]={{u,20819,"bool Sema::CheckCallReturnType(QualType ReturnType, SourceLocation Loc, CallExpr *CE, FunctionDecl *FD) {\n  // ...\n  class CallReturnIncompleteDiagnoser : public TypeDiagnoser {\n    // ...\n    void diagnose(Sema &S, SourceLocation Loc, QualType T) override {\n      if (!FD) {\n        S.Diag(Loc, diag::err_call_incomplete_return) << T << CE->getSourceRange();"}},
[h]={{v,20819,"bool Sema::CheckCallReturnType(QualType ReturnType, SourceLocation Loc, CallExpr *CE, FunctionDecl *FD) {\n  // ...\n  class CallReturnIncompleteDiagnoser : public TypeDiagnoser {\n    // ...\n    void diagnose(Sema &S, SourceLocation Loc, QualType T) override {\n      if (!FD) {\n        S.Diag(Loc, diag::err_call_incomplete_return) << T << CE->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCXX/incomplete-call.cpp"]={"clang/test/SemaCXX/incomplete-call.cpp:23:3: error: calling function with incomplete return type \'A\'","clang/test/SemaCXX/incomplete-call.cpp:24:3: error: calling function with incomplete return type \'A\'","clang/test/SemaCXX/incomplete-call.cpp:41:7: error: calling function with incomplete return type \'A\'"}
["clang/test/SemaCXX/incomplete-call.cpp"]={"clang/test/SemaCXX/incomplete-call.cpp:23:3: error: calling function with incomplete return type \'A\'","clang/test/SemaCXX/incomplete-call.cpp:24:3: error: calling function with incomplete return type \'A\'","clang/test/SemaCXX/incomplete-call.cpp:41:7: error: calling function with incomplete return type \'A\'"}
Line 5,737: Line 5,739:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={qb,1547876214,rb,yb},
[b]={vb,1547876214,wb,xb},
[h]={{l,4084,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    // ...\n    if (AL.isArgIdent(I)) {\n      // ...\n      if (It == UnknownName) {\n        S.Diag(AL.getLoc(), diag::err_callback_attribute_argument_unknown) << IdLoc->Ident << IdLoc->Loc;"}},
[h]={{l,4084,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    // ...\n    if (AL.isArgIdent(I)) {\n      // ...\n      if (It == UnknownName) {\n        S.Diag(AL.getLoc(), diag::err_callback_attribute_argument_unknown) << IdLoc->Ident << IdLoc->Loc;"}},
[j]={
[j]={
[Qb]={"clang/test/Sema/attr-callback-broken.c:42:16: error: \'callback\' attribute argument \'cb\' is not a known function parameter","clang/test/Sema/attr-callback-broken.c:43:16: error: \'callback\' attribute argument \'ab\' is not a known function parameter"}
[Gb]={"clang/test/Sema/attr-callback-broken.c:42:16: error: \'callback\' attribute argument \'cb\' is not a known function parameter","clang/test/Sema/attr-callback-broken.c:43:16: error: \'callback\' attribute argument \'ab\' is not a known function parameter"}
}
}
},
},
Line 5,749: Line 5,751:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={qb,1547876214,rb,yb},
[b]={vb,1547876214,wb,xb},
[h]={{l,4133,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Check if the callee index is proper, thus not \"this\" and not \"unknown\".\n  // This means the \"CalleeIdx\" has to be non-negative if \"HasImplicitThisParam\"\n  // is false and positive if \"HasImplicitThisParam\" is true.\n  if (CalleeIdx < (int)HasImplicitThisParam) {\n    S.Diag(AL.getLoc(), diag::err_callback_attribute_invalid_callee) << AL.getRange();"}},
[h]={{l,4133,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Check if the callee index is proper, thus not \"this\" and not \"unknown\".\n  // This means the \"CalleeIdx\" has to be non-negative if \"HasImplicitThisParam\"\n  // is false and positive if \"HasImplicitThisParam\" is true.\n  if (CalleeIdx < (int)HasImplicitThisParam) {\n    S.Diag(AL.getLoc(), diag::err_callback_attribute_invalid_callee) << AL.getRange();"}},
[j]={
[j]={
[Qb]={"clang/test/Sema/attr-callback-broken.c:13:16: error: \'callback\' attribute specifies invalid callback callee","clang/test/Sema/attr-callback-broken.c:53:16: error: \'callback\' attribute specifies invalid callback callee"}
[Gb]={"clang/test/Sema/attr-callback-broken.c:13:16: error: \'callback\' attribute specifies invalid callback callee","clang/test/Sema/attr-callback-broken.c:53:16: error: \'callback\' attribute specifies invalid callback callee"}
}
}
},
},
Line 5,761: Line 5,763:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={qb,1547876214,rb,yb},
[b]={vb,1547876214,wb,xb},
[h]={{l,4180,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Do not allow multiple callback attributes.\n  if (D->hasAttr<CallbackAttr>()) {\n    S.Diag(AL.getLoc(), diag::err_callback_attribute_multiple) << AL.getRange();"}},
[h]={{l,4180,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Do not allow multiple callback attributes.\n  if (D->hasAttr<CallbackAttr>()) {\n    S.Diag(AL.getLoc(), diag::err_callback_attribute_multiple) << AL.getRange();"}},
[j]={
[j]={
[Qb]={"clang/test/Sema/attr-callback-broken.c:20:45: error: multiple \'callback\' attributes specified","clang/test/Sema/attr-callback-broken.c:21:45: error: multiple \'callback\' attributes specified","clang/test/Sema/attr-callback-broken.c:55:52: error: multiple \'callback\' attributes specified","clang/test/Sema/attr-callback-broken.c:56:45: error: multiple \'callback\' attributes specified"}
[Gb]={"clang/test/Sema/attr-callback-broken.c:20:45: error: multiple \'callback\' attributes specified","clang/test/Sema/attr-callback-broken.c:21:45: error: multiple \'callback\' attributes specified","clang/test/Sema/attr-callback-broken.c:55:52: error: multiple \'callback\' attributes specified","clang/test/Sema/attr-callback-broken.c:56:45: error: multiple \'callback\' attributes specified"}
}
}
},
},
Line 5,773: Line 5,775:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={qb,1547876214,rb,yb},
[b]={vb,1547876214,wb,xb},
[h]={{l,4053,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The index that identifies the callback callee is mandatory.\n  if (AL.getNumArgs() == 0) {\n    S.Diag(AL.getLoc(), diag::err_callback_attribute_no_callee) << AL.getRange();"}},
[h]={{l,4053,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The index that identifies the callback callee is mandatory.\n  if (AL.getNumArgs() == 0) {\n    S.Diag(AL.getLoc(), diag::err_callback_attribute_no_callee) << AL.getRange();"}},
[j]={
[j]={
[Qb]={"clang/test/Sema/attr-callback-broken.c:3:16: error: \'callback\' attribute specifies no callback callee"}
[Gb]={"clang/test/Sema/attr-callback-broken.c:3:16: error: \'callback\' attribute specifies no callback callee"}
}
}
},
},
Line 5,785: Line 5,787:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={qb,1547876214,rb,yb},
[b]={vb,1547876214,wb,xb},
[h]={{l,4174,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (CalleeFnProtoType->isVariadic()) {\n    S.Diag(AL.getLoc(), diag::err_callback_callee_is_variadic) << AL.getRange();"}},
[h]={{l,4174,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (CalleeFnProtoType->isVariadic()) {\n    S.Diag(AL.getLoc(), diag::err_callback_callee_is_variadic) << AL.getRange();"}},
[j]={
[j]={
[Qb]={"clang/test/Sema/attr-callback-broken.c:33:16: error: \'callback\' attribute callee may not be variadic","clang/test/Sema/attr-callback-broken.c:34:16: error: \'callback\' attribute callee may not be variadic","clang/test/Sema/attr-callback-broken.c:68:16: error: \'callback\' attribute callee may not be variadic","clang/test/Sema/attr-callback-broken.c:69:16: error: \'callback\' attribute callee may not be variadic"}
[Gb]={"clang/test/Sema/attr-callback-broken.c:33:16: error: \'callback\' attribute callee may not be variadic","clang/test/Sema/attr-callback-broken.c:34:16: error: \'callback\' attribute callee may not be variadic","clang/test/Sema/attr-callback-broken.c:68:16: error: \'callback\' attribute callee may not be variadic","clang/test/Sema/attr-callback-broken.c:69:16: error: \'callback\' attribute callee may not be variadic"}
}
}
},
},
Line 5,797: Line 5,799:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={qb,1547876214,rb,yb},
[b]={vb,1547876214,wb,xb},
[h]={{l,4144,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!CalleeType || !CalleeType->isFunctionPointerType()) {\n    S.Diag(AL.getLoc(), diag::err_callback_callee_no_function_type) << AL.getRange();"},{l,4156,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!CalleeFnProtoType) {\n    S.Diag(AL.getLoc(), diag::err_callback_callee_no_function_type) << AL.getRange();"}}
[h]={{l,4144,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!CalleeType || !CalleeType->isFunctionPointerType()) {\n    S.Diag(AL.getLoc(), diag::err_callback_callee_no_function_type) << AL.getRange();"},{l,4156,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!CalleeFnProtoType) {\n    S.Diag(AL.getLoc(), diag::err_callback_callee_no_function_type) << AL.getRange();"}}
},
},
Line 5,806: Line 5,808:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={qb,1547876214,rb,yb},
[b]={vb,1547876214,wb,xb},
[h]={{l,4115,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    // ...\n    if (ArgIdx == 0 && !HasImplicitThisParam) {\n      S.Diag(AL.getLoc(), diag::err_callback_implicit_this_not_available) << (I + 1) << SR;"}},
[h]={{l,4115,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    // ...\n    if (ArgIdx == 0 && !HasImplicitThisParam) {\n      S.Diag(AL.getLoc(), diag::err_callback_implicit_this_not_available) << (I + 1) << SR;"}},
[j]={
[j]={
[Qb]={"clang/test/Sema/attr-callback-broken.c:26:16: error: \'callback\' argument at position 1 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:27:16: error: \'callback\' argument at position 2 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:28:16: error: \'callback\' argument at position 2 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:61:16: error: \'callback\' argument at position 1 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:62:16: error: \'callback\' argument at position 2 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:63:16: error: \'callback\' argument at position 2 references unavailable implicit \'this\'"}
[Gb]={"clang/test/Sema/attr-callback-broken.c:26:16: error: \'callback\' argument at position 1 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:27:16: error: \'callback\' argument at position 2 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:28:16: error: \'callback\' argument at position 2 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:61:16: error: \'callback\' argument at position 1 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:62:16: error: \'callback\' argument at position 2 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:63:16: error: \'callback\' argument at position 2 references unavailable implicit \'this\'"}
}
}
},
},
Line 5,818: Line 5,820:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={fb,1590001902,jb,lb},
[b]={kb,1590001902,fb,jb},
[h]={{l,4201,"/// Handle \'called_once\' attribute.\nstatic void handleCalledOnceAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!isFunctionLike(*T)) {\n    S.Diag(AL.getLoc(), diag::err_called_once_attribute_wrong_type);"}},
[h]={{l,4201,"/// Handle \'called_once\' attribute.\nstatic void handleCalledOnceAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!isFunctionLike(*T)) {\n    S.Diag(AL.getLoc(), diag::err_called_once_attribute_wrong_type);"}},
[j]={
[j]={
Line 5,830: Line 5,832:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={Mb,1480718311,V,V},
[b]={Lb,1480718311,Mb,Ob},
[h]={{"clang/lib/Sema/SemaPseudoObject.cpp",1487,"ExprResult MSPropertyOpBuilder::buildGet() {\n  // ...\n  if (GetterExpr.isInvalid()) {\n    S.Diag(RefExpr->getMemberLoc(), diag::err_cannot_find_suitable_accessor) << 0 /* getter */"},{"clang/lib/Sema/SemaPseudoObject.cpp",1516,"ExprResult MSPropertyOpBuilder::buildSet(Expr *op, SourceLocation sl, bool captureSetValueAsResult) {\n  // ...\n  if (SetterExpr.isInvalid()) {\n    S.Diag(RefExpr->getMemberLoc(), diag::err_cannot_find_suitable_accessor) << 1 /* setter */"}},
[h]={{"clang/lib/Sema/SemaPseudoObject.cpp",1487,"ExprResult MSPropertyOpBuilder::buildGet() {\n  // ...\n  if (GetterExpr.isInvalid()) {\n    S.Diag(RefExpr->getMemberLoc(), diag::err_cannot_find_suitable_accessor) << 0 /* getter */"},{"clang/lib/Sema/SemaPseudoObject.cpp",1516,"ExprResult MSPropertyOpBuilder::buildSet(Expr *op, SourceLocation sl, bool captureSetValueAsResult) {\n  // ...\n  if (SetterExpr.isInvalid()) {\n    S.Diag(RefExpr->getMemberLoc(), diag::err_cannot_find_suitable_accessor) << 1 /* setter */"}},
[j]={
[j]={
Line 5,843: Line 5,845:
[g]=k,
[g]=k,
[b]={"0b675f5ad5b6",1247089558,"It\'s not allowed to form member pointers to members that have reference type. Add a test for this an...","It\'s not allowed to form member pointers to members that have reference type. Add a test for this and the rest of [dcl.mptr]p3.\n\nllvm-svn: 75054"},
[b]={"0b675f5ad5b6",1247089558,"It\'s not allowed to form member pointers to members that have reference type. Add a test for this an...","It\'s not allowed to form member pointers to members that have reference type. Add a test for this and the rest of [dcl.mptr]p3.\n\nllvm-svn: 75054"},
[h]={{u,15062,"/// 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  // ...\n  } else if (op->getObjectKind() == OK_BitField) { // C99 6.5.3.2p1\n  // ...\n  } else if (op->getObjectKind() == OK_VectorComponent) {\n  // ...\n  } else if (op->getObjectKind() == OK_MatrixComponent) {\n  // ...\n  } else if (dcl) { // C99 6.5.3.2p1\n    // We have an lvalue with a decl. Make sure the decl is not declared\n    // with the register storage-class specifier.\n    if (const VarDecl *vd = dyn_cast<VarDecl>(dcl)) {\n    // ...\n    } else if (isa<MSPropertyDecl>(dcl)) {\n    // ...\n    } else if (isa<FunctionTemplateDecl>(dcl)) {\n    // ...\n    } else if (isa<FieldDecl>(dcl) || isa<IndirectFieldDecl>(dcl)) {\n      // Okay: we can take the address of a field.\n      // Could be a pointer to member, though, if there is an explicit\n      // scope qualifier for the class.\n      if (isa<DeclRefExpr>(op) && cast<DeclRefExpr>(op)->getQualifier()) {\n        // ...\n        if (Ctx && Ctx->isRecord()) {\n          if (dcl->getType()->isReferenceType()) {\n            Diag(OpLoc, diag::err_cannot_form_pointer_to_member_of_reference_type) << dcl->getDeclName() << dcl->getType();"}},
[h]={{v,15062,"/// 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  // ...\n  } else if (op->getObjectKind() == OK_BitField) { // C99 6.5.3.2p1\n  // ...\n  } else if (op->getObjectKind() == OK_VectorComponent) {\n  // ...\n  } else if (op->getObjectKind() == OK_MatrixComponent) {\n  // ...\n  } else if (dcl) { // C99 6.5.3.2p1\n    // We have an lvalue with a decl. Make sure the decl is not declared\n    // with the register storage-class specifier.\n    if (const VarDecl *vd = dyn_cast<VarDecl>(dcl)) {\n    // ...\n    } else if (isa<MSPropertyDecl>(dcl)) {\n    // ...\n    } else if (isa<FunctionTemplateDecl>(dcl)) {\n    // ...\n    } else if (isa<FieldDecl>(dcl) || isa<IndirectFieldDecl>(dcl)) {\n      // Okay: we can take the address of a field.\n      // Could be a pointer to member, though, if there is an explicit\n      // scope qualifier for the class.\n      if (isa<DeclRefExpr>(op) && cast<DeclRefExpr>(op)->getQualifier()) {\n        // ...\n        if (Ctx && Ctx->isRecord()) {\n          if (dcl->getType()->isReferenceType()) {\n            Diag(OpLoc, diag::err_cannot_form_pointer_to_member_of_reference_type) << dcl->getDeclName() << dcl->getType();"}},
[j]={
[j]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp:22:6: error: cannot form a pointer-to-member to member \'i\' of reference type \'int &\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp:12:6: error: cannot form a pointer-to-member to member \'i\' of reference type \'int &\'"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp:22:6: error: cannot form a pointer-to-member to member \'i\' of reference type \'int &\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp:12:6: error: cannot form a pointer-to-member to member \'i\' of reference type \'int &\'"}
Line 5,850: Line 5,852:
["err_cannot_open_file"]={
["err_cannot_open_file"]={
[c]="cannot open file \'%0\': %1",
[c]="cannot open file \'%0\': %1",
[d]=cc,
[d]=Vb,
[e]="cannot open file \'(.*?)\'\\: (.*?)",
[e]="cannot open file \'(.*?)\'\\: (.*?)",
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"802b77601e50",1268693692,"Introduce a new BufferResult class to act as the return type of\nSourceManager\'s getBuffer() (and sim...","Introduce a new BufferResult class to act as the return type of\nSourceManager\'s getBuffer() (and similar) operations. This abstract\ncan be used to force callers to cope with errors in getBuffer(), such\nas missing files and changed files. Fix a bunch of callers to use the\nnew interface.\n\nAdd some very basic checks for file consistency (file size,\nmodification time) into ContentCache::getBuffer(), although these\nchecks don\'t help much until we\'ve updated the main callers (e.g.,\nSourceManager::getSpelling()).\n\nllvm-svn: 98585"},
[b]={"802b77601e50",1268693692,"Introduce a new BufferResult class to act as the return type of","Introduce a new BufferResult class to act as the return type of\nSourceManager\'s getBuffer() (and similar) operations. This abstract\ncan be used to force callers to cope with errors in getBuffer(), such\nas missing files and changed files. Fix a bunch of callers to use the\nnew interface.\n\nAdd some very basic checks for file consistency (file size,\nmodification time) into ContentCache::getBuffer(), although these\nchecks don\'t help much until we\'ve updated the main callers (e.g.,\nSourceManager::getSpelling()).\n\nllvm-svn: 98585"},
[h]={{"clang/lib/Basic/SourceManager.cpp",127,"std::optional<llvm::MemoryBufferRef> ContentCache::getBufferOrNone(DiagnosticsEngine &Diag, FileManager &FM, SourceLocation Loc) const {\n  // ...\n  // If we were unable to open the file, then we are in an inconsistent\n  // situation where the content cache referenced a file which no longer\n  // exists. Most likely, we were using a stat cache with an invalid entry but\n  // the file could also have been removed during processing. Since we can\'t\n  // really deal with this situation, just create an empty buffer.\n  if (!BufferOrError) {\n    if (Diag.isDiagnosticInFlight())\n      Diag.SetDelayedDiagnostic(diag::err_cannot_open_file, ContentsEntry->getName(), BufferOrError.getError().message());"},{"clang/lib/Basic/SourceManager.cpp",131,"std::optional<llvm::MemoryBufferRef> ContentCache::getBufferOrNone(DiagnosticsEngine &Diag, FileManager &FM, SourceLocation Loc) const {\n  // ...\n  // If we were unable to open the file, then we are in an inconsistent\n  // situation where the content cache referenced a file which no longer\n  // exists. Most likely, we were using a stat cache with an invalid entry but\n  // the file could also have been removed during processing. Since we can\'t\n  // really deal with this situation, just create an empty buffer.\n  if (!BufferOrError) {\n    if (Diag.isDiagnosticInFlight())\n    // ...\n    else\n      Diag.Report(Loc, diag::err_cannot_open_file) << ContentsEntry->getName() << BufferOrError.getError().message();"},{"clang/lib/CodeGen/CGCUDANV.cpp",735,"/// Creates a global constructor function for the module:\n///\n/// For CUDA:\n/// \\code\n/// void __cuda_module_ctor() {\n///    Handle = __cudaRegisterFatBinary(GpuBinaryBlob);\n///    __cuda_register_globals(Handle);\n/// }\n/// \\endcode\n///\n/// For HIP:\n/// \\code\n/// void __hip_module_ctor() {\n///    if (__hip_gpubin_handle == 0) {\n///        __hip_gpubin_handle  = __hipRegisterFatBinary(GpuBinaryBlob);\n///        __hip_register_globals(__hip_gpubin_handle);\n///    }\n/// }\n/// \\endcode\nllvm::Function *CGNVCUDARuntime::makeModuleCtorFunction() {\n  // ...\n  if (!CudaGpuBinaryFileName.empty()) {\n    // ...\n    if (std::error_code EC = CudaGpuBinaryOrErr.getError()) {\n      CGM.getDiags().Report(diag::err_cannot_open_file) << CudaGpuBinaryFileName << EC.message();"},{"clang/lib/CodeGen/CodeGenAction.cpp",95,"static void reportOptRecordError(Error E, DiagnosticsEngine &Diags, const CodeGenOptions &CodeGenOpts) {\n  handleAllErrors(\n      std::move(E), [&](const LLVMRemarkSetupFileError &E) { Diags.Report(diag::err_cannot_open_file) << CodeGenOpts.OptRecordFile << E.message(); }, [&](const LLVMRemarkSetupPatternError &E) { Diags.Report(diag::err_drv_optimization_remark_pattern) << E.message() << CodeGenOpts.OptRecordPasses; }, [&](const LLVMRemarkSetupFormatError &E) { Diags.Report(diag::err_drv_optimization_remark_format) << CodeGenOpts.OptRecordFormat; });"},{"clang/lib/CodeGen/CodeGenAction.cpp",1005,"bool CodeGenAction::loadLinkModules(CompilerInstance &CI) {\n  // ...\n  for (const CodeGenOptions::BitcodeFileToLink &F : CI.getCodeGenOpts().LinkBitcodeFiles) {\n    // ...\n    if (!BCBuf) {\n      CI.getDiagnostics().Report(diag::err_cannot_open_file) << F.Filename << BCBuf.getError().message();"},{"clang/lib/CodeGen/CodeGenAction.cpp",1015,"bool CodeGenAction::loadLinkModules(CompilerInstance &CI) {\n  // ...\n  for (const CodeGenOptions::BitcodeFileToLink &F : CI.getCodeGenOpts().LinkBitcodeFiles) {\n    // ...\n    if (!ModuleOrErr) {\n      handleAllErrors(ModuleOrErr.takeError(), [&](ErrorInfoBase &EIB) { CI.getDiagnostics().Report(diag::err_cannot_open_file) << F.Filename << EIB.message(); });"},{"clang/lib/CodeGen/CodeGenModule.cpp",7440,"void CodeGenModule::printPostfixForExternalizedDecl(llvm::raw_ostream &OS, const Decl *D) const {\n  // ...\n  // If the CUID is not specified we try to generate a unique postfix.\n  if (getLangOpts().CUID.empty()) {\n    // ...\n    if (auto EC = llvm::sys::fs::getUniqueID(PLoc.getFilename(), ID)) {\n      // ...\n      if (auto EC = llvm::sys::fs::getUniqueID(PLoc.getFilename(), ID))\n        SM.getDiagnostics().Report(diag::err_cannot_open_file) << PLoc.getFilename() << EC.message();"},{"clang/lib/Lex/HeaderSearch.cpp",432,"OptionalFileEntryRef HeaderSearch::getFileAndSuggestModule(StringRef FileName, SourceLocation IncludeLoc, const DirectoryEntry *Dir, bool IsSystemHeaderDir, Module *RequestingModule, ModuleMap::KnownHeader *SuggestedModule, bool OpenFile /*=true*/, bool CacheFailures /*=true*/) {\n  // ...\n  if (!File) {\n    // ...\n    if (EC != llvm::errc::no_such_file_or_directory && EC != llvm::errc::invalid_argument && EC != llvm::errc::is_a_directory && EC != llvm::errc::not_a_directory) {\n      Diags.Report(IncludeLoc, diag::err_cannot_open_file) << FileName << EC.message();"},{"clang/unittests/Basic/DiagnosticTest.cpp",45,"// Check that DiagnosticErrorTrap works with SuppressAllDiagnostics.\nTEST(DiagnosticTest, suppressAndTrap) {\n  // ...\n  {\n    // ...\n    Diags.Report(diag::err_cannot_open_file) << \"file\""},{"clang/unittests/Basic/DiagnosticTest.cpp",70,"// Check that FatalsAsError works as intended\nTEST(DiagnosticTest, fatalsAsError) {\n  for (unsigned FatalsAsError = 0; FatalsAsError != 2; ++FatalsAsError) {\n    // ...\n    Diags.Report(diag::err_cannot_open_file) << \"file\""},{"clang/unittests/Basic/DiagnosticTest.cpp",117,"TEST(DiagnosticTest, diagnosticError) {\n  // ...\n  llvm::Expected<std::pair<int, int>> Value = DiagnosticError::create(SourceLocation(), PartialDiagnostic(diag::err_cannot_open_file, Alloc) << \"file\""},{"clang/unittests/Basic/DiagnosticTest.cpp",126,"TEST(DiagnosticTest, diagnosticError) {\n  // ...\n  EXPECT_EQ(ErrDiag->second.getDiagID(), diag::err_cannot_open_file);"}},
[h]={{"clang/lib/Basic/SourceManager.cpp",127,"std::optional<llvm::MemoryBufferRef> ContentCache::getBufferOrNone(DiagnosticsEngine &Diag, FileManager &FM, SourceLocation Loc) const {\n  // ...\n  // If we were unable to open the file, then we are in an inconsistent\n  // situation where the content cache referenced a file which no longer\n  // exists. Most likely, we were using a stat cache with an invalid entry but\n  // the file could also have been removed during processing. Since we can\'t\n  // really deal with this situation, just create an empty buffer.\n  if (!BufferOrError) {\n    if (Diag.isDiagnosticInFlight())\n      Diag.SetDelayedDiagnostic(diag::err_cannot_open_file, ContentsEntry->getName(), BufferOrError.getError().message());"},{"clang/lib/Basic/SourceManager.cpp",131,"std::optional<llvm::MemoryBufferRef> ContentCache::getBufferOrNone(DiagnosticsEngine &Diag, FileManager &FM, SourceLocation Loc) const {\n  // ...\n  // If we were unable to open the file, then we are in an inconsistent\n  // situation where the content cache referenced a file which no longer\n  // exists. Most likely, we were using a stat cache with an invalid entry but\n  // the file could also have been removed during processing. Since we can\'t\n  // really deal with this situation, just create an empty buffer.\n  if (!BufferOrError) {\n    if (Diag.isDiagnosticInFlight())\n    // ...\n    else\n      Diag.Report(Loc, diag::err_cannot_open_file) << ContentsEntry->getName() << BufferOrError.getError().message();"},{"clang/lib/CodeGen/CGCUDANV.cpp",735,"/// Creates a global constructor function for the module:\n///\n/// For CUDA:\n/// \\code\n/// void __cuda_module_ctor() {\n///    Handle = __cudaRegisterFatBinary(GpuBinaryBlob);\n///    __cuda_register_globals(Handle);\n/// }\n/// \\endcode\n///\n/// For HIP:\n/// \\code\n/// void __hip_module_ctor() {\n///    if (__hip_gpubin_handle == 0) {\n///        __hip_gpubin_handle  = __hipRegisterFatBinary(GpuBinaryBlob);\n///        __hip_register_globals(__hip_gpubin_handle);\n///    }\n/// }\n/// \\endcode\nllvm::Function *CGNVCUDARuntime::makeModuleCtorFunction() {\n  // ...\n  if (!CudaGpuBinaryFileName.empty()) {\n    // ...\n    if (std::error_code EC = CudaGpuBinaryOrErr.getError()) {\n      CGM.getDiags().Report(diag::err_cannot_open_file) << CudaGpuBinaryFileName << EC.message();"},{"clang/lib/CodeGen/CodeGenAction.cpp",95,"static void reportOptRecordError(Error E, DiagnosticsEngine &Diags, const CodeGenOptions &CodeGenOpts) {\n  handleAllErrors(\n      std::move(E), [&](const LLVMRemarkSetupFileError &E) { Diags.Report(diag::err_cannot_open_file) << CodeGenOpts.OptRecordFile << E.message(); }, [&](const LLVMRemarkSetupPatternError &E) { Diags.Report(diag::err_drv_optimization_remark_pattern) << E.message() << CodeGenOpts.OptRecordPasses; }, [&](const LLVMRemarkSetupFormatError &E) { Diags.Report(diag::err_drv_optimization_remark_format) << CodeGenOpts.OptRecordFormat; });"},{"clang/lib/CodeGen/CodeGenAction.cpp",1005,"bool CodeGenAction::loadLinkModules(CompilerInstance &CI) {\n  // ...\n  for (const CodeGenOptions::BitcodeFileToLink &F : CI.getCodeGenOpts().LinkBitcodeFiles) {\n    // ...\n    if (!BCBuf) {\n      CI.getDiagnostics().Report(diag::err_cannot_open_file) << F.Filename << BCBuf.getError().message();"},{"clang/lib/CodeGen/CodeGenAction.cpp",1015,"bool CodeGenAction::loadLinkModules(CompilerInstance &CI) {\n  // ...\n  for (const CodeGenOptions::BitcodeFileToLink &F : CI.getCodeGenOpts().LinkBitcodeFiles) {\n    // ...\n    if (!ModuleOrErr) {\n      handleAllErrors(ModuleOrErr.takeError(), [&](ErrorInfoBase &EIB) { CI.getDiagnostics().Report(diag::err_cannot_open_file) << F.Filename << EIB.message(); });"},{"clang/lib/CodeGen/CodeGenModule.cpp",7440,"void CodeGenModule::printPostfixForExternalizedDecl(llvm::raw_ostream &OS, const Decl *D) const {\n  // ...\n  // If the CUID is not specified we try to generate a unique postfix.\n  if (getLangOpts().CUID.empty()) {\n    // ...\n    if (auto EC = llvm::sys::fs::getUniqueID(PLoc.getFilename(), ID)) {\n      // ...\n      if (auto EC = llvm::sys::fs::getUniqueID(PLoc.getFilename(), ID))\n        SM.getDiagnostics().Report(diag::err_cannot_open_file) << PLoc.getFilename() << EC.message();"},{"clang/lib/Lex/HeaderSearch.cpp",432,"OptionalFileEntryRef HeaderSearch::getFileAndSuggestModule(StringRef FileName, SourceLocation IncludeLoc, const DirectoryEntry *Dir, bool IsSystemHeaderDir, Module *RequestingModule, ModuleMap::KnownHeader *SuggestedModule, bool OpenFile /*=true*/, bool CacheFailures /*=true*/) {\n  // ...\n  if (!File) {\n    // ...\n    if (EC != llvm::errc::no_such_file_or_directory && EC != llvm::errc::invalid_argument && EC != llvm::errc::is_a_directory && EC != llvm::errc::not_a_directory) {\n      Diags.Report(IncludeLoc, diag::err_cannot_open_file) << FileName << EC.message();"},{"clang/unittests/Basic/DiagnosticTest.cpp",45,"// Check that DiagnosticErrorTrap works with SuppressAllDiagnostics.\nTEST(DiagnosticTest, suppressAndTrap) {\n  // ...\n  {\n    // ...\n    Diags.Report(diag::err_cannot_open_file) << \"file\""},{"clang/unittests/Basic/DiagnosticTest.cpp",70,"// Check that FatalsAsError works as intended\nTEST(DiagnosticTest, fatalsAsError) {\n  for (unsigned FatalsAsError = 0; FatalsAsError != 2; ++FatalsAsError) {\n    // ...\n    Diags.Report(diag::err_cannot_open_file) << \"file\""},{"clang/unittests/Basic/DiagnosticTest.cpp",117,"TEST(DiagnosticTest, diagnosticError) {\n  // ...\n  llvm::Expected<std::pair<int, int>> Value = DiagnosticError::create(SourceLocation(), PartialDiagnostic(diag::err_cannot_open_file, Alloc) << \"file\""},{"clang/unittests/Basic/DiagnosticTest.cpp",126,"TEST(DiagnosticTest, diagnosticError) {\n  // ...\n  EXPECT_EQ(ErrDiag->second.getDiagID(), diag::err_cannot_open_file);"}},
[j]={
[j]={
Line 5,866: Line 5,868:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"7275da0f2ee2",1519802155,"[ObjC] Allow declaring __strong pointer fields in structs in Objective-C\nARC mode.\n\nDeclaring __stro...","[ObjC] Allow declaring __strong pointer fields in structs in Objective-C\nARC mode.\n\nDeclaring __strong pointer fields in structs was not allowed in\nObjective-C ARC until now because that would make the struct non-trivial\nto default-initialize, copy/move, and destroy, which is not something C\nwas designed to do. This patch lifts that restriction.\n\nSpecial functions for non-trivial C structs are synthesized that are\nneeded to default-initialize, copy/move, and destroy the structs and\nmanage the ownership of the objects the __strong pointer fields point\nto. Non-trivial structs passed to functions are destructed in the callee\nfunction.\n\nrdar://problem/33599681\n\nDifferential Revision: https://reviews.llvm.org/D41228\n\nllvm-svn: 326307"},
[b]={"7275da0f2ee2",1519802155,"[ObjC] Allow declaring __strong pointer fields in structs in Objective-C","[ObjC] Allow declaring __strong pointer fields in structs in Objective-C\nARC mode.\n\nDeclaring __strong pointer fields in structs was not allowed in\nObjective-C ARC until now because that would make the struct non-trivial\nto default-initialize, copy/move, and destroy, which is not something C\nwas designed to do. This patch lifts that restriction.\n\nSpecial functions for non-trivial C structs are synthesized that are\nneeded to default-initialize, copy/move, and destroy the structs and\nmanage the ownership of the objects the __strong pointer fields point\nto. Non-trivial structs passed to functions are destructed in the callee\nfunction.\n\nrdar://problem/33599681\n\nDifferential Revision: https://reviews.llvm.org/D41228\n\nllvm-svn: 326307"},
[h]={{u,1020,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  // ...\n  case VAK_Invalid:\n    if (Ty.isDestructedType() == QualType::DK_nontrivial_c_struct)\n      Diag(E->getBeginLoc(), diag::err_cannot_pass_non_trivial_c_struct_to_vararg) << Ty << CT;"}},
[h]={{v,1020,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  // ...\n  case VAK_Invalid:\n    if (Ty.isDestructedType() == QualType::DK_nontrivial_c_struct)\n      Diag(E->getBeginLoc(), diag::err_cannot_pass_non_trivial_c_struct_to_vararg) << Ty << CT;"}},
[j]={
[j]={
["clang/test/SemaObjC/strong-in-c-struct.m"]={"clang/test/SemaObjC/strong-in-c-struct.m:11:24: error: cannot pass non-trivial C object of type \'Strong\' by value to variadic function"}
["clang/test/SemaObjC/strong-in-c-struct.m"]={"clang/test/SemaObjC/strong-in-c-struct.m:11:24: error: cannot pass non-trivial C object of type \'Strong\' by value to variadic function"}
Line 5,878: Line 5,880:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"a8a7d0f37161",1239523880,"implement rdar://6780761, making sema reject some code that otherwise\ncrashes codegen.\n\nllvm-svn: 68...","implement rdar://6780761, making sema reject some code that otherwise\ncrashes codegen.\n\nllvm-svn: 68891"},
[b]={"a8a7d0f37161",1239523880,"implement rdar://6780761, making sema reject some code that otherwise","implement rdar://6780761, making sema reject some code that otherwise\ncrashes codegen.\n\nllvm-svn: 68891"},
[h]={{u,1024,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  // ...\n  case VAK_Invalid:\n    if (Ty.isDestructedType() == QualType::DK_nontrivial_c_struct)\n    // ...\n    else if (Ty->isObjCObjectType())\n      DiagRuntimeBehavior(E->getBeginLoc(), nullptr, PDiag(diag::err_cannot_pass_objc_interface_to_vararg) << Ty << CT);"}},
[h]={{v,1024,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  // ...\n  case VAK_Invalid:\n    if (Ty.isDestructedType() == QualType::DK_nontrivial_c_struct)\n    // ...\n    else if (Ty->isObjCObjectType())\n      DiagRuntimeBehavior(E->getBeginLoc(), nullptr, PDiag(diag::err_cannot_pass_objc_interface_to_vararg) << Ty << CT);"}},
[j]={
[j]={
["clang/test/SemaObjC/method-bad-param.m"]={"clang/test/SemaObjC/method-bad-param.m:35:9: error: cannot pass object with interface type \'foo\' by value through variadic function"}
["clang/test/SemaObjC/method-bad-param.m"]={"clang/test/SemaObjC/method-bad-param.m:35:9: error: cannot pass object with interface type \'foo\' by value through variadic function"}
Line 5,890: Line 5,892:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"3e0ec58c09eb",1342721423,"For varargs, diagnose passing ObjC objects by value like other non-POD types.\n\nWhile we still want t...","For varargs, diagnose passing ObjC objects by value like other non-POD types.\n\nWhile we still want to consider this a hard error (non-POD variadic args are\nnormally a DefaultError warning), delaying the diagnostic allows us to give\nbetter error messages, which also match the usual non-POD errors more closely.\n\nIn addition, this change improves the diagnostic messages for format string\nargument type mismatches by passing down the type of the callee, so we can\nsay \"variadic method\" or \"variadic function\" appropriately.\n\n<rdar://problem/11825593>\n\nllvm-svn: 160517"},
[b]={"3e0ec58c09eb",1342721423,"For varargs, diagnose passing ObjC objects by value like other non-POD types.","For varargs, diagnose passing ObjC objects by value like other non-POD types.\n\nWhile we still want to consider this a hard error (non-POD variadic args are\nnormally a DefaultError warning), delaying the diagnostic allows us to give\nbetter error messages, which also match the usual non-POD errors more closely.\n\nIn addition, this change improves the diagnostic messages for format string\nargument type mismatches by passing down the type of the callee, so we can\nsay \"variadic method\" or \"variadic function\" appropriately.\n\n<rdar://problem/11825593>\n\nllvm-svn: 160517"},
[h]={{p,11399,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n  // ...\n  } else {\n    // ...\n    case Sema::VAK_Invalid:\n      if (CallType == Sema::VariadicDoesNotApply)\n      // ...\n      else if (ExprTy->isObjCObjectType())\n        EmitFormatDiagnostic(S.PDiag(diag::err_cannot_pass_objc_interface_to_vararg_format) << S.getLangOpts().CPlusPlus11 << ExprTy << CallType << AT.getRepresentativeTypeName(S.Context) << CSR << E->getSourceRange(), E->getBeginLoc(), /*IsStringLocation*/ false, CSR);"}},
[h]={{o,11399,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n  // ...\n  } else {\n    // ...\n    case Sema::VAK_Invalid:\n      if (CallType == Sema::VariadicDoesNotApply)\n      // ...\n      else if (ExprTy->isObjCObjectType())\n        EmitFormatDiagnostic(S.PDiag(diag::err_cannot_pass_objc_interface_to_vararg_format) << S.getLangOpts().CPlusPlus11 << ExprTy << CallType << AT.getRepresentativeTypeName(S.Context) << CSR << E->getSourceRange(), E->getBeginLoc(), /*IsStringLocation*/ false, CSR);"}},
[j]={
[j]={
["clang/test/SemaObjC/format-strings-objc.m"]={"clang/test/SemaObjC/format-strings-objc.m:262:26: error: cannot pass object with interface type \'Foo\' by value to variadic function; expected type from format string was \'int\'","clang/test/SemaObjC/format-strings-objc.m:266:20: error: cannot pass object with interface type \'Foo\' by value to variadic method; expected type from format string was \'int\'"}
["clang/test/SemaObjC/format-strings-objc.m"]={"clang/test/SemaObjC/format-strings-objc.m:262:26: error: cannot pass object with interface type \'Foo\' by value to variadic function; expected type from format string was \'int\'","clang/test/SemaObjC/format-strings-objc.m:266:20: error: cannot pass object with interface type \'Foo\' by value to variadic method; expected type from format string was \'int\'"}
Line 5,902: Line 5,904:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"d7293d7fcb60",1375728583,"Implement C++\'s restrictions on the type of an expression passed to a vararg\nfunction: it can\'t be \'...","Implement C++\'s restrictions on the type of an expression passed to a vararg\nfunction: it can\'t be \'void\' and it can\'t be an initializer list. We give a\nhard error for these rather than treating them as undefined behavior (we can\nand probably should do the same for non-POD types in C++11, but as of this\nchange we don\'t).\n\nSlightly rework the checking of variadic arguments in a function with a format\nattribute to ensure that certain kinds of format string problem (non-literal\nstring, too many/too few arguments, ...) don\'t suppress this error.\n\nllvm-svn: 187735"},
[b]={"d7293d7fcb60",1375728583,"Implement C++\'s restrictions on the type of an expression passed to a vararg","Implement C++\'s restrictions on the type of an expression passed to a vararg\nfunction: it can\'t be \'void\' and it can\'t be an initializer list. We give a\nhard error for these rather than treating them as undefined behavior (we can\nand probably should do the same for non-POD types in C++11, but as of this\nchange we don\'t).\n\nSlightly rework the checking of variadic arguments in a function with a format\nattribute to ensure that certain kinds of format string problem (non-literal\nstring, too many/too few arguments, ...) don\'t suppress this error.\n\nllvm-svn: 187735"},
[h]={{u,1027,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  // ...\n  case VAK_Invalid:\n    if (Ty.isDestructedType() == QualType::DK_nontrivial_c_struct)\n    // ...\n    else if (Ty->isObjCObjectType())\n    // ...\n    else\n      Diag(E->getBeginLoc(), diag::err_cannot_pass_to_vararg) << isa<InitListExpr>(E) << Ty << CT;"}},
[h]={{v,1027,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  // ...\n  case VAK_Invalid:\n    if (Ty.isDestructedType() == QualType::DK_nontrivial_c_struct)\n    // ...\n    else if (Ty->isObjCObjectType())\n    // ...\n    else\n      Diag(E->getBeginLoc(), diag::err_cannot_pass_to_vararg) << isa<InitListExpr>(E) << Ty << CT;"}},
[j]={
[j]={
["clang/test/SemaCXX/format-strings-0x.cpp"]={"clang/test/SemaCXX/format-strings-0x.cpp:34:13: error: cannot pass initializer list to variadic function"}
["clang/test/SemaCXX/format-strings-0x.cpp"]={"clang/test/SemaCXX/format-strings-0x.cpp:34:13: error: cannot pass initializer list to variadic function"}
Line 5,914: Line 5,916:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"d7293d7fcb60",1375728583,"Implement C++\'s restrictions on the type of an expression passed to a vararg\nfunction: it can\'t be \'...","Implement C++\'s restrictions on the type of an expression passed to a vararg\nfunction: it can\'t be \'void\' and it can\'t be an initializer list. We give a\nhard error for these rather than treating them as undefined behavior (we can\nand probably should do the same for non-POD types in C++11, but as of this\nchange we don\'t).\n\nSlightly rework the checking of variadic arguments in a function with a format\nattribute to ensure that certain kinds of format string problem (non-literal\nstring, too many/too few arguments, ...) don\'t suppress this error.\n\nllvm-svn: 187735"},
[b]={"d7293d7fcb60",1375728583,"Implement C++\'s restrictions on the type of an expression passed to a vararg","Implement C++\'s restrictions on the type of an expression passed to a vararg\nfunction: it can\'t be \'void\' and it can\'t be an initializer list. We give a\nhard error for these rather than treating them as undefined behavior (we can\nand probably should do the same for non-POD types in C++11, but as of this\nchange we don\'t).\n\nSlightly rework the checking of variadic arguments in a function with a format\nattribute to ensure that certain kinds of format string problem (non-literal\nstring, too many/too few arguments, ...) don\'t suppress this error.\n\nllvm-svn: 187735"},
[h]={{p,11407,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n  // ...\n  } else {\n    // ...\n    case Sema::VAK_Invalid:\n      if (CallType == Sema::VariadicDoesNotApply)\n      // ...\n      else if (ExprTy->isObjCObjectType())\n      // ...\n      else\n        // ...\n        S.Diag(E->getBeginLoc(), diag::err_cannot_pass_to_vararg_format) << isa<InitListExpr>(E) << ExprTy << CallType << AT.getRepresentativeTypeName(S.Context) << E->getSourceRange();"}},
[h]={{o,11407,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n  // ...\n  } else {\n    // ...\n    case Sema::VAK_Invalid:\n      if (CallType == Sema::VariadicDoesNotApply)\n      // ...\n      else if (ExprTy->isObjCObjectType())\n      // ...\n      else\n        // ...\n        S.Diag(E->getBeginLoc(), diag::err_cannot_pass_to_vararg_format) << isa<InitListExpr>(E) << ExprTy << CallType << AT.getRepresentativeTypeName(S.Context) << E->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCXX/format-strings-0x.cpp"]={"clang/test/SemaCXX/format-strings-0x.cpp:32:27: error: cannot pass initializer list to variadic function; expected type from format string was \'int\'","clang/test/SemaCXX/format-strings-0x.cpp:33:22: error: cannot pass expression of type \'void\' to variadic function; expected type from format string was \'int\'"}
["clang/test/SemaCXX/format-strings-0x.cpp"]={"clang/test/SemaCXX/format-strings-0x.cpp:32:27: error: cannot pass initializer list to variadic function; expected type from format string was \'int\'","clang/test/SemaCXX/format-strings-0x.cpp:33:22: error: cannot pass expression of type \'void\' to variadic function; expected type from format string was \'int\'"}
Line 5,926: Line 5,928:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={X,1582847864,W,S},
[b]={T,1582847864,U,V},
[h]={{"clang/lib/Sema/SemaCUDA.cpp",883,"// Check the wrong-sided reference capture of lambda for CUDA/HIP.\n// A lambda function may capture a stack variable by reference when it is\n// defined and uses the capture by reference when the lambda is called. When\n// the capture and use happen on different sides, the capture is invalid and\n// should be diagnosed.\nvoid Sema::CUDACheckLambdaCapture(CXXMethodDecl *Callee, const sema::Capture &Capture) {\n  // ...\n  if (Capture.isVariableCapture()) {\n    SemaDiagnosticBuilder(DiagKind, Capture.getLocation(), diag::err_capture_bad_target, Callee, *this) << Capture.getVariable();"}},
[h]={{"clang/lib/Sema/SemaCUDA.cpp",883,"// Check the wrong-sided reference capture of lambda for CUDA/HIP.\n// A lambda function may capture a stack variable by reference when it is\n// defined and uses the capture by reference when the lambda is called. When\n// the capture and use happen on different sides, the capture is invalid and\n// should be diagnosed.\nvoid Sema::CUDACheckLambdaCapture(CXXMethodDecl *Callee, const sema::Capture &Capture) {\n  // ...\n  if (Capture.isVariableCapture()) {\n    SemaDiagnosticBuilder(DiagKind, Capture.getLocation(), diag::err_capture_bad_target, Callee, *this) << Capture.getVariable();"}},
[j]={
[j]={
Line 5,938: Line 5,940:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={M,1625925174,K,L},
[b]={N,1625925174,M,L},
[h]={{u,19347,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // ...\n  // FIXME: We should support capturing structured bindings in OpenMP.\n  if (!Invalid && BD && S.LangOpts.OpenMP) {\n    if (BuildAndDiagnose) {\n      S.Diag(Loc, diag::err_capture_binding_openmp) << Var;"}},
[h]={{v,19347,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // ...\n  // FIXME: We should support capturing structured bindings in OpenMP.\n  if (!Invalid && BD && S.LangOpts.OpenMP) {\n    if (BuildAndDiagnose) {\n      S.Diag(Loc, diag::err_capture_binding_openmp) << Var;"}},
[j]={
[j]={
["clang/test/SemaCXX/decomposition-openmp.cpp"]={"clang/test/SemaCXX/decomposition-openmp.cpp:8:15: error: capturing a structured binding is not yet supported in OpenMP","clang/test/SemaCXX/decomposition-openmp.cpp:10:16: error: capturing a structured binding is not yet supported in OpenMP"}
["clang/test/SemaCXX/decomposition-openmp.cpp"]={"clang/test/SemaCXX/decomposition-openmp.cpp:8:15: error: capturing a structured binding is not yet supported in OpenMP","clang/test/SemaCXX/decomposition-openmp.cpp:10:16: error: capturing a structured binding is not yet supported in OpenMP"}
Line 5,950: Line 5,952:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"3b4c30b7e77e",1368127031,"CodeGen for CapturedStmts\n\nEmitCapturedStmt creates a captured struct containing all of the captured...","CodeGen for CapturedStmts\n\nEmitCapturedStmt creates a captured struct containing all of the captured\nvariables, and then emits a call to the outlined function.  This is similar in\nprinciple to EmitBlockLiteral.\n\nGenerateCapturedFunction actually produces the outlined function.  It is based\non GenerateBlockFunction, but is much simpler.  The function type is determined\nby the parameters that are in the CapturedDecl.\n\nSome changes have been added to this patch that were reviewed as part of the\nserialization patch and moving the parameters to the captured decl.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D640\n\nllvm-svn: 181536"},
[b]={"3b4c30b7e77e",1368127031,"CodeGen for CapturedStmts","CodeGen for CapturedStmts\n\nEmitCapturedStmt creates a captured struct containing all of the captured\nvariables, and then emits a call to the outlined function.  This is similar in\nprinciple to EmitBlockLiteral.\n\nGenerateCapturedFunction actually produces the outlined function.  It is based\non GenerateBlockFunction, but is much simpler.  The function type is determined\nby the parameters that are in the CapturedDecl.\n\nSome changes have been added to this patch that were reviewed as part of the\nserialization patch and moving the parameters to the captured decl.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D640\n\nllvm-svn: 181536"},
[h]={{u,19189,"// 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  // Lambdas and captured statements are not allowed to capture __block\n  // variables; they don\'t support the expected semantics.\n  if (HasBlocksAttr && (IsLambda || isa<CapturedRegionScopeInfo>(CSI))) {\n    if (Diagnose) {\n      S.Diag(Loc, diag::err_capture_block_variable) << Var << !IsLambda;"}},
[h]={{v,19189,"// 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  // Lambdas and captured statements are not allowed to capture __block\n  // variables; they don\'t support the expected semantics.\n  if (HasBlocksAttr && (IsLambda || isa<CapturedRegionScopeInfo>(CSI))) {\n    if (Diagnose) {\n      S.Diag(Loc, diag::err_capture_block_variable) << Var << !IsLambda;"}},
[j]={
[j]={
["clang/test/Sema/captured-statements.c"]={"clang/test/Sema/captured-statements.c:58:7: error: __block variable \'x\' cannot be captured in a captured statement","clang/test/Sema/captured-statements.c:70:7: error: __block variable \'a\' cannot be captured in a captured statement","clang/test/Sema/captured-statements.c:80:11: error: __block variable \'a\' cannot be captured in a captured statement"}
["clang/test/Sema/captured-statements.c"]={"clang/test/Sema/captured-statements.c:58:7: error: __block variable \'x\' cannot be captured in a captured statement","clang/test/Sema/captured-statements.c:70:7: error: __block variable \'a\' cannot be captured in a captured statement","clang/test/Sema/captured-statements.c:80:11: error: __block variable \'a\' cannot be captured in a captured statement"}
Line 5,961: Line 5,963:
[e]="capture default must be first",
[e]="capture default must be first",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"ee05167cc42b",1594102083,"[OpenMP] Allow traits for the OpenMP context selector `isa`\n\nIt was unclear what `isa` was supposed ...","[OpenMP] Allow traits for the OpenMP context selector `isa`\n\nIt was unclear what `isa` was supposed to mean so we did not provide any\ntraits for this context selector. With this patch we will allow *any*\nstring or identifier. We use the target attribute and target info to\ndetermine if the trait matches. In other words, we will check if the\nprovided value is a target feature that is available (at the call site).\n\nFixes PR46338\n\nReviewed By: ABataev\n\nDifferential Revision: https://reviews.llvm.org/D83281"},
[b]={"ee05167cc42b",1594102083,"[OpenMP] Allow traits for the OpenMP context selector `isa`","[OpenMP] Allow traits for the OpenMP context selector `isa`\n\nIt was unclear what `isa` was supposed to mean so we did not provide any\ntraits for this context selector. With this patch we will allow *any*\nstring or identifier. We use the target attribute and target info to\ndetermine if the trait matches. In other words, we will check if the\nprovided value is a target feature that is available (at the call site).\n\nFixes PR46338\n\nReviewed By: ABataev\n\nDifferential Revision: https://reviews.llvm.org/D83281"},
[h]={{"clang/lib/Parse/ParseExprCXX.cpp",945,"/// 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      return Invalid([&] { Diag(Tok.getLocation(), diag::err_capture_default_first); });"}},
[h]={{"clang/lib/Parse/ParseExprCXX.cpp",945,"/// 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      return Invalid([&] { Diag(Tok.getLocation(), diag::err_capture_default_first); });"}},
[j]={
[j]={
Line 5,974: Line 5,976:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"3d584b0ced40",1391723348,"PR18128: a lambda capture-default is not permitted for a non-local lambda\nexpression.\n\nllvm-svn: 200...","PR18128: a lambda capture-default is not permitted for a non-local lambda\nexpression.\n\nllvm-svn: 200948"},
[b]={"3d584b0ced40",1391723348,"PR18128: a lambda capture-default is not permitted for a non-local lambda","PR18128: a lambda capture-default is not permitted for a non-local lambda\nexpression.\n\nllvm-svn: 200948"},
[h]={{sb,1247,"void Sema::ActOnLambdaClosureQualifiers(LambdaIntroducer &Intro, SourceLocation MutableLoc) {\n  // ...\n  // C++11 [expr.prim.lambda]p9:\n  //  A lambda-expression whose smallest enclosing scope is a block scope is a\n  //  local lambda expression; any other lambda expression shall not have a\n  //  capture-default or simple-capture in its lambda-introducer.\n  //\n  // For simple-captures, this is covered by the check below that any named\n  // entity is a variable that can be captured.\n  //\n  // For DR1632, we also allow a capture-default in any context where we can\n  // odr-use \'this\' (in particular, in a default initializer for a non-static\n  // data member).\n  if (Intro.Default != LCD_None && !LSI->Lambda->getParent()->isFunctionOrMethod() &&\n    // ...\n    Diag(Intro.DefaultLoc, diag::err_capture_default_non_local);"}},
[h]={{rb,1247,"void Sema::ActOnLambdaClosureQualifiers(LambdaIntroducer &Intro, SourceLocation MutableLoc) {\n  // ...\n  // C++11 [expr.prim.lambda]p9:\n  //  A lambda-expression whose smallest enclosing scope is a block scope is a\n  //  local lambda expression; any other lambda expression shall not have a\n  //  capture-default or simple-capture in its lambda-introducer.\n  //\n  // For simple-captures, this is covered by the check below that any named\n  // entity is a variable that can be captured.\n  //\n  // For DR1632, we also allow a capture-default in any context where we can\n  // odr-use \'this\' (in particular, in a default initializer for a non-static\n  // data member).\n  if (Intro.Default != LCD_None && !LSI->Lambda->getParent()->isFunctionOrMethod() &&\n    // ...\n    Diag(Intro.DefaultLoc, diag::err_capture_default_non_local);"}},
[j]={
[j]={
["clang/test/SemaCXX/lambda-expressions.cpp"]={"clang/test/SemaCXX/lambda-expressions.cpp:330:13: error: non-local lambda expression cannot have a capture-default","clang/test/SemaCXX/lambda-expressions.cpp:365:13: error: non-local lambda expression cannot have a capture-default","clang/test/SemaCXX/lambda-expressions.cpp:369:29: error: non-local lambda expression cannot have a capture-default","clang/test/SemaCXX/lambda-expressions.cpp:373:21: error: non-local lambda expression cannot have a capture-default"}
["clang/test/SemaCXX/lambda-expressions.cpp"]={"clang/test/SemaCXX/lambda-expressions.cpp:330:13: error: non-local lambda expression cannot have a capture-default","clang/test/SemaCXX/lambda-expressions.cpp:365:13: error: non-local lambda expression cannot have a capture-default","clang/test/SemaCXX/lambda-expressions.cpp:369:29: error: non-local lambda expression cannot have a capture-default","clang/test/SemaCXX/lambda-expressions.cpp:373:21: error: non-local lambda expression cannot have a capture-default"}
Line 5,986: Line 5,988:
[f]=a,
[f]=a,
[g]="Lambda Issue",
[g]="Lambda Issue",
[b]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures.\n\nThis patch (and some of my other commits related t...","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"},
[b]={"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"},
[h]={{sb,1157,"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    // C++11 [expr.prim.lambda]p10:\n    //  [...] each such lookup shall find a variable with automatic storage\n    //  duration declared in the reaching scope of the local lambda expression.\n    // Note that the \'reaching scope\' check happens in tryCaptureVariable().\n    if (!Var) {\n      Diag(C->Loc, diag::err_capture_does_not_name_variable) << C->Id;"}},
[h]={{rb,1157,"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    // C++11 [expr.prim.lambda]p10:\n    //  [...] each such lookup shall find a variable with automatic storage\n    //  duration declared in the reaching scope of the local lambda expression.\n    // Note that the \'reaching scope\' check happens in tryCaptureVariable().\n    if (!Var) {\n      Diag(C->Loc, diag::err_capture_does_not_name_variable) << C->Id;"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp:20:13: error: \'Overload\' in capture list does not name a variable"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp:20:13: error: \'Overload\' in capture list does not name a variable"}
Line 5,998: Line 6,000:
[f]=a,
[f]=a,
[g]="Lambda Issue",
[g]="Lambda Issue",
[b]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures.\n\nThis patch (and some of my other commits related t...","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"},
[b]={"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"},
[h]={{sb,1029,"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      // C++11 [expr.prim.lambda]p8:\n      //  An identifier or this shall not appear more than once in a\n      //  lambda-capture.\n      if (LSI->isCXXThisCaptured()) {\n        Diag(C->Loc, diag::err_capture_more_than_once) << \"\'this\'\" << SourceRange(LSI->getCXXThisCapture().getLocation()) << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"},{sb,1168,"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    // C++11 [expr.prim.lambda]p8:\n    //  An identifier or this shall not appear more than once in a\n    //  lambda-capture.\n    if (auto [It, Inserted] = CaptureNames.insert(std::pair{C->Id, Var}); !Inserted) {\n      if (C->InitKind == LambdaCaptureInitKind::NoInit && !Var->isInitCapture()) {\n        Diag(C->Loc, diag::err_capture_more_than_once) << C->Id << It->second->getBeginLoc() << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"},{sb,1175,"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    // C++11 [expr.prim.lambda]p8:\n    //  An identifier or this shall not appear more than once in a\n    //  lambda-capture.\n    if (auto [It, Inserted] = CaptureNames.insert(std::pair{C->Id, Var}); !Inserted) {\n      if (C->InitKind == LambdaCaptureInitKind::NoInit && !Var->isInitCapture()) {\n      // ...\n      } else\n        // ...\n        Diag(C->Loc, diag::err_capture_more_than_once) << C->Id;"}},
[h]={{rb,1029,"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      // C++11 [expr.prim.lambda]p8:\n      //  An identifier or this shall not appear more than once in a\n      //  lambda-capture.\n      if (LSI->isCXXThisCaptured()) {\n        Diag(C->Loc, diag::err_capture_more_than_once) << \"\'this\'\" << SourceRange(LSI->getCXXThisCapture().getLocation()) << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"},{rb,1168,"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    // C++11 [expr.prim.lambda]p8:\n    //  An identifier or this shall not appear more than once in a\n    //  lambda-capture.\n    if (auto [It, Inserted] = CaptureNames.insert(std::pair{C->Id, Var}); !Inserted) {\n      if (C->InitKind == LambdaCaptureInitKind::NoInit && !Var->isInitCapture()) {\n        Diag(C->Loc, diag::err_capture_more_than_once) << C->Id << It->second->getBeginLoc() << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"},{rb,1175,"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    // C++11 [expr.prim.lambda]p8:\n    //  An identifier or this shall not appear more than once in a\n    //  lambda-capture.\n    if (auto [It, Inserted] = CaptureNames.insert(std::pair{C->Id, Var}); !Inserted) {\n      if (C->InitKind == LambdaCaptureInitKind::NoInit && !Var->isInitCapture()) {\n      // ...\n      } else\n        // ...\n        Diag(C->Loc, diag::err_capture_more_than_once) << C->Id;"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:7:17: error: \'foo\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:8:18: error: \'this\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:28:13: error: \'i\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:29:16: error: \'i\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:30:13: error: \'i\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:31:16: error: \'i\' can appear only once in a capture list"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:7:17: error: \'foo\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:8:18: error: \'this\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:28:13: error: \'i\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:29:16: error: \'i\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:30:13: error: \'i\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:31:16: error: \'i\' can appear only once in a capture list"}
Line 6,010: Line 6,012:
[f]=a,
[f]=a,
[g]="Lambda Issue",
[g]="Lambda Issue",
[b]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures.\n\nThis patch (and some of my other commits related t...","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"},
[b]={"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"},
[h]={{sb,1186,"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 (!Underlying->hasLocalStorage()) {\n      Diag(C->Loc, diag::err_capture_non_automatic_variable) << C->Id;"}},
[h]={{rb,1186,"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 (!Underlying->hasLocalStorage()) {\n      Diag(C->Loc, diag::err_capture_non_automatic_variable) << C->Id;"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp:21:13: error: \'GlobalVar\' cannot be captured because it does not have automatic storage duration","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp:34:16: error: \'local_static\' cannot be captured because it does not have automatic storage duration"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp:21:13: error: \'GlobalVar\' cannot be captured because it does not have automatic storage duration","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp:34:16: error: \'local_static\' cannot be captured because it does not have automatic storage duration"}
Line 6,022: Line 6,024:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"71fe0e8a832b",1381465521,"Diagnose by-copy captures of abstract classes.\n\nFixes <rdar://problem/14468891>.\n\nllvm-svn: 192419","Diagnose by-copy captures of abstract classes.\n\nFixes <rdar://problem/14468891>.\n\nllvm-svn: 192419"},
[b]={"71fe0e8a832b",1381465521,"Diagnose by-copy captures of abstract classes.","Diagnose by-copy captures of abstract classes.\n\nFixes <rdar://problem/14468891>.\n\nllvm-svn: 192419"},
[h]={{u,19480,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // ...\n  // Compute the type of the field that will capture this variable.\n  if (ByRef) {\n  // ...\n  } else {\n    // ...\n    // Make sure that by-copy captures are of a complete and non-abstract type.\n    if (!Invalid && BuildAndDiagnose) {\n      // ...\n      else if (S.RequireNonAbstractType(Loc, CaptureType, diag::err_capture_of_abstract_type))"}},
[h]={{v,19480,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // ...\n  // Compute the type of the field that will capture this variable.\n  if (ByRef) {\n  // ...\n  } else {\n    // ...\n    // Make sure that by-copy captures are of a complete and non-abstract type.\n    if (!Invalid && BuildAndDiagnose) {\n      // ...\n      else if (S.RequireNonAbstractType(Loc, CaptureType, diag::err_capture_of_abstract_type))"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp:100:6: error: by-copy capture of value of abstract type \'X\'"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp:100:6: error: by-copy capture of value of abstract type \'X\'"}
Line 6,034: Line 6,036:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={ab,1576908663,Z,Y},
[b]={Z,1576908663,X,Y},
[h]={{u,19411,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // ...\n  // Compute the type of the field that will capture this variable.\n  if (ByRef) {\n  // ...\n  } else {\n    // ...\n    // Make sure that by-copy captures are of a complete and non-abstract type.\n    if (!Invalid && BuildAndDiagnose) {\n      if (!CaptureType->isDependentType() && S.RequireCompleteSizedType(Loc, CaptureType, diag::err_capture_of_incomplete_or_sizeless_type, Var->getDeclName()))"}},
[h]={{v,19411,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // ...\n  // Compute the type of the field that will capture this variable.\n  if (ByRef) {\n  // ...\n  } else {\n    // ...\n    // Make sure that by-copy captures are of a complete and non-abstract type.\n    if (!Invalid && BuildAndDiagnose) {\n      if (!CaptureType->isDependentType() && S.RequireCompleteSizedType(Loc, CaptureType, diag::err_capture_of_incomplete_or_sizeless_type, Var->getDeclName()))"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp:108:19: error: by-copy capture of variable \'param\' with incomplete type \'const X\'"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp:108:19: error: by-copy capture of variable \'param\' with incomplete type \'const X\'"}
Line 6,046: Line 6,048:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e233fbfc16fe",1359412965,"Finish semantic analysis for [[carries_dependency]] attribute.\n\nThis required plumbing through a new...","Finish semantic analysis for [[carries_dependency]] attribute.\n\nThis required plumbing through a new flag to determine whether a ParmVarDecl is\nactually a parameter of a function declaration (as opposed to a function\ntypedef etc, where the attribute is prohibited). Weirdly, this attribute (just\nlike [[noreturn]]) cannot be applied to a function type, just to a function\ndeclaration (and its parameters).\n\nllvm-svn: 173726"},
[b]={"e233fbfc16fe",1359412965,"Finish semantic analysis for [[carries_dependency]] attribute.","Finish semantic analysis for [[carries_dependency]] attribute.\n\nThis required plumbing through a new flag to determine whether a ParmVarDecl is\nactually a parameter of a function declaration (as opposed to a function\ntypedef etc, where the attribute is prohibited). Weirdly, this attribute (just\nlike [[noreturn]]) cannot be applied to a function type, just to a function\ndeclaration (and its parameters).\n\nllvm-svn: 173726"},
[h]={{n,3341,"/// mergeParamDeclAttributes - Copy attributes from the old parameter\n/// to the new one.\nstatic void mergeParamDeclAttributes(ParmVarDecl *newDecl, const ParmVarDecl *oldDecl, Sema &S) {\n  // ...\n  if (CDA && !oldDecl->hasAttr<CarriesDependencyAttr>()) {\n    S.Diag(CDA->getLocation(), diag::err_carries_dependency_missing_on_first_decl) << 1 /*Param*/;"},{n,4055,"/// 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 (CDA && !Old->hasAttr<CarriesDependencyAttr>()) {\n      Diag(CDA->getLocation(), diag::err_carries_dependency_missing_on_first_decl) << 0 /*Function*/;"}},
[h]={{m,3341,"/// mergeParamDeclAttributes - Copy attributes from the old parameter\n/// to the new one.\nstatic void mergeParamDeclAttributes(ParmVarDecl *newDecl, const ParmVarDecl *oldDecl, Sema &S) {\n  // ...\n  if (CDA && !oldDecl->hasAttr<CarriesDependencyAttr>()) {\n    S.Diag(CDA->getLocation(), diag::err_carries_dependency_missing_on_first_decl) << 1 /*Param*/;"},{m,4055,"/// 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 (CDA && !Old->hasAttr<CarriesDependencyAttr>()) {\n      Diag(CDA->getLocation(), diag::err_carries_dependency_missing_on_first_decl) << 0 /*Function*/;"}},
[j]={
[j]={
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp:4:3: error: function declared \'[[carries_dependency]]\' after its first declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp:5:15: error: parameter declared \'[[carries_dependency]]\' after its first declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp:9:3: error: function declared \'[[carries_dependency]]\' after its first declaration"}
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp:4:3: error: function declared \'[[carries_dependency]]\' after its first declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp:5:15: error: parameter declared \'[[carries_dependency]]\' after its first declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp:9:3: error: function declared \'[[carries_dependency]]\' after its first declaration"}
Line 6,058: Line 6,060:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e233fbfc16fe",1359412965,"Finish semantic analysis for [[carries_dependency]] attribute.\n\nThis required plumbing through a new...","Finish semantic analysis for [[carries_dependency]] attribute.\n\nThis required plumbing through a new flag to determine whether a ParmVarDecl is\nactually a parameter of a function declaration (as opposed to a function\ntypedef etc, where the attribute is prohibited). Weirdly, this attribute (just\nlike [[noreturn]]) cannot be applied to a function type, just to a function\ndeclaration (and its parameters).\n\nllvm-svn: 173726"},
[b]={"e233fbfc16fe",1359412965,"Finish semantic analysis for [[carries_dependency]] attribute.","Finish semantic analysis for [[carries_dependency]] attribute.\n\nThis required plumbing through a new flag to determine whether a ParmVarDecl is\nactually a parameter of a function declaration (as opposed to a function\ntypedef etc, where the attribute is prohibited). Weirdly, this attribute (just\nlike [[noreturn]]) cannot be applied to a function type, just to a function\ndeclaration (and its parameters).\n\nllvm-svn: 173726"},
[h]={{l,2322,"static void handleDependencyAttr(Sema &S, Scope *Scope, Decl *D, const ParsedAttr &AL) {\n  if (isa<ParmVarDecl>(D)) {\n    // [[carries_dependency]] can only be applied to a parameter if it is a\n    // parameter of a function declaration or lambda.\n    if (!(Scope->getFlags() & clang::Scope::FunctionDeclarationScope)) {\n      S.Diag(AL.getLoc(), diag::err_carries_dependency_param_not_function_decl);"}},
[h]={{l,2322,"static void handleDependencyAttr(Sema &S, Scope *Scope, Decl *D, const ParsedAttr &AL) {\n  if (isa<ParmVarDecl>(D)) {\n    // [[carries_dependency]] can only be applied to a parameter if it is a\n    // parameter of a function declaration or lambda.\n    if (!(Scope->getFlags() & clang::Scope::FunctionDeclarationScope)) {\n      S.Diag(AL.getLoc(), diag::err_carries_dependency_param_not_function_decl);"}},
[j]={
[j]={
Line 6,070: Line 6,072:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{Q,521,"StmtResult Sema::ActOnCaseStmt(SourceLocation CaseLoc, ExprResult LHSVal, SourceLocation DotDotDotLoc, ExprResult RHSVal, SourceLocation ColonLoc) {\n  // ...\n  if (getCurFunction()->SwitchStack.empty()) {\n    Diag(CaseLoc, diag::err_case_not_in_switch);"}},
[h]={{R,521,"StmtResult Sema::ActOnCaseStmt(SourceLocation CaseLoc, ExprResult LHSVal, SourceLocation DotDotDotLoc, ExprResult RHSVal, SourceLocation ColonLoc) {\n  // ...\n  if (getCurFunction()->SwitchStack.empty()) {\n    Diag(CaseLoc, diag::err_case_not_in_switch);"}},
[j]={
[j]={
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:101:6: error: \'case\' statement not in switch statement"}
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:101:6: error: \'case\' statement not in switch statement"}
Line 6,082: Line 6,084:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/cla...","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
[b]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
[h]={{s,3235,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  if (isa<PointerType>(SrcType) && isa<PointerType>(DestType)) {\n    // ...\n    if (SrcRD && DestRD && SrcRD->hasAttr<RandomizeLayoutAttr>() && SrcRD != DestRD) {\n      // ...\n      Self.Diag(OpRange.getBegin(), diag::err_cast_from_randomized_struct) << SrcType << DestType;"}}
[h]={{t,3235,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  if (isa<PointerType>(SrcType) && isa<PointerType>(DestType)) {\n    // ...\n    if (SrcRD && DestRD && SrcRD->hasAttr<RandomizeLayoutAttr>() && SrcRD != DestRD) {\n      // ...\n      Self.Diag(OpRange.getBegin(), diag::err_cast_from_randomized_struct) << SrcType << DestType;"}}
},
},
["err_cast_pointer_from_non_pointer_int"]={
["err_cast_pointer_from_non_pointer_int"]={
Line 6,091: Line 6,093:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"f4e3ad6500ca",1241144638,"PR4013 and PR4105: pointer-like types can only be cast to/from integers \nand other pointer-like type...","PR4013 and PR4105: pointer-like types can only be cast to/from integers \nand other pointer-like types.\n\nllvm-svn: 70531"},
[b]={"f4e3ad6500ca",1241144638,"PR4013 and PR4105: pointer-like types can only be cast to/from integers ","PR4013 and PR4105: pointer-like types can only be cast to/from integers \nand other pointer-like types.\n\nllvm-svn: 70531"},
[h]={{s,3144,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  // If either type is a pointer, the other type has to be either an\n  // integer or a pointer.\n  if (!DestType->isArithmeticType()) {\n    if (!SrcType->isIntegralType(Self.Context) && SrcType->isArithmeticType()) {\n      Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_cast_pointer_from_non_pointer_int) << SrcType << SrcExpr.get()->getSourceRange();"}},
[h]={{t,3144,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  // If either type is a pointer, the other type has to be either an\n  // integer or a pointer.\n  if (!DestType->isArithmeticType()) {\n    if (!SrcType->isIntegralType(Self.Context) && SrcType->isArithmeticType()) {\n      Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_cast_pointer_from_non_pointer_int) << SrcType << SrcExpr.get()->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/cast.c"]={"clang/test/Sema/cast.c:16:14: error: operand of type \'double\' cannot be cast to a pointer type"}
["clang/test/Sema/cast.c"]={"clang/test/Sema/cast.c:16:14: error: operand of type \'double\' cannot be cast to a pointer type"}
Line 6,103: Line 6,105:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"f4e3ad6500ca",1241144638,"PR4013 and PR4105: pointer-like types can only be cast to/from integers \nand other pointer-like type...","PR4013 and PR4105: pointer-like types can only be cast to/from integers \nand other pointer-like types.\n\nllvm-svn: 70531"},
[b]={"f4e3ad6500ca",1241144638,"PR4013 and PR4105: pointer-like types can only be cast to/from integers ","PR4013 and PR4105: pointer-like types can only be cast to/from integers \nand other pointer-like types.\n\nllvm-svn: 70531"},
[h]={{s,3155,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  // If either type is a pointer, the other type has to be either an\n  // integer or a pointer.\n  if (!DestType->isArithmeticType()) {\n  // ...\n  } else if (!SrcType->isArithmeticType()) {\n    if (!DestType->isIntegralType(Self.Context) && DestType->isArithmeticType()) {\n      Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_cast_pointer_to_non_pointer_int) << DestType << SrcExpr.get()->getSourceRange();"}},
[h]={{t,3155,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  // If either type is a pointer, the other type has to be either an\n  // integer or a pointer.\n  if (!DestType->isArithmeticType()) {\n  // ...\n  } else if (!SrcType->isArithmeticType()) {\n    if (!DestType->isIntegralType(Self.Context) && DestType->isArithmeticType()) {\n      Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_cast_pointer_to_non_pointer_int) << DestType << SrcExpr.get()->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/cast.c"]={"clang/test/Sema/cast.c:15:15: error: pointer cannot be cast to type \'double\'"}
["clang/test/Sema/cast.c"]={"clang/test/Sema/cast.c:15:15: error: pointer cannot be cast to type \'double\'"}
Line 6,115: Line 6,117:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"88fead8c4821",1243028572,"Cannot type cast @selector expressions.\n\nllvm-svn: 72284","Cannot type cast @selector expressions.\n\nllvm-svn: 72284"},
[b]={"88fead8c4821",1243028572,"Cannot type cast @selector expressions.","Cannot type cast @selector expressions.\n\nllvm-svn: 72284"},
[h]={{s,3134,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  if (isa<ObjCSelectorExpr>(SrcExpr.get())) {\n    Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_cast_selector_expr);"}},
[h]={{t,3134,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  if (isa<ObjCSelectorExpr>(SrcExpr.get())) {\n    Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_cast_selector_expr);"}},
[j]={
[j]={
["clang/test/SemaObjC/selector-error.m"]={"clang/test/SemaObjC/selector-error.m:16:14: error: cannot type cast @selector expression","clang/test/SemaObjC/selector-error.m:17:17: error: cannot type cast @selector expression"}
["clang/test/SemaObjC/selector-error.m"]={"clang/test/SemaObjC/selector-error.m:16:14: error: cannot type cast @selector expression","clang/test/SemaObjC/selector-error.m:17:17: error: cannot type cast @selector expression"}
Line 6,127: Line 6,129:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{r,16634,"/// 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  unsigned DK = diag::err_catch_incomplete;"}},
[h]={{s,16634,"/// 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  unsigned DK = diag::err_catch_incomplete;"}},
[j]={
[j]={
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:15:16: error: cannot catch incomplete type \'void\'","clang/test/SemaCXX/exceptions.cpp:16:13: error: cannot catch incomplete type \'A\'"}
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:15:16: error: cannot catch incomplete type \'void\'","clang/test/SemaCXX/exceptions.cpp:16:13: error: cannot catch incomplete type \'A\'"}
Line 6,139: Line 6,141:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{r,16638,"/// 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  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {\n    // ...\n    DK = diag::err_catch_incomplete_ptr;"}},
[h]={{s,16638,"/// 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  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {\n    // ...\n    DK = diag::err_catch_incomplete_ptr;"}},
[j]={
[j]={
["clang/test/SemaTemplate/instantiate-function-1.cpp"]={"clang/test/SemaTemplate/instantiate-function-1.cpp:197:16: error: cannot catch pointer to incomplete type \'Incomplete\'"}
["clang/test/SemaTemplate/instantiate-function-1.cpp"]={"clang/test/SemaTemplate/instantiate-function-1.cpp:197:16: error: cannot catch pointer to incomplete type \'Incomplete\'"}
Line 6,151: Line 6,153:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{r,16643,"/// 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  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {\n  // ...\n  } else if (const ReferenceType *Ref = BaseType->getAs<ReferenceType>()) {\n    // ...\n    DK = diag::err_catch_incomplete_ref;"}},
[h]={{s,16643,"/// 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  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {\n  // ...\n  } else if (const ReferenceType *Ref = BaseType->getAs<ReferenceType>()) {\n    // ...\n    DK = diag::err_catch_incomplete_ref;"}},
[j]={
[j]={
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:18:14: error: cannot catch reference to incomplete type \'A\'"}
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:18:14: error: cannot catch reference to incomplete type \'A\'"}
Line 6,163: Line 6,165:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{G,5168,"/// Build a type-check a new Objective-C exception variable declaration.\nVarDecl *Sema::BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType T, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, bool Invalid) {\n  // ...\n  // An @catch parameter must be an unqualified object pointer type;\n  // FIXME: Recover from \"NSObject foo\" by inserting the * in \"NSObject *foo\"?\n  if (Invalid) {\n  // ...\n  } else if (T->isDependentType()) {\n  // ...\n  } else if (T->isObjCQualifiedIdType()) {\n  // ...\n  } else if (T->isObjCIdType()) {\n  // ...\n  } else if (!T->isObjCObjectPointerType()) {\n    // ...\n    Diag(IdLoc, diag::err_catch_param_not_objc_type);"},{G,5171,"/// Build a type-check a new Objective-C exception variable declaration.\nVarDecl *Sema::BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType T, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, bool Invalid) {\n  // ...\n  // An @catch parameter must be an unqualified object pointer type;\n  // FIXME: Recover from \"NSObject foo\" by inserting the * in \"NSObject *foo\"?\n  if (Invalid) {\n  // ...\n  } else if (T->isDependentType()) {\n  // ...\n  } else if (T->isObjCQualifiedIdType()) {\n  // ...\n  } else if (T->isObjCIdType()) {\n  // ...\n  } else if (!T->isObjCObjectPointerType()) {\n  // ...\n  } else if (!T->castAs<ObjCObjectPointerType>()->getInterfaceType()) {\n    // ...\n    Diag(IdLoc, diag::err_catch_param_not_objc_type);"}},
[h]={{G,5168,"/// Build a type-check a new Objective-C exception variable declaration.\nVarDecl *Sema::BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType T, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, bool Invalid) {\n  // ...\n  // An @catch parameter must be an unqualified object pointer type;\n  // FIXME: Recover from \"NSObject foo\" by inserting the * in \"NSObject *foo\"?\n  if (Invalid) {\n  // ...\n  } else if (T->isDependentType()) {\n  // ...\n  } else if (T->isObjCQualifiedIdType()) {\n  // ...\n  } else if (T->isObjCIdType()) {\n  // ...\n  } else if (!T->isObjCObjectPointerType()) {\n    // ...\n    Diag(IdLoc, diag::err_catch_param_not_objc_type);"},{G,5171,"/// Build a type-check a new Objective-C exception variable declaration.\nVarDecl *Sema::BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType T, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, bool Invalid) {\n  // ...\n  // An @catch parameter must be an unqualified object pointer type;\n  // FIXME: Recover from \"NSObject foo\" by inserting the * in \"NSObject *foo\"?\n  if (Invalid) {\n  // ...\n  } else if (T->isDependentType()) {\n  // ...\n  } else if (T->isObjCQualifiedIdType()) {\n  // ...\n  } else if (T->isObjCIdType()) {\n  // ...\n  } else if (!T->isObjCObjectPointerType()) {\n  // ...\n  } else if (!T->castAs<ObjCObjectPointerType>()->getInterfaceType()) {\n    // ...\n    Diag(IdLoc, diag::err_catch_param_not_objc_type);"}},
[j]={
[j]={
Line 6,175: Line 6,177:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"b28b40712121",1237765767,"Disallow catching exceptions by rvalue reference.\n\nllvm-svn: 67492","Disallow catching exceptions by rvalue reference.\n\nllvm-svn: 67492"},
[b]={"b28b40712121",1237765767,"Disallow catching exceptions by rvalue reference.","Disallow catching exceptions by rvalue reference.\n\nllvm-svn: 67492"},
[h]={{r,16623,"/// 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  // C++ 15.3p1: The exception-declaration shall not denote an incomplete type.\n  // The exception-declaration shall not denote a pointer or reference to an\n  // incomplete type, other than [cv] void*.\n  // N2844 forbids rvalue references.\n  if (!ExDeclType->isDependentType() && ExDeclType->isRValueReferenceType()) {\n    Diag(Loc, diag::err_catch_rvalue_ref);"}},
[h]={{s,16623,"/// 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  // C++ 15.3p1: The exception-declaration shall not denote an incomplete type.\n  // The exception-declaration shall not denote a pointer or reference to an\n  // incomplete type, other than [cv] void*.\n  // N2844 forbids rvalue references.\n  if (!ExDeclType->isDependentType() && ExDeclType->isRValueReferenceType()) {\n    Diag(Loc, diag::err_catch_rvalue_ref);"}},
[j]={
[j]={
["clang/test/SemaTemplate/instantiate-try-catch.cpp"]={"clang/test/SemaTemplate/instantiate-try-catch.cpp:6:17: error: cannot catch exceptions by rvalue reference","clang/test/SemaTemplate/instantiate-try-catch.cpp:6:17: error: cannot catch exceptions by rvalue reference"}
["clang/test/SemaTemplate/instantiate-try-catch.cpp"]={"clang/test/SemaTemplate/instantiate-try-catch.cpp:6:17: error: cannot catch exceptions by rvalue reference","clang/test/SemaTemplate/instantiate-try-catch.cpp:6:17: error: cannot catch exceptions by rvalue reference"}
Line 6,187: Line 6,189:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={ab,1576908663,Z,Y},
[b]={Z,1576908663,X,Y},
[h]={{r,16655,"/// 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  if (!Invalid && Mode != 1 && BaseType->isSizelessType()) {\n    Diag(Loc, diag::err_catch_sizeless) << (Mode == 2 ? 1 : 0) << BaseType;"}},
[h]={{s,16655,"/// 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  if (!Invalid && Mode != 1 && BaseType->isSizelessType()) {\n    Diag(Loc, diag::err_catch_sizeless) << (Mode == 2 ? 1 : 0) << BaseType;"}},
[j]={
[j]={
["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:368:20: error: cannot catch sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/SemaCXX/sizeless-1.cpp:374:22: error: cannot catch reference to sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"}
["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:368:20: error: cannot catch sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/SemaCXX/sizeless-1.cpp:374:22: error: cannot catch reference to sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"}
Line 6,199: Line 6,201:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e56d1a0d5000",1465401907,"[Sema] Don\'t permit catching variably modified types\n\nVariably modified types shouldn\'t be permitted...","[Sema] Don\'t permit catching variably modified types\n\nVariably modified types shouldn\'t be permitted in catch clauses.\n\nThis fixes PR28047.\n\nllvm-svn: 272159"},
[b]={"e56d1a0d5000",1465401907,"[Sema] Don\'t permit catching variably modified types","[Sema] Don\'t permit catching variably modified types\n\nVariably modified types shouldn\'t be permitted in catch clauses.\n\nThis fixes PR28047.\n\nllvm-svn: 272159"},
[h]={{r,16628,"/// 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  if (ExDeclType->isVariablyModifiedType()) {\n    Diag(Loc, diag::err_catch_variably_modified) << ExDeclType;"}},
[h]={{s,16628,"/// 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  if (ExDeclType->isVariablyModifiedType()) {\n    Diag(Loc, diag::err_catch_variably_modified) << ExDeclType;"}},
[j]={
[j]={
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:281:17: error: cannot catch variably modified type \'int (*)[i]\'","clang/test/SemaCXX/exceptions.cpp:287:17: error: cannot catch variably modified type \'int (*)[i]\'"}
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:281:17: error: cannot catch variably modified type \'int (*)[i]\'","clang/test/SemaCXX/exceptions.cpp:287:17: error: cannot catch variably modified type \'int (*)[i]\'"}
Line 6,211: Line 6,213:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"4123a86faebb",1321308601,"Use Sema::RequireCompleteType to check for the completeness of\nObjective-C classes. This has two pur...","Use Sema::RequireCompleteType to check for the completeness of\nObjective-C classes. This has two purposes: to consistently provide\n\"forward declaration here\" notes when we hit an incomplete type, and\nto give LLDB a chance to complete the type.\n\nRequireCompleteType bits from Sean Callanan!\n\nllvm-svn: 144573"},
[b]={"4123a86faebb",1321308601,"Use Sema::RequireCompleteType to check for the completeness of","Use Sema::RequireCompleteType to check for the completeness of\nObjective-C classes. This has two purposes: to consistently provide\n\"forward declaration here\" notes when we hit an incomplete type, and\nto give LLDB a chance to complete the type.\n\nRequireCompleteType bits from Sean Callanan!\n\nllvm-svn: 144573"},
[h]={{G,1833,"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 (!IDecl || RequireCompleteType(ClassLoc, Context.getObjCInterfaceType(IDecl), diag::err_category_forward_interface, CategoryName == nullptr)) {"}},
[h]={{G,1833,"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 (!IDecl || RequireCompleteType(ClassLoc, Context.getObjCInterfaceType(IDecl), diag::err_category_forward_interface, CategoryName == nullptr)) {"}},
[j]={
[j]={
Line 6,223: Line 6,225:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={Mb,1480718311,V,V},
[b]={Lb,1480718311,Mb,Ob},
[h]={{P,1134,"/// 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 (const ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(property->getDeclContext())) {\n      if (!CD->IsClassExtension()) {\n        Diag(PropertyLoc, diag::err_category_property) << CD->getDeclName();"}},
[h]={{Q,1134,"/// 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 (const ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(property->getDeclContext())) {\n      if (!CD->IsClassExtension()) {\n        Diag(PropertyLoc, diag::err_category_property) << CD->getDeclName();"}},
[j]={
[j]={
["clang/test/SemaObjC/property-category-4.m"]={"clang/test/SemaObjC/property-category-4.m:15:13: error: property declared in category \'CAT\' cannot be implemented in class implementation","clang/test/SemaObjC/property-category-4.m:16:10: error: property declared in category \'CAT\' cannot be implemented in class implementation"}
["clang/test/SemaObjC/property-category-4.m"]={"clang/test/SemaObjC/property-category-4.m:15:13: error: property declared in category \'CAT\' cannot be implemented in class implementation","clang/test/SemaObjC/property-category-4.m:16:10: error: property declared in category \'CAT\' cannot be implemented in class implementation"}
Line 6,235: Line 6,237:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating po...","[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"},
[b]={"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"},
[h]={{O,727,"#endif\n  // ...\n  // Run the first parse on the original arguments with the dummy invocation and\n  // diagnostics.\n  if (!Parse(DummyInvocation, CommandLineArgs, DummyDiags, Argv0) || DummyDiags.getNumWarnings() != 0) {\n    // ...\n    Diags.Report(diag::err_cc1_round_trip_fail_then_ok);"}}
[h]={{P,727,"#endif\n  // ...\n  // Run the first parse on the original arguments with the dummy invocation and\n  // diagnostics.\n  if (!Parse(DummyInvocation, CommandLineArgs, DummyDiags, Argv0) || DummyDiags.getNumWarnings() != 0) {\n    // ...\n    Diags.Report(diag::err_cc1_round_trip_fail_then_ok);"}}
},
},
["err_cc1_round_trip_mismatch"]={
["err_cc1_round_trip_mismatch"]={
Line 6,244: Line 6,246:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating po...","[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"},
[b]={"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"},
[h]={{O,783,"#endif\n  // ...\n  // If we generated different arguments from what we assume are two\n  // semantically equivalent CompilerInvocations, the Generate function may\n  // be non-deterministic.\n  if (!Equal(GeneratedArgs, ComparisonArgs)) {\n    Diags.Report(diag::err_cc1_round_trip_mismatch);"}}
[h]={{P,783,"#endif\n  // ...\n  // If we generated different arguments from what we assume are two\n  // semantically equivalent CompilerInvocations, the Generate function may\n  // be non-deterministic.\n  if (!Equal(GeneratedArgs, ComparisonArgs)) {\n    Diags.Report(diag::err_cc1_round_trip_mismatch);"}}
},
},
["err_cc1_round_trip_ok_then_fail"]={
["err_cc1_round_trip_ok_then_fail"]={
Line 6,253: Line 6,255:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating po...","[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"},
[b]={"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"},
[h]={{O,755,"#endif\n  // ...\n  // The first parse on original arguments succeeded, but second parse of\n  // generated arguments failed. Something must be wrong with the generator.\n  if (!Success2) {\n    Diags.Report(diag::err_cc1_round_trip_ok_then_fail);"}}
[h]={{P,755,"#endif\n  // ...\n  // The first parse on original arguments succeeded, but second parse of\n  // generated arguments failed. Something must be wrong with the generator.\n  if (!Success2) {\n    Diags.Report(diag::err_cc1_round_trip_ok_then_fail);"}}
},
},
["err_cc1_unbounded_vscale_min"]={
["err_cc1_unbounded_vscale_min"]={
Line 6,262: Line 6,264:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.\n\nThis is sup...","[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.\n\nThis is support for the user-facing options to create importable header units\nfrom headers in the user or system search paths (or to be given an absolute path).\n\nThis means that an incomplete header path will be passed by the driver and the\nlookup carried out using the search paths present when the front end is run.\n\nTo support this, we introduce file fypes for c++-{user,system,header-unit}-header.\nThese terms are the same as the ones used by GCC, to minimise the differences for\ntooling (and users).\n\nThe preprocessor checks for headers before issuing a warning for\n\"#pragma once\" in a header build.  We ensure that the importable header units\nare recognised as headers in order to avoid such warnings.\n\nDifferential Revision: https://reviews.llvm.org/D121096"},
[b]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.","[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.\n\nThis is support for the user-facing options to create importable header units\nfrom headers in the user or system search paths (or to be given an absolute path).\n\nThis means that an incomplete header path will be passed by the driver and the\nlookup carried out using the search paths present when the front end is run.\n\nTo support this, we introduce file fypes for c++-{user,system,header-unit}-header.\nThese terms are the same as the ones used by GCC, to minimise the differences for\ntooling (and users).\n\nThe preprocessor checks for headers before issuing a warning for\n\"#pragma once\" in a header build.  We ensure that the importable header units\nare recognised as headers in order to avoid such warnings.\n\nDifferential Revision: https://reviews.llvm.org/D121096"},
[h]={{O,4053,"#include \"clang/Driver/Options.inc\"\n  // ...\n  // Error if -mvscale-min is unbounded.\n  if (Arg *A = Args.getLastArg(options::OPT_mvscale_min_EQ)) {\n    // ...\n    if (StringRef(A->getValue()).getAsInteger(10, VScaleMin) || VScaleMin == 0)\n      Diags.Report(diag::err_cc1_unbounded_vscale_min);"}}
[h]={{P,4053,"#include \"clang/Driver/Options.inc\"\n  // ...\n  // Error if -mvscale-min is unbounded.\n  if (Arg *A = Args.getLastArg(options::OPT_mvscale_min_EQ)) {\n    // ...\n    if (StringRef(A->getValue()).getAsInteger(10, VScaleMin) || VScaleMin == 0)\n      Diags.Report(diag::err_cc1_unbounded_vscale_min);"}}
},
},
["err_cconv_change"]={
["err_cconv_change"]={
Line 6,271: Line 6,273:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"ab26cfa58de5",1265405516,"Standardize the parsing of function type attributes in a way that\nfollows (as conservatively as poss...","Standardize the parsing of function type attributes in a way that\nfollows (as conservatively as possible) gcc\'s current behavior:  attributes\nwritten on return types that don\'t apply there are applied to the function\ninstead, etc.  Only parse CC attributes as type attributes, not as decl attributes;\ndon\'t accepet noreturn as a decl attribute on ValueDecls, either (it still\nneeds to apply to other decls, like blocks).  Consistently consume CC/noreturn\ninformation throughout codegen;  enforce this by removing their default values\nin CodeGenTypes::getFunctionInfo().\n\nllvm-svn: 95436"},
[b]={"ab26cfa58de5",1265405516,"Standardize the parsing of function type attributes in a way that","Standardize the parsing of function type attributes in a way that\nfollows (as conservatively as possible) gcc\'s current behavior:  attributes\nwritten on return types that don\'t apply there are applied to the function\ninstead, etc.  Only parse CC attributes as type attributes, not as decl attributes;\ndon\'t accepet noreturn as a decl attribute on ValueDecls, either (it still\nneeds to apply to other decls, like blocks).  Consistently consume CC/noreturn\ninformation throughout codegen;  enforce this by removing their default values\nin CodeGenTypes::getFunctionInfo().\n\nllvm-svn: 95436"},
[h]={{n,3809,"/// 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 (OldTypeInfo.getCC() != NewTypeInfo.getCC()) {\n    // ...\n    if (!NewCCExplicit) {\n    // ...\n    } else if (Old->getBuiltinID()) {\n    // ...\n    } else {\n      // ...\n      Diag(New->getLocation(), diag::err_cconv_change) << FunctionType::getNameForCallConv(NewTypeInfo.getCC()) << !FirstCCExplicit << (!FirstCCExplicit ? \"\" : FunctionType::getNameForCallConv(FI.getCC()));"}},
[h]={{m,3809,"/// 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 (OldTypeInfo.getCC() != NewTypeInfo.getCC()) {\n    // ...\n    if (!NewCCExplicit) {\n    // ...\n    } else if (Old->getBuiltinID()) {\n    // ...\n    } else {\n      // ...\n      Diag(New->getLocation(), diag::err_cconv_change) << FunctionType::getNameForCallConv(NewTypeInfo.getCC()) << !FirstCCExplicit << (!FirstCCExplicit ? \"\" : FunctionType::getNameForCallConv(FI.getCC()));"}},
[j]={
[j]={
["clang/test/Sema/ms_abi-sysv_abi.c"]={"clang/test/Sema/ms_abi-sysv_abi.c:11:32: error: function declared \'cdecl\' here was previously declared \'ms_abi\'"}
["clang/test/Sema/ms_abi-sysv_abi.c"]={"clang/test/Sema/ms_abi-sysv_abi.c:11:32: error: function declared \'cdecl\' here was previously declared \'ms_abi\'"}
Line 6,283: Line 6,285:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e78333a0105d",1560207192,"Require stdcall etc parameters to be complete on ODR use\n\nFunctions using stdcall, fastcall, or vect...","Require stdcall etc parameters to be complete on ODR use\n\nFunctions using stdcall, fastcall, or vectorcall with C linkage mangle\nin the size of the parameter pack. Calculating the size of the pack\nrequires the parameter types to complete, which may require template\ninstantiation.\n\nPreviously, we would crash during IRgen when requesting the size of\nincomplete or uninstantiated types, as in this reduced example:\n  struct Foo;\n  void __fastcall bar(struct Foo o);\n  void (__fastcall *fp)(struct Foo) = &bar;\n\nReported in Chromium here: https://crbug.com/971245\n\nDifferential Revision: https://reviews.llvm.org/D62975\n\nllvm-svn: 363000"},
[b]={"e78333a0105d",1560207192,"Require stdcall etc parameters to be complete on ODR use","Require stdcall etc parameters to be complete on ODR use\n\nFunctions using stdcall, fastcall, or vectorcall with C linkage mangle\nin the size of the parameter pack. Calculating the size of the pack\nrequires the parameter types to complete, which may require template\ninstantiation.\n\nPreviously, we would crash during IRgen when requesting the size of\nincomplete or uninstantiated types, as in this reduced example:\n  struct Foo;\n  void __fastcall bar(struct Foo o);\n  void (__fastcall *fp)(struct Foo) = &bar;\n\nReported in Chromium here: https://crbug.com/971245\n\nDifferential Revision: https://reviews.llvm.org/D62975\n\nllvm-svn: 363000"},
[h]={{u,19011,"/// Require that all of the parameter types of function be complete. Normally,\n/// parameter types are only required to be complete when a function is called\n/// or defined, but to mangle functions with certain calling conventions, the\n/// mangler needs to know the size of the parameter list. In this situation,\n/// MSVC doesn\'t emit an error or instantiate templates. Instead, MSVC mangles\n/// the function as _foo@0, i.e. zero bytes of parameters, which will usually\n/// result in a linker error. Clang doesn\'t implement this behavior, and instead\n/// attempts to error at compile time.\nstatic void CheckCompleteParameterTypesForMangler(Sema &S, FunctionDecl *FD, SourceLocation Loc) {\n  class ParamIncompleteTypeDiagnoser : public Sema::TypeDiagnoser {\n    // ...\n    void diagnose(Sema &S, SourceLocation Loc, QualType T) override {\n      // ...\n      S.Diag(Loc, diag::err_cconv_incomplete_param_type) << Param->getDeclName() << FD->getDeclName() << CCName;"}},
[h]={{v,19011,"/// Require that all of the parameter types of function be complete. Normally,\n/// parameter types are only required to be complete when a function is called\n/// or defined, but to mangle functions with certain calling conventions, the\n/// mangler needs to know the size of the parameter list. In this situation,\n/// MSVC doesn\'t emit an error or instantiate templates. Instead, MSVC mangles\n/// the function as _foo@0, i.e. zero bytes of parameters, which will usually\n/// result in a linker error. Clang doesn\'t implement this behavior, and instead\n/// attempts to error at compile time.\nstatic void CheckCompleteParameterTypesForMangler(Sema &S, FunctionDecl *FD, SourceLocation Loc) {\n  class ParamIncompleteTypeDiagnoser : public Sema::TypeDiagnoser {\n    // ...\n    void diagnose(Sema &S, SourceLocation Loc, QualType T) override {\n      // ...\n      S.Diag(Loc, diag::err_cconv_incomplete_param_type) << Param->getDeclName() << FD->getDeclName() << CCName;"}},
[j]={
[j]={
["clang/test/Sema/calling-conv-complete-params.c"]={"clang/test/Sema/calling-conv-complete-params.c:23:45: error: parameter \'p\' must have a complete type to use function \'fwd_std\' with the stdcall calling convention","clang/test/Sema/calling-conv-complete-params.c:29:47: error: parameter \'p\' must have a complete type to use function \'fwd_fast\' with the fastcall calling convention","clang/test/Sema/calling-conv-complete-params.c:35:51: error: parameter \'p\' must have a complete type to use function \'fwd_vector\' with the vectorcall calling convention"}
["clang/test/Sema/calling-conv-complete-params.c"]={"clang/test/Sema/calling-conv-complete-params.c:23:45: error: parameter \'p\' must have a complete type to use function \'fwd_std\' with the stdcall calling convention","clang/test/Sema/calling-conv-complete-params.c:29:47: error: parameter \'p\' must have a complete type to use function \'fwd_fast\' with the fastcall calling convention","clang/test/Sema/calling-conv-complete-params.c:35:51: error: parameter \'p\' must have a complete type to use function \'fwd_vector\' with the vectorcall calling convention"}
Line 6,295: Line 6,297:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"4976fd4ea971",1257305769,"Diagnose the use of \'fastcall\' on functions without prototypes or with\nvarargs prototypes.\n\nllvm-svn...","Diagnose the use of \'fastcall\' on functions without prototypes or with\nvarargs prototypes.\n\nllvm-svn: 86001"},
[b]={"4976fd4ea971",1257305769,"Diagnose the use of \'fastcall\' on functions without prototypes or with","Diagnose the use of \'fastcall\' on functions without prototypes or with\nvarargs prototypes.\n\nllvm-svn: 86001"},
[h]={{n,10321,"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 (isa<FunctionNoProtoType>(FT) && !D.isFunctionDefinition()) {\n      // ...\n      if (!supportsVariadicCall(CC)) {\n        // ...\n        int DiagID = CC == CC_X86StdCall ? diag::warn_cconv_knr : diag::err_cconv_knr;"}},
[h]={{m,10321,"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 (isa<FunctionNoProtoType>(FT) && !D.isFunctionDefinition()) {\n      // ...\n      if (!supportsVariadicCall(CC)) {\n        // ...\n        int DiagID = CC == CC_X86StdCall ? diag::warn_cconv_knr : diag::err_cconv_knr;"}},
[j]={
[j]={
["clang/test/Sema/decl-microsoft-call-conv.c"]={"clang/test/Sema/decl-microsoft-call-conv.c:22:17: error: function with no prototype cannot use the fastcall calling convention","clang/test/Sema/decl-microsoft-call-conv.c:24:17: error: function with no prototype cannot use the thiscall calling convention","clang/test/Sema/decl-microsoft-call-conv.c:25:15: error: function with no prototype cannot use the pascal calling convention","clang/test/Sema/decl-microsoft-call-conv.c:26:19: error: function with no prototype cannot use the vectorcall calling convention"}
["clang/test/Sema/decl-microsoft-call-conv.c"]={"clang/test/Sema/decl-microsoft-call-conv.c:22:17: error: function with no prototype cannot use the fastcall calling convention","clang/test/Sema/decl-microsoft-call-conv.c:24:17: error: function with no prototype cannot use the thiscall calling convention","clang/test/Sema/decl-microsoft-call-conv.c:25:15: error: function with no prototype cannot use the pascal calling convention","clang/test/Sema/decl-microsoft-call-conv.c:26:19: error: function with no prototype cannot use the vectorcall calling convention"}
Line 6,307: Line 6,309:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"4976fd4ea971",1257305769,"Diagnose the use of \'fastcall\' on functions without prototypes or with\nvarargs prototypes.\n\nllvm-svn...","Diagnose the use of \'fastcall\' on functions without prototypes or with\nvarargs prototypes.\n\nllvm-svn: 86001"},
[b]={"4976fd4ea971",1257305769,"Diagnose the use of \'fastcall\' on functions without prototypes or with","Diagnose the use of \'fastcall\' on functions without prototypes or with\nvarargs prototypes.\n\nllvm-svn: 86001"},
[h]={{o,7999,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  // Diagnose use of variadic functions with calling conventions that\n  // don\'t support them (e.g. because they\'re callee-cleanup).\n  // We delay warning about this on unprototyped function declarations\n  // until after redeclaration checking, just in case we pick up a\n  // prototype that way.  And apparently we also \"delay\" warning about\n  // unprototyped function types in general, despite not necessarily having\n  // much ability to diagnose it later.\n  if (!supportsVariadicCall(CC)) {\n    // ...\n    if (FnP && FnP->isVariadic()) {\n      // ...\n      return S.Diag(attr.getLoc(), diag::err_cconv_varargs) << FunctionType::getNameForCallConv(CC);"}},
[h]={{n,7999,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  // Diagnose use of variadic functions with calling conventions that\n  // don\'t support them (e.g. because they\'re callee-cleanup).\n  // We delay warning about this on unprototyped function declarations\n  // until after redeclaration checking, just in case we pick up a\n  // prototype that way.  And apparently we also \"delay\" warning about\n  // unprototyped function types in general, despite not necessarily having\n  // much ability to diagnose it later.\n  if (!supportsVariadicCall(CC)) {\n    // ...\n    if (FnP && FnP->isVariadic()) {\n      // ...\n      return S.Diag(attr.getLoc(), diag::err_cconv_varargs) << FunctionType::getNameForCallConv(CC);"}},
[j]={
[j]={
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:12:27: error: variadic function cannot use swiftcall calling convention","clang/test/SemaCXX/attr-swiftcall.cpp:13:33: error: variadic function cannot use swiftasynccall calling convention"}
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:12:27: error: variadic function cannot use swiftcall calling convention","clang/test/SemaCXX/attr-swiftcall.cpp:13:33: error: variadic function cannot use swiftasynccall calling convention"}
Line 6,319: Line 6,321:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{p,7978,"/// CheckObjCString - Checks that the argument to the builtin\n/// CFString constructor is correct\n/// Note: It might also make sense to do the UTF-16 conversion here (would\n/// simplify the backend).\nbool Sema::CheckObjCString(Expr *Arg) {\n  // ...\n  if (!Literal || !Literal->isOrdinary()) {\n    Diag(Arg->getBeginLoc(), diag::err_cfstring_literal_not_string_constant) << Arg->getSourceRange();"},{C,56,"ExprResult Sema::ParseObjCStringLiteral(SourceLocation *AtLocs, ArrayRef<Expr *> Strings) {\n  // ...\n  // If we have a multi-part string, merge it all together.\n  if (Strings.size() != 1) {\n    // ...\n    for (Expr *E : Strings) {\n      // ...\n      // ObjC strings can\'t be wide or UTF.\n      if (!S->isOrdinary()) {\n        Diag(S->getBeginLoc(), diag::err_cfstring_literal_not_string_constant) << S->getSourceRange();"}},
[h]={{o,7978,"/// CheckObjCString - Checks that the argument to the builtin\n/// CFString constructor is correct\n/// Note: It might also make sense to do the UTF-16 conversion here (would\n/// simplify the backend).\nbool Sema::CheckObjCString(Expr *Arg) {\n  // ...\n  if (!Literal || !Literal->isOrdinary()) {\n    Diag(Arg->getBeginLoc(), diag::err_cfstring_literal_not_string_constant) << Arg->getSourceRange();"},{C,56,"ExprResult Sema::ParseObjCStringLiteral(SourceLocation *AtLocs, ArrayRef<Expr *> Strings) {\n  // ...\n  // If we have a multi-part string, merge it all together.\n  if (Strings.size() != 1) {\n    // ...\n    for (Expr *E : Strings) {\n      // ...\n      // ObjC strings can\'t be wide or UTF.\n      if (!S->isOrdinary()) {\n        Diag(S->getBeginLoc(), diag::err_cfstring_literal_not_string_constant) << S->getSourceRange();"}},
[j]={
[j]={
[ub]={"clang/test/Sema/builtins.c:31:13: error: CFString literal is not a string constant"}
[pb]={"clang/test/Sema/builtins.c:31:13: error: CFString literal is not a string constant"}
}
}
},
},
Line 6,331: Line 6,333:
[f]=a,
[f]=a,
[g]=mb,
[g]=mb,
[b]={M,1625925174,K,L},
[b]={N,1625925174,M,L},
[h]={{Jb,1691,"static void diagnoseInvalidUnicodeCodepointInIdentifier(DiagnosticsEngine &Diags, const LangOptions &LangOpts, uint32_t CodePoint, CharSourceRange Range, bool IsFirst) {\n  // ...\n  if (!IsFirst || InvalidOnlyAtStart) {\n  // ...\n  } else {\n    Diags.Report(Range.getBegin(), diag::err_character_not_allowed) << Range << codepointAsHexString(CodePoint) << FixItHint::CreateRemoval(Range);"}},
[h]={{Rb,1691,"static void diagnoseInvalidUnicodeCodepointInIdentifier(DiagnosticsEngine &Diags, const LangOptions &LangOpts, uint32_t CodePoint, CharSourceRange Range, bool IsFirst) {\n  // ...\n  if (!IsFirst || InvalidOnlyAtStart) {\n  // ...\n  } else {\n    Diags.Report(Range.getBegin(), diag::err_character_not_allowed) << Range << codepointAsHexString(CodePoint) << FixItHint::CreateRemoval(Range);"}},
[j]={
[j]={
["clang/test/Preprocessor/utf8-allowed-chars.c"]={"clang/test/Preprocessor/utf8-allowed-chars.c:21:13: error: unexpected character <U+0300>"}
["clang/test/Preprocessor/utf8-allowed-chars.c"]={"clang/test/Preprocessor/utf8-allowed-chars.c:21:13: error: unexpected character <U+0300>"}
Line 6,343: Line 6,345:
[f]=a,
[f]=a,
[g]=mb,
[g]=mb,
[b]={M,1625925174,K,L},
[b]={N,1625925174,M,L},
[h]={{Jb,1687,"static void diagnoseInvalidUnicodeCodepointInIdentifier(DiagnosticsEngine &Diags, const LangOptions &LangOpts, uint32_t CodePoint, CharSourceRange Range, bool IsFirst) {\n  // ...\n  if (!IsFirst || InvalidOnlyAtStart) {\n    Diags.Report(Range.getBegin(), diag::err_character_not_allowed_identifier) << Range << codepointAsHexString(CodePoint) << int(InvalidOnlyAtStart) << FixItHint::CreateRemoval(Range);"}},
[h]={{Rb,1687,"static void diagnoseInvalidUnicodeCodepointInIdentifier(DiagnosticsEngine &Diags, const LangOptions &LangOpts, uint32_t CodePoint, CharSourceRange Range, bool IsFirst) {\n  // ...\n  if (!IsFirst || InvalidOnlyAtStart) {\n    Diags.Report(Range.getBegin(), diag::err_character_not_allowed_identifier) << Range << codepointAsHexString(CodePoint) << int(InvalidOnlyAtStart) << FixItHint::CreateRemoval(Range);"}},
[j]={
[j]={
["clang/test/Parser/cxx11-user-defined-literals.cpp"]={"clang/test/Parser/cxx11-user-defined-literals.cpp:147:26: error: character <U+00A2> not allowed in an identifier","clang/test/Parser/cxx11-user-defined-literals.cpp:148:26: error: character <U+00A2> not allowed in an identifier","clang/test/Parser/cxx11-user-defined-literals.cpp:149:20: error: character <U+00A2> not allowed in an identifier","clang/test/Parser/cxx11-user-defined-literals.cpp:149:28: error: character <U+00A2> not allowed in an identifier"}
["clang/test/Parser/cxx11-user-defined-literals.cpp"]={"clang/test/Parser/cxx11-user-defined-literals.cpp:147:26: error: character <U+00A2> not allowed in an identifier","clang/test/Parser/cxx11-user-defined-literals.cpp:148:26: error: character <U+00A2> not allowed in an identifier","clang/test/Parser/cxx11-user-defined-literals.cpp:149:20: error: character <U+00A2> not allowed in an identifier","clang/test/Parser/cxx11-user-defined-literals.cpp:149:28: error: character <U+00A2> not allowed in an identifier"}
Line 6,355: Line 6,357:
[f]=a,
[f]=a,
[g]=mb,
[g]=mb,
[b]={"8b2b677f390d",1326889624,"Improves support for Unicode in character literals\n\nUpdates ProcessUCNExcape() for C++. C++11 allows...","Improves support for Unicode in character literals\n\nUpdates ProcessUCNExcape() for C++. C++11 allows UCNs in character\nand string literals that represent control characters and basic\nsource characters. Also C++03 allows UCNs that refer to surrogate\ncodepoints.\n\nUTF-8 sequences in character literals are now handled as single\nc-chars.\n\nAdded error for multiple characters in Unicode character literals.\n\nAdded errors for when a the execution charset encoding of a c-char\ncannot be represented as a single code unit in the associated\ncharacter type. Note that for the purposes of this error the asso-\nciated character type for a narrow character literal is char, not\nint, even though in C narrow character literals have type int.\n\nllvm-svn: 148389"},
[b]={"8b2b677f390d",1326889624,"Improves support for Unicode in character literals","Improves support for Unicode in character literals\n\nUpdates ProcessUCNExcape() for C++. C++11 allows UCNs in character\nand string literals that represent control characters and basic\nsource characters. Also C++03 allows UCNs that refer to surrogate\ncodepoints.\n\nUTF-8 sequences in character literals are now handled as single\nc-chars.\n\nAdded error for multiple characters in Unicode character literals.\n\nAdded errors for when a the execution charset encoding of a c-char\ncannot be represented as a single code unit in the associated\ncharacter type. Note that for the purposes of this error the asso-\nciated character type for a narrow character literal is char, not\nint, even though in C narrow character literals have type int.\n\nllvm-svn: 148389"},
[h]={{"clang/lib/Lex/LiteralSupport.cpp",1761,"/// \\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  while (begin != end) {\n    // Is this a span of non-escape characters?\n    if (begin[0] != \'\\\\\') {\n      // ...\n      if (res != llvm::conversionOK) {\n      // ...\n      } else {\n        for (; tmp_out_start < buffer_begin; ++tmp_out_start) {\n          if (*tmp_out_start > largest_character_for_kind) {\n            // ...\n            PP.Diag(Loc, diag::err_character_too_large);"},{"clang/lib/Lex/LiteralSupport.cpp",1777,"/// \\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  while (begin != end) {\n    // ...\n    // Is this a Universal Character Name escape?\n    if (begin[1] == \'u\' || begin[1] == \'U\' || begin[1] == \'N\') {\n      // ...\n      if (!ProcessUCNEscape(TokBegin, begin, end, *buffer_begin, UcnLen, FullSourceLoc(Loc, PP.getSourceManager()), &PP.getDiagnostics(), PP.getLangOpts(), true)) {\n      // ...\n      } else if (*buffer_begin > largest_character_for_kind) {\n        // ...\n        PP.Diag(Loc, diag::err_character_too_large);"}},
[h]={{"clang/lib/Lex/LiteralSupport.cpp",1761,"/// \\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  while (begin != end) {\n    // Is this a span of non-escape characters?\n    if (begin[0] != \'\\\\\') {\n      // ...\n      if (res != llvm::conversionOK) {\n      // ...\n      } else {\n        for (; tmp_out_start < buffer_begin; ++tmp_out_start) {\n          if (*tmp_out_start > largest_character_for_kind) {\n            // ...\n            PP.Diag(Loc, diag::err_character_too_large);"},{"clang/lib/Lex/LiteralSupport.cpp",1777,"/// \\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  while (begin != end) {\n    // ...\n    // Is this a Universal Character Name escape?\n    if (begin[1] == \'u\' || begin[1] == \'U\' || begin[1] == \'N\') {\n      // ...\n      if (!ProcessUCNEscape(TokBegin, begin, end, *buffer_begin, UcnLen, FullSourceLoc(Loc, PP.getSourceManager()), &PP.getDiagnostics(), PP.getLangOpts(), true)) {\n      // ...\n      } else if (*buffer_begin > largest_character_for_kind) {\n        // ...\n        PP.Diag(Loc, diag::err_character_too_large);"}},
[j]={
[j]={
Line 6,367: Line 6,369:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"620047011211",1352510297,"Diagnostic circular inheritance involving dependent base classes. We\nwould have diagnosed this at in...","Diagnostic circular inheritance involving dependent base classes. We\nwould have diagnosed this at instantiation time anyway, if only we\ndidn\'t hang on all of these test cases. Fixes <rdar://problem/12629723>\n\nllvm-svn: 167651"},
[b]={"620047011211",1352510297,"Diagnostic circular inheritance involving dependent base classes. We","Diagnostic circular inheritance involving dependent base classes. We\nwould have diagnosed this at instantiation time anyway, if only we\ndidn\'t hang on all of these test cases. Fixes <rdar://problem/12629723>\n\nllvm-svn: 167651"},
[h]={{r,2685,"/// 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 (BaseType->isDependentType()) {\n    // Make sure that we don\'t have circular inheritance among our dependent\n    // bases. For non-dependent bases, the check for completeness below handles\n    // this.\n    if (CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl()) {\n      if (BaseDecl->getCanonicalDecl() == Class->getCanonicalDecl() || ((BaseDecl = BaseDecl->getDefinition()) && findCircularInheritance(Class, BaseDecl))) {\n        Diag(BaseLoc, diag::err_circular_inheritance) << BaseType << Context.getTypeDeclType(Class);"}},
[h]={{s,2685,"/// 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 (BaseType->isDependentType()) {\n    // Make sure that we don\'t have circular inheritance among our dependent\n    // bases. For non-dependent bases, the check for completeness below handles\n    // this.\n    if (CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl()) {\n      if (BaseDecl->getCanonicalDecl() == Class->getCanonicalDecl() || ((BaseDecl = BaseDecl->getDefinition()) && findCircularInheritance(Class, BaseDecl))) {\n        Diag(BaseLoc, diag::err_circular_inheritance) << BaseType << Context.getTypeDeclType(Class);"}},
[j]={
[j]={
["clang/test/SemaTemplate/dependent-names.cpp"]={"clang/test/SemaTemplate/dependent-names.cpp:338:13: error: circular inheritance between \'Y<dim>\' and \'Y<dim>\'","clang/test/SemaTemplate/dependent-names.cpp:347:23: error: circular inheritance between \'C\' and \'rdar12629723::X::C\'","clang/test/SemaTemplate/dependent-names.cpp:360:27: error: circular inheritance between \'A\' and \'rdar12629723::X::B\'"}
["clang/test/SemaTemplate/dependent-names.cpp"]={"clang/test/SemaTemplate/dependent-names.cpp:338:13: error: circular inheritance between \'Y<dim>\' and \'Y<dim>\'","clang/test/SemaTemplate/dependent-names.cpp:347:23: error: circular inheritance between \'C\' and \'rdar12629723::X::C\'","clang/test/SemaTemplate/dependent-names.cpp:360:27: error: circular inheritance between \'A\' and \'rdar12629723::X::B\'"}
Line 6,379: Line 6,381:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e16cdb407a3f",1270241585,"diagnose declaring class extension after its implementation\n(radar 7822210).\n\nllvm-svn: 100226","diagnose declaring class extension after its implementation\n(radar 7822210).\n\nllvm-svn: 100226"},
[b]={"e16cdb407a3f",1270241585,"diagnose declaring class extension after its implementation","diagnose declaring class extension after its implementation\n(radar 7822210).\n\nllvm-svn: 100226"},
[h]={{G,1851,"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 (!CategoryName && IDecl->getImplementation()) {\n    Diag(ClassLoc, diag::err_class_extension_after_impl) << ClassName;"}},
[h]={{G,1851,"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 (!CategoryName && IDecl->getImplementation()) {\n    Diag(ClassLoc, diag::err_class_extension_after_impl) << ClassName;"}},
[j]={
[j]={
Line 6,391: Line 6,393:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"fc1eef48980e",1295718713,"Mark classes as final or explicit. Diagnose when a class marked \'final\' is used as a base.\n\nllvm-svn...","Mark classes as final or explicit. Diagnose when a class marked \'final\' is used as a base.\n\nllvm-svn: 124039"},
[b]={"fc1eef48980e",1295718713,"Mark classes as final or explicit. Diagnose when a class marked \'final\' is used as a base.","Mark classes as final or explicit. Diagnose when a class marked \'final\' is used as a base.\n\nllvm-svn: 124039"},
[h]={{r,2780,"/// 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  // C++ [class]p3:\n  //  If a class is marked final and it appears as a base-type-specifier in\n  //  base-clause, the program is ill-formed.\n  if (FinalAttr *FA = CXXBaseDecl->getAttr<FinalAttr>()) {\n    Diag(BaseLoc, diag::err_class_marked_final_used_as_base) << CXXBaseDecl->getDeclName() << FA->isSpelledAsSealed();"}},
[h]={{s,2780,"/// 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  // C++ [class]p3:\n  //  If a class is marked final and it appears as a base-type-specifier in\n  //  base-clause, the program is ill-formed.\n  if (FinalAttr *FA = CXXBaseDecl->getAttr<FinalAttr>()) {\n    Diag(BaseLoc, diag::err_class_marked_final_used_as_base) << CXXBaseDecl->getDeclName() << FA->isSpelledAsSealed();"}},
[j]={
[j]={
["clang/test/CXX/class/p2-0x.cpp"]={"clang/test/CXX/class/p2-0x.cpp:5:11: error: base \'A\' is marked \'final\'","clang/test/CXX/class/p2-0x.cpp:12:12: error: base \'A\' is marked \'final\'","clang/test/CXX/class/p2-0x.cpp:14:33: error: base \'A\' is marked \'final\'","clang/test/CXX/class/p2-0x.cpp:25:12: error: base \'A\' is marked \'final\'"}
["clang/test/CXX/class/p2-0x.cpp"]={"clang/test/CXX/class/p2-0x.cpp:5:11: error: base \'A\' is marked \'final\'","clang/test/CXX/class/p2-0x.cpp:12:12: error: base \'A\' is marked \'final\'","clang/test/CXX/class/p2-0x.cpp:14:33: error: base \'A\' is marked \'final\'","clang/test/CXX/class/p2-0x.cpp:25:12: error: base \'A\' is marked \'final\'"}
Line 6,402: Line 6,404:
[e]="template template parameter requires \'class\'(?:| or \'typename\') after the parameter list",
[e]="template template parameter requires \'class\'(?:| or \'typename\') after the parameter list",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"cbd8125a6ad2",1333690003,"Restrict fixit for missing \'class\' in template template parameters.\n\nBased on Doug\'s feedback to r15...","Restrict fixit for missing \'class\' in template template parameters.\n\nBased on Doug\'s feedback to r153887 this omits the FixIt if the following token\nisn\'t syntactically valid for the context. (not a comma, \'...\', identifier,\n\'>\', or \'>>\')\n\nThere\'s a bunch of work to handle the \'>>\' case, but it makes for a much more\npleasant diagnostic in this case.\n\nllvm-svn: 154163"},
[b]={"cbd8125a6ad2",1333690003,"Restrict fixit for missing \'class\' in template template parameters.","Restrict fixit for missing \'class\' in template template parameters.\n\nBased on Doug\'s feedback to r153887 this omits the FixIt if the following token\nisn\'t syntactically valid for the context. (not a comma, \'...\', identifier,\n\'>\', or \'>>\')\n\nThere\'s a bunch of work to handle the \'>>\' case, but it makes for a much more\npleasant diagnostic in this case.\n\nllvm-svn: 154163"},
[h]={{bc,941,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///      type-parameter:    [C++ temp.param]\n///        template-head type-parameter-key ...[opt] identifier[opt]\n///        template-head type-parameter-key identifier[opt] = id-expression\n///      type-parameter-key:\n///        \'class\'\n///        \'typename\'      [C++1z]\n///      template-head:    [C++2a]\n///        \'template\' \'<\' template-parameter-list \'>\'\n///            requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  // ...\n  // Provide an ExtWarn if the C++1z feature of using \'typename\' here is used.\n  // Generate a meaningful error if the user forgot to put class before the\n  // identifier, comma, or greater. Provide a fixit if the identifier, comma,\n  // or greater appear immediately or after \'struct\'. In the latter case,\n  // replace the keyword with \'class\'.\n  if (!TryConsumeToken(tok::kw_class)) {\n    // ...\n    if (Tok.is(tok::kw_typename)) {\n    // ...\n    } else if (Next.isOneOf(tok::identifier, tok::comma, tok::greater, tok::greatergreater, tok::ellipsis)) {\n      Diag(Tok.getLocation(), diag::err_class_on_template_template_param) << getLangOpts().CPlusPlus17 << (Replace ? FixItHint::CreateReplacement(Tok.getLocation(), \"class\") : FixItHint::CreateInsertion(Tok.getLocation(), \"class \"));"},{bc,947,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///      type-parameter:    [C++ temp.param]\n///        template-head type-parameter-key ...[opt] identifier[opt]\n///        template-head type-parameter-key identifier[opt] = id-expression\n///      type-parameter-key:\n///        \'class\'\n///        \'typename\'      [C++1z]\n///      template-head:    [C++2a]\n///        \'template\' \'<\' template-parameter-list \'>\'\n///            requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  // ...\n  // Provide an ExtWarn if the C++1z feature of using \'typename\' here is used.\n  // Generate a meaningful error if the user forgot to put class before the\n  // identifier, comma, or greater. Provide a fixit if the identifier, comma,\n  // or greater appear immediately or after \'struct\'. In the latter case,\n  // replace the keyword with \'class\'.\n  if (!TryConsumeToken(tok::kw_class)) {\n    // ...\n    if (Tok.is(tok::kw_typename)) {\n    // ...\n    } else if (Next.isOneOf(tok::identifier, tok::comma, tok::greater, tok::greatergreater, tok::ellipsis)) {\n    // ...\n    } else\n      Diag(Tok.getLocation(), diag::err_class_on_template_template_param) << getLangOpts().CPlusPlus17;"}},
[h]={{Ub,941,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///      type-parameter:    [C++ temp.param]\n///        template-head type-parameter-key ...[opt] identifier[opt]\n///        template-head type-parameter-key identifier[opt] = id-expression\n///      type-parameter-key:\n///        \'class\'\n///        \'typename\'      [C++1z]\n///      template-head:    [C++2a]\n///        \'template\' \'<\' template-parameter-list \'>\'\n///            requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  // ...\n  // Provide an ExtWarn if the C++1z feature of using \'typename\' here is used.\n  // Generate a meaningful error if the user forgot to put class before the\n  // identifier, comma, or greater. Provide a fixit if the identifier, comma,\n  // or greater appear immediately or after \'struct\'. In the latter case,\n  // replace the keyword with \'class\'.\n  if (!TryConsumeToken(tok::kw_class)) {\n    // ...\n    if (Tok.is(tok::kw_typename)) {\n    // ...\n    } else if (Next.isOneOf(tok::identifier, tok::comma, tok::greater, tok::greatergreater, tok::ellipsis)) {\n      Diag(Tok.getLocation(), diag::err_class_on_template_template_param) << getLangOpts().CPlusPlus17 << (Replace ? FixItHint::CreateReplacement(Tok.getLocation(), \"class\") : FixItHint::CreateInsertion(Tok.getLocation(), \"class \"));"},{Ub,947,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///      type-parameter:    [C++ temp.param]\n///        template-head type-parameter-key ...[opt] identifier[opt]\n///        template-head type-parameter-key identifier[opt] = id-expression\n///      type-parameter-key:\n///        \'class\'\n///        \'typename\'      [C++1z]\n///      template-head:    [C++2a]\n///        \'template\' \'<\' template-parameter-list \'>\'\n///            requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  // ...\n  // Provide an ExtWarn if the C++1z feature of using \'typename\' here is used.\n  // Generate a meaningful error if the user forgot to put class before the\n  // identifier, comma, or greater. Provide a fixit if the identifier, comma,\n  // or greater appear immediately or after \'struct\'. In the latter case,\n  // replace the keyword with \'class\'.\n  if (!TryConsumeToken(tok::kw_class)) {\n    // ...\n    if (Tok.is(tok::kw_typename)) {\n    // ...\n    } else if (Next.isOneOf(tok::identifier, tok::comma, tok::greater, tok::greatergreater, tok::ellipsis)) {\n    // ...\n    } else\n      Diag(Tok.getLocation(), diag::err_class_on_template_template_param) << getLangOpts().CPlusPlus17;"}},
[j]={
[j]={
[Kb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:12:29: error: template template parameter requires \'class\' or \'typename\' after the parameter list"}
[Nb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:12:29: error: template template parameter requires \'class\' or \'typename\' after the parameter list"}
}
}
},
},
Line 6,415: Line 6,417:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"2b2b1a920087",1467154909,"ObjC Class Property: diagnostics when accessing a class property using instance.\n\nWhen a class prope...","ObjC Class Property: diagnostics when accessing a class property using instance.\n\nWhen a class property is accessed with an object instance, before this commit,\nwe try to apply a typo correction of the same property:\nproperty \'c\' not found on object of type \'A *\'; did you mean \'c\'?\n\nWith this commit, we correctly emit a diagnostics:\nproperty \'c\' is a class property; did you mean to access it with class \'A\'?\n\nrdar://26866973\n\nllvm-svn: 274076"},
[b]={"2b2b1a920087",1467154909,"ObjC Class Property: diagnostics when accessing a class property using instance.","ObjC Class Property: diagnostics when accessing a class property using instance.\n\nWhen a class property is accessed with an object instance, before this commit,\nwe try to apply a typo correction of the same property:\nproperty \'c\' not found on object of type \'A *\'; did you mean \'c\'?\n\nWith this commit, we correctly emit a diagnostics:\nproperty \'c\' is a class property; did you mean to access it with class \'A\'?\n\nrdar://26866973\n\nllvm-svn: 274076"},
[h]={{C,2117,"/// 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      if (ChosenDecl && isa<ObjCPropertyDecl>(ChosenDecl))\n        if (cast<ObjCPropertyDecl>(ChosenDecl)->isClassProperty()) {\n          // ...\n          Diag(MemberLoc, diag::err_class_property_found) << MemberName << OPT->getInterfaceDecl()->getName() << FixItHint::CreateReplacement(BaseExpr->getSourceRange(), OPT->getInterfaceDecl()->getName());"}},
[h]={{C,2117,"/// 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      if (ChosenDecl && isa<ObjCPropertyDecl>(ChosenDecl))\n        if (cast<ObjCPropertyDecl>(ChosenDecl)->isClassProperty()) {\n          // ...\n          Diag(MemberLoc, diag::err_class_property_found) << MemberName << OPT->getInterfaceDecl()->getName() << FixItHint::CreateReplacement(BaseExpr->getSourceRange(), OPT->getInterfaceDecl()->getName());"}},
[j]={
[j]={
Line 6,427: Line 6,429:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"2ed6ceba1d90",1238027057,"Check that the access specifier of a member redeclaration is the same as the original declaration.\n\n...","Check that the access specifier of a member redeclaration is the same as the original declaration.\n\nllvm-svn: 67722"},
[b]={"2ed6ceba1d90",1238027057,"Check that the access specifier of a member redeclaration is the same as the original declaration.","Check that the access specifier of a member redeclaration is the same as the original declaration.\n\nllvm-svn: 67722"},
[h]={{U,53,"/// SetMemberAccessSpecifier - Set the access specifier of a member.\n/// Returns true on error (when the previous member decl access specifier\n/// is different from the new member decl access specifier).\nbool Sema::SetMemberAccessSpecifier(NamedDecl *MemberDecl, NamedDecl *PrevMemberDecl, AccessSpecifier LexicalAS) {\n  // ...\n  // C++ [class.access.spec]p3: When a member is redeclared its access\n  // specifier must be same as its initial declaration.\n  if (LexicalAS != AS_none && LexicalAS != PrevMemberDecl->getAccess()) {\n    Diag(MemberDecl->getLocation(), diag::err_class_redeclared_with_different_access) << MemberDecl << LexicalAS;"}},
[h]={{W,53,"/// SetMemberAccessSpecifier - Set the access specifier of a member.\n/// Returns true on error (when the previous member decl access specifier\n/// is different from the new member decl access specifier).\nbool Sema::SetMemberAccessSpecifier(NamedDecl *MemberDecl, NamedDecl *PrevMemberDecl, AccessSpecifier LexicalAS) {\n  // ...\n  // C++ [class.access.spec]p3: When a member is redeclared its access\n  // specifier must be same as its initial declaration.\n  if (LexicalAS != AS_none && LexicalAS != PrevMemberDecl->getAccess()) {\n    Diag(MemberDecl->getLocation(), diag::err_class_redeclared_with_different_access) << MemberDecl << LexicalAS;"}},
[j]={
[j]={
["clang/test/SemaCXX/access.cpp"]={"clang/test/SemaCXX/access.cpp:7:12: error: \'S\' redeclared with \'public\' access","clang/test/SemaCXX/access.cpp:14:11: error: \'C\' redeclared with \'private\' access","clang/test/SemaCXX/access.cpp:22:33: error: \'A\' redeclared with \'private\' access","clang/test/SemaCXX/access.cpp:32:11: error: \'X\' redeclared with \'public\' access"}
["clang/test/SemaCXX/access.cpp"]={"clang/test/SemaCXX/access.cpp:7:12: error: \'S\' redeclared with \'public\' access","clang/test/SemaCXX/access.cpp:14:11: error: \'C\' redeclared with \'private\' access","clang/test/SemaCXX/access.cpp:22:33: error: \'A\' redeclared with \'private\' access","clang/test/SemaCXX/access.cpp:32:11: error: \'X\' redeclared with \'public\' access"}
Line 6,439: Line 6,441:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"2c91c3b7af7c",1559189341,"Add the `objc_class_stub` attribute.\n\nSwift requires certain classes to be not just initialized lazi...","Add the `objc_class_stub` attribute.\n\nSwift requires certain classes to be not just initialized lazily on first\nuse, but actually allocated lazily using information that is only available\nat runtime.  This is incompatible with ObjC class initialization, or at least\nnot efficiently compatible, because there is no meaningful class symbol\nthat can be put in a class-ref variable at load time.  This leaves ObjC\ncode unable to access such classes, which is undesirable.\n\nobjc_class_stub says that class references should be resolved by calling\na new ObjC runtime function with a pointer to a new \"class stub\" structure.\nNon-ObjC compilers (like Swift) can simply emit this structure when ObjC\ninterop is required for a class that cannot be statically allocated,\nthen apply this attribute to the `@interface` in the generated ObjC header\nfor the class.\n\nThis attribute can be thought of as a generalization of the existing\n`objc_runtime_visible` attribute which permits more efficient class\nresolution as well as supporting the additon of categories to the class.\nSubclassing these classes from ObjC is currently not allowed.\n\nPatch by Slava Pestov!\n\nllvm-svn: 362054"},
[b]={"2c91c3b7af7c",1559189341,"Add the `objc_class_stub` attribute.","Add the `objc_class_stub` attribute.\n\nSwift requires certain classes to be not just initialized lazily on first\nuse, but actually allocated lazily using information that is only available\nat runtime.  This is incompatible with ObjC class initialization, or at least\nnot efficiently compatible, because there is no meaningful class symbol\nthat can be put in a class-ref variable at load time.  This leaves ObjC\ncode unable to access such classes, which is undesirable.\n\nobjc_class_stub says that class references should be resolved by calling\na new ObjC runtime function with a pointer to a new \"class stub\" structure.\nNon-ObjC compilers (like Swift) can simply emit this structure when ObjC\ninterop is required for a class that cannot be statically allocated,\nthen apply this attribute to the `@interface` in the generated ObjC header\nfor the class.\n\nThis attribute can be thought of as a generalization of the existing\n`objc_runtime_visible` attribute which permits more efficient class\nresolution as well as supporting the additon of categories to the class.\nSubclassing these classes from ObjC is currently not allowed.\n\nPatch by Slava Pestov!\n\nllvm-svn: 362054"},
[h]={{G,4204,"// 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    // ...\n    if (IntfDecl->hasAttr<ObjCClassStubAttr>() && !IntfDecl->hasAttr<ObjCSubclassingRestrictedAttr>())\n      Diag(IntfDecl->getLocation(), diag::err_class_stub_subclassing_mismatch);"}},
[h]={{G,4204,"// 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    // ...\n    if (IntfDecl->hasAttr<ObjCClassStubAttr>() && !IntfDecl->hasAttr<ObjCSubclassingRestrictedAttr>())\n      Diag(IntfDecl->getLocation(), diag::err_class_stub_subclassing_mismatch);"}},
[j]={
[j]={
Line 6,451: Line 6,453:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={Pb,1534346725,Ob,Nb},
[b]={Kb,1534346725,Cb,Pb},
[h]={{"clang/lib/Driver/ToolChains/Clang.cpp",5263,"#endif\n  // ...\n  if (Args.hasArg(options::OPT_mcmse) && !Args.hasArg(options::OPT_fallow_unsupported)) {\n    if (IsROPI)\n      D.Diag(diag::err_cmse_pi_are_incompatible) << IsROPI;"},{"clang/lib/Driver/ToolChains/Clang.cpp",5265,"#endif\n  // ...\n  if (Args.hasArg(options::OPT_mcmse) && !Args.hasArg(options::OPT_fallow_unsupported)) {\n    // ...\n    if (IsRWPI)\n      D.Diag(diag::err_cmse_pi_are_incompatible) << !IsRWPI;"}}
[h]={{"clang/lib/Driver/ToolChains/Clang.cpp",5263,"#endif\n  // ...\n  if (Args.hasArg(options::OPT_mcmse) && !Args.hasArg(options::OPT_fallow_unsupported)) {\n    if (IsROPI)\n      D.Diag(diag::err_cmse_pi_are_incompatible) << IsROPI;"},{"clang/lib/Driver/ToolChains/Clang.cpp",5265,"#endif\n  // ...\n  if (Args.hasArg(options::OPT_mcmse) && !Args.hasArg(options::OPT_fallow_unsupported)) {\n    // ...\n    if (IsRWPI)\n      D.Diag(diag::err_cmse_pi_are_incompatible) << !IsRWPI;"}}
},
},
Line 6,460: Line 6,462:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"65b13779118c",1389315228,"ObjectiveC. 1) Warn when @dynamic (as well as synthesize) \nproperty has the naming convention that i...","ObjectiveC. 1) Warn when @dynamic (as well as synthesize) \nproperty has the naming convention that implies \'ownership\'.\n2) improve on diagnostic and make it property specific.\n3) fix the line number in the case of default property\nsynthesis. // rdar://15757510\n\nllvm-svn: 198905"},
[b]={"65b13779118c",1389315228,"ObjectiveC. 1) Warn when @dynamic (as well as synthesize) ","ObjectiveC. 1) Warn when @dynamic (as well as synthesize) \nproperty has the naming convention that implies \'ownership\'.\n2) improve on diagnostic and make it property specific.\n3) fix the line number in the case of default property\nsynthesis. // rdar://15757510\n\nllvm-svn: 198905"},
[h]={{P,2275,"void Sema::DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D) {\n  // ...\n  for (const auto *PID : D->property_impls()) {\n    // ...\n    if (PD && !PD->hasAttr<NSReturnsNotRetainedAttr>() && !PD->isClassProperty()) {\n      // ...\n      if (family == OMF_alloc || family == OMF_copy || family == OMF_mutableCopy || family == OMF_new) {\n        if (getLangOpts().ObjCAutoRefCount)\n          Diag(PD->getLocation(), diag::err_cocoa_naming_owned_rule);"}},
[h]={{Q,2275,"void Sema::DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D) {\n  // ...\n  for (const auto *PID : D->property_impls()) {\n    // ...\n    if (PD && !PD->hasAttr<NSReturnsNotRetainedAttr>() && !PD->isClassProperty()) {\n      // ...\n      if (family == OMF_alloc || family == OMF_copy || family == OMF_mutableCopy || family == OMF_new) {\n        if (getLangOpts().ObjCAutoRefCount)\n          Diag(PD->getLocation(), diag::err_cocoa_naming_owned_rule);"}},
[j]={
[j]={
["clang/test/SemaObjC/arc-decls.m"]={"clang/test/SemaObjC/arc-decls.m:70:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:71:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:72:21: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:74:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:75:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:76:21: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:103:33: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:93:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:98:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:100:23: error: property follows Cocoa naming convention for returning \'owned\' objects"}
["clang/test/SemaObjC/arc-decls.m"]={"clang/test/SemaObjC/arc-decls.m:70:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:71:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:72:21: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:74:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:75:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:76:21: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:103:33: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:93:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:98:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:100:23: error: property follows Cocoa naming convention for returning \'owned\' objects"}
Line 6,472: Line 6,474:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{Q,2231,"ExprResult Sema::CheckObjCForCollectionOperand(SourceLocation forLoc, Expr *collection) {\n  // ...\n  if (!pointerType)\n    return Diag(forLoc, diag::err_collection_expr_type) << collection->getType() << collection->getSourceRange();"}},
[h]={{R,2231,"ExprResult Sema::CheckObjCForCollectionOperand(SourceLocation forLoc, Expr *collection) {\n  // ...\n  if (!pointerType)\n    return Diag(forLoc, diag::err_collection_expr_type) << collection->getType() << collection->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaObjCXX/instantiate-stmt.mm"]={"clang/test/SemaObjCXX/instantiate-stmt.mm:40:3: error: the type \'vector\' is not a pointer to a fast-enumerable object","clang/test/SemaObjCXX/instantiate-stmt.mm:46:3: error: the type \'vector\' is not a pointer to a fast-enumerable object","clang/test/SemaObjCXX/instantiate-stmt.mm:50:3: error: the type \'vector\' is not a pointer to a fast-enumerable object","clang/test/SemaObjCXX/instantiate-stmt.mm:54:3: error: the type \'vector\' is not a pointer to a fast-enumerable object"}
["clang/test/SemaObjCXX/instantiate-stmt.mm"]={"clang/test/SemaObjCXX/instantiate-stmt.mm:40:3: error: the type \'vector\' is not a pointer to a fast-enumerable object","clang/test/SemaObjCXX/instantiate-stmt.mm:46:3: error: the type \'vector\' is not a pointer to a fast-enumerable object","clang/test/SemaObjCXX/instantiate-stmt.mm:50:3: error: the type \'vector\' is not a pointer to a fast-enumerable object","clang/test/SemaObjCXX/instantiate-stmt.mm:54:3: error: the type \'vector\' is not a pointer to a fast-enumerable object"}
Line 6,484: Line 6,486:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"326057d0da96",1434699981,"[ATTRIBUTE] Support base vector types of __attribute__((mode)), patch by Alexey Frolov\n\nBase type of...","[ATTRIBUTE] Support base vector types of __attribute__((mode)), patch by Alexey Frolov\n\nBase type of attribute((mode)) can actually be a vector type.\nThe patch is to distinguish between base type and base element type.\n\nThis fixes http://llvm.org/PR17453.\nDifferential Revision: http://reviews.llvm.org/D10058\n\nllvm-svn: 240125"},
[b]={"326057d0da96",1434699981,"[ATTRIBUTE] Support base vector types of __attribute__((mode)), patch by Alexey Frolov","[ATTRIBUTE] Support base vector types of __attribute__((mode)), patch by Alexey Frolov\n\nBase type of attribute((mode)) can actually be a vector type.\nThe patch is to distinguish between base type and base element type.\n\nThis fixes http://llvm.org/PR17453.\nDifferential Revision: http://reviews.llvm.org/D10058\n\nllvm-svn: 240125"},
[h]={{l,4853,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (VectorSize.getBoolValue()) {\n  // ...\n  } else if (const auto *OldVT = OldTy->getAs<VectorType>()) {\n    // Complex machine mode does not support base vector types.\n    if (ComplexMode) {\n      Diag(AttrLoc, diag::err_complex_mode_vector_type);"}},
[h]={{l,4853,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (VectorSize.getBoolValue()) {\n  // ...\n  } else if (const auto *OldVT = OldTy->getAs<VectorType>()) {\n    // Complex machine mode does not support base vector types.\n    if (ComplexMode) {\n      Diag(AttrLoc, diag::err_complex_mode_vector_type);"}},
[j]={
[j]={
Line 6,496: Line 6,498:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"7fa8af0abee8",1536175360,"Forbid address spaces on compound literals in local scope.\n\nPatch by Bevin Hansson!\n\nllvm-svn: 34149...","Forbid address spaces on compound literals in local scope.\n\nPatch by Bevin Hansson!\n\nllvm-svn: 341491"},
[b]={"7fa8af0abee8",1536175360,"Forbid address spaces on compound literals in local scope.","Forbid address spaces on compound literals in local scope.\n\nPatch by Bevin Hansson!\n\nllvm-svn: 341491"},
[h]={{u,7793,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n  // ...\n  if (isFileScope) {\n  // ...\n  } else if (literalType.getAddressSpace() != LangAS::opencl_private && literalType.getAddressSpace() != LangAS::Default) {\n    // ...\n    Diag(LParenLoc, diag::err_compound_literal_with_address_space) << SourceRange(LParenLoc, LiteralExpr->getSourceRange().getEnd());"}},
[h]={{v,7793,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n  // ...\n  if (isFileScope) {\n  // ...\n  } else if (literalType.getAddressSpace() != LangAS::opencl_private && literalType.getAddressSpace() != LangAS::Default) {\n    // ...\n    Diag(LParenLoc, diag::err_compound_literal_with_address_space) << SourceRange(LParenLoc, LiteralExpr->getSourceRange().getEnd());"}},
[j]={
[j]={
["clang/test/Sema/address_spaces.c"]={"clang/test/Sema/address_spaces.c:90:3: error: compound literal in function scope may not be qualified with an address space","clang/test/Sema/address_spaces.c:91:3: error: compound literal in function scope may not be qualified with an address space","clang/test/Sema/address_spaces.c:92:3: error: compound literal in function scope may not be qualified with an address space"}
["clang/test/Sema/address_spaces.c"]={"clang/test/Sema/address_spaces.c:90:3: error: compound literal in function scope may not be qualified with an address space","clang/test/Sema/address_spaces.c:91:3: error: compound literal in function scope may not be qualified with an address space","clang/test/Sema/address_spaces.c:92:3: error: compound literal in function scope may not be qualified with an address space"}
Line 6,508: Line 6,510:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"63168c75333b",1328871911,"PR11684, core issue 1417:\n\no Correct the handling of the restrictions on usage of cv-qualified and\n ...","PR11684, core issue 1417:\n\no Correct the handling of the restrictions on usage of cv-qualified and\n  ref-qualified function types.\no Fix a bug where such types were rejected in template type parameter default\n  arguments, due to such arguments not being treated as a template type arg\n  context.\no Remove the ExtWarn for usage of such types as template arguments; that was\n  a standard defect, not a GCC extension.\no Improve the wording and unify the code for diagnosing cv-qualifiers with the\n  code for diagnosing ref-qualifiers.\n\nllvm-svn: 150244"},
[b]={"63168c75333b",1328871911,"PR11684, core issue 1417:","PR11684, core issue 1417:\n\no Correct the handling of the restrictions on usage of cv-qualified and\n  ref-qualified function types.\no Fix a bug where such types were rejected in template type parameter default\n  arguments, due to such arguments not being treated as a template type arg\n  context.\no Remove the ExtWarn for usage of such types as template arguments; that was\n  a standard defect, not a GCC extension.\no Improve the wording and unify the code for diagnosing cv-qualifiers with the\n  code for diagnosing ref-qualifiers.\n\nllvm-svn: 150244"},
[h]={{o,2133,"/// Check whether the type T is a qualified function type, and if it is,\n/// diagnose that it cannot be contained within the given kind of declarator.\nstatic bool checkQualifiedFunction(Sema &S, QualType T, SourceLocation Loc, QualifiedFunctionKind QFK) {\n  // ...\n  S.Diag(Loc, diag::err_compound_qualified_function_type) << QFK << isa<FunctionType>(T.IgnoreParens()) << T << getFunctionQualifiersAsString(FPT);"}},
[h]={{n,2133,"/// Check whether the type T is a qualified function type, and if it is,\n/// diagnose that it cannot be contained within the given kind of declarator.\nstatic bool checkQualifiedFunction(Sema &S, QualType T, SourceLocation Loc, QualifiedFunctionKind QFK) {\n  // ...\n  S.Diag(Loc, diag::err_compound_qualified_function_type) << QFK << isa<FunctionType>(T.IgnoreParens()) << T << getFunctionQualifiersAsString(FPT);"}},
[j]={
[j]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:24:13: error: pointer to function type \'void () const\' cannot have \'const\' qualifier","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:25:13: error: reference to function type \'void () const\' cannot have \'const\' qualifier"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:24:13: error: pointer to function type \'void () const\' cannot have \'const\' qualifier","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:25:13: error: reference to function type \'void () const\' cannot have \'const\' qualifier"}
Line 6,520: Line 6,522:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"d7aae33a9513",1562793949,"[Concepts] Concept definitions (D40381)\n\nFirst in a series of patches to land C++2a Concepts support...","[Concepts] Concept definitions (D40381)\n\nFirst in a series of patches to land C++2a Concepts support.\nThis patch adds AST and parsing support for concept-declarations.\n\nllvm-svn: 365699"},
[b]={"d7aae33a9513",1562793949,"[Concepts] Concept definitions (D40381)","[Concepts] Concept definitions (D40381)\n\nFirst in a series of patches to land C++2a Concepts support.\nThis patch adds AST and parsing support for concept-declarations.\n\nllvm-svn: 365699"},
[h]={{Yb,8990,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  // ...\n  if (!DC->getRedeclContext()->isFileContext()) {\n    Diag(NameLoc, diag::err_concept_decls_may_only_appear_in_global_namespace_scope);"}},
[h]={{ac,8990,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  // ...\n  if (!DC->getRedeclContext()->isFileContext()) {\n    Diag(NameLoc, diag::err_concept_decls_may_only_appear_in_global_namespace_scope);"}},
[j]={
[j]={
[Kb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:18:32: error: concept declarations may only appear in global or namespace scope"}
[Nb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:18:32: error: concept declarations may only appear in global or namespace scope"}
}
}
},
},
Line 6,532: Line 6,534:
[f]=a,
[f]=a,
[g]="Concepts Issue",
[g]="Concepts Issue",
[b]={"d7aae33a9513",1562793949,"[Concepts] Concept definitions (D40381)\n\nFirst in a series of patches to land C++2a Concepts support...","[Concepts] Concept definitions (D40381)\n\nFirst in a series of patches to land C++2a Concepts support.\nThis patch adds AST and parsing support for concept-declarations.\n\nllvm-svn: 365699"},
[b]={"d7aae33a9513",1562793949,"[Concepts] Concept definitions (D40381)","[Concepts] Concept definitions (D40381)\n\nFirst in a series of patches to land C++2a Concepts support.\nThis patch adds AST and parsing support for concept-declarations.\n\nllvm-svn: 365699"},
[h]={{bc,417,"/// \\brief Parse a single declaration that declares a concept.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseConceptDefinition(const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd) {\n  // ...\n  if (SS.isNotEmpty())\n    Diag(SS.getBeginLoc(), diag::err_concept_definition_not_identifier);"},{bc,431,"/// \\brief Parse a single declaration that declares a concept.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseConceptDefinition(const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd) {\n  // ...\n  if (Result.getKind() != UnqualifiedIdKind::IK_Identifier) {\n    Diag(Result.getBeginLoc(), diag::err_concept_definition_not_identifier);"}},
[h]={{Ub,417,"/// \\brief Parse a single declaration that declares a concept.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseConceptDefinition(const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd) {\n  // ...\n  if (SS.isNotEmpty())\n    Diag(SS.getBeginLoc(), diag::err_concept_definition_not_identifier);"},{Ub,431,"/// \\brief Parse a single declaration that declares a concept.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseConceptDefinition(const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd) {\n  // ...\n  if (Result.getKind() != UnqualifiedIdKind::IK_Identifier) {\n    Diag(Result.getBeginLoc(), diag::err_concept_definition_not_identifier);"}},
[j]={
[j]={
[Kb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:58:20: error: name defined in concept definition must be an identifier","clang/test/Parser/cxx2a-concept-declaration.cpp:61:30: error: name defined in concept definition must be an identifier","clang/test/Parser/cxx2a-concept-declaration.cpp:70:30: error: name defined in concept definition must be an identifier"}
[Nb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:58:20: error: name defined in concept definition must be an identifier","clang/test/Parser/cxx2a-concept-declaration.cpp:61:30: error: name defined in concept definition must be an identifier","clang/test/Parser/cxx2a-concept-declaration.cpp:70:30: error: name defined in concept definition must be an identifier"}
}
}
},
},
Line 6,544: Line 6,546:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"936de9d66600",1524624146,"[c++2a] [concepts] Add rudimentary parsing support for template concept declarations\n\n\nThis patch is...","[c++2a] [concepts] Add rudimentary parsing support for template concept declarations\n\n\nThis patch is a tweak of changyu\'s patch: https://reviews.llvm.org/D40381. It differs in that the recognition of the \'concept\' token is moved into the machinery that recognizes declaration-specifiers - this allows us to leverage the attribute handling machinery more seamlessly.\n\nSee the test file to get a sense of the basic parsing that this patch supports. \n\nThere is much more work to be done before concepts are usable...\n\nThanks Changyu!\n\nllvm-svn: 330794"},
[b]={"936de9d66600",1524624146,"[c++2a] [concepts] Add rudimentary parsing support for template concept declarations","[c++2a] [concepts] Add rudimentary parsing support for template concept declarations\n\n\nThis patch is a tweak of changyu\'s patch: https://reviews.llvm.org/D40381. It differs in that the recognition of the \'concept\' token is moved into the machinery that recognizes declaration-specifiers - this allows us to leverage the attribute handling machinery more seamlessly.\n\nSee the test file to get a sense of the basic parsing that this patch supports. \n\nThere is much more work to be done before concepts are usable...\n\nThanks Changyu!\n\nllvm-svn: 330794"},
[h]={{Yb,8995,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  // ...\n  if (TemplateParameterLists.size() > 1) {\n    Diag(NameLoc, diag::err_concept_extra_headers);"}},
[h]={{ac,8995,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  // ...\n  if (TemplateParameterLists.size() > 1) {\n    Diag(NameLoc, diag::err_concept_extra_headers);"}},
[j]={
[j]={
[Kb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:27:9: error: extraneous template parameter list in concept definition"}
[Nb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:27:9: error: extraneous template parameter list in concept definition"}
}
}
},
},
Line 6,556: Line 6,558:
[f]=a,
[f]=a,
[g]="Concepts Issue",
[g]="Concepts Issue",
[b]={"9061928ebbb1",1669659698,"Stop accepting \'bool\' in a concept declaration as an extension.\n\nWe no longer support the concepts-t...","Stop accepting \'bool\' in a concept declaration as an extension.\n\nWe no longer support the concepts-ts flag for this release, so stop\nsupporting this concepts-ts compat extension as well."},
[b]={"9061928ebbb1",1669659698,"Stop accepting \'bool\' in a concept declaration as an extension.","Stop accepting \'bool\' in a concept declaration as an extension.\n\nWe no longer support the concepts-ts flag for this release, so stop\nsupporting this concepts-ts compat extension as well."},
[h]={{bc,399,"/// \\brief Parse a single declaration that declares a concept.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseConceptDefinition(const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd) {\n  // ...\n  if (TryConsumeToken(tok::kw_bool, BoolKWLoc))\n    Diag(Tok.getLocation(), diag::err_concept_legacy_bool_keyword) << FixItHint::CreateRemoval(SourceLocation(BoolKWLoc));"}},
[h]={{Ub,399,"/// \\brief Parse a single declaration that declares a concept.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseConceptDefinition(const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd) {\n  // ...\n  if (TryConsumeToken(tok::kw_bool, BoolKWLoc))\n    Diag(Tok.getLocation(), diag::err_concept_legacy_bool_keyword) << FixItHint::CreateRemoval(SourceLocation(BoolKWLoc));"}},
[j]={
[j]={
[Kb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:52:35: error: ISO C++ does not permit the \'bool\' keyword after \'concept\'"}
[Nb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:52:35: error: ISO C++ does not permit the \'bool\' keyword after \'concept\'"}
}
}
},
},
Line 6,568: Line 6,570:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"936de9d66600",1524624146,"[c++2a] [concepts] Add rudimentary parsing support for template concept declarations\n\n\nThis patch is...","[c++2a] [concepts] Add rudimentary parsing support for template concept declarations\n\n\nThis patch is a tweak of changyu\'s patch: https://reviews.llvm.org/D40381. It differs in that the recognition of the \'concept\' token is moved into the machinery that recognizes declaration-specifiers - this allows us to leverage the attribute handling machinery more seamlessly.\n\nSee the test file to get a sense of the basic parsing that this patch supports. \n\nThere is much more work to be done before concepts are usable...\n\nThanks Changyu!\n\nllvm-svn: 330794"},
[b]={"936de9d66600",1524624146,"[c++2a] [concepts] Add rudimentary parsing support for template concept declarations","[c++2a] [concepts] Add rudimentary parsing support for template concept declarations\n\n\nThis patch is a tweak of changyu\'s patch: https://reviews.llvm.org/D40381. It differs in that the recognition of the \'concept\' token is moved into the machinery that recognizes declaration-specifiers - this allows us to leverage the attribute handling machinery more seamlessly.\n\nSee the test file to get a sense of the basic parsing that this patch supports. \n\nThere is much more work to be done before concepts are usable...\n\nThanks Changyu!\n\nllvm-svn: 330794"},
[h]={{Yb,9030,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  // ...\n  if (NewDecl->hasAssociatedConstraints()) {\n    // ...\n    Diag(NameLoc, diag::err_concept_no_associated_constraints);"}},
[h]={{ac,9030,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  // ...\n  if (NewDecl->hasAssociatedConstraints()) {\n    // ...\n    Diag(NameLoc, diag::err_concept_no_associated_constraints);"}},
[j]={
[j]={
["clang/test/CXX/temp/concept/p4.cpp"]={"clang/test/CXX/temp/concept/p4.cpp:4:9: error: concept cannot have associated constraints"}
["clang/test/CXX/temp/concept/p4.cpp"]={"clang/test/CXX/temp/concept/p4.cpp:4:9: error: concept cannot have associated constraints"}
Line 6,580: Line 6,582:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"d7aae33a9513",1562793949,"[Concepts] Concept definitions (D40381)\n\nFirst in a series of patches to land C++2a Concepts support...","[Concepts] Concept definitions (D40381)\n\nFirst in a series of patches to land C++2a Concepts support.\nThis patch adds AST and parsing support for concept-declarations.\n\nllvm-svn: 365699"},
[b]={"d7aae33a9513",1562793949,"[Concepts] Concept definitions (D40381)","[Concepts] Concept definitions (D40381)\n\nFirst in a series of patches to land C++2a Concepts support.\nThis patch adds AST and parsing support for concept-declarations.\n\nllvm-svn: 365699"},
[h]={{Yb,9002,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  // ...\n  if (Params->size() == 0) {\n    Diag(NameLoc, diag::err_concept_no_parameters);"}},
[h]={{ac,9002,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  // ...\n  if (Params->size() == 0) {\n    Diag(NameLoc, diag::err_concept_no_parameters);"}},
[j]={
[j]={
[Kb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:8:29: error: concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed","clang/test/Parser/cxx2a-concept-declaration.cpp:12:48: error: concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed","clang/test/Parser/cxx2a-concept-declaration.cpp:55:20: error: concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed"}
[Nb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:8:29: error: concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed","clang/test/Parser/cxx2a-concept-declaration.cpp:12:48: error: concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed","clang/test/Parser/cxx2a-concept-declaration.cpp:55:20: error: concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed"}
}
}
},
},
Line 6,593: Line 6,595:
[g]=k,
[g]=k,
[b]={"8a78a58188b7",1330129424,"Improve the diagnostic in ARC mode when a conditional with an Objective-C type and void* is used.  <...","Improve the diagnostic in ARC mode when a conditional with an Objective-C type and void* is used.  <rdar://problem/10486347>.\n\nllvm-svn: 151416"},
[b]={"8a78a58188b7",1330129424,"Improve the diagnostic in ARC mode when a conditional with an Objective-C type and void* is used.  <...","Improve the diagnostic in ARC mode when a conditional with an Objective-C type and void* is used.  <rdar://problem/10486347>.\n\nllvm-svn: 151416"},
[h]={{u,9372,"/// FindCompositeObjCPointerType - Helper method to find composite type of\n/// two objective-c pointer types of the two input expressions.\nQualType Sema::FindCompositeObjCPointerType(ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  // Check Objective-C object pointer types and \'void *\'\n  if (LHSTy->isVoidPointerType() && RHSTy->isObjCObjectPointerType()) {\n    if (getLangOpts().ObjCAutoRefCount) {\n      // ...\n      Diag(QuestionLoc, diag::err_cond_voidptr_arc) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{u,9507,"/// FindCompositeObjCPointerType - Helper method to find composite type of\n/// two objective-c pointer types of the two input expressions.\nQualType Sema::FindCompositeObjCPointerType(ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSTy->isObjCObjectPointerType() && RHSTy->isVoidPointerType()) {\n    if (getLangOpts().ObjCAutoRefCount) {\n      // ...\n      Diag(QuestionLoc, diag::err_cond_voidptr_arc) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[h]={{v,9372,"/// FindCompositeObjCPointerType - Helper method to find composite type of\n/// two objective-c pointer types of the two input expressions.\nQualType Sema::FindCompositeObjCPointerType(ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  // Check Objective-C object pointer types and \'void *\'\n  if (LHSTy->isVoidPointerType() && RHSTy->isObjCObjectPointerType()) {\n    if (getLangOpts().ObjCAutoRefCount) {\n      // ...\n      Diag(QuestionLoc, diag::err_cond_voidptr_arc) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{v,9507,"/// FindCompositeObjCPointerType - Helper method to find composite type of\n/// two objective-c pointer types of the two input expressions.\nQualType Sema::FindCompositeObjCPointerType(ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSTy->isObjCObjectPointerType() && RHSTy->isVoidPointerType()) {\n    if (getLangOpts().ObjCAutoRefCount) {\n      // ...\n      Diag(QuestionLoc, diag::err_cond_voidptr_arc) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaObjC/arc-type-conversion.m"]={"clang/test/SemaObjC/arc-type-conversion.m:96:12: error: operands to conditional of types \'id\' and \'void *\' are incompatible in ARC mode","clang/test/SemaObjC/arc-type-conversion.m:97:12: error: operands to conditional of types \'void *\' and \'id\' are incompatible in ARC mode"}
["clang/test/SemaObjC/arc-type-conversion.m"]={"clang/test/SemaObjC/arc-type-conversion.m:96:12: error: operands to conditional of types \'id\' and \'void *\' are incompatible in ARC mode","clang/test/SemaObjC/arc-type-conversion.m:97:12: error: operands to conditional of types \'void *\' and \'id\' are incompatible in ARC mode"}
Line 6,605: Line 6,607:
[g]=k,
[g]=k,
[b]={"1a99f441e64c",1239904287,"Fix a crash bug when comparing overload quality of conversion operators with conversion constructors...","Fix a crash bug when comparing overload quality of conversion operators with conversion constructors.\nRemove an atrocious amount of trailing whitespace in the overloaded operator mangler. Sorry, couldn\'t help myself.\nChange the DeclType parameter of Sema::CheckReferenceInit to be passed by value instead of reference. It wasn\'t changed anywhere.\nLet the parser handle C++\'s irregular grammar around assignment-expression and conditional-expression.\nAnd finally, the reason for all this stuff: implement C++ semantics for the conditional operator. The implementation is complete except for determining lvalueness.\n\nllvm-svn: 69299"},
[b]={"1a99f441e64c",1239904287,"Fix a crash bug when comparing overload quality of conversion operators with conversion constructors...","Fix a crash bug when comparing overload quality of conversion operators with conversion constructors.\nRemove an atrocious amount of trailing whitespace in the overloaded operator mangler. Sorry, couldn\'t help myself.\nChange the DeclType parameter of Sema::CheckReferenceInit to be passed by value instead of reference. It wasn\'t changed anywhere.\nLet the parser handle C++\'s irregular grammar around assignment-expression and conditional-expression.\nAnd finally, the reason for all this stuff: implement C++ semantics for the conditional operator. The implementation is complete except for determining lvalueness.\n\nllvm-svn: 69299"},
[h]={{t,6625,"/// 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  // C++11 [expr.cond]p3\n  //  Otherwise, if the second and third operand have different types, and\n  //  either has (cv) class type [...] an attempt is made to convert each of\n  //  those operands to the type of the other.\n  if (!Context.hasSameType(LTy, RTy) && (LTy->isRecordType() || RTy->isRecordType())) {\n    // ...\n    //  If both can be converted, [...] the program is ill-formed.\n    if (HaveL2R && HaveR2L) {\n      Diag(QuestionLoc, diag::err_conditional_ambiguous) << LTy << RTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[h]={{u,6625,"/// 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  // C++11 [expr.cond]p3\n  //  Otherwise, if the second and third operand have different types, and\n  //  either has (cv) class type [...] an attempt is made to convert each of\n  //  those operands to the type of the other.\n  if (!Context.hasSameType(LTy, RTy) && (LTy->isRecordType() || RTy->isRecordType())) {\n    // ...\n    //  If both can be converted, [...] the program is ill-formed.\n    if (HaveL2R && HaveR2L) {\n      Diag(QuestionLoc, diag::err_conditional_ambiguous) << LTy << RTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCXX/conditional-expr.cpp"]={"clang/test/SemaCXX/conditional-expr.cpp:113:13: error: conditional expression is ambiguous; \'BadBase\' can be converted to \'BadDerived\' and vice versa","clang/test/SemaCXX/conditional-expr.cpp:114:13: error: conditional expression is ambiguous; \'BadDerived\' can be converted to \'BadBase\' and vice versa"}
["clang/test/SemaCXX/conditional-expr.cpp"]={"clang/test/SemaCXX/conditional-expr.cpp:113:13: error: conditional expression is ambiguous; \'BadBase\' can be converted to \'BadDerived\' and vice versa","clang/test/SemaCXX/conditional-expr.cpp:114:13: error: conditional expression is ambiguous; \'BadDerived\' can be converted to \'BadBase\' and vice versa"}
Line 6,617: Line 6,619:
[g]=k,
[g]=k,
[b]={"1a99f441e64c",1239904287,"Fix a crash bug when comparing overload quality of conversion operators with conversion constructors...","Fix a crash bug when comparing overload quality of conversion operators with conversion constructors.\nRemove an atrocious amount of trailing whitespace in the overloaded operator mangler. Sorry, couldn\'t help myself.\nChange the DeclType parameter of Sema::CheckReferenceInit to be passed by value instead of reference. It wasn\'t changed anywhere.\nLet the parser handle C++\'s irregular grammar around assignment-expression and conditional-expression.\nAnd finally, the reason for all this stuff: implement C++ semantics for the conditional operator. The implementation is complete except for determining lvalueness.\n\nllvm-svn: 69299"},
[b]={"1a99f441e64c",1239904287,"Fix a crash bug when comparing overload quality of conversion operators with conversion constructors...","Fix a crash bug when comparing overload quality of conversion operators with conversion constructors.\nRemove an atrocious amount of trailing whitespace in the overloaded operator mangler. Sorry, couldn\'t help myself.\nChange the DeclType parameter of Sema::CheckReferenceInit to be passed by value instead of reference. It wasn\'t changed anywhere.\nLet the parser handle C++\'s irregular grammar around assignment-expression and conditional-expression.\nAnd finally, the reason for all this stuff: implement C++ semantics for the conditional operator. The implementation is complete except for determining lvalueness.\n\nllvm-svn: 69299"},
[h]={{t,6267,"/// 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_Ambiguous:\n    Self.Diag(QuestionLoc, diag::err_conditional_ambiguous_ovl) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
[h]={{u,6267,"/// 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_Ambiguous:\n    Self.Diag(QuestionLoc, diag::err_conditional_ambiguous_ovl) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
},
},
["err_conditional_vector_cond_result_mismatch"]={
["err_conditional_vector_cond_result_mismatch"]={
Line 6,625: Line 6,627:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={fb,1590001902,jb,lb},
[b]={kb,1590001902,fb,jb},
[h]={{t,6338,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSVT && RHSVT) {\n    if (isa<ExtVectorType>(CondVT) != isa<ExtVectorType>(LHSVT)) {\n      Diag(QuestionLoc, diag::err_conditional_vector_cond_result_mismatch) << /*isExtVector*/ isa<ExtVectorType>(CondVT);"}},
[h]={{u,6338,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSVT && RHSVT) {\n    if (isa<ExtVectorType>(CondVT) != isa<ExtVectorType>(LHSVT)) {\n      Diag(QuestionLoc, diag::err_conditional_vector_cond_result_mismatch) << /*isExtVector*/ isa<ExtVectorType>(CondVT);"}},
[j]={
[j]={
["clang/test/SemaCXX/ext-vector-type-conditional.cpp"]={"clang/test/SemaCXX/ext-vector-type-conditional.cpp:177:12: error: cannot mix vectors and extended vectors in a vector conditional","clang/test/SemaCXX/ext-vector-type-conditional.cpp:180:21: error: cannot mix vectors and extended vectors in a vector conditional","clang/test/SemaCXX/ext-vector-type-conditional.cpp:186:21: error: cannot mix vectors and extended vectors in a vector conditional","clang/test/SemaCXX/ext-vector-type-conditional.cpp:192:12: error: cannot mix vectors and extended vectors in a vector conditional"}
["clang/test/SemaCXX/ext-vector-type-conditional.cpp"]={"clang/test/SemaCXX/ext-vector-type-conditional.cpp:177:12: error: cannot mix vectors and extended vectors in a vector conditional","clang/test/SemaCXX/ext-vector-type-conditional.cpp:180:21: error: cannot mix vectors and extended vectors in a vector conditional","clang/test/SemaCXX/ext-vector-type-conditional.cpp:186:21: error: cannot mix vectors and extended vectors in a vector conditional","clang/test/SemaCXX/ext-vector-type-conditional.cpp:192:12: error: cannot mix vectors and extended vectors in a vector conditional"}
Line 6,637: Line 6,639:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector\n\nWhen the condition is a vector, Open...","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"},
[b]={"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"},
[h]={{u,8963,"/// Convert scalar operands to a vector that matches the\n///        condition in length.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// We first compute the \"result type\" for the scalar operands\n/// according to OpenCL v1.1 s6.3.i. Both operands are then converted\n/// into a vector of that type where the length matches the condition\n/// vector type. s6.11.6 requires that the element types of the result\n/// and the condition must have the same number of bits.\nstatic QualType OpenCLConvertScalarsToVectors(Sema &S, ExprResult &LHS, ExprResult &RHS, QualType CondTy, SourceLocation QuestionLoc) {\n  // ...\n  // Ensure that all types have the same number of bits\n  if (S.Context.getTypeSize(CV->getElementType()) != S.Context.getTypeSize(ResTy)) {\n    // ...\n    S.Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondTy << OS.str();"},{u,9044,"/// Return false if the vector condition type and the vector\n///        result type are compatible.\n///\n/// OpenCL v1.1 s6.11.6 requires that both vector types have the same\n/// number of elements, and their element types have the same number\n/// of bits.\nstatic bool checkVectorResult(Sema &S, QualType CondTy, QualType VecResTy, SourceLocation QuestionLoc) {\n  // ...\n  if (S.Context.getTypeSize(CVE) != S.Context.getTypeSize(RVE)) {\n    S.Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondTy << VecResTy;"},{t,6399,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (Context.getTypeSize(ResultElementTy) != Context.getTypeSize(CondElementTy)) {\n    Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondType << ResultType;"},{t,6482,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (Context.getTypeSize(ResultElementTy) != Context.getTypeSize(CondElementTy)) {\n    Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondType << ResultType;"}},
[h]={{v,8963,"/// Convert scalar operands to a vector that matches the\n///        condition in length.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// We first compute the \"result type\" for the scalar operands\n/// according to OpenCL v1.1 s6.3.i. Both operands are then converted\n/// into a vector of that type where the length matches the condition\n/// vector type. s6.11.6 requires that the element types of the result\n/// and the condition must have the same number of bits.\nstatic QualType OpenCLConvertScalarsToVectors(Sema &S, ExprResult &LHS, ExprResult &RHS, QualType CondTy, SourceLocation QuestionLoc) {\n  // ...\n  // Ensure that all types have the same number of bits\n  if (S.Context.getTypeSize(CV->getElementType()) != S.Context.getTypeSize(ResTy)) {\n    // ...\n    S.Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondTy << OS.str();"},{v,9044,"/// Return false if the vector condition type and the vector\n///        result type are compatible.\n///\n/// OpenCL v1.1 s6.11.6 requires that both vector types have the same\n/// number of elements, and their element types have the same number\n/// of bits.\nstatic bool checkVectorResult(Sema &S, QualType CondTy, QualType VecResTy, SourceLocation QuestionLoc) {\n  // ...\n  if (S.Context.getTypeSize(CVE) != S.Context.getTypeSize(RVE)) {\n    S.Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondTy << VecResTy;"},{u,6399,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (Context.getTypeSize(ResultElementTy) != Context.getTypeSize(CondElementTy)) {\n    Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondType << ResultType;"},{u,6482,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (Context.getTypeSize(ResultElementTy) != Context.getTypeSize(CondElementTy)) {\n    Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondType << ResultType;"}},
[j]={
[j]={
["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:72:12: error: vector condition type \'char2\' (vector of 2 \'char\' values) and result type (vector of 2 \'int\' values) do not have elements of the same size","clang/test/SemaOpenCL/cond.cl:77:12: error: vector condition type \'char2\' (vector of 2 \'char\' values) and result type \'int2\' (vector of 2 \'int\' values) do not have elements of the same size","clang/test/SemaOpenCL/cond.cl:82:12: error: vector condition type \'int2\' (vector of 2 \'int\' values) and result type (vector of 2 \'unsigned char\' values) do not have elements of the same size","clang/test/SemaOpenCL/cond.cl:97:12: error: vector condition type \'int2\' (vector of 2 \'int\' values) and result type \'char2\' (vector of 2 \'char\' values) do not have elements of the same size"}
["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:72:12: error: vector condition type \'char2\' (vector of 2 \'char\' values) and result type (vector of 2 \'int\' values) do not have elements of the same size","clang/test/SemaOpenCL/cond.cl:77:12: error: vector condition type \'char2\' (vector of 2 \'char\' values) and result type \'int2\' (vector of 2 \'int\' values) do not have elements of the same size","clang/test/SemaOpenCL/cond.cl:82:12: error: vector condition type \'int2\' (vector of 2 \'int\' values) and result type (vector of 2 \'unsigned char\' values) do not have elements of the same size","clang/test/SemaOpenCL/cond.cl:97:12: error: vector condition type \'int2\' (vector of 2 \'int\' values) and result type \'char2\' (vector of 2 \'char\' values) do not have elements of the same size"}
Line 6,649: Line 6,651:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension.\n\nGCC supports the conditional operator on V...","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"},
[b]={"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"},
[h]={{t,6569,"/// 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  if (LVoid || RVoid) {\n    // ...\n    // Void expressions aren\'t legal in the vector-conditional expressions.\n    if (IsVectorConditional) {\n      // ...\n      Diag(DiagLoc.getBegin(), diag::err_conditional_vector_has_void) << DiagLoc << IsThrow;"}},
[h]={{u,6569,"/// 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  if (LVoid || RVoid) {\n    // ...\n    // Void expressions aren\'t legal in the vector-conditional expressions.\n    if (IsVectorConditional) {\n      // ...\n      Diag(DiagLoc.getBegin(), diag::err_conditional_vector_has_void) << DiagLoc << IsThrow;"}},
[j]={
[j]={
["clang/test/SemaCXX/vector-size-conditional.cpp"]={"clang/test/SemaCXX/vector-size-conditional.cpp:46:34: error: GNU vector conditional operand cannot be a throw expression","clang/test/SemaCXX/vector-size-conditional.cpp:47:22: error: GNU vector conditional operand cannot be a throw expression","clang/test/SemaCXX/vector-size-conditional.cpp:48:23: error: GNU vector conditional operand cannot be a throw expression","clang/test/SemaCXX/vector-size-conditional.cpp:49:22: error: GNU vector conditional operand cannot be void","clang/test/SemaCXX/vector-size-conditional.cpp:50:23: error: GNU vector conditional operand cannot be void"}
["clang/test/SemaCXX/vector-size-conditional.cpp"]={"clang/test/SemaCXX/vector-size-conditional.cpp:46:34: error: GNU vector conditional operand cannot be a throw expression","clang/test/SemaCXX/vector-size-conditional.cpp:47:22: error: GNU vector conditional operand cannot be a throw expression","clang/test/SemaCXX/vector-size-conditional.cpp:48:23: error: GNU vector conditional operand cannot be a throw expression","clang/test/SemaCXX/vector-size-conditional.cpp:49:22: error: GNU vector conditional operand cannot be void","clang/test/SemaCXX/vector-size-conditional.cpp:50:23: error: GNU vector conditional operand cannot be void"}
Line 6,661: Line 6,663:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={fb,1590001902,jb,lb},
[b]={kb,1590001902,fb,jb},
[h]={{t,6345,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSVT && RHSVT) {\n    // ...\n    // If both are vector types, they must be the same type.\n    if (!Context.hasSameType(LHSType, RHSType)) {\n      Diag(QuestionLoc, diag::err_conditional_vector_mismatched) << LHSType << RHSType;"},{t,6432,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSBT && RHSBT) {\n    // If both are sizeless vector types, they must be the same type.\n    if (!Context.hasSameType(LHSType, RHSType)) {\n      Diag(QuestionLoc, diag::err_conditional_vector_mismatched) << LHSType << RHSType;"}},
[h]={{u,6345,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSVT && RHSVT) {\n    // ...\n    // If both are vector types, they must be the same type.\n    if (!Context.hasSameType(LHSType, RHSType)) {\n      Diag(QuestionLoc, diag::err_conditional_vector_mismatched) << LHSType << RHSType;"},{u,6432,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSBT && RHSBT) {\n    // If both are sizeless vector types, they must be the same type.\n    if (!Context.hasSameType(LHSType, RHSType)) {\n      Diag(QuestionLoc, diag::err_conditional_vector_mismatched) << LHSType << RHSType;"}},
[j]={
[j]={
["clang/test/SemaCXX/vector-size-conditional.cpp"]={"clang/test/SemaCXX/vector-size-conditional.cpp:57:20: error: vector operands to the vector conditional must be the same type (\'FourInts\' (vector of 4 \'int\' values) and \'TwoInts\' (vector of 2 \'int\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:58:20: error: vector operands to the vector conditional must be the same type (\'FourInts\' (vector of 4 \'int\' values) and \'FourDoubles\' (vector of 4 \'double\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:93:20: error: vector operands to the vector conditional must be the same type (\'FourUInts\' (vector of 4 \'unsigned int\' values) and \'FourFloats\' (vector of 4 \'float\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:94:20: error: vector operands to the vector conditional must be the same type (\'FourUInts\' (vector of 4 \'unsigned int\' values) and \'FourInts\' (vector of 4 \'int\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:95:20: error: vector operands to the vector conditional must be the same type (\'FourInts\' (vector of 4 \'int\' values) and \'FourUInts\' (vector of 4 \'unsigned int\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:165:12: error: vector operands to the vector conditional must be the same type (\'__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int\' (vector of 4 \'unsigned int\' values) and \'__attribute__((__vector_size__(4 * sizeof(double)))) double\' (vector of 4 \'double\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:165:12: error: vector operands to the vector conditional must be the same type (\'__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int\' (vector of 4 \'unsigned int\' values) and \'__attribute__((__vector_size__(2 * sizeof(unsigned int)))) unsigned int\' (vector of 2 \'unsigned int\' values))}"}
["clang/test/SemaCXX/vector-size-conditional.cpp"]={"clang/test/SemaCXX/vector-size-conditional.cpp:57:20: error: vector operands to the vector conditional must be the same type (\'FourInts\' (vector of 4 \'int\' values) and \'TwoInts\' (vector of 2 \'int\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:58:20: error: vector operands to the vector conditional must be the same type (\'FourInts\' (vector of 4 \'int\' values) and \'FourDoubles\' (vector of 4 \'double\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:93:20: error: vector operands to the vector conditional must be the same type (\'FourUInts\' (vector of 4 \'unsigned int\' values) and \'FourFloats\' (vector of 4 \'float\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:94:20: error: vector operands to the vector conditional must be the same type (\'FourUInts\' (vector of 4 \'unsigned int\' values) and \'FourInts\' (vector of 4 \'int\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:95:20: error: vector operands to the vector conditional must be the same type (\'FourInts\' (vector of 4 \'int\' values) and \'FourUInts\' (vector of 4 \'unsigned int\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:165:12: error: vector operands to the vector conditional must be the same type (\'__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int\' (vector of 4 \'unsigned int\' values) and \'__attribute__((__vector_size__(4 * sizeof(double)))) double\' (vector of 4 \'double\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:165:12: error: vector operands to the vector conditional must be the same type (\'__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int\' (vector of 4 \'unsigned int\' values) and \'__attribute__((__vector_size__(2 * sizeof(unsigned int)))) unsigned int\' (vector of 2 \'unsigned int\' values))}"}
Line 6,673: Line 6,675:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension.\n\nGCC supports the conditional operator on V...","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"},
[b]={"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"},
[h]={{t,6369,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSVT && RHSVT) {\n  // ...\n  } else if (LHSVT || RHSVT) {\n  // ...\n  } else {\n    // ...\n    if (ResultElementTy->isEnumeralType()) {\n      Diag(QuestionLoc, diag::err_conditional_vector_operand_type) << ResultElementTy;"},{t,6455,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSBT && RHSBT) {\n  // ...\n  } else if (LHSBT || RHSBT) {\n  // ...\n  } else {\n    // ...\n    if (ResultElementTy->isEnumeralType()) {\n      Diag(QuestionLoc, diag::err_conditional_vector_operand_type) << ResultElementTy;"}},
[h]={{u,6369,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSVT && RHSVT) {\n  // ...\n  } else if (LHSVT || RHSVT) {\n  // ...\n  } else {\n    // ...\n    if (ResultElementTy->isEnumeralType()) {\n      Diag(QuestionLoc, diag::err_conditional_vector_operand_type) << ResultElementTy;"},{u,6455,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSBT && RHSBT) {\n  // ...\n  } else if (LHSBT || RHSBT) {\n  // ...\n  } else {\n    // ...\n    if (ResultElementTy->isEnumeralType()) {\n      Diag(QuestionLoc, diag::err_conditional_vector_operand_type) << ResultElementTy;"}},
[j]={
[j]={
["clang/test/SemaCXX/vector-size-conditional.cpp"]={"clang/test/SemaCXX/vector-size-conditional.cpp:70:20: error: enumeration type \'E\' is not allowed in a vector conditional","clang/test/SemaCXX/vector-size-conditional.cpp:71:20: error: enumeration type \'SE\' is not allowed in a vector conditional"}
["clang/test/SemaCXX/vector-size-conditional.cpp"]={"clang/test/SemaCXX/vector-size-conditional.cpp:70:20: error: enumeration type \'E\' is not allowed in a vector conditional","clang/test/SemaCXX/vector-size-conditional.cpp:71:20: error: enumeration type \'SE\' is not allowed in a vector conditional"}
Line 6,685: Line 6,687:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector\n\nWhen the condition is a vector, Open...","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"},
[b]={"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"},
[h]={{u,8990,"/// Return false if the vector condition type and the vector\n///        result type are compatible.\n///\n/// OpenCL v1.1 s6.11.6 requires that both vector types have the same\n/// number of elements, and their element types have the same number\n/// of bits.\nstatic bool checkVectorResult(Sema &S, QualType CondTy, QualType VecResTy, SourceLocation QuestionLoc) {\n  // ...\n  if (CV->getNumElements() != RV->getNumElements()) {\n    S.Diag(QuestionLoc, diag::err_conditional_vector_size) << CondTy << VecResTy;"},{t,6392,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (ResultElementCount != CondElementCount) {\n    Diag(QuestionLoc, diag::err_conditional_vector_size) << CondType << ResultType;"},{t,6475,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (ResultElementCount != CondElementCount) {\n    Diag(QuestionLoc, diag::err_conditional_vector_size) << CondType << ResultType;"}},
[h]={{v,8990,"/// Return false if the vector condition type and the vector\n///        result type are compatible.\n///\n/// OpenCL v1.1 s6.11.6 requires that both vector types have the same\n/// number of elements, and their element types have the same number\n/// of bits.\nstatic bool checkVectorResult(Sema &S, QualType CondTy, QualType VecResTy, SourceLocation QuestionLoc) {\n  // ...\n  if (CV->getNumElements() != RV->getNumElements()) {\n    S.Diag(QuestionLoc, diag::err_conditional_vector_size) << CondTy << VecResTy;"},{u,6392,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (ResultElementCount != CondElementCount) {\n    Diag(QuestionLoc, diag::err_conditional_vector_size) << CondType << ResultType;"},{u,6475,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (ResultElementCount != CondElementCount) {\n    Diag(QuestionLoc, diag::err_conditional_vector_size) << CondType << ResultType;"}},
[j]={
[j]={
["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:123:12: error: vector condition type \'char2\' (vector of 2 \'char\' values) and result type \'char3\' (vector of 3 \'char\' values) do not have the same number of elements"}
["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:123:12: error: vector condition type \'char2\' (vector of 2 \'char\' values) and result type \'char3\' (vector of 3 \'char\' values) do not have the same number of elements"}
Line 6,698: Line 6,700:
[g]=k,
[g]=k,
[b]={"1a99f441e64c",1239904287,"Fix a crash bug when comparing overload quality of conversion operators with conversion constructors...","Fix a crash bug when comparing overload quality of conversion operators with conversion constructors.\nRemove an atrocious amount of trailing whitespace in the overloaded operator mangler. Sorry, couldn\'t help myself.\nChange the DeclType parameter of Sema::CheckReferenceInit to be passed by value instead of reference. It wasn\'t changed anywhere.\nLet the parser handle C++\'s irregular grammar around assignment-expression and conditional-expression.\nAnd finally, the reason for all this stuff: implement C++ semantics for the conditional operator. The implementation is complete except for determining lvalueness.\n\nllvm-svn: 69299"},
[b]={"1a99f441e64c",1239904287,"Fix a crash bug when comparing overload quality of conversion operators with conversion constructors...","Fix a crash bug when comparing overload quality of conversion operators with conversion constructors.\nRemove an atrocious amount of trailing whitespace in the overloaded operator mangler. Sorry, couldn\'t help myself.\nChange the DeclType parameter of Sema::CheckReferenceInit to be passed by value instead of reference. It wasn\'t changed anywhere.\nLet the parser handle C++\'s irregular grammar around assignment-expression and conditional-expression.\nAnd finally, the reason for all this stuff: implement C++ semantics for the conditional operator. The implementation is complete except for determining lvalueness.\n\nllvm-svn: 69299"},
[h]={{t,6589,"/// 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  if (LVoid || RVoid) {\n    // ...\n    Diag(QuestionLoc, diag::err_conditional_void_nonvoid) << (LVoid ? RTy : LTy) << (LVoid ? 0 : 1) << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[h]={{u,6589,"/// 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  if (LVoid || RVoid) {\n    // ...\n    Diag(QuestionLoc, diag::err_conditional_void_nonvoid) << (LVoid ? RTy : LTy) << (LVoid ? 0 : 1) << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[j]={
[j]={
["clang/test/SemaCXX/conditional-expr.cpp"]={"clang/test/SemaCXX/conditional-expr.cpp:88:6: error: right operand to ? is void, but left operand is of type \'int\'","clang/test/SemaCXX/conditional-expr.cpp:89:6: error: left operand to ? is void, but right operand is of type \'int\'","clang/test/SemaCXX/conditional-expr.cpp:94:7: error: left operand to ? is void, but right operand is of type \'int\'","clang/test/SemaCXX/conditional-expr.cpp:95:7: error: right operand to ? is void, but left operand is of type \'int\'"}
["clang/test/SemaCXX/conditional-expr.cpp"]={"clang/test/SemaCXX/conditional-expr.cpp:88:6: error: right operand to ? is void, but left operand is of type \'int\'","clang/test/SemaCXX/conditional-expr.cpp:89:6: error: left operand to ? is void, but right operand is of type \'int\'","clang/test/SemaCXX/conditional-expr.cpp:94:7: error: left operand to ? is void, but right operand is of type \'int\'","clang/test/SemaCXX/conditional-expr.cpp:95:7: error: right operand to ? is void, but left operand is of type \'int\'"}
Line 6,709: Line 6,711:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"9e2c81f00a0a",1297285472,"AST, Sema, Serialization: keep track of cudaConfigureCall\n\nllvm-svn: 125216","AST, Sema, Serialization: keep track of cudaConfigureCall\n\nllvm-svn: 125216"},
[b]={"9e2c81f00a0a",1297285472,"AST, Sema, Serialization: keep track of cudaConfigureCall","AST, Sema, Serialization: keep track of cudaConfigureCall\n\nllvm-svn: 125216"},
[h]={{n,10667,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().CUDA) {\n    // ...\n    if (II && II->isStr(getCudaConfigureFuncName()) && !NewFD->isInvalidDecl() && NewFD->getDeclContext()->getRedeclContext()->isTranslationUnit()) {\n      if (!R->castAs<FunctionType>()->getReturnType()->isScalarType())\n        Diag(NewFD->getLocation(), diag::err_config_scalar_return) << getCudaConfigureFuncName();"}},
[h]={{m,10667,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().CUDA) {\n    // ...\n    if (II && II->isStr(getCudaConfigureFuncName()) && !NewFD->isInvalidDecl() && NewFD->getDeclContext()->getRedeclContext()->isTranslationUnit()) {\n      if (!R->castAs<FunctionType>()->getReturnType()->isScalarType())\n        Diag(NewFD->getLocation(), diag::err_config_scalar_return) << getCudaConfigureFuncName();"}},
[j]={
[j]={
["clang/test/SemaCUDA/config-type.cu"]={"clang/test/SemaCUDA/config-type.cu:7:6: error: CUDA special function \'__cudaPushCallConfiguration\' must have scalar return type"}
["clang/test/SemaCUDA/config-type.cu"]={"clang/test/SemaCUDA/config-type.cu:7:6: error: CUDA special function \'__cudaPushCallConfiguration\' must have scalar return type"}
Line 6,721: Line 6,723:
[f]=a,
[f]=a,
[g]=mb,
[g]=mb,
[b]={"7c027ee4c272",1260771417,"teach clang to recover gracefully from conflict markers left in source\nfiles: PR5238.\n\nllvm-svn: 912...","teach clang to recover gracefully from conflict markers left in source\nfiles: PR5238.\n\nllvm-svn: 91270"},
[b]={"7c027ee4c272",1260771417,"teach clang to recover gracefully from conflict markers left in source","teach clang to recover gracefully from conflict markers left in source\nfiles: PR5238.\n\nllvm-svn: 91270"},
[h]={{Jb,3162,"/// IsStartOfConflictMarker - If the specified pointer is the start of a version\n/// control conflict marker like \'<<<<<<<\', recognize it as such, emit an error\n/// and recover nicely.  This returns true if it is a conflict marker and false\n/// if not.\nbool Lexer::IsStartOfConflictMarker(const char *CurPtr) {\n  // ...\n  // Check to see if there is an ending marker somewhere in the buffer at the\n  // start of a line to terminate this conflict marker.\n  if (FindConflictEnd(CurPtr, BufferEnd, Kind)) {\n    // ...\n    Diag(CurPtr, diag::err_conflict_marker);"}},
[h]={{Rb,3162,"/// IsStartOfConflictMarker - If the specified pointer is the start of a version\n/// control conflict marker like \'<<<<<<<\', recognize it as such, emit an error\n/// and recover nicely.  This returns true if it is a conflict marker and false\n/// if not.\nbool Lexer::IsStartOfConflictMarker(const char *CurPtr) {\n  // ...\n  // Check to see if there is an ending marker somewhere in the buffer at the\n  // start of a line to terminate this conflict marker.\n  if (FindConflictEnd(CurPtr, BufferEnd, Kind)) {\n    // ...\n    Diag(CurPtr, diag::err_conflict_marker);"}},
[j]={
[j]={
["clang/test/Lexer/conflict-marker.c"]={"clang/test/Lexer/conflict-marker.c:7:1: error: version control conflict marker in file","clang/test/Lexer/conflict-marker.c:16:1: error: version control conflict marker in file","clang/test/Lexer/conflict-marker.c:23:1: error: version control conflict marker in file"}
["clang/test/Lexer/conflict-marker.c"]={"clang/test/Lexer/conflict-marker.c:7:1: error: version control conflict marker in file","clang/test/Lexer/conflict-marker.c:16:1: error: version control conflict marker in file","clang/test/Lexer/conflict-marker.c:23:1: error: version control conflict marker in file"}
Line 6,733: Line 6,735:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{G,1156,"/// ActOnCompatibilityAlias - this action is called after complete parsing of\n/// a \\@compatibility_alias declaration. It sets up the alias relationships.\nDecl *Sema::ActOnCompatibilityAlias(SourceLocation AtLoc, IdentifierInfo *AliasName, SourceLocation AliasLocation, IdentifierInfo *ClassName, SourceLocation ClassLocation) {\n  // ...\n  if (ADecl) {\n    Diag(AliasLocation, diag::err_conflicting_aliasing_type) << AliasName;"}},
[h]={{G,1156,"/// ActOnCompatibilityAlias - this action is called after complete parsing of\n/// a \\@compatibility_alias declaration. It sets up the alias relationships.\nDecl *Sema::ActOnCompatibilityAlias(SourceLocation AtLoc, IdentifierInfo *AliasName, SourceLocation AliasLocation, IdentifierInfo *ClassName, SourceLocation ClassLocation) {\n  // ...\n  if (ADecl) {\n    Diag(AliasLocation, diag::err_conflicting_aliasing_type) << AliasName;"}},
[j]={
[j]={
Line 6,745: Line 6,747:
[f]=a,
[f]=a,
[g]="Coroutines Issue",
[g]="Coroutines Issue",
[b]={M,1625925174,K,L}
[b]={N,1625925174,M,L}
},
},
["err_conflicting_codeseg_attribute"]={
["err_conflicting_codeseg_attribute"]={
Line 6,753: Line 6,755:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"64144eb194c8",1526479037,"Add support for __declspec(code_seg(\"segname\"))\n\nAdd support for __declspec(code_seg(\"segname\"))\n\nTh...","Add support for __declspec(code_seg(\"segname\"))\n\nAdd support for __declspec(code_seg(\"segname\"))\n\nThis patch is built on the existing support for #pragma code_seg. The code_seg\ndeclspec is allowed on functions and classes. The attribute enables the\nplacement of code into separate named segments, including compiler-generated\nmembers and template instantiations.\n\nFor more information, please see the following:\nhttps://msdn.microsoft.com/en-us/library/dn636922.aspx\n\nA new CodeSeg attribute is used instead of adding a new spelling to the existing\nSection attribute since they don’t apply to the same Subjects. Section\nattributes are also added for the code_seg declspec since they are used for\n#pragma code_seg. No CodeSeg attributes are added to the AST.\n\nThe patch is written to match with the Microsoft compiler’s behavior even where\nthat behavior is a little complicated (see https://reviews.llvm.org/D22931, the\nMicrosoft feedback page is no longer available since MS has removed the page).\nThat code is in getImplicitSectionAttrFromClass routine.\n\nDiagnostics messages are added to match with the Microsoft compiler for code-seg\nattribute mismatches on base and derived classes and virtual overrides.\n\n\nDifferential Revision: https://reviews.llvm.org/D43352\n\nllvm-svn: 332470"},
[b]={"64144eb194c8",1526479037,"Add support for __declspec(code_seg(\"segname\"))","Add support for __declspec(code_seg(\"segname\"))\n\nAdd support for __declspec(code_seg(\"segname\"))\n\nThis patch is built on the existing support for #pragma code_seg. The code_seg\ndeclspec is allowed on functions and classes. The attribute enables the\nplacement of code into separate named segments, including compiler-generated\nmembers and template instantiations.\n\nFor more information, please see the following:\nhttps://msdn.microsoft.com/en-us/library/dn636922.aspx\n\nA new CodeSeg attribute is used instead of adding a new spelling to the existing\nSection attribute since they don’t apply to the same Subjects. Section\nattributes are also added for the code_seg declspec since they are used for\n#pragma code_seg. No CodeSeg attributes are added to the AST.\n\nThe patch is written to match with the Microsoft compiler’s behavior even where\nthat behavior is a little complicated (see https://reviews.llvm.org/D22931, the\nMicrosoft feedback page is no longer available since MS has removed the page).\nThat code is in getImplicitSectionAttrFromClass routine.\n\nDiagnostics messages are added to match with the Microsoft compiler for code-seg\nattribute mismatches on base and derived classes and virtual overrides.\n\n\nDifferential Revision: https://reviews.llvm.org/D43352\n\nllvm-svn: 332470"},
[h]={{l,3401,"static void handleCodeSegAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n    if (!ExistingAttr->isImplicit()) {\n      S.Diag(AL.getLoc(), ExistingAttr->getName() == Str ? diag::warn_duplicate_codeseg_attribute : diag::err_conflicting_codeseg_attribute);"}},
[h]={{l,3401,"static void handleCodeSegAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n    if (!ExistingAttr->isImplicit()) {\n      S.Diag(AL.getLoc(), ExistingAttr->getName() == Str ? diag::warn_duplicate_codeseg_attribute : diag::err_conflicting_codeseg_attribute);"}},
[j]={
[j]={
Line 6,765: Line 6,767:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{G,2215,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  // ...\n  for (; numIvars > 0 && IVI != IVE; ++IVI) {\n    // ...\n    // First, make sure the types match.\n    if (!Context.hasSameType(ImplIvar->getType(), ClsIvar->getType())) {\n    // ...\n    } else if (ImplIvar->isBitField() && ClsIvar->isBitField() && ImplIvar->getBitWidthValue(Context) != ClsIvar->getBitWidthValue(Context)) {\n      Diag(ImplIvar->getBitWidth()->getBeginLoc(), diag::err_conflicting_ivar_bitwidth) << ImplIvar->getIdentifier();"}},
[h]={{G,2215,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  // ...\n  for (; numIvars > 0 && IVI != IVE; ++IVI) {\n    // ...\n    // First, make sure the types match.\n    if (!Context.hasSameType(ImplIvar->getType(), ClsIvar->getType())) {\n    // ...\n    } else if (ImplIvar->isBitField() && ClsIvar->isBitField() && ImplIvar->getBitWidthValue(Context) != ClsIvar->getBitWidthValue(Context)) {\n      Diag(ImplIvar->getBitWidth()->getBeginLoc(), diag::err_conflicting_ivar_bitwidth) << ImplIvar->getIdentifier();"}},
[j]={
[j]={
Line 6,777: Line 6,779:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{G,2222,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  // ...\n  for (; numIvars > 0 && IVI != IVE; ++IVI) {\n    // ...\n    // Make sure the names are identical.\n    if (ImplIvar->getIdentifier() != ClsIvar->getIdentifier()) {\n      Diag(ImplIvar->getLocation(), diag::err_conflicting_ivar_name) << ImplIvar->getIdentifier() << ClsIvar->getIdentifier();"}},
[h]={{G,2222,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  // ...\n  for (; numIvars > 0 && IVI != IVE; ++IVI) {\n    // ...\n    // Make sure the names are identical.\n    if (ImplIvar->getIdentifier() != ClsIvar->getIdentifier()) {\n      Diag(ImplIvar->getLocation(), diag::err_conflicting_ivar_name) << ImplIvar->getIdentifier() << ClsIvar->getIdentifier();"}},
[j]={
[j]={
Line 6,789: Line 6,791:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{G,2207,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  // ...\n  for (; numIvars > 0 && IVI != IVE; ++IVI) {\n    // ...\n    // First, make sure the types match.\n    if (!Context.hasSameType(ImplIvar->getType(), ClsIvar->getType())) {\n      Diag(ImplIvar->getLocation(), diag::err_conflicting_ivar_type) << ImplIvar->getIdentifier() << ImplIvar->getType() << ClsIvar->getType();"}},
[h]={{G,2207,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  // ...\n  for (; numIvars > 0 && IVI != IVE; ++IVI) {\n    // ...\n    // First, make sure the types match.\n    if (!Context.hasSameType(ImplIvar->getType(), ClsIvar->getType())) {\n      Diag(ImplIvar->getLocation(), diag::err_conflicting_ivar_type) << ImplIvar->getIdentifier() << ImplIvar->getType() << ClsIvar->getType();"}},
[j]={
[j]={
Line 6,801: Line 6,803:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"02df2e08720f",1355075141,"Virtual method overrides can no longer have mismatched calling conventions.  This fixes PR14339.\n\nll...","Virtual method overrides can no longer have mismatched calling conventions.  This fixes PR14339.\n\nllvm-svn: 169705"},
[b]={"02df2e08720f",1355075141,"Virtual method overrides can no longer have mismatched calling conventions.  This fixes PR14339.","Virtual method overrides can no longer have mismatched calling conventions.  This fixes PR14339.\n\nllvm-svn: 169705"},
[h]={{r,18013,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  Diag(New->getLocation(), diag::err_conflicting_overriding_cc_attributes) << New->getDeclName() << New->getType() << Old->getType();"}},
[h]={{s,18013,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  Diag(New->getLocation(), diag::err_conflicting_overriding_cc_attributes) << New->getDeclName() << New->getType() << Old->getType();"}},
[j]={
[j]={
["clang/test/SemaCXX/virtual-override-x86.cpp"]={"clang/test/SemaCXX/virtual-override-x86.cpp:11:33: error: virtual function \'f\' has different calling convention attributes (\'void () __attribute__((cdecl))\') than the function it overrides (which has calling convention \'void () __attribute__((thiscall))\')","clang/test/SemaCXX/virtual-override-x86.cpp:31:10: error: virtual function \'g\' has different calling convention attributes (\'void () __attribute__((thiscall))\') than the function it overrides (which has calling convention \'void () __attribute__((stdcall))\')"}
["clang/test/SemaCXX/virtual-override-x86.cpp"]={"clang/test/SemaCXX/virtual-override-x86.cpp:11:33: error: virtual function \'f\' has different calling convention attributes (\'void () __attribute__((cdecl))\') than the function it overrides (which has calling convention \'void () __attribute__((thiscall))\')","clang/test/SemaCXX/virtual-override-x86.cpp:31:10: error: virtual function \'g\' has different calling convention attributes (\'void () __attribute__((thiscall))\') than the function it overrides (which has calling convention \'void () __attribute__((stdcall))\')"}
Line 6,813: Line 6,815:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{G,2039,"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    // ...\n    } else {\n      // ...\n      if (!SDecl)\n      // ...\n      else if (IDecl && !declaresSameEntity(IDecl->getSuperClass(), SDecl)) {\n        // ...\n        Diag(SuperClassLoc, diag::err_conflicting_super_class) << SDecl->getDeclName();"}},
[h]={{G,2039,"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    // ...\n    } else {\n      // ...\n      if (!SDecl)\n      // ...\n      else if (IDecl && !declaresSameEntity(IDecl->getSuperClass(), SDecl)) {\n        // ...\n        Diag(SuperClassLoc, diag::err_conflicting_super_class) << SDecl->getDeclName();"}},
[j]={
[j]={
Line 6,825: Line 6,827:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{n,4130,"/// 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  // C: Function types need to be compatible, not identical. This handles\n  // duplicate function decls like \"void f(int); void f(enum X);\" properly.\n  if (!getLangOpts().CPlusPlus) {\n    // C99 6.7.5.3p15: ...If one type has a parameter type list and the other\n    // type is specified by a function definition that contains a (possibly\n    // empty) identifier list, both shall agree in the number of parameters\n    // and the type of each parameter shall be compatible with the type that\n    // results from the application of default argument promotions to the\n    // type of the corresponding identifier. ...\n    // This cannot be handled by ASTContext::typesAreCompatible() because that\n    // doesn\'t know whether the function type is for a definition or not when\n    // eventually calling ASTContext::mergeFunctionTypes(). The only situation\n    // we need to cover here is that the number of arguments agree as the\n    // default argument promotion rules were already checked by\n    // ASTContext::typesAreCompatible().\n    if (Old->hasPrototype() && !New->hasWrittenPrototype() && NewDeclIsDefn && Old->getNumParams() != New->getNumParams() && !Old->isImplicit()) {\n      // ...\n      Diag(New->getLocation(), diag::err_conflicting_types) << New;"},{n,4305,"/// 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  Diag(New->getLocation(), diag::err_conflicting_types) << New->getDeclName();"}},
[h]={{m,4130,"/// 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  // C: Function types need to be compatible, not identical. This handles\n  // duplicate function decls like \"void f(int); void f(enum X);\" properly.\n  if (!getLangOpts().CPlusPlus) {\n    // C99 6.7.5.3p15: ...If one type has a parameter type list and the other\n    // type is specified by a function definition that contains a (possibly\n    // empty) identifier list, both shall agree in the number of parameters\n    // and the type of each parameter shall be compatible with the type that\n    // results from the application of default argument promotions to the\n    // type of the corresponding identifier. ...\n    // This cannot be handled by ASTContext::typesAreCompatible() because that\n    // doesn\'t know whether the function type is for a definition or not when\n    // eventually calling ASTContext::mergeFunctionTypes(). The only situation\n    // we need to cover here is that the number of arguments agree as the\n    // default argument promotion rules were already checked by\n    // ASTContext::typesAreCompatible().\n    if (Old->hasPrototype() && !New->hasWrittenPrototype() && NewDeclIsDefn && Old->getNumParams() != New->getNumParams() && !Old->isImplicit()) {\n      // ...\n      Diag(New->getLocation(), diag::err_conflicting_types) << New;"},{m,4305,"/// 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  Diag(New->getLocation(), diag::err_conflicting_types) << New->getDeclName();"}},
[j]={
[j]={
["clang/test/SemaCXX/ms-overload-entry-point.cpp"]={"clang/test/SemaCXX/ms-overload-entry-point.cpp:14:6: error: conflicting types for \'wWinMain\'"}
["clang/test/SemaCXX/ms-overload-entry-point.cpp"]={"clang/test/SemaCXX/ms-overload-entry-point.cpp:14:6: error: conflicting types for \'wWinMain\'"}
Line 6,837: Line 6,839:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"8d0c621ca600",1271471183,"Consolidate most of the integer constant expression builtin requirement\nchecking into a single funct...","Consolidate most of the integer constant expression builtin requirement\nchecking into a single function and use that throughout. Remove some\nnow unnecessary diagnostics and update tests with now more accurate\ndiagnostics.\n\nllvm-svn: 101610"},
[b]={"8d0c621ca600",1271471183,"Consolidate most of the integer constant expression builtin requirement","Consolidate most of the integer constant expression builtin requirement\nchecking into a single function and use that throughout. Remove some\nnow unnecessary diagnostics and update tests with now more accurate\ndiagnostics.\n\nllvm-svn: 101610"},
[h]={{p,8784,"/// SemaBuiltinConstantArg - Handle a check if argument ArgNum of CallExpr\n/// TheCall is a constant expression.\nbool Sema::SemaBuiltinConstantArg(CallExpr *TheCall, int ArgNum, llvm::APSInt &Result) {\n  // ...\n  if (!(R = Arg->getIntegerConstantExpr(Context)))\n    return Diag(TheCall->getBeginLoc(), diag::err_constant_integer_arg_type) << FDecl->getDeclName() << Arg->getSourceRange();"}},
[h]={{o,8784,"/// SemaBuiltinConstantArg - Handle a check if argument ArgNum of CallExpr\n/// TheCall is a constant expression.\nbool Sema::SemaBuiltinConstantArg(CallExpr *TheCall, int ArgNum, llvm::APSInt &Result) {\n  // ...\n  if (!(R = Arg->getIntegerConstantExpr(Context)))\n    return Diag(TheCall->getBeginLoc(), diag::err_constant_integer_arg_type) << FDecl->getDeclName() << Arg->getSourceRange();"}},
[j]={
[j]={
["clang/test/Sema/builtin-stackaddress.c"]={"clang/test/Sema/builtin-stackaddress.c:8:8: error: argument to \'__builtin_return_address\' must be a constant integer","clang/test/Sema/builtin-stackaddress.c:27:8: error: argument to \'__builtin_frame_address\' must be a constant integer"}
["clang/test/Sema/builtin-stackaddress.c"]={"clang/test/Sema/builtin-stackaddress.c:8:8: error: argument to \'__builtin_return_address\' must be a constant integer","clang/test/Sema/builtin-stackaddress.c:27:8: error: argument to \'__builtin_frame_address\' must be a constant integer"}
Line 6,849: Line 6,851:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={ab,1576908663,Z,Y},
[b]={Z,1576908663,X,Y},
[h]={{r,7040,"/// 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(); })) {"}},
[h]={{s,7040,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  // Perform checks that can\'t be done until we know all the properties of a\n  // member function (whether it\'s defaulted, deleted, virtual, overriding,\n  // ...).\n  auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) {\n    // ...\n    if (ReportOverrides(*this, MD->isConsteval() ? diag::err_consteval_override : diag::err_non_consteval_override, MD, [&](const CXXMethodDecl *V) { return MD->isConsteval() != V->isConsteval(); })) {"}},
[j]={
[j]={
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:461:20: error: consteval function \'g\' cannot override a non-consteval function","clang/test/SemaCXX/cxx2a-consteval.cpp:485:38: error: consteval function \'operator==\' cannot override a non-consteval function"}
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:461:20: error: consteval function \'g\' cannot override a non-consteval function","clang/test/SemaCXX/cxx2a-consteval.cpp:485:38: error: consteval function \'operator==\' cannot override a non-consteval function"}
Line 6,861: Line 6,863:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={ib,1317436288,kb,hb},
[b]={nb,1317436288,ob,eb},
[h]={{r,1990,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    default:\n      if (Kind == Sema::CheckConstexprKind::Diagnose) {\n        SemaRef.Diag(DS->getBeginLoc(), diag::err_constexpr_body_invalid_stmt) << isa<CXXConstructorDecl>(Dcl) << Dcl->isConsteval();"},{r,2220,"/// Check the provided statement is allowed in a constexpr function\n/// definition.\nstatic bool CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S, SmallVectorImpl<SourceLocation> &ReturnStmts, SourceLocation &Cxx1yLoc, SourceLocation &Cxx2aLoc, SourceLocation &Cxx2bLoc, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (Kind == Sema::CheckConstexprKind::Diagnose) {\n    SemaRef.Diag(S->getBeginLoc(), diag::err_constexpr_body_invalid_stmt) << isa<CXXConstructorDecl>(Dcl) << Dcl->isConsteval();"}},
[h]={{s,1990,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    default:\n      if (Kind == Sema::CheckConstexprKind::Diagnose) {\n        SemaRef.Diag(DS->getBeginLoc(), diag::err_constexpr_body_invalid_stmt) << isa<CXXConstructorDecl>(Dcl) << Dcl->isConsteval();"},{s,2220,"/// Check the provided statement is allowed in a constexpr function\n/// definition.\nstatic bool CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S, SmallVectorImpl<SourceLocation> &ReturnStmts, SourceLocation &Cxx1yLoc, SourceLocation &Cxx2aLoc, SourceLocation &Cxx2bLoc, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (Kind == Sema::CheckConstexprKind::Diagnose) {\n    SemaRef.Diag(S->getBeginLoc(), diag::err_constexpr_body_invalid_stmt) << isa<CXXConstructorDecl>(Dcl) << Dcl->isConsteval();"}},
[j]={
[j]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:93:5: error: statement not allowed in constexpr constructor"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:93:5: error: statement not allowed in constexpr constructor"}
Line 6,873: Line 6,875:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={ib,1317436288,kb,hb},
[b]={nb,1317436288,ob,eb},
[h]={{r,2379,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n  // ...\n  } else {\n    if (ReturnStmts.empty()) {\n      // ...\n      case Sema::CheckConstexprKind::Diagnose:\n        SemaRef.Diag(Dcl->getLocation(), OK ? diag::warn_cxx11_compat_constexpr_body_no_return : diag::err_constexpr_body_no_return) << Dcl->isConsteval();"}},
[h]={{s,2379,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n  // ...\n  } else {\n    if (ReturnStmts.empty()) {\n      // ...\n      case Sema::CheckConstexprKind::Diagnose:\n        SemaRef.Diag(Dcl->getLocation(), OK ? diag::warn_cxx11_compat_constexpr_body_no_return : diag::err_constexpr_body_no_return) << Dcl->isConsteval();"}},
[j]={
[j]={
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:48:15: error: no return statement in consteval function"}
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:48:15: error: no return statement in consteval function"}
Line 6,885: Line 6,887:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"a77a0a6bf221",1313442247,"Track in the AST whether a function is constexpr.\n\nllvm-svn: 137653","Track in the AST whether a function is constexpr.\n\nllvm-svn: 137653"},
[b]={"a77a0a6bf221",1313442247,"Track in the AST whether a function is constexpr.","Track in the AST whether a function is constexpr.\n\nllvm-svn: 137653"},
[h]={{n,9963,"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 (ConstexprKind != ConstexprSpecKind::Unspecified) {\n      // ...\n      // C++11 [dcl.constexpr]p3: functions declared constexpr are required to\n      // be either constructors or to return a literal type. Therefore,\n      // destructors cannot be declared constexpr.\n      if (isa<CXXDestructorDecl>(NewFD) && (!getLangOpts().CPlusPlus20 || ConstexprKind == ConstexprSpecKind::Consteval)) {\n        Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_dtor) << static_cast<int>(ConstexprKind);"}},
[h]={{m,9963,"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 (ConstexprKind != ConstexprSpecKind::Unspecified) {\n      // ...\n      // C++11 [dcl.constexpr]p3: functions declared constexpr are required to\n      // be either constructors or to return a literal type. Therefore,\n      // destructors cannot be declared constexpr.\n      if (isa<CXXDestructorDecl>(NewFD) && (!getLangOpts().CPlusPlus20 || ConstexprKind == ConstexprSpecKind::Consteval)) {\n        Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_dtor) << static_cast<int>(ConstexprKind);"}},
[j]={
[j]={
["clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp"]={"clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp:11:3: error: destructor cannot be declared constexpr"}
["clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp"]={"clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp:11:3: error: destructor cannot be declared constexpr"}
Line 6,897: Line 6,899:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a na...","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[b]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[h]={{r,1697,"/// Determine whether a destructor cannot be constexpr due to\nstatic bool CheckConstexprDestructorSubobjects(Sema &SemaRef, const CXXDestructorDecl *DD, Sema::CheckConstexprKind Kind) {\n  auto Check = [&](SourceLocation Loc, QualType T, const FieldDecl *FD) {\n    // ...\n    if (Kind == Sema::CheckConstexprKind::Diagnose) {\n      SemaRef.Diag(DD->getLocation(), diag::err_constexpr_dtor_subobject) << static_cast<int>(DD->getConstexprKind()) << !FD << (FD ? FD->getDeclName() : DeclarationName()) << T;"}},
[h]={{s,1697,"/// Determine whether a destructor cannot be constexpr due to\nstatic bool CheckConstexprDestructorSubobjects(Sema &SemaRef, const CXXDestructorDecl *DD, Sema::CheckConstexprKind Kind) {\n  auto Check = [&](SourceLocation Loc, QualType T, const FieldDecl *FD) {\n    // ...\n    if (Kind == Sema::CheckConstexprKind::Diagnose) {\n      SemaRef.Diag(DD->getLocation(), diag::err_constexpr_dtor_subobject) << static_cast<int>(DD->getConstexprKind()) << !FD << (FD ? FD->getDeclName() : DeclarationName()) << T;"}},
[j]={
[j]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:62:15: error: destructor cannot be declared constexpr because base class \'A\' does not have a constexpr destructor","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:66:15: error: destructor cannot be declared constexpr because data member \'a\' does not have a constexpr destructor"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:62:15: error: destructor cannot be declared constexpr because base class \'A\' does not have a constexpr destructor","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:66:15: error: destructor cannot be declared constexpr because data member \'a\' does not have a constexpr destructor"}
Line 6,909: Line 6,911:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={Tb,1615397021,Ub,Vb},
[b]={dc,1615397021,cc,fc},
[h]={{t,4058,"/// CheckCXXBooleanCondition - Returns true if a conversion to bool is invalid.\nExprResult Sema::CheckCXXBooleanCondition(Expr *CondExpr, bool IsConstexpr) {\n  // ...\n  E = VerifyIntegerConstantExpression(E.get(), &Cond, diag::err_constexpr_if_condition_expression_is_not_constant);"}},
[h]={{u,4058,"/// CheckCXXBooleanCondition - Returns true if a conversion to bool is invalid.\nExprResult Sema::CheckCXXBooleanCondition(Expr *CondExpr, bool IsConstexpr) {\n  // ...\n  E = VerifyIntegerConstantExpression(E.get(), &Cond, diag::err_constexpr_if_condition_expression_is_not_constant);"}},
[j]={
[j]={
["clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp"]={"clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp:63:19: error: constexpr if condition is not a constant expression","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp:65:19: error: constexpr if condition is not a constant expression"}
["clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp"]={"clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp:63:19: error: constexpr if condition is not a constant expression","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp:65:19: error: constexpr if condition is not a constant expression"}
Line 6,921: Line 6,923:
[f]=a,
[f]=a,
[g]=a,
[g]=a,
[b]={"7b3515880c22",1603602504,"For P0732R2, P1907R1: ensure that template parameter objects don\'t refer\nto disallowed objects or ha...","For P0732R2, P1907R1: ensure that template parameter objects don\'t refer\nto disallowed objects or have non-constant destruction."},
[b]={"7b3515880c22",1603602504,"For P0732R2, P1907R1: ensure that template parameter objects don\'t refer","For P0732R2, P1907R1: ensure that template parameter objects don\'t refer\nto disallowed objects or have non-constant destruction."},
[h]={{R,5990,"/// EvaluateConvertedConstantExpression - Evaluate an Expression\n/// That is a converted constant expression\n/// (which was built with BuildConvertedConstantExpression)\nstatic ExprResult EvaluateConvertedConstantExpression(Sema &S, Expr *E, QualType T, APValue &Value, Sema::CCEKind CCE, bool RequireInt, const APValue &PreNarrowingValue) {\n  // ...\n  // It\'s not a constant expression. Produce an appropriate diagnostic.\n  if (Notes.size() == 1 && Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr) {\n  // ...\n  } else if (!Notes.empty() && Notes[0].second.getDiagID() == diag::note_constexpr_invalid_template_arg) {\n    Notes[0].second.setDiagID(diag::err_constexpr_invalid_template_arg);"}},
[h]={{S,5990,"/// EvaluateConvertedConstantExpression - Evaluate an Expression\n/// That is a converted constant expression\n/// (which was built with BuildConvertedConstantExpression)\nstatic ExprResult EvaluateConvertedConstantExpression(Sema &S, Expr *E, QualType T, APValue &Value, Sema::CCEKind CCE, bool RequireInt, const APValue &PreNarrowingValue) {\n  // ...\n  // It\'s not a constant expression. Produce an appropriate diagnostic.\n  if (Notes.size() == 1 && Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr) {\n  // ...\n  } else if (!Notes.empty() && Notes[0].second.getDiagID() == diag::note_constexpr_invalid_template_arg) {\n    Notes[0].second.setDiagID(diag::err_constexpr_invalid_template_arg);"}},
[j]={
[j]={
["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:233:5: error: reference to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:234:5: error: reference to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:239:5: error: reference to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:240:5: error: reference to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:244:5: error: reference to subobject of temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:247:5: error: pointer to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:248:5: error: pointer to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:249:5: error: pointer to subobject of temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:253:5: error: pointer to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:258:5: error: pointer to string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:259:5: error: reference to string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:260:5: error: pointer to subobject of string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:261:5: error: reference to subobject of string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:265:5: error: pointer to subobject of string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:266:5: error: reference to subobject of string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:271:5: error: pointer to type_info object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:272:5: error: reference to type_info object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:276:5: error: pointer to type_info object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:277:5: error: reference to type_info object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:287:7: error: pointer to subobject of predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:288:7: error: pointer to subobject of predefined \'__PRETTY_FUNCTION__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:289:7: error: reference to predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:290:7: error: pointer to predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:291:7: error: reference to predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:292:7: error: pointer to subobject of predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:293:7: error: reference to subobject of predefined \'__func__\' variable is not allowed in a template argument"}
["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:233:5: error: reference to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:234:5: error: reference to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:239:5: error: reference to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:240:5: error: reference to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:244:5: error: reference to subobject of temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:247:5: error: pointer to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:248:5: error: pointer to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:249:5: error: pointer to subobject of temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:253:5: error: pointer to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:258:5: error: pointer to string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:259:5: error: reference to string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:260:5: error: pointer to subobject of string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:261:5: error: reference to subobject of string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:265:5: error: pointer to subobject of string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:266:5: error: reference to subobject of string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:271:5: error: pointer to type_info object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:272:5: error: reference to type_info object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:276:5: error: pointer to type_info object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:277:5: error: reference to type_info object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:287:7: error: pointer to subobject of predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:288:7: error: pointer to subobject of predefined \'__PRETTY_FUNCTION__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:289:7: error: reference to predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:290:7: error: pointer to predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:291:7: error: reference to predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:292:7: error: pointer to subobject of predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:293:7: error: reference to subobject of predefined \'__func__\' variable is not allowed in a template argument"}
Line 6,933: Line 6,935:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and\nstatement in constexpr func...","C++1y constexpr extensions, round 1: Allow most forms of declaration and\nstatement in constexpr functions. Everything which doesn\'t require variable\nmutation is also allowed as an extension in C++11. \'void\' becomes a literal\ntype to support constexpr functions which return \'void\'.\n\nllvm-svn: 180022"},
[b]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and","C++1y constexpr extensions, round 1: Allow most forms of declaration and\nstatement in constexpr functions. Everything which doesn\'t require variable\nmutation is also allowed as an extension in C++11. \'void\' becomes a literal\ntype to support constexpr functions which return \'void\'.\n\nllvm-svn: 180022"},
[h]={{r,1949,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    case Decl::Var:\n    case Decl::Decomposition: {\n      // ...\n      if (VD->isThisDeclarationADefinition()) {\n        // ...\n        } else if (CheckLiteralType(SemaRef, Kind, VD->getLocation(), VD->getType(), diag::err_constexpr_local_var_non_literal_type, isa<CXXConstructorDecl>(Dcl))) {"}},
[h]={{s,1949,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    case Decl::Var:\n    case Decl::Decomposition: {\n      // ...\n      if (VD->isThisDeclarationADefinition()) {\n        // ...\n        } else if (CheckLiteralType(SemaRef, Kind, VD->getLocation(), VD->getType(), diag::err_constexpr_local_var_non_literal_type, isa<CXXConstructorDecl>(Dcl))) {"}},
[j]={
[j]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:32:14: error: variable of non-literal type \'Nonlit\' cannot be defined in a constexpr function before C++23"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:32:14: error: variable of non-literal type \'Nonlit\' cannot be defined in a constexpr function before C++23"}
Line 6,945: Line 6,947:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"3f333f2edf49",1328335817,"Disallow constexpr main.\n\nllvm-svn: 149770","Disallow constexpr main.\n\nllvm-svn: 149770"},
[b]={"3f333f2edf49",1328335817,"Disallow constexpr main.","Disallow constexpr main.\n\nllvm-svn: 149770"},
[h]={{n,12090,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // ...\n  if (FD->isConstexpr()) {\n    Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_main) << FD->isConsteval() << FixItHint::CreateRemoval(DS.getConstexprSpecLoc());"}},
[h]={{m,12090,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // ...\n  if (FD->isConstexpr()) {\n    Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_main) << FD->isConsteval() << FixItHint::CreateRemoval(DS.getConstexprSpecLoc());"}},
[j]={
[j]={
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:66:1: error: \'main\' is not allowed to be declared consteval"}
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:66:1: error: \'main\' is not allowed to be declared consteval"}
Line 6,957: Line 6,959:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={ib,1317436288,kb,hb},
[b]={nb,1317436288,ob,eb},
[h]={{r,1730,"/// Check whether a function\'s parameter types are all literal types. If so,\n/// return true. If not, produce a suitable diagnostic and return false.\nstatic bool CheckConstexprParameterTypes(Sema &SemaRef, const FunctionDecl *FD, Sema::CheckConstexprKind Kind) {\n  // ...\n  for (FunctionProtoType::param_type_iterator i = FT->param_type_begin(), e = FT->param_type_end(); i != e; ++i, ++ArgIndex) {\n    // ...\n    if (CheckLiteralType(SemaRef, Kind, ParamLoc, *i, diag::err_constexpr_non_literal_param, ArgIndex + 1, PD->getSourceRange(), isa<CXXConstructorDecl>(FD), FD->isConsteval()))"}},
[h]={{s,1730,"/// Check whether a function\'s parameter types are all literal types. If so,\n/// return true. If not, produce a suitable diagnostic and return false.\nstatic bool CheckConstexprParameterTypes(Sema &SemaRef, const FunctionDecl *FD, Sema::CheckConstexprKind Kind) {\n  // ...\n  for (FunctionProtoType::param_type_iterator i = FT->param_type_begin(), e = FT->param_type_end(); i != e; ++i, ++ArgIndex) {\n    // ...\n    if (CheckLiteralType(SemaRef, Kind, ParamLoc, *i, diag::err_constexpr_non_literal_param, ArgIndex + 1, PD->getSourceRange(), isa<CXXConstructorDecl>(FD), FD->isConsteval()))"}},
[j]={
[j]={
["clang/test/CXX/basic/basic.types/p10.cpp"]={"clang/test/CXX/basic/basic.types/p10.cpp:43:29: error: constexpr function\'s 1st parameter type \'UserProvDtor\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:48:28: error: constexpr function\'s 1st parameter type \'NonTrivDtor\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:56:56: error: constexpr function\'s 1st parameter type \'DerivedFromNonTrivDtor<NonTrivDtorBase>\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:80:29: error: constexpr function\'s 1st parameter type \'CopyCtorOnly\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:84:29: error: constexpr function\'s 1st parameter type \'MoveCtorOnly\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:100:43: error: constexpr function\'s 1st parameter type \'DerivedFromVBase<HasVBase>\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:108:29: error: constexpr function\'s 1st parameter type \'NonLitMember\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:113:27: error: constexpr function\'s 1st parameter type \'NonLitBase\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:123:39: error: constexpr function\'s 1st parameter type \'MemberType<NonLiteral>\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:137:23: error: constexpr function\'s 1st parameter type \'ArrBad\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:158:20: error: constexpr function\'s 1st parameter type \'D\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:177:20: error: constexpr function\'s 1st parameter type \'H\' is not a literal type"}
["clang/test/CXX/basic/basic.types/p10.cpp"]={"clang/test/CXX/basic/basic.types/p10.cpp:43:29: error: constexpr function\'s 1st parameter type \'UserProvDtor\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:48:28: error: constexpr function\'s 1st parameter type \'NonTrivDtor\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:56:56: error: constexpr function\'s 1st parameter type \'DerivedFromNonTrivDtor<NonTrivDtorBase>\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:80:29: error: constexpr function\'s 1st parameter type \'CopyCtorOnly\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:84:29: error: constexpr function\'s 1st parameter type \'MoveCtorOnly\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:100:43: error: constexpr function\'s 1st parameter type \'DerivedFromVBase<HasVBase>\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:108:29: error: constexpr function\'s 1st parameter type \'NonLitMember\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:113:27: error: constexpr function\'s 1st parameter type \'NonLitBase\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:123:39: error: constexpr function\'s 1st parameter type \'MemberType<NonLiteral>\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:137:23: error: constexpr function\'s 1st parameter type \'ArrBad\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:158:20: error: constexpr function\'s 1st parameter type \'D\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:177:20: error: constexpr function\'s 1st parameter type \'H\' is not a literal type"}
Line 6,969: Line 6,971:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={ib,1317436288,kb,hb},
[b]={nb,1317436288,ob,eb},
[h]={{r,1743,"/// Check whether a function\'s return type is a literal type. If so, return\n/// true. If not, produce a suitable diagnostic and return false.\nstatic bool CheckConstexprReturnType(Sema &SemaRef, const FunctionDecl *FD, Sema::CheckConstexprKind Kind) {\n  if (CheckLiteralType(SemaRef, Kind, FD->getLocation(), FD->getReturnType(), diag::err_constexpr_non_literal_return, FD->isConsteval()))"}},
[h]={{s,1743,"/// Check whether a function\'s return type is a literal type. If so, return\n/// true. If not, produce a suitable diagnostic and return false.\nstatic bool CheckConstexprReturnType(Sema &SemaRef, const FunctionDecl *FD, Sema::CheckConstexprKind Kind) {\n  if (CheckLiteralType(SemaRef, Kind, FD->getLocation(), FD->getReturnType(), diag::err_constexpr_non_literal_return, FD->isConsteval()))"}},
[j]={
[j]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp:67:26: error: constexpr function\'s return type \'T3<VirtBase>\' is not a literal type"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp:67:26: error: constexpr function\'s return type \'T3<VirtBase>\' is not a literal type"}
Line 6,981: Line 6,983:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={ib,1317436288,kb,hb},
[b]={nb,1317436288,ob,eb},
[h]={{r,672,"/// 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++11 [dcl.constexpr]p1: If any declaration of a function or function\n  // template has a constexpr specifier then all its declarations shall\n  // contain the constexpr specifier.\n  if (New->getConstexprKind() != Old->getConstexprKind()) {\n    Diag(New->getLocation(), diag::err_constexpr_redecl_mismatch) << New << static_cast<int>(New->getConstexprKind()) << static_cast<int>(Old->getConstexprKind());"}},
[h]={{s,672,"/// 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++11 [dcl.constexpr]p1: If any declaration of a function or function\n  // template has a constexpr specifier then all its declarations shall\n  // contain the constexpr specifier.\n  if (New->getConstexprKind() != Old->getConstexprKind()) {\n    Diag(New->getLocation(), diag::err_constexpr_redecl_mismatch) << New << static_cast<int>(New->getConstexprKind()) << static_cast<int>(Old->getConstexprKind());"}},
[j]={
[j]={
["clang/test/CXX/special/class.copy/p13-0x.cpp"]={"clang/test/CXX/special/class.copy/p13-0x.cpp:100:25: error: constexpr declaration of \'V\' follows non-constexpr declaration","clang/test/CXX/special/class.copy/p13-0x.cpp:103:25: error: constexpr declaration of \'W\' follows non-constexpr declaration","clang/test/CXX/special/class.copy/p13-0x.cpp:109:28: error: constexpr declaration of \'S\' follows non-constexpr declaration","clang/test/CXX/special/class.copy/p13-0x.cpp:112:28: error: constexpr declaration of \'S\' follows non-constexpr declaration"}
["clang/test/CXX/special/class.copy/p13-0x.cpp"]={"clang/test/CXX/special/class.copy/p13-0x.cpp:100:25: error: constexpr declaration of \'V\' follows non-constexpr declaration","clang/test/CXX/special/class.copy/p13-0x.cpp:103:25: error: constexpr declaration of \'W\' follows non-constexpr declaration","clang/test/CXX/special/class.copy/p13-0x.cpp:109:28: error: constexpr declaration of \'S\' follows non-constexpr declaration","clang/test/CXX/special/class.copy/p13-0x.cpp:112:28: error: constexpr declaration of \'S\' follows non-constexpr declaration"}
Line 6,993: Line 6,995:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"2887ad35c58d",1418458376,"Sema: Constexpr functions must have return statements which have an expr\n\nclang lets programmers be ...","Sema: Constexpr functions must have return statements which have an expr\n\nclang lets programmers be pretty cavalier when it comes to void return\nstatements in functions which have non-void return types.  However, we\ncannot be so forgiving in constexpr functions: evaluation will go off\nthe rails very quickly.\n\nInstead, keep the return statement in the AST but mark the function as\ninvalid.  Doing so gives us nice diagnostics while making constexpr\nevaluation halt.\n\nThis fixes PR21859.\n\nllvm-svn: 224189"},
[b]={"2887ad35c58d",1418458376,"Sema: Constexpr functions must have return statements which have an expr","Sema: Constexpr functions must have return statements which have an expr\n\nclang lets programmers be pretty cavalier when it comes to void return\nstatements in functions which have non-void return types.  However, we\ncannot be so forgiving in constexpr functions: evaluation will go off\nthe rails very quickly.\n\nInstead, keep the return statement in the AST but mark the function as\ninvalid.  Doing so gives us nice diagnostics while making constexpr\nevaluation halt.\n\nThis fixes PR21859.\n\nllvm-svn: 224189"},
[h]={{Q,4134,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  // ...\n  if (FnRetType->isVoidType()) {\n  // ...\n  } else if (!RetValExp && !HasDependentReturnType) {\n    // ...\n    if ((FD && FD->isInvalidDecl()) || FnRetType->containsErrors()) {\n    // ...\n    } else if (getLangOpts().CPlusPlus11 && FD && FD->isConstexpr()) {\n      // ...\n      Diag(ReturnLoc, diag::err_constexpr_return_missing_expr) << FD << FD->isConsteval();"}},
[h]={{R,4134,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  // ...\n  if (FnRetType->isVoidType()) {\n  // ...\n  } else if (!RetValExp && !HasDependentReturnType) {\n    // ...\n    if ((FD && FD->isInvalidDecl()) || FnRetType->containsErrors()) {\n    // ...\n    } else if (getLangOpts().CPlusPlus11 && FD && FD->isConstexpr()) {\n      // ...\n      Diag(ReturnLoc, diag::err_constexpr_return_missing_expr) << FD << FD->isConsteval();"}},
[j]={
[j]={
["clang/test/SemaCXX/consteval-return-void.cpp"]={"clang/test/SemaCXX/consteval-return-void.cpp:3:23: error: non-void consteval function \'Fun\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:5:47: error: non-void consteval function \'FunT1\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:8:42: error: non-void consteval function \'FunT2<int>\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:12:30: error: non-void constexpr function \'operator+\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:13:30: error: non-void consteval function \'operator-\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:14:52: error: non-void constexpr function \'operator+\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:15:52: error: non-void consteval function \'operator-\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:19:47: error: non-void constexpr function \'operator*<int>\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:20:47: error: non-void consteval function \'operator/<int>\' should return a value"}
["clang/test/SemaCXX/consteval-return-void.cpp"]={"clang/test/SemaCXX/consteval-return-void.cpp:3:23: error: non-void consteval function \'Fun\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:5:47: error: non-void consteval function \'FunT1\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:8:42: error: non-void consteval function \'FunT2<int>\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:12:30: error: non-void constexpr function \'operator+\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:13:30: error: non-void consteval function \'operator-\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:14:52: error: non-void constexpr function \'operator+\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:15:52: error: non-void consteval function \'operator-\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:19:47: error: non-void constexpr function \'operator*<int>\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:20:47: error: non-void consteval function \'operator/<int>\' should return a value"}
Line 7,005: Line 7,007:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"eda3c8469827",1320704177,"constexpr: static data members declared constexpr are required to have an\ninitializer; all other con...","constexpr: static data members declared constexpr are required to have an\ninitializer; all other constexpr variables are merely required to be\ninitialized. In particular, a user-provided constexpr default constructor can be\nused for such initialization.\n\nllvm-svn: 144028"},
[b]={"eda3c8469827",1320704177,"constexpr: static data members declared constexpr are required to have an","constexpr: static data members declared constexpr are required to have an\ninitializer; all other constexpr variables are merely required to be\ninitialized. In particular, a user-provided constexpr default constructor can be\nused for such initialization.\n\nllvm-svn: 144028"},
[h]={{n,13686,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    // C++11 [class.static.data]p3: A static data member can be declared with\n    // the constexpr specifier; if so, its declaration shall specify\n    // a brace-or-equal-initializer.\n    // C++11 [dcl.constexpr]p1: The constexpr specifier shall be applied only to\n    // the definition of a variable [...] or the declaration of a static data\n    // member.\n    if (Var->isConstexpr() && !Var->isThisDeclarationADefinition() && !Var->isThisDeclarationADemotedDefinition()) {\n      if (Var->isStaticDataMember()) {\n        // C++1z removes the relevant rule; the in-class declaration is always\n        // a definition there.\n        if (!getLangOpts().CPlusPlus17 && !Context.getTargetInfo().getCXXABI().isMicrosoft()) {\n          Diag(Var->getLocation(), diag::err_constexpr_static_mem_var_requires_init) << Var;"}},
[h]={{m,13686,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    // C++11 [class.static.data]p3: A static data member can be declared with\n    // the constexpr specifier; if so, its declaration shall specify\n    // a brace-or-equal-initializer.\n    // C++11 [dcl.constexpr]p1: The constexpr specifier shall be applied only to\n    // the definition of a variable [...] or the declaration of a static data\n    // member.\n    if (Var->isConstexpr() && !Var->isThisDeclarationADefinition() && !Var->isThisDeclarationADemotedDefinition()) {\n      if (Var->isStaticDataMember()) {\n        // C++1z removes the relevant rule; the in-class declaration is always\n        // a definition there.\n        if (!getLangOpts().CPlusPlus17 && !Context.getTargetInfo().getCXXABI().isMicrosoft()) {\n          Diag(Var->getLocation(), diag::err_constexpr_static_mem_var_requires_init) << Var;"}},
[j]={
[j]={
["clang/test/CXX/class/class.static/class.static.data/p3.cpp"]={"clang/test/CXX/class/class.static/class.static.data/p3.cpp:10:24: error: declaration of constexpr static data member \'b\' requires an initializer","clang/test/CXX/class/class.static/class.static.data/p3.cpp:40:24: error: declaration of constexpr static data member \'b\' requires an initializer"}
["clang/test/CXX/class/class.static/class.static.data/p3.cpp"]={"clang/test/CXX/class/class.static/class.static.data/p3.cpp:10:24: error: declaration of constexpr static data member \'b\' requires an initializer","clang/test/CXX/class/class.static/class.static.data/p3.cpp:40:24: error: declaration of constexpr static data member \'b\' requires an initializer"}
Line 7,017: Line 7,019:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"a77a0a6bf221",1313442247,"Track in the AST whether a function is constexpr.\n\nllvm-svn: 137653","Track in the AST whether a function is constexpr.\n\nllvm-svn: 137653"},
[b]={"a77a0a6bf221",1313442247,"Track in the AST whether a function is constexpr.","Track in the AST whether a function is constexpr.\n\nllvm-svn: 137653"},
[h]={{n,5123,"/// 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.hasConstexprSpecifier()) {\n    // C++0x [dcl.constexpr]p1: constexpr can only be applied to declarations\n    // and definitions of functions and variables.\n    // C++2a [dcl.constexpr]p1: The consteval specifier shall be applied only to\n    // the declaration of a function or function template\n    if (Tag)\n      Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_tag) << GetDiagnosticTypeSpecifierID(DS) << static_cast<int>(DS.getConstexprSpecifier());"}},
[h]={{m,5123,"/// 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.hasConstexprSpecifier()) {\n    // C++0x [dcl.constexpr]p1: constexpr can only be applied to declarations\n    // and definitions of functions and variables.\n    // C++2a [dcl.constexpr]p1: The consteval specifier shall be applied only to\n    // the declaration of a function or function template\n    if (Tag)\n      Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_tag) << GetDiagnosticTypeSpecifierID(DS) << static_cast<int>(DS.getConstexprSpecifier());"}},
[j]={
[j]={
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:37:1: error: struct cannot be marked consteval"}
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:37:1: error: struct cannot be marked consteval"}
Line 7,029: Line 7,031:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"3607ffee5cca",1329105243,"Update constexpr implementation to match CWG\'s chosen approach for core issues\n1358, 1360, 1452 and ...","Update constexpr implementation to match CWG\'s chosen approach for core issues\n1358, 1360, 1452 and 1453.\n - Instantiations of constexpr functions are always constexpr. This removes the\n  need for separate declaration/definition checking, which is now gone.\n - This makes it possible for a constexpr function to be virtual, if they are\n  only dependently virtual. Virtual calls to such functions are not constant\n  expressions.\n - Likewise, it\'s now possible for a literal type to have virtual base classes.\n  A constexpr constructor for such a type cannot actually produce a constant\n  expression, though, so add a special-case diagnostic for a constructor call\n  to such a type rather than trying to evaluate it.\n - Classes with trivial default constructors (for which value initialization can\n  produce a fully-initialized value) are considered literal types.\n - Classes with volatile members are not literal types.\n - constexpr constructors can be members of non-literal types. We do not yet use\n  static initialization for global objects constructed in this way.\n\nllvm-svn: 150359"},
[b]={"3607ffee5cca",1329105243,"Update constexpr implementation to match CWG\'s chosen approach for core issues","Update constexpr implementation to match CWG\'s chosen approach for core issues\n1358, 1360, 1452 and 1453.\n - Instantiations of constexpr functions are always constexpr. This removes the\n  need for separate declaration/definition checking, which is now gone.\n - This makes it possible for a constexpr function to be virtual, if they are\n  only dependently virtual. Virtual calls to such functions are not constant\n  expressions.\n - Likewise, it\'s now possible for a literal type to have virtual base classes.\n  A constexpr constructor for such a type cannot actually produce a constant\n  expression, though, so add a special-case diagnostic for a constructor call\n  to such a type rather than trying to evaluate it.\n - Classes with trivial default constructors (for which value initialization can\n  produce a fully-initialized value) are considered literal types.\n - Classes with volatile members are not literal types.\n - constexpr constructors can be members of non-literal types. We do not yet use\n  static initialization for global objects constructed in this way.\n\nllvm-svn: 150359"},
[h]={{n,8762,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (NewVD->isConstexpr() && !T->isDependentType() && RequireLiteralType(NewVD->getLocation(), T, diag::err_constexpr_var_non_literal)) {"}},
[h]={{m,8762,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (NewVD->isConstexpr() && !T->isDependentType() && RequireLiteralType(NewVD->getLocation(), T, diag::err_constexpr_var_non_literal)) {"}},
[j]={
[j]={
["clang/test/CXX/special/class.ctor/p6-0x.cpp"]={"clang/test/CXX/special/class.ctor/p6-0x.cpp:25:25: error: constexpr variable cannot have non-literal type \'const NonConstexpr3\'"}
["clang/test/CXX/special/class.ctor/p6-0x.cpp"]={"clang/test/CXX/special/class.ctor/p6-0x.cpp:25:25: error: constexpr variable cannot have non-literal type \'const NonConstexpr3\'"}
Line 7,041: Line 7,043:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a na...","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[b]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[h]={{r,15886,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n  // ...\n  // If the destructor is constexpr, check whether the variable has constant\n  // destruction now.\n  if (Destructor->isConstexpr()) {\n    // ...\n    if (!VD->evaluateDestruction(Notes) && VD->isConstexpr() && HasConstantInit) {\n      Diag(VD->getLocation(), diag::err_constexpr_var_requires_const_destruction) << VD;"}},
[h]={{s,15886,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n  // ...\n  // If the destructor is constexpr, check whether the variable has constant\n  // destruction now.\n  if (Destructor->isConstexpr()) {\n    // ...\n    if (!VD->evaluateDestruction(Notes) && VD->isConstexpr() && HasConstantInit) {\n      Diag(VD->getLocation(), diag::err_constexpr_var_requires_const_destruction) << VD;"}},
[j]={
[j]={
["clang/test/CXX/expr/expr.const/p6-2a.cpp"]={"clang/test/CXX/expr/expr.const/p6-2a.cpp:17:19: error: constexpr variable \'mut_member\' must have constant destruction","clang/test/CXX/expr/expr.const/p6-2a.cpp:23:24: error: constexpr variable \'mut_store\' must have constant destruction","clang/test/CXX/expr/expr.const/p6-2a.cpp:35:24: error: constexpr variable \'mc\' must have constant destruction","clang/test/CXX/expr/expr.const/p6-2a.cpp:43:21: error: constexpr variable \'t\' must have constant destruction"}
["clang/test/CXX/expr/expr.const/p6-2a.cpp"]={"clang/test/CXX/expr/expr.const/p6-2a.cpp:17:19: error: constexpr variable \'mut_member\' must have constant destruction","clang/test/CXX/expr/expr.const/p6-2a.cpp:23:24: error: constexpr variable \'mut_store\' must have constant destruction","clang/test/CXX/expr/expr.const/p6-2a.cpp:35:24: error: constexpr variable \'mc\' must have constant destruction","clang/test/CXX/expr/expr.const/p6-2a.cpp:43:21: error: constexpr variable \'t\' must have constant destruction"}
Line 7,053: Line 7,055:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"2316cd8b798b",1317323497,"constexpr: semantic checking for constexpr variables.\n\nWe had an extension which allowed const stati...","constexpr: semantic checking for constexpr variables.\n\nWe had an extension which allowed const static class members of floating-point type to have in-class initializers, \'as a C++0x extension\'. However, C++0x does not allow this. The extension has been kept, and extended to all literal types in C++0x mode (with a fixit to add the \'constexpr\' specifier).\n\nllvm-svn: 140801"},
[b]={"2316cd8b798b",1317323497,"constexpr: semantic checking for constexpr variables.","constexpr: semantic checking for constexpr variables.\n\nWe had an extension which allowed const static class members of floating-point type to have in-class initializers, \'as a C++0x extension\'. However, C++0x does not allow this. The extension has been kept, and extended to all literal types in C++0x mode (with a fixit to add the \'constexpr\' specifier).\n\nllvm-svn: 140801"},
[h]={{n,13830,"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        Diag(Var->getLocation(), diag::err_constexpr_var_requires_const_init) << Var;"},{n,14221,"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      Diag(DiagLoc, diag::err_constexpr_var_requires_const_init) << var << Init->getSourceRange();"},{D,8530,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  if (!ZeroInitializationFixit.empty()) {\n    // ...\n    // The initialization would have succeeded with this fixit. Since the fixit\n    // is on the error, we need to build a valid AST in this case, so this isn\'t\n    // handled in the Failed() branch above.\n    if (!DestType->isRecordType() && VD && VD->isConstexpr()) {\n      // ...\n      S.Diag(Kind.getLocation(), diag::err_constexpr_var_requires_const_init) << VD << FixItHint::CreateInsertion(ZeroInitializationFixitLoc, ZeroInitializationFixit);"},{D,9966,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_DefaultInitOfConst:\n    if (Entity.getKind() == InitializedEntity::EK_Member && isa<CXXConstructorDecl>(S.CurContext)) {\n    // ...\n    } else if (const auto *VD = dyn_cast_if_present<VarDecl>(Entity.getDecl()); VD && VD->isConstexpr()) {\n      S.Diag(Kind.getLocation(), diag::err_constexpr_var_requires_const_init) << VD;"}},
[h]={{m,13830,"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        Diag(Var->getLocation(), diag::err_constexpr_var_requires_const_init) << Var;"},{m,14221,"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      Diag(DiagLoc, diag::err_constexpr_var_requires_const_init) << var << Init->getSourceRange();"},{E,8530,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  if (!ZeroInitializationFixit.empty()) {\n    // ...\n    // The initialization would have succeeded with this fixit. Since the fixit\n    // is on the error, we need to build a valid AST in this case, so this isn\'t\n    // handled in the Failed() branch above.\n    if (!DestType->isRecordType() && VD && VD->isConstexpr()) {\n      // ...\n      S.Diag(Kind.getLocation(), diag::err_constexpr_var_requires_const_init) << VD << FixItHint::CreateInsertion(ZeroInitializationFixitLoc, ZeroInitializationFixit);"},{E,9966,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_DefaultInitOfConst:\n    if (Entity.getKind() == InitializedEntity::EK_Member && isa<CXXConstructorDecl>(S.CurContext)) {\n    // ...\n    } else if (const auto *VD = dyn_cast_if_present<VarDecl>(Entity.getDecl()); VD && VD->isConstexpr()) {\n      S.Diag(Kind.getLocation(), diag::err_constexpr_var_requires_const_init) << VD;"}},
[j]={
[j]={
["clang/test/SemaCXX/attr-weak.cpp"]={"clang/test/SemaCXX/attr-weak.cpp:47:16: error: constexpr variable \'weak_function_is_non_null\' must be initialized by a constant expression","clang/test/SemaCXX/attr-weak.cpp:49:16: error: constexpr variable \'weak_method_is_non_null\' must be initialized by a constant expression","clang/test/SemaCXX/attr-weak.cpp:56:16: error: constexpr variable \'virtual_weak_method_is_non_null\' must be initialized by a constant expression"}
["clang/test/SemaCXX/attr-weak.cpp"]={"clang/test/SemaCXX/attr-weak.cpp:47:16: error: constexpr variable \'weak_function_is_non_null\' must be initialized by a constant expression","clang/test/SemaCXX/attr-weak.cpp:49:16: error: constexpr variable \'weak_method_is_non_null\' must be initialized by a constant expression","clang/test/SemaCXX/attr-weak.cpp:56:16: error: constexpr variable \'virtual_weak_method_is_non_null\' must be initialized by a constant expression"}
Line 7,065: Line 7,067:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={ib,1317436288,kb,hb},
[b]={nb,1317436288,ob,eb},
[h]={{r,1814,"// Check whether a function declaration satisfies the requirements of a\n// constexpr function definition or a constexpr constructor definition. If so,\n// return true. If not, produce appropriate diagnostics (unless asked not to by\n// Kind) and return false.\n//\n// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.\nbool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD, CheckConstexprKind Kind) {\n  // ...\n  if (!isa<CXXConstructorDecl>(NewFD)) {\n    // ...\n    if (Method && Method->isVirtual()) {\n      if (getLangOpts().CPlusPlus20) {\n      // ...\n      } else {\n        // ...\n        Diag(Method->getLocation(), diag::err_constexpr_virtual);"}},
[h]={{s,1814,"// Check whether a function declaration satisfies the requirements of a\n// constexpr function definition or a constexpr constructor definition. If so,\n// return true. If not, produce appropriate diagnostics (unless asked not to by\n// Kind) and return false.\n//\n// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.\nbool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD, CheckConstexprKind Kind) {\n  // ...\n  if (!isa<CXXConstructorDecl>(NewFD)) {\n    // ...\n    if (Method && Method->isVirtual()) {\n      if (getLangOpts().CPlusPlus20) {\n      // ...\n      } else {\n        // ...\n        Diag(Method->getLocation(), diag::err_constexpr_virtual);"}},
[j]={
[j]={
["clang/test/SemaCXX/cxx17-compat.cpp"]={"clang/test/SemaCXX/cxx17-compat.cpp:68:26: error: virtual function cannot be constexpr"}
["clang/test/SemaCXX/cxx17-compat.cpp"]={"clang/test/SemaCXX/cxx17-compat.cpp:68:26: error: virtual function cannot be constexpr"}
Line 7,077: Line 7,079:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={ib,1317436288,kb,hb},
[b]={nb,1317436288,ob,eb},
[h]={{r,1789,"// Check whether a function declaration satisfies the requirements of a\n// constexpr function definition or a constexpr constructor definition. If so,\n// return true. If not, produce appropriate diagnostics (unless asked not to by\n// Kind) and return false.\n//\n// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.\nbool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD, CheckConstexprKind Kind) {\n  // ...\n  if (MD && MD->isInstance()) {\n    // ...\n    if (RD->getNumVBases()) {\n      // ...\n      Diag(NewFD->getLocation(), diag::err_constexpr_virtual_base) << isa<CXXConstructorDecl>(NewFD) << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getNumVBases();"}},
[h]={{s,1789,"// Check whether a function declaration satisfies the requirements of a\n// constexpr function definition or a constexpr constructor definition. If so,\n// return true. If not, produce appropriate diagnostics (unless asked not to by\n// Kind) and return false.\n//\n// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.\nbool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD, CheckConstexprKind Kind) {\n  // ...\n  if (MD && MD->isInstance()) {\n    // ...\n    if (RD->getNumVBases()) {\n      // ...\n      Diag(NewFD->getLocation(), diag::err_constexpr_virtual_base) << isa<CXXConstructorDecl>(NewFD) << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getNumVBases();"}},
[j]={
[j]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp:52:15: error: constexpr constructor not allowed in struct with virtual base class"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp:52:15: error: constexpr constructor not allowed in struct with virtual base class"}
Line 7,089: Line 7,091:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={ib,1317436288,kb,hb},
[b]={nb,1317436288,ob,eb},
[h]={{r,1890,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    case Decl::Typedef:\n    case Decl::TypeAlias: {\n      // ...\n      if (TN->getUnderlyingType()->isVariablyModifiedType()) {\n        // Don\'t allow variably-modified types in constexpr functions.\n        if (Kind == Sema::CheckConstexprKind::Diagnose) {\n          // ...\n          SemaRef.Diag(TL.getBeginLoc(), diag::err_constexpr_vla) << TL.getSourceRange() << TL.getType() << isa<CXXConstructorDecl>(Dcl);"}}
[h]={{s,1890,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///        have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    case Decl::Typedef:\n    case Decl::TypeAlias: {\n      // ...\n      if (TN->getUnderlyingType()->isVariablyModifiedType()) {\n        // Don\'t allow variably-modified types in constexpr functions.\n        if (Kind == Sema::CheckConstexprKind::Diagnose) {\n          // ...\n          SemaRef.Diag(TL.getBeginLoc(), diag::err_constexpr_vla) << TL.getSourceRange() << TL.getType() << isa<CXXConstructorDecl>(Dcl);"}}
},
},
["err_constexpr_wrong_decl_kind"]={
["err_constexpr_wrong_decl_kind"]={
Line 7,098: Line 7,100:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"796ed03b8412",1560502580,"[C++20] add Basic consteval specifier\n\nSummary:\nthis revision adds Lexing, Parsing and Basic Semanti...","[C++20] add Basic consteval specifier\n\nSummary:\nthis revision adds Lexing, Parsing and Basic Semantic for the consteval specifier as specified by http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1073r3.html\n\nwith this patch, the consteval specifier is treated as constexpr but can only be applied to function declaration.\n\nChanges:\n - add the consteval keyword.\n - add parsing of consteval specifier for normal declarations and lambdas expressions.\n - add the whether a declaration is constexpr is now represented by and enum everywhere except for variable because they can\'t be consteval.\n - adapt diagnostic about constexpr to print constexpr or consteval depending on the case.\n - add tests for basic semantic.\n\nReviewers: rsmith, martong, shafik\n\nReviewed By: rsmith\n\nSubscribers: eraman, efriedma, rnkovacs, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D61790\n\nllvm-svn: 363362"},
[b]={"796ed03b8412",1560502580,"[C++20] add Basic consteval specifier","[C++20] add Basic consteval specifier\n\nSummary:\nthis revision adds Lexing, Parsing and Basic Semantic for the consteval specifier as specified by http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1073r3.html\n\nwith this patch, the consteval specifier is treated as constexpr but can only be applied to function declaration.\n\nChanges:\n - add the consteval keyword.\n - add parsing of consteval specifier for normal declarations and lambdas expressions.\n - add the whether a declaration is constexpr is now represented by and enum everywhere except for variable because they can\'t be consteval.\n - adapt diagnostic about constexpr to print constexpr or consteval depending on the case.\n - add tests for basic semantic.\n\nReviewers: rsmith, martong, shafik\n\nReviewed By: rsmith\n\nSubscribers: eraman, efriedma, rnkovacs, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D61790\n\nllvm-svn: 363362"},
[h]={{n,5127,"/// 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.hasConstexprSpecifier()) {\n    // C++0x [dcl.constexpr]p1: constexpr can only be applied to declarations\n    // and definitions of functions and variables.\n    // C++2a [dcl.constexpr]p1: The consteval specifier shall be applied only to\n    // the declaration of a function or function template\n    if (Tag)\n    // ...\n    else\n      Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_wrong_decl_kind) << static_cast<int>(DS.getConstexprSpecifier());"},{n,7790,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  case ConstexprSpecKind::Consteval:\n    Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_wrong_decl_kind) << static_cast<int>(D.getDeclSpec().getConstexprSpecifier());"},{n,9181,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n  // ...\n  if (ConstexprKind == ConstexprSpecKind::Constinit) {\n    SemaRef.Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_wrong_decl_kind) << static_cast<int>(ConstexprKind);"}},
[h]={{m,5127,"/// 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.hasConstexprSpecifier()) {\n    // C++0x [dcl.constexpr]p1: constexpr can only be applied to declarations\n    // and definitions of functions and variables.\n    // C++2a [dcl.constexpr]p1: The consteval specifier shall be applied only to\n    // the declaration of a function or function template\n    if (Tag)\n    // ...\n    else\n      Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_wrong_decl_kind) << static_cast<int>(DS.getConstexprSpecifier());"},{m,7790,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  case ConstexprSpecKind::Consteval:\n    Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_wrong_decl_kind) << static_cast<int>(D.getDeclSpec().getConstexprSpecifier());"},{m,9181,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n  // ...\n  if (ConstexprKind == ConstexprSpecKind::Constinit) {\n    SemaRef.Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_wrong_decl_kind) << static_cast<int>(ConstexprKind);"}},
[j]={
[j]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:44:1: error: constinit can only be used in variable declarations","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:48:1: error: constinit can only be used in variable declarations","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:50:1: error: constinit can only be used in variable declarations"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:44:1: error: constinit can only be used in variable declarations","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:48:1: error: constinit can only be used in variable declarations","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:50:1: error: constinit can only be used in variable declarations"}
Line 7,110: Line 7,112:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a na...","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[b]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[h]={{n,3172,"static void diagnoseMissingConstinit(Sema &S, const VarDecl *InitDecl, const ConstInitAttr *CIAttr, bool AttrBeforeInit) {\n  // ...\n  if (AttrBeforeInit) {\n  // ...\n  } else {\n    // ...\n    S.Diag(CIAttr->getLocation(), CIAttr->isConstinit() ? diag::err_constinit_added_too_late : diag::warn_require_const_init_added_too_late) << FixItHint::CreateRemoval(SourceRange(CIAttr->getLocation()));"}},
[h]={{m,3172,"static void diagnoseMissingConstinit(Sema &S, const VarDecl *InitDecl, const ConstInitAttr *CIAttr, bool AttrBeforeInit) {\n  // ...\n  if (AttrBeforeInit) {\n  // ...\n  } else {\n    // ...\n    S.Diag(CIAttr->getLocation(), CIAttr->isConstinit() ? diag::err_constinit_added_too_late : diag::warn_require_const_init_added_too_late) << FixItHint::CreateRemoval(SourceRange(CIAttr->getLocation()));"}},
[j]={
[j]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:15:10: error: \'constinit\' specifier added after initialization of variable","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:40:1: error: \'constinit\' specifier added after initialization of variable","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:41:1: error: \'constinit\' specifier added after initialization of variable","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:42:1: error: \'constinit\' specifier added after initialization of variable"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:15:10: error: \'constinit\' specifier added after initialization of variable","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:40:1: error: \'constinit\' specifier added after initialization of variable","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:41:1: error: \'constinit\' specifier added after initialization of variable","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:42:1: error: \'constinit\' specifier added after initialization of variable"}
Line 7,122: Line 7,124:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a na...","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[b]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[h]={{n,7808,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  case ConstexprSpecKind::Constinit:\n    if (!NewVD->hasGlobalStorage())\n      Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constinit_local_variable);"}},
[h]={{m,7808,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  case ConstexprSpecKind::Constinit:\n    if (!NewVD->hasGlobalStorage())\n      Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constinit_local_variable);"}},
[j]={
[j]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:10:3: error: local variable cannot be declared \'constinit\'"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:10:3: error: local variable cannot be declared \'constinit\'"}
Line 7,134: Line 7,136:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/cla...","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
[b]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
[h]={{n,11984,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    // C++20: dcl.decl.general p4:\n    // The optional requires-clause ([temp.pre]) in an init-declarator or\n    // member-declarator shall be present only if the declarator declares a\n    // templated function ([dcl.fct]).\n    if (Expr *TRC = NewFD->getTrailingRequiresClause()) {\n      // ...\n      if (!NewFD->getDescribedFunctionTemplate() && // -a template\n        // ...\n        Diag(TRC->getBeginLoc(), diag::err_constrained_non_templated_function);"},{sb,1415,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  // ...\n  // C++20: dcl.decl.general p4:\n  // The optional requires-clause ([temp.pre]) in an init-declarator or\n  // member-declarator shall be present only if the declarator declares a\n  // templated function ([dcl.fct]).\n  if (Expr *TRC = Method->getTrailingRequiresClause()) {\n    // ...\n    // Note: we only have to check if this is defined in a template entity, OR\n    // if we are a template, since the rest don\'t apply. The requires clause\n    // applies to the call operator, which we already know is a member function,\n    // AND defined.\n    if (!Method->getDescribedFunctionTemplate() && !Method->isTemplated()) {\n      Diag(TRC->getBeginLoc(), diag::err_constrained_non_templated_function);"}},
[h]={{m,11984,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    // C++20: dcl.decl.general p4:\n    // The optional requires-clause ([temp.pre]) in an init-declarator or\n    // member-declarator shall be present only if the declarator declares a\n    // templated function ([dcl.fct]).\n    if (Expr *TRC = NewFD->getTrailingRequiresClause()) {\n      // ...\n      if (!NewFD->getDescribedFunctionTemplate() && // -a template\n        // ...\n        Diag(TRC->getBeginLoc(), diag::err_constrained_non_templated_function);"},{rb,1415,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  // ...\n  // C++20: dcl.decl.general p4:\n  // The optional requires-clause ([temp.pre]) in an init-declarator or\n  // member-declarator shall be present only if the declarator declares a\n  // templated function ([dcl.fct]).\n  if (Expr *TRC = Method->getTrailingRequiresClause()) {\n    // ...\n    // Note: we only have to check if this is defined in a template entity, OR\n    // if we are a template, since the rest don\'t apply. The requires clause\n    // applies to the call operator, which we already know is a member function,\n    // AND defined.\n    if (!Method->getDescribedFunctionTemplate() && !Method->isTemplated()) {\n      Diag(TRC->getBeginLoc(), diag::err_constrained_non_templated_function);"}},
[j]={
[j]={
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:11:34: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:12:42: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:13:53: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:15:35: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:16:31: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:18:30: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:20:23: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:23:17: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:23:35: error: non-templated function cannot have a requires clause"}
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:11:34: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:12:42: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:13:53: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:15:35: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:16:31: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:18:30: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:20:23: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:23:17: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:23:35: error: non-templated function cannot have a requires clause"}
Line 7,146: Line 7,148:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension.\n\nGCC supports the conditional operator on V...","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"},
[b]={"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"},
[h]={{n,11948,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    // Find any virtual functions that this function overrides.\n    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD)) {\n      // ...\n      if (Method->isVirtual() && NewFD->getTrailingRequiresClause())\n        // ...\n        Diag(NewFD->getTrailingRequiresClause()->getBeginLoc(), diag::err_constrained_virtual_method);"}},
[h]={{m,11948,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    // Find any virtual functions that this function overrides.\n    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD)) {\n      // ...\n      if (Method->isVirtual() && NewFD->getTrailingRequiresClause())\n        // ...\n        Diag(NewFD->getTrailingRequiresClause()->getBeginLoc(), diag::err_constrained_virtual_method);"}},
[j]={
[j]={
["clang/test/CXX/class.derived/class.virtual/p6.cpp"]={"clang/test/CXX/class.derived/class.virtual/p6.cpp:5:30: error: virtual function cannot have a requires clause","clang/test/CXX/class.derived/class.virtual/p6.cpp:7:30: error: virtual function cannot have a requires clause","clang/test/CXX/class.derived/class.virtual/p6.cpp:13:30: error: virtual function cannot have a requires clause","clang/test/CXX/class.derived/class.virtual/p6.cpp:17:54: error: virtual function cannot have a requires clause"}
["clang/test/CXX/class.derived/class.virtual/p6.cpp"]={"clang/test/CXX/class.derived/class.virtual/p6.cpp:5:30: error: virtual function cannot have a requires clause","clang/test/CXX/class.derived/class.virtual/p6.cpp:7:30: error: virtual function cannot have a requires clause","clang/test/CXX/class.derived/class.virtual/p6.cpp:13:30: error: virtual function cannot have a requires clause","clang/test/CXX/class.derived/class.virtual/p6.cpp:17:54: error: virtual function cannot have a requires clause"}
Line 7,158: Line 7,160:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={M,1625925174,K,L},
[b]={N,1625925174,M,L},
[h]={{"clang/lib/Sema/SemaConcept.cpp",309,"static bool DiagRecursiveConstraintEval(Sema &S, llvm::FoldingSetNodeID &ID, const NamedDecl *Templ, const Expr *E, const MultiLevelTemplateArgumentList &MLTAL) {\n  // ...\n  // Note that we have to do this with our own collection, because there are\n  // times where a constraint-expression check can cause us to need to evaluate\n  // other constriants that are unrelated, such as when evaluating a recovery\n  // expression, or when trying to determine the constexpr-ness of special\n  // members. Otherwise we could just use the\n  // Sema::InstantiatingTemplate::isAlreadyBeingInstantiated function.\n  if (S.SatisfactionStackContains(Templ, ID)) {\n    S.Diag(E->getExprLoc(), diag::err_constraint_depends_on_self) << const_cast<Expr *>(E) << E->getSourceRange();"}},
[h]={{"clang/lib/Sema/SemaConcept.cpp",309,"static bool DiagRecursiveConstraintEval(Sema &S, llvm::FoldingSetNodeID &ID, const NamedDecl *Templ, const Expr *E, const MultiLevelTemplateArgumentList &MLTAL) {\n  // ...\n  // Note that we have to do this with our own collection, because there are\n  // times where a constraint-expression check can cause us to need to evaluate\n  // other constriants that are unrelated, such as when evaluating a recovery\n  // expression, or when trying to determine the constexpr-ness of special\n  // members. Otherwise we could just use the\n  // Sema::InstantiatingTemplate::isAlreadyBeingInstantiated function.\n  if (S.SatisfactionStackContains(Templ, ID)) {\n    S.Diag(E->getExprLoc(), diag::err_constraint_depends_on_self) << const_cast<Expr *>(E) << E->getSourceRange();"}},
[j]={
[j]={
Line 7,169: Line 7,171:
[e]="missing return type for function (.*?); did you mean the constructor name (.*?)\\?",
[e]="missing return type for function (.*?); did you mean the constructor name (.*?)\\?",
[f]=a,
[f]=a,
[g]=v,
[g]=z,
[b]={"fb8b7b9a1c52",1381795226,"PR17567: Improve diagnostic for a mistyped constructor name. If we see something\nthat looks like a f...","PR17567: Improve diagnostic for a mistyped constructor name. If we see something\nthat looks like a function declaration, except that it\'s missing a return type,\ntry typo-correcting it to the relevant constructor name.\n\nIn passing, fix a bug where the missing-type-specifier recovery codepath would\ndrop a preceding scope specifier on the floor, leading to follow-on diagnostics\nand incorrect recovery for the auto-in-c++98 hack.\n\nllvm-svn: 192644"},
[b]={"fb8b7b9a1c52",1381795226,"PR17567: Improve diagnostic for a mistyped constructor name. If we see something","PR17567: Improve diagnostic for a mistyped constructor name. If we see something\nthat looks like a function declaration, except that it\'s missing a return type,\ntry typo-correcting it to the relevant constructor name.\n\nIn passing, fix a bug where the missing-type-specifier recovery codepath would\ndrop a preceding scope specifier on the floor, leading to follow-on diagnostics\nand incorrect recovery for the auto-in-c++98 hack.\n\nllvm-svn: 192644"},
[h]={{A,2877,"/// ParseImplicitInt - This method is called when we have an non-typename\n/// identifier in a declspec (which normally terminates the decl spec) when\n/// the declspec has no type specifier.  In this case, the declspec is either\n/// malformed or is \"implicit int\" (in K&R and C89).\n///\n/// This method handles diagnosing this prettily and returns false if the\n/// declspec is done being processed.  If it recovers and thinks there may be\n/// other pieces of declspec after it, it returns true.\n///\nbool Parser::ParseImplicitInt(DeclSpec &DS, CXXScopeSpec *SS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC, ParsedAttributes &Attrs) {\n  // ...\n  // Determine whether this identifier could plausibly be the name of something\n  // being declared (with a missing type).\n  if (!isTypeSpecifier(DSC) && (!SS || DSC == DeclSpecContext::DSC_top_level || DSC == DeclSpecContext::DSC_class)) {\n    // ...\n    case tok::l_paren: {\n      // ...\n      // If we\'re in a context where we could be declaring a constructor,\n      // check whether this is a constructor declaration with a bogus name.\n      if (DSC == DeclSpecContext::DSC_class || (DSC == DeclSpecContext::DSC_top_level && SS)) {\n        // ...\n        if (Actions.isCurrentClassNameTypo(II, SS)) {\n          Diag(Loc, diag::err_constructor_bad_name) << Tok.getIdentifierInfo() << II << FixItHint::CreateReplacement(Tok.getLocation(), II->getName());"}},
[h]={{B,2877,"/// ParseImplicitInt - This method is called when we have an non-typename\n/// identifier in a declspec (which normally terminates the decl spec) when\n/// the declspec has no type specifier.  In this case, the declspec is either\n/// malformed or is \"implicit int\" (in K&R and C89).\n///\n/// This method handles diagnosing this prettily and returns false if the\n/// declspec is done being processed.  If it recovers and thinks there may be\n/// other pieces of declspec after it, it returns true.\n///\nbool Parser::ParseImplicitInt(DeclSpec &DS, CXXScopeSpec *SS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC, ParsedAttributes &Attrs) {\n  // ...\n  // Determine whether this identifier could plausibly be the name of something\n  // being declared (with a missing type).\n  if (!isTypeSpecifier(DSC) && (!SS || DSC == DeclSpecContext::DSC_top_level || DSC == DeclSpecContext::DSC_class)) {\n    // ...\n    case tok::l_paren: {\n      // ...\n      // If we\'re in a context where we could be declaring a constructor,\n      // check whether this is a constructor declaration with a bogus name.\n      if (DSC == DeclSpecContext::DSC_class || (DSC == DeclSpecContext::DSC_top_level && SS)) {\n        // ...\n        if (Actions.isCurrentClassNameTypo(II, SS)) {\n          Diag(Loc, diag::err_constructor_bad_name) << Tok.getIdentifierInfo() << II << FixItHint::CreateReplacement(Tok.getLocation(), II->getName());"}},
[j]={
[j]={
["clang/test/Parser/cxx-decl.cpp"]={"clang/test/Parser/cxx-decl.cpp:247:5: error: missing return type for function \'FooBar\'; did you mean the constructor name \'Foobar\'?","clang/test/Parser/cxx-decl.cpp:250:11: error: missing return type for function \'FooBar\'; did you mean the constructor name \'Foobar\'?"}
["clang/test/Parser/cxx-decl.cpp"]={"clang/test/Parser/cxx-decl.cpp:247:5: error: missing return type for function \'FooBar\'; did you mean the constructor name \'Foobar\'?","clang/test/Parser/cxx-decl.cpp:250:11: error: missing return type for function \'FooBar\'; did you mean the constructor name \'Foobar\'?"}
Line 7,182: Line 7,184:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{r,10792,"/// CheckConstructor - Checks a fully-formed constructor for\n/// well-formedness, issuing any diagnostics required. Returns true if\n/// the constructor declarator is invalid.\nvoid Sema::CheckConstructor(CXXConstructorDecl *Constructor) {\n  // ...\n  // C++ [class.copy]p3:\n  //  A declaration of a constructor for a class X is ill-formed if\n  //  its first parameter is of type (optionally cv-qualified) X and\n  //  either there are no other parameters or else all other\n  //  parameters have default arguments.\n  if (!Constructor->isInvalidDecl() && Constructor->hasOneParamOrDefaultArgs() && Constructor->getTemplateSpecializationKind() != TSK_ImplicitInstantiation) {\n    // ...\n    if (Context.getCanonicalType(ParamType).getUnqualifiedType() == ClassTy) {\n      // ...\n      Diag(ParamLoc, diag::err_constructor_byvalue_arg) << FixItHint::CreateInsertion(ParamLoc, ConstRef);"}},
[h]={{s,10792,"/// CheckConstructor - Checks a fully-formed constructor for\n/// well-formedness, issuing any diagnostics required. Returns true if\n/// the constructor declarator is invalid.\nvoid Sema::CheckConstructor(CXXConstructorDecl *Constructor) {\n  // ...\n  // C++ [class.copy]p3:\n  //  A declaration of a constructor for a class X is ill-formed if\n  //  its first parameter is of type (optionally cv-qualified) X and\n  //  either there are no other parameters or else all other\n  //  parameters have default arguments.\n  if (!Constructor->isInvalidDecl() && Constructor->hasOneParamOrDefaultArgs() && Constructor->getTemplateSpecializationKind() != TSK_ImplicitInstantiation) {\n    // ...\n    if (Context.getCanonicalType(ParamType).getUnqualifiedType() == ClassTy) {\n      // ...\n      Diag(ParamLoc, diag::err_constructor_byvalue_arg) << FixItHint::CreateInsertion(ParamLoc, ConstRef);"}},
[j]={
[j]={
["clang/test/SemaCXX/copy-constructor-error.cpp"]={"clang/test/SemaCXX/copy-constructor-error.cpp:4:8: error: copy constructor must pass its first argument by reference"}
["clang/test/SemaCXX/copy-constructor-error.cpp"]={"clang/test/SemaCXX/copy-constructor-error.cpp:4:8: error: copy constructor must pass its first argument by reference"}
Line 7,194: Line 7,196:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{r,10718,"/// 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  // C++ [class.ctor]p3:\n  //  A constructor shall not be virtual (10.3) or static (9.4). A\n  //  constructor can be invoked for a const, volatile or const\n  //  volatile object. A constructor shall not be declared const,\n  //  volatile, or const volatile (9.3.2).\n  if (isVirtual) {\n    if (!D.isInvalidType())\n      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be) << \"virtual\" << SourceRange(D.getDeclSpec().getVirtualSpecLoc()) << SourceRange(D.getIdentifierLoc());"},{r,10725,"/// 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 (SC == SC_Static) {\n    if (!D.isInvalidType())\n      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be) << \"static\" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc()) << SourceRange(D.getIdentifierLoc());"}},
[h]={{s,10718,"/// 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  // C++ [class.ctor]p3:\n  //  A constructor shall not be virtual (10.3) or static (9.4). A\n  //  constructor can be invoked for a const, volatile or const\n  //  volatile object. A constructor shall not be declared const,\n  //  volatile, or const volatile (9.3.2).\n  if (isVirtual) {\n    if (!D.isInvalidType())\n      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be) << \"virtual\" << SourceRange(D.getDeclSpec().getVirtualSpecLoc()) << SourceRange(D.getIdentifierLoc());"},{s,10725,"/// 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 (SC == SC_Static) {\n    if (!D.isInvalidType())\n      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be) << \"static\" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc()) << SourceRange(D.getIdentifierLoc());"}},
[j]={
[j]={
["clang/test/SemaCXX/constructor.cpp"]={"clang/test/SemaCXX/constructor.cpp:14:10: error: constructor cannot be declared \'static\'","clang/test/SemaCXX/constructor.cpp:15:11: error: constructor cannot be declared \'virtual\'"}
["clang/test/SemaCXX/constructor.cpp"]={"clang/test/SemaCXX/constructor.cpp:14:10: error: constructor cannot be declared \'static\'","clang/test/SemaCXX/constructor.cpp:15:11: error: constructor cannot be declared \'virtual\'"}
Line 7,206: Line 7,208:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{n,3999,"/// 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            NewDiag = diag::err_constructor_redeclared;"}},
[h]={{m,3999,"/// 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            NewDiag = diag::err_constructor_redeclared;"}},
[j]={
[j]={
["clang/test/SemaOpenCLCXX/addrspace-constructors.clcpp"]={"clang/test/SemaOpenCLCXX/addrspace-constructors.clcpp:46:3: error: constructor cannot be redeclared"}
["clang/test/SemaOpenCLCXX/addrspace-constructors.clcpp"]={"clang/test/SemaOpenCLCXX/addrspace-constructors.clcpp:46:3: error: constructor cannot be redeclared"}
Line 7,218: Line 7,220:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{n,9271,"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  // ...\n  } else if (DC->isRecord()) {\n    // If the name of the function is the same as the name of the record,\n    // then this must be an invalid constructor that has a return type.\n    // (The parser checks for a return type and makes the declarator a\n    // constructor if it has no return type).\n    if (Name.getAsIdentifierInfo() && Name.getAsIdentifierInfo() == cast<CXXRecordDecl>(DC)->getIdentifier()) {\n      SemaRef.Diag(D.getIdentifierLoc(), diag::err_constructor_return_type) << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc()) << SourceRange(D.getIdentifierLoc());"},{r,10734,"/// 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 (unsigned TypeQuals = D.getDeclSpec().getTypeQualifiers()) {\n    diagnoseIgnoredQualifiers(diag::err_constructor_return_type, TypeQuals, SourceLocation(), D.getDeclSpec().getConstSpecLoc(), D.getDeclSpec().getVolatileSpecLoc(), D.getDeclSpec().getRestrictSpecLoc(), D.getDeclSpec().getAtomicSpecLoc());"}},
[h]={{m,9271,"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  // ...\n  } else if (DC->isRecord()) {\n    // If the name of the function is the same as the name of the record,\n    // then this must be an invalid constructor that has a return type.\n    // (The parser checks for a return type and makes the declarator a\n    // constructor if it has no return type).\n    if (Name.getAsIdentifierInfo() && Name.getAsIdentifierInfo() == cast<CXXRecordDecl>(DC)->getIdentifier()) {\n      SemaRef.Diag(D.getIdentifierLoc(), diag::err_constructor_return_type) << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc()) << SourceRange(D.getIdentifierLoc());"},{s,10734,"/// 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 (unsigned TypeQuals = D.getDeclSpec().getTypeQualifiers()) {\n    diagnoseIgnoredQualifiers(diag::err_constructor_return_type, TypeQuals, SourceLocation(), D.getDeclSpec().getConstSpecLoc(), D.getDeclSpec().getVolatileSpecLoc(), D.getDeclSpec().getRestrictSpecLoc(), D.getDeclSpec().getAtomicSpecLoc());"}},
[j]={
[j]={
["clang/test/CXX/class/class.mem/p2.cpp"]={"clang/test/CXX/class/class.mem/p2.cpp:81:14: error: constructor cannot have a return type"}
["clang/test/CXX/class/class.mem/p2.cpp"]={"clang/test/CXX/class/class.mem/p2.cpp:81:14: error: constructor cannot have a return type"}
Line 7,230: Line 7,232:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={x,1236199783,y,w},
[b]={y,1236199783,x,w},
[h]={{P,429,"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  // We need to look in the @interface to see if the @property was\n  // already declared.\n  if (!CCPrimary) {\n    Diag(CDecl->getLocation(), diag::err_continuation_class);"}}
[h]={{Q,429,"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  // We need to look in the @interface to see if the @property was\n  // already declared.\n  if (!CCPrimary) {\n    Diag(CDecl->getLocation(), diag::err_continuation_class);"}}
},
},
["err_continue_from_cond_var_init"]={
["err_continue_from_cond_var_init"]={
Line 7,239: Line 7,241:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={fb,1590001902,jb,lb},
[b]={kb,1590001902,fb,jb},
[h]={{Q,3337,"StmtResult Sema::ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope) {\n  // ...\n  if (S->isConditionVarScope()) {\n    // ...\n    return StmtError(Diag(ContinueLoc, diag::err_continue_from_cond_var_init));"}},
[h]={{R,3337,"StmtResult Sema::ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope) {\n  // ...\n  if (S->isConditionVarScope()) {\n    // ...\n    return StmtError(Diag(ContinueLoc, diag::err_continue_from_cond_var_init));"}},
[j]={
[j]={
["clang/test/SemaCXX/scope-check.cpp"]={"clang/test/SemaCXX/scope-check.cpp:643:20: error: cannot jump from this continue statement to the loop increment; jump bypasses initialization of loop condition variable"}
["clang/test/SemaCXX/scope-check.cpp"]={"clang/test/SemaCXX/scope-check.cpp:643:20: error: cannot jump from this continue statement to the loop increment; jump bypasses initialization of loop condition variable"}
Line 7,251: Line 7,253:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{Q,3331,"StmtResult Sema::ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope) {\n  // ...\n  if (!S) {\n    // ...\n    return StmtError(Diag(ContinueLoc, diag::err_continue_not_in_loop));"}},
[h]={{R,3331,"StmtResult Sema::ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope) {\n  // ...\n  if (!S) {\n    // ...\n    return StmtError(Diag(ContinueLoc, diag::err_continue_not_in_loop));"}},
[j]={
[j]={
["clang/test/Parser/bad-control.c"]={"clang/test/Parser/bad-control.c:8:3: error: \'continue\' statement not in loop statement","clang/test/Parser/bad-control.c:23:10: error: \'continue\' statement not in loop statement"}
["clang/test/Parser/bad-control.c"]={"clang/test/Parser/bad-control.c:8:3: error: \'continue\' statement not in loop statement","clang/test/Parser/bad-control.c:23:10: error: \'continue\' statement not in loop statement"}
Line 7,263: Line 7,265:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{n,9239,"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    if (!DC->isRecord()) {\n      SemaRef.Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member);"},{r,10990,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // C++ [class.conv.fct]p1:\n  //  Neither parameter types nor return type can be specified. The\n  //  type of a conversion function (8.3.5) is \"function taking no\n  //  parameter returning conversion-type-id.\"\n  if (SC == SC_Static) {\n    if (!D.isInvalidType())\n      Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member) << SourceRange(D.getDeclSpec().getStorageClassSpecLoc()) << D.getName().getSourceRange();"}},
[h]={{m,9239,"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    if (!DC->isRecord()) {\n      SemaRef.Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member);"},{s,10990,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // C++ [class.conv.fct]p1:\n  //  Neither parameter types nor return type can be specified. The\n  //  type of a conversion function (8.3.5) is \"function taking no\n  //  parameter returning conversion-type-id.\"\n  if (SC == SC_Static) {\n    if (!D.isInvalidType())\n      Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member) << SourceRange(D.getDeclSpec().getStorageClassSpecLoc()) << D.getName().getSourceRange();"}},
[j]={
[j]={
[Hb]={"clang/test/SemaCXX/conversion-function.cpp:19:10: error: conversion function must be a non-static member function","clang/test/SemaCXX/conversion-function.cpp:22:1: error: conversion function must be a non-static member function"}
[Sb]={"clang/test/SemaCXX/conversion-function.cpp:19:10: error: conversion function must be a non-static member function","clang/test/SemaCXX/conversion-function.cpp:22:1: error: conversion function must be a non-static member function"}
}
}
},
},
Line 7,275: Line 7,277:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{n,4003,"/// 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            NewDiag = diag::err_conv_function_redeclared;"}},
[h]={{m,4003,"/// 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            NewDiag = diag::err_conv_function_redeclared;"}},
[j]={
[j]={
[Hb]={"clang/test/SemaCXX/conversion-function.cpp:52:3: error: conversion function cannot be redeclared","clang/test/SemaCXX/conversion-function.cpp:53:3: error: conversion function cannot be redeclared"}
[Sb]={"clang/test/SemaCXX/conversion-function.cpp:52:3: error: conversion function cannot be redeclared","clang/test/SemaCXX/conversion-function.cpp:53:3: error: conversion function cannot be redeclared"}
}
}
},
},
Line 7,287: Line 7,289:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{r,11011,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  if (DS.hasTypeSpecifier() && !D.isInvalidType()) {\n    // ...\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_return_type) << SourceRange(DS.getTypeSpecTypeLoc()) << SourceRange(D.getIdentifierLoc());"}},
[h]={{s,11011,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  if (DS.hasTypeSpecifier() && !D.isInvalidType()) {\n    // ...\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_return_type) << SourceRange(DS.getTypeSpecTypeLoc()) << SourceRange(D.getIdentifierLoc());"}},
[j]={
[j]={
[Hb]={"clang/test/SemaCXX/conversion-function.cpp:31:8: error: conversion function cannot have a return type"}
[Sb]={"clang/test/SemaCXX/conversion-function.cpp:31:8: error: conversion function cannot have a return type"}
}
}
},
},
Line 7,299: Line 7,301:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{r,11120,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // C++ [class.conv.fct]p4:\n  //  The conversion-type-id shall not represent a function type nor\n  //  an array type.\n  if (ConvType->isArrayType()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_array);"}},
[h]={{s,11120,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // C++ [class.conv.fct]p4:\n  //  The conversion-type-id shall not represent a function type nor\n  //  an array type.\n  if (ConvType->isArrayType()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_array);"}},
[j]={
[j]={
[Hb]={"clang/test/SemaCXX/conversion-function.cpp:41:3: error: conversion function cannot convert to an array type"}
[Sb]={"clang/test/SemaCXX/conversion-function.cpp:41:3: error: conversion function cannot convert to an array type"}
}
}
},
},
Line 7,311: Line 7,313:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{r,11124,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // C++ [class.conv.fct]p4:\n  //  The conversion-type-id shall not represent a function type nor\n  //  an array type.\n  if (ConvType->isArrayType()) {\n  // ...\n  } else if (ConvType->isFunctionType()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_function);"}},
[h]={{s,11124,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // C++ [class.conv.fct]p4:\n  //  The conversion-type-id shall not represent a function type nor\n  //  an array type.\n  if (ConvType->isArrayType()) {\n  // ...\n  } else if (ConvType->isFunctionType()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_function);"}},
[j]={
[j]={
["clang/test/SemaCXX/PR31422.cpp"]={"clang/test/SemaCXX/PR31422.cpp:6:29: error: conversion function cannot convert to a function type"}
["clang/test/SemaCXX/PR31422.cpp"]={"clang/test/SemaCXX/PR31422.cpp:6:29: error: conversion function cannot convert to a function type"}
Line 7,323: Line 7,325:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{r,11036,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // Make sure we don\'t have any parameters.\n  if (Proto->getNumParams() > 0) {\n  // ...\n  } else if (Proto->isVariadic()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_variadic);"}},
[h]={{s,11036,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // Make sure we don\'t have any parameters.\n  if (Proto->getNumParams() > 0) {\n  // ...\n  } else if (Proto->isVariadic()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_variadic);"}},
[j]={
[j]={
[Hb]={"clang/test/SemaCXX/conversion-function.cpp:37:3: error: conversion function cannot be variadic"}
[Sb]={"clang/test/SemaCXX/conversion-function.cpp:37:3: error: conversion function cannot be variadic"}
}
}
},
},
Line 7,335: Line 7,337:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"212fa2efb700",1271117071,"Diagnose declarations of conversion functions with declarators other than \'()\'.\n\nllvm-svn: 101098","Diagnose declarations of conversion functions with declarators other than \'()\'.\n\nllvm-svn: 101098"},
[b]={"212fa2efb700",1271117071,"Diagnose declarations of conversion functions with declarators other than \'()\'.","Diagnose declarations of conversion functions with declarators other than \'()\'.\n\nllvm-svn: 101098"},
[h]={{r,11021,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  if (DS.hasTypeSpecifier() && !D.isInvalidType()) {\n  // ...\n  } else if (DS.getTypeQualifiers() && !D.isInvalidType()) {\n    // ...\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_complex_decl) << SourceRange(D.getIdentifierLoc()) << 0;"},{r,11084,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // Diagnose \"&operator bool()\" and other such nonsense.  This\n  // is actually a gcc extension which we don\'t support.\n  if (Proto->getReturnType() != ConvType) {\n    // ...\n    auto &&DB = Diag(Loc, diag::err_conv_function_with_complex_decl);"}},
[h]={{s,11021,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  if (DS.hasTypeSpecifier() && !D.isInvalidType()) {\n  // ...\n  } else if (DS.getTypeQualifiers() && !D.isInvalidType()) {\n    // ...\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_complex_decl) << SourceRange(D.getIdentifierLoc()) << 0;"},{s,11084,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // Diagnose \"&operator bool()\" and other such nonsense.  This\n  // is actually a gcc extension which we don\'t support.\n  if (Proto->getReturnType() != ConvType) {\n    // ...\n    auto &&DB = Diag(Loc, diag::err_conv_function_with_complex_decl);"}},
[j]={
[j]={
["clang/test/SemaCXX/PR31422.cpp"]={"clang/test/SemaCXX/PR31422.cpp:6:44: error: cannot specify any part of a return type in the declaration of a conversion function; use an alias template to declare a conversion to \'auto (Ts &&...) const\'"}
["clang/test/SemaCXX/PR31422.cpp"]={"clang/test/SemaCXX/PR31422.cpp:6:44: error: cannot specify any part of a return type in the declaration of a conversion function; use an alias template to declare a conversion to \'auto (Ts &&...) const\'"}
Line 7,347: Line 7,349:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={q,1237025389,m,m},
[b]={q,1237025389,r,p},
[h]={{r,11030,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // Make sure we don\'t have any parameters.\n  if (Proto->getNumParams() > 0) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_params);"}},
[h]={{s,11030,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // Make sure we don\'t have any parameters.\n  if (Proto->getNumParams() > 0) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_params);"}},
[j]={
[j]={
[Hb]={"clang/test/SemaCXX/conversion-function.cpp:31:8: error: conversion function cannot have any parameters","clang/test/SemaCXX/conversion-function.cpp:34:3: error: conversion function cannot have any parameters"}
[Sb]={"clang/test/SemaCXX/conversion-function.cpp:31:8: error: conversion function cannot have any parameters","clang/test/SemaCXX/conversion-function.cpp:34:3: error: conversion function cannot have any parameters"}
}
}
},
},
Line 7,359: Line 7,361:
[f]=a,
[f]=a,
[g]=k,
[g]=k,
[b]={"c4d7c82c7f73",1379474985,"Add the intrinsic __builtin_convertvector\n\nLLVM supports applying conversion instructions to vectors...","Add the intrinsic __builtin_convertvector\n\nLLVM supports applying conversion instructions to vectors of the same number of\nelements (fptrunc, fptosi, etc.) but there had been no way for a Clang user to\ncause such instructions to be generated when using builtin vector types.\n\nC-style casting on vectors is already defined in terms of bitcasts, and so\ncannot be used for these conversions as well (without leading to a very\nconfusing set of semantics). As a result, this adds a __builtin_convertvector\nintrinsic (patterned after the OpenCL __builtin_astype intrinsic). This is\nintended to aid the creation of vector intrinsic headers that create generic IR\ninstead of target-dependent intrinsics (in other words, this is a generic\n_mm_cvtepi32_ps). As noted in the documentation, the action of\n__builtin_convertvector is defined in terms of the action of a C-style cast on\neach vector element.\n\nllvm-svn: 190915"},
[b]={"c4d7c82c7f73",1379474985,"Add the intrinsic __builtin_convertvector","Add the intrinsic __builtin_convertvector\n\nLLVM supports applying conversion instructions to vectors of the same number of\nelements (fptrunc, fptosi, etc.) but there had been no way for a Clang user to\ncause such instructions to be generated when using builtin vector types.\n\nC-style casting on vectors is already defined in terms of bitcasts, and so\ncannot be used for these conversions as well (without leading to a very\nconfusing set of semantics). As a result, this adds a __builtin_convertvector\nintrinsic (patterned after the OpenCL __builtin_astype intrinsic). This is\nintended to aid the creation of vector intrinsic headers that create generic IR\ninstead of target-dependent intrinsics (in other words, this is a generic\n_mm_cvtepi32_ps). As noted in the documentation, the action of\n__builtin_convertvector is defined in terms of the action of a C-style cast on\neach vector element.\n\nllvm-svn: 190915"},
[h]={{p,8546,"/// SemaConvertVectorExpr - Handle __builtin_convertvector\nExprResult Sema::SemaConvertVectorExpr(Expr *E, TypeSourceInfo *TInfo, SourceLocation BuiltinLoc, SourceLocation RParenLoc) {\n  // ...\n  if (!SrcTy->isDependentType() && !DstTy->isDependentType()) {\n    // ...\n    if (SrcElts != DstElts)\n      return ExprError(Diag(BuiltinLoc, diag::err_convertvector_incompatible_vector) << E->getSourceRange());"}},
[h]={{o,8546,"/// SemaConvertVectorExpr - Handle __builtin_convertvector\nExprResult Sema::SemaConvertVectorExpr(Expr *E, TypeSourceInfo *TInfo, SourceLocation BuiltinLoc, SourceLocation RParenLoc) {\n  // ...\n  if (!SrcTy->isDependentType() && !DstTy->isDependentType()) {\n    // ...\n    if (SrcElts != DstElts)\n      return ExprError(Diag(BuiltinLoc, diag::err_convertvector_incompatible_vector) << E->getSourceRange());"}},
[j]={
[j]={
["clang/test/Sema/convertvector.c"]={"clang/test/Sema/convertvector.c:7:10: error: first two arguments to __builtin_convertvector must have the same number of elements"}
["clang/test/Sema/convertvector.c"]={"clang/test/Sema/convertvector.c:7:10: error: first two arguments to __builtin_convertvector must have the same number of elements"}
Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,558

edits

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

Navigation menu