Module:ClangDiags/DiagsLongData6: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
No edit summary
Line 1: Line 1:
local a="";
local a="";
local b="id_hist";
local b="regex3";
local c="regex2";
local c="category_hist";
local d="source";
local d="id_hist";
local e="category_hist";
local e="message_hist";
local f="regex3";
local f="hierarchical_hist";
local g="commit";
local g="regex1";
local h="regex1";
local h="regex2";
local i="hierarchical_hist";
local i="source";
local j="message_hist";
local j="commit";
local k="(?:error|fatal error)\\: ";
local k="(?:error|fatal error)\\: ";
local l="tests2";
local l="tests2";
Line 15: Line 15:
local o="10.0";
local o="10.0";
local p="Lexical or Preprocessor Issue";
local p="Lexical or Preprocessor Issue";
local q="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local q="b1c4d5507fad";
local r="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 r="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local s="b1c4d5507fad";
local s="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 t="11.0";
local t="11.0";
local u="8.0";
local u="8.0";
Line 36: Line 36:
local J="clang/lib/Sema/SemaAttr.cpp";
local J="clang/lib/Sema/SemaAttr.cpp";
local K="7.0";
local K="7.0";
local L="5a8987ca5113";
local L="Update tablegen diagnostic files to be in sync with the def files.";
local M="Update tablegen diagnostic files to be in sync with the def files.";
local M="5a8987ca5113";
local N="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local N="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local O="clang/lib/Sema/SemaExpr.cpp";
local O="clang/lib/Sema/SemaExpr.cpp";
Line 43: Line 43:
local Q="clang/lib/Sema/SemaExprCXX.cpp";
local Q="clang/lib/Sema/SemaExprCXX.cpp";
local R="0a849f47d2f7";
local R="0a849f47d2f7";
local S="Add #pragma clang attribute\n\nThe new \'#pragma clang attribute\' directive can be used to apply attributes to\nmultiple declarations. An attribute must satisfy the following conditions to\nbe supported by the pragma:\n- It must have a subject list that\'s defined in the TableGen file.\n- It must be documented.\n- It must not be late parsed.\n- It must have a GNU/C++11 spelling.\n\nDifferential Revision: https://reviews.llvm.org/D30009\n\nllvm-svn: 300539";
local S="None";
local T="Add #pragma clang attribute";
local T="Add #pragma clang attribute\n\nThe new \'#pragma clang attribute\' directive can be used to apply attributes to\nmultiple declarations. An attribute must satisfy the following conditions to\nbe supported by the pragma:\n- It must have a subject list that\'s defined in the TableGen file.\n- It must be documented.\n- It must not be late parsed.\n- It must have a GNU/C++11 spelling.\n\nDifferential Revision: https://reviews.llvm.org/D30009\n\nllvm-svn: 300539";
local U="13.0";
local U="Add #pragma clang attribute";
local V="AST Deserialization Issue";
local V="13.0";
local W="clang/lib/Sema/SemaTemplate.cpp";
local W="clang/lib/Sema/SemaTemplate.cpp";
local X="clang/test/Parser/pragma-attribute.cpp";
local X="AST Deserialization Issue";
local Y="clang/lib/Lex/PPExpressions.cpp";
local Y="clang/test/Parser/pragma-attribute.cpp";
local Z="clang/lib/Sema/SemaDeclObjC.cpp";
local Z="clang/lib/Lex/PPExpressions.cpp";
local ab="clang/lib/Lex/PPMacroExpansion.cpp";
local ab="clang/lib/Lex/PPMacroExpansion.cpp";
local bb="f881267db9a9";
local bb="clang/lib/Sema/SemaDeclObjC.cpp";
local cb="clang/lib/Sema/SemaExprMember.cpp";
local cb="Mass-rename the handful of error_* diagnostics to err_*.";
local db="Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit\n\nSee\nhttps://docs.google.com/document/d/1xMkTZMKx9llnMPgso0jrx3ankI4cv60xeZ0y4ksf4wc/preview\nfor background discussion.\n\nThis adds a warning, flags and pragmas to limit the number of\npre-processor tokens either at a certain point in a translation unit, or\noverall.\n\nThe idea is that this would allow projects to limit the size of certain\nwidely included headers, or for translation units overall, as a way to\ninsert backstops for header bloat and prevent compile-time regressions.\n\nDifferential revision: https://reviews.llvm.org/D72703";
local db="Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit\n\nSee\nhttps://docs.google.com/document/d/1xMkTZMKx9llnMPgso0jrx3ankI4cv60xeZ0y4ksf4wc/preview\nfor background discussion.\n\nThis adds a warning, flags and pragmas to limit the number of\npre-processor tokens either at a certain point in a translation unit, or\noverall.\n\nThe idea is that this would allow projects to limit the size of certain\nwidely included headers, or for translation units overall, as a way to\ninsert backstops for header bloat and prevent compile-time regressions.\n\nDifferential revision: https://reviews.llvm.org/D72703";
local eb="Mass-rename the handful of error_* diagnostics to err_*.";
local eb="f881267db9a9";
local fb="Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545";
local fb="Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545";
local gb="739b410f1ff5";
local gb="95f50964fbf5";
local hb="Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit";
local hb="clang/lib/Sema/SemaExprMember.cpp";
local ib="95f50964fbf5";
local ib="Implement P2361 Unevaluated string literals";
local jb="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 jb="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 kb="Implement P2361 Unevaluated string literals";
local kb="Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit";
local lb="clang/lib/Sema/SemaExprObjC.cpp";
local lb="739b410f1ff5";
local mb="16.0";
local mb="clang/lib/Basic/Targets/PPC.cpp";
local nb="[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 nb="invalid";
local ob="invalid";
local ob="clang/lib/Sema/SemaType.cpp";
local pb="clang/lib/Basic/Targets/PPC.cpp";
local pb="931fcd3ba011";
local qb="931fcd3ba011";
local qb="clang/lib/Sema/SemaExprObjC.cpp";
local rb="clang/lib/Sema/SemaType.cpp";
local rb="clang/lib/Sema/SemaTemplateVariadic.cpp";
local sb="[WebAssembly] Improve clang diagnostics for wasm attributes";
local sb="[WebAssembly] Improve clang diagnostics for wasm attributes";
local tb="clang/lib/Sema/SemaTemplateVariadic.cpp";
local tb="16.0";
local ub="clang/test/SemaCXX/overloaded-operator-decl.cpp";
local ub="[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 vb=" B";
local vb="clang/test/SemaCXX/overloaded-operator-decl.cpp";
local wb="clang/lib/Sema/SemaObjCProperty.cpp";
local wb=" B";
local xb="static_cast";
local xb="clang/lib/Sema/SemaObjCProperty.cpp";
local yb="Add #pragma clang module begin/end pragmas and generate them when preprocessing a module.\n\nThese pragmas are intended to simulate the effect of entering or leaving a file\nwith an associated module. This is not completely implemented yet: declarations\nbetween the pragmas will not be attributed to the correct module, but macro\nvisibility is already functional.\n\nModules named by #pragma clang module begin must already be known to clang (in\nsome module map that\'s either loaded or on the search path).\n\nllvm-svn: 302098";
local yb="clang/lib/Parse/ParseDecl.cpp";
local zb="missing";
local zb="expected \'begin\' or \'end\'";
local Ab="14f6bfcb52e7";
local Ab="[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 Bb="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local Bb="Refactoring Invocation Issue";
local Cb="expected \'begin\' or \'end\'";
local Cb="11.1";
local Db="[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 Db="clang/lib/Lex/PPLexerChange.cpp";
local Eb="clang/lib/Sema/SemaStmt.cpp";
local Eb="static_cast";
local Fb="Refactoring Invocation Issue";
local Fb="d13863008b38";
local Gb="11.1";
local Gb="Add #pragma clang module begin/end pragmas and generate them when preprocessing a module.";
local Hb="clang/lib/Lex/PPLexerChange.cpp";
local Hb="Add #pragma clang module begin/end pragmas and generate them when preprocessing a module.\n\nThese pragmas are intended to simulate the effect of entering or leaving a file\nwith an associated module. This is not completely implemented yet: declarations\nbetween the pragmas will not be attributed to the correct module, but macro\nvisibility is already functional.\n\nModules named by #pragma clang module begin must already be known to clang (in\nsome module map that\'s either loaded or on the search path).\n\nllvm-svn: 302098";
local Ib="d13863008b38";
local Ib="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local Jb="Add #pragma clang module begin/end pragmas and generate them when preprocessing a module.";
local Jb="14f6bfcb52e7";
local Kb="clang/lib/Parse/ParseDecl.cpp";
local Kb="clang/lib/Sema/SemaStmt.cpp";
local Lb=" option";
local Lb="missing";
local Mb="C-style cast";
local Mb="clang/test/Parser/cxx2a-concepts-requires-expr.cpp";
local Nb="reinterpret_cast";
local Nb="clang/lib/Parse/ParseExprCXX.cpp";
local Ob="clang/lib/Parse/ParseExprCXX.cpp";
local Ob=" option";
local Pb="clang/test/Parser/cxx2a-concepts-requires-expr.cpp";
local Pb="functional-style cast";
local Qb="dynamic_cast";
local Qb="C-style cast";
local Rb="clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp";
local Rb="clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp";
local Sb="functional-style cast";
local Sb="dynamic_cast";
local Tb="61d065e21ff3";
local Tb="reinterpret_cast";
local Ub="Let clang atomic builtins fetch add/sub support floating point types";
local Ub="Let clang atomic builtins fetch add/sub support floating point types";
local Vb="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 Vb="61d065e21ff3";
local Wb="Add explicit attributes to mark functions as having had their\nCoreFoundation object-transfer properties audited, and add a #pragma\nto cause them to be automatically applied to functions in a particular\nspan of code.  This has to be implemented largely in the preprocessor\nbecause of the requirement that the region be entirely contained in\na single file;  that\'s hard to impose from the parser without registering\nfor a ton of callbacks.\n\nllvm-svn: 140846";
local Wb="Add explicit attributes to mark functions as having had their\nCoreFoundation object-transfer properties audited, and add a #pragma\nto cause them to be automatically applied to functions in a particular\nspan of code.  This has to be implemented largely in the preprocessor\nbecause of the requirement that the region be entirely contained in\na single file;  that\'s hard to impose from the parser without registering\nfor a ton of callbacks.\n\nllvm-svn: 140846";
local Xb="Add explicit attributes to mark functions as having had their";
local Xb="Add explicit attributes to mark functions as having had their";
local Yb="32f5fe1467c4";
local Yb="32f5fe1467c4";
local Zb="unavailable";
local Zb="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 ac="deleted";
local ac="Modules Issue";
local bc="lvalue";
local bc="lvalue";
local cc="rvalue";
local cc="rvalue";
local dc="clang/lib/Sema/SemaDeclAttr.cpp";
local dc="clang/lib/Sema/SemaDeclAttr.cpp";
local ec="clang/test/Preprocessor/line-directive.c";
local ec="deleted";
local fc="Modules Issue";
local fc="unavailable";
local gc="__global__";
local gc="__host__ __device__";
local hc="__host__";
local hc="__host__";
local ic="__host__ __device__";
local ic="__global__";
local jc="__device__";
local jc="clang/test/Preprocessor/line-directive.c";
local kc="clang/lib/Parse/ParseDeclCXX.cpp";
local kc="__device__";
local lc="Nullability Issue";
local lc="clang/lib/Parse/ParseDeclCXX.cpp";
local mc="fatal error\\: ";
local mc="Nullability Issue";
local nc="Improve diagnostics for malformed delete operator function declarations.\n\nllvm-svn: 91180";
local nc="2a20bd1a9457";
local oc="Improve diagnostics for malformed delete operator function declarations.";
local oc="Introduced pragmas for audited nullability regions.";
local pc="12308f41e7e2";
local pc="Introduced pragmas for audited nullability regions.\n\nIntroduce the clang pragmas \"assume_nonnull begin\" and \"assume_nonnull\nend\" in which we make default assumptions about the nullability of many\nunannotated pointers:\n\n  - Single-level pointers are inferred to __nonnull\n  - NSError** in a (function or method) parameter list is inferred to\n    NSError * __nullable * __nullable.\n  - CFErrorRef * in a (function or method) parameter list is inferred\n    to CFErrorRef __nullable * __nullable.\n  - Other multi-level pointers are never inferred to anything.\n\nImplements rdar://problem/19191042.\n\nllvm-svn: 240156";
local qc="2a20bd1a9457";
local qc="Improve diagnostics for malformed delete operator function declarations.\n\nllvm-svn: 91180";
local rc="clang/lib/Parse/ParseStmt.cpp";
local rc="fatal error\\: ";
local sc="Introduced pragmas for audited nullability regions.";
local sc="clang/test/Sema/pragma-arc-cf-code-audited.c";
local tc="clang/test/Sema/pragma-arc-cf-code-audited.c";
local tc="clang/lib/Parse/ParseStmt.cpp";
local uc="Introduced pragmas for audited nullability regions.\n\nIntroduce the clang pragmas \"assume_nonnull begin\" and \"assume_nonnull\nend\" in which we make default assumptions about the nullability of many\nunannotated pointers:\n\n  - Single-level pointers are inferred to __nonnull\n  - NSError** in a (function or method) parameter list is inferred to\n    NSError * __nullable * __nullable.\n  - CFErrorRef * in a (function or method) parameter list is inferred\n    to CFErrorRef __nullable * __nullable.\n  - Other multi-level pointers are never inferred to anything.\n\nImplements rdar://problem/19191042.\n\nllvm-svn: 240156";
local uc="Improve diagnostics for malformed delete operator function declarations.";
local vc="12308f41e7e2";


return {
return {
["err_operator_arrow_circular"]={
["err_operator_arrow_circular"]={
[b]="err_operator_arrow_circular",
[d]="err_operator_arrow_circular",
[j]="circular pointer delegation detected",
[e]="circular pointer delegation detected",
[i]="circular pointer delegation detected",
[f]="circular pointer delegation detected",
[h]=k,
[g]=k,
[c]="circular pointer delegation detected",
[h]="circular pointer delegation detected",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"10ce958550c7",1254269981,"self-referecing operator \'->\' member function was causing","self-referecing operator \'->\' member function was causing\ninfinit recursion. This patch fixes it. [13.3.1.2]-p2\n\nllvm-svn: 83124"},
[j]={"10ce958550c7",1254269981,"self-referecing operator \'->\' member function was causing","self-referecing operator \'->\' member function was causing\ninfinit recursion. This patch fixes it. [13.3.1.2]-p2\n\nllvm-svn: 83124"},
[d]={{Q,7630,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // ...\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    // ...\n    while (BaseType->isRecordType()) {\n      // ...\n      if (!CTypes.insert(CBaseType).second) {\n        Diag(OpLoc, diag::err_operator_arrow_circular) << StartingType;"}},
[i]={{Q,7630,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // ...\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    // ...\n    while (BaseType->isRecordType()) {\n      // ...\n      if (!CTypes.insert(CBaseType).second) {\n        Diag(OpLoc, diag::err_operator_arrow_circular) << StartingType;"}},
[l]={
[l]={
["clang/test/SemaCXX/overloaded-operator.cpp"]={"clang/test/SemaCXX/overloaded-operator.cpp:275:4: error: circular pointer delegation detected","clang/test/SemaCXX/overloaded-operator.cpp:291:4: error: circular pointer delegation detected"}
["clang/test/SemaCXX/overloaded-operator.cpp"]={"clang/test/SemaCXX/overloaded-operator.cpp:275:4: error: circular pointer delegation detected","clang/test/SemaCXX/overloaded-operator.cpp:291:4: error: circular pointer delegation detected"}
Line 141: Line 142:
},
},
["err_operator_arrow_depth_exceeded"]={
["err_operator_arrow_depth_exceeded"]={
[b]="err_operator_arrow_depth_exceeded",
[d]="err_operator_arrow_depth_exceeded",
[j]="use of \'operator->\' on type %0 would invoke a sequence of more than %1 \'operator->\' calls",
[e]="use of \'operator->\' on type %0 would invoke a sequence of more than %1 \'operator->\' calls",
[i]="use of \'operator->\' on type A would invoke a sequence of more than B \'operator->\' calls",
[f]="use of \'operator->\' on type A would invoke a sequence of more than B \'operator->\' calls",
[h]=k,
[g]=k,
[c]="use of \'operator\\-\\>\' on type (.*?) would invoke a sequence of more than (.*?) \'operator\\-\\>\' calls",
[h]="use of \'operator\\-\\>\' on type (.*?) would invoke a sequence of more than (.*?) \'operator\\-\\>\' calls",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"79c927bfe9fc",1383766311,"Add a limit to the length of a sequence of \'operator->\' functions we will","Add a limit to the length of a sequence of \'operator->\' functions we will\nfollow when building a class member access expression. Based on a patch by\nRahul Jain!\n\nllvm-svn: 194161"},
[j]={"79c927bfe9fc",1383766311,"Add a limit to the length of a sequence of \'operator->\' functions we will","Add a limit to the length of a sequence of \'operator->\' functions we will\nfollow when building a class member access expression. Based on a patch by\nRahul Jain!\n\nllvm-svn: 194161"},
[d]={{Q,7588,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // ...\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    // ...\n    while (BaseType->isRecordType()) {\n      if (OperatorArrows.size() >= getLangOpts().ArrowDepth) {\n        Diag(OpLoc, diag::err_operator_arrow_depth_exceeded) << StartingType << getLangOpts().ArrowDepth << Base->getSourceRange();"}},
[i]={{Q,7588,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // ...\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    // ...\n    while (BaseType->isRecordType()) {\n      if (OperatorArrows.size() >= getLangOpts().ArrowDepth) {\n        Diag(OpLoc, diag::err_operator_arrow_depth_exceeded) << StartingType << getLangOpts().ArrowDepth << Base->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/operator-arrow-depth.cpp"]={"clang/test/SemaCXX/operator-arrow-depth.cpp:25:12: error: use of \'operator->\' on type \'B<10 / 2 + 1>\' would invoke a sequence of more than 10 \'operator->\' calls"}
["clang/test/SemaCXX/operator-arrow-depth.cpp"]={"clang/test/SemaCXX/operator-arrow-depth.cpp:25:12: error: use of \'operator->\' on type \'B<10 / 2 + 1>\' would invoke a sequence of more than 10 \'operator->\' calls"}
Line 155: Line 156:
},
},
["err_operator_delete_dependent_param_type"]={
["err_operator_delete_dependent_param_type"]={
[b]="err_operator_delete_dependent_param_type",
[d]="err_operator_delete_dependent_param_type",
[j]="%0 cannot take a dependent type as first parameter; use %1 instead",
[e]="%0 cannot take a dependent type as first parameter; use %1 instead",
[i]="A cannot take a dependent type as first parameter; use B instead",
[f]="A cannot take a dependent type as first parameter; use B instead",
[h]=k,
[g]=k,
[c]="(.*?) cannot take a dependent type as first parameter; use (.*?) instead",
[h]="(.*?) cannot take a dependent type as first parameter; use (.*?) instead",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"c0b2ce14cdc1",1260576962,"More work on improving the operator delete diagnostics.","More work on improving the operator delete diagnostics.\n\nllvm-svn: 91187"},
[j]={"c0b2ce14cdc1",1260576962,"More work on improving the operator delete diagnostics.","More work on improving the operator delete diagnostics.\n\nllvm-svn: 91187"},
[d]={{w,16101,"static bool CheckOperatorDeleteDeclaration(Sema &SemaRef, FunctionDecl *FnDecl) {\n  // ...\n  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidTy, ExpectedFirstParamType, diag::err_operator_delete_dependent_param_type, diag::err_operator_delete_param_type))"}},
[i]={{w,16101,"static bool CheckOperatorDeleteDeclaration(Sema &SemaRef, FunctionDecl *FnDecl) {\n  // ...\n  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidTy, ExpectedFirstParamType, diag::err_operator_delete_dependent_param_type, diag::err_operator_delete_param_type))"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx2a-destroying-delete.cpp"]={"clang/test/SemaCXX/cxx2a-destroying-delete.cpp:141:10: error: \'operator delete\' cannot take a dependent type as first parameter; use \'D<T> *\' instead"}
["clang/test/SemaCXX/cxx2a-destroying-delete.cpp"]={"clang/test/SemaCXX/cxx2a-destroying-delete.cpp:141:10: error: \'operator delete\' cannot take a dependent type as first parameter; use \'D<T> *\' instead"}
Line 169: Line 170:
},
},
["err_operator_delete_param_type"]={
["err_operator_delete_param_type"]={
[b]="err_operator_delete_param_type",
[d]="err_operator_delete_param_type",
[j]="first parameter of %0 must have type %1",
[e]="first parameter of %0 must have type %1",
[i]="first parameter of A must have type B",
[f]="first parameter of A must have type B",
[h]=k,
[g]=k,
[c]="first parameter of (.*?) must have type (.*?)",
[h]="first parameter of (.*?) must have type (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={pc,1260573802,oc,nc},
[j]={vc,1260573802,uc,qc},
[d]={{w,16102,"static bool CheckOperatorDeleteDeclaration(Sema &SemaRef, FunctionDecl *FnDecl) {\n  // ...\n  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidTy, ExpectedFirstParamType, diag::err_operator_delete_dependent_param_type, diag::err_operator_delete_param_type))"}},
[i]={{w,16102,"static bool CheckOperatorDeleteDeclaration(Sema &SemaRef, FunctionDecl *FnDecl) {\n  // ...\n  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidTy, ExpectedFirstParamType, diag::err_operator_delete_dependent_param_type, diag::err_operator_delete_param_type))"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx2a-destroying-delete.cpp"]={"clang/test/SemaCXX/cxx2a-destroying-delete.cpp:19:6: error: first parameter of \'operator delete\' must have type \'void *\'","clang/test/SemaCXX/cxx2a-destroying-delete.cpp:30:8: error: first parameter of \'operator delete\' must have type \'A *\'"}
["clang/test/SemaCXX/cxx2a-destroying-delete.cpp"]={"clang/test/SemaCXX/cxx2a-destroying-delete.cpp:19:6: error: first parameter of \'operator delete\' must have type \'void *\'","clang/test/SemaCXX/cxx2a-destroying-delete.cpp:30:8: error: first parameter of \'operator delete\' must have type \'A *\'"}
Line 183: Line 184:
},
},
["err_operator_new_default_arg"]={
["err_operator_new_default_arg"]={
[b]="err_operator_new_default_arg",
[d]="err_operator_new_default_arg",
[j]="parameter of %0 cannot have a default argument",
[e]="parameter of %0 cannot have a default argument",
[i]="parameter of A cannot have a default argument",
[f]="parameter of A cannot have a default argument",
[h]=k,
[g]=k,
[c]="parameter of (.*?) cannot have a default argument",
[h]="parameter of (.*?) cannot have a default argument",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"7e0b207e5478",1260726823,"More improvements to checking allocation and deallocation functions.","More improvements to checking allocation and deallocation functions.\n\nllvm-svn: 91244"},
[j]={"7e0b207e5478",1260726823,"More improvements to checking allocation and deallocation functions.","More improvements to checking allocation and deallocation functions.\n\nllvm-svn: 91244"},
[d]={{w,16070,"static bool CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {\n  // ...\n  // C++ [basic.stc.dynamic.allocation]p1:\n  //  The first parameter shall not have an associated default argument.\n  if (FnDecl->getParamDecl(0)->hasDefaultArg())\n    return SemaRef.Diag(FnDecl->getLocation(), diag::err_operator_new_default_arg) << FnDecl->getDeclName() << FnDecl->getParamDecl(0)->getDefaultArgRange();"}},
[i]={{w,16070,"static bool CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {\n  // ...\n  // C++ [basic.stc.dynamic.allocation]p1:\n  //  The first parameter shall not have an associated default argument.\n  if (FnDecl->getParamDecl(0)->hasDefaultArg())\n    return SemaRef.Diag(FnDecl->getLocation(), diag::err_operator_new_default_arg) << FnDecl->getDeclName() << FnDecl->getParamDecl(0)->getDefaultArgRange();"}},
[l]={
[l]={
[Rb]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:28:9: error: parameter of \'operator new\' cannot have a default argument"}
[Rb]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:28:9: error: parameter of \'operator new\' cannot have a default argument"}
Line 197: Line 198:
},
},
["err_operator_new_delete_declared_in_namespace"]={
["err_operator_new_delete_declared_in_namespace"]={
[b]="err_operator_new_delete_declared_in_namespace",
[d]="err_operator_new_delete_declared_in_namespace",
[j]="%0 cannot be declared inside a namespace",
[e]="%0 cannot be declared inside a namespace",
[i]="A cannot be declared inside a namespace",
[f]="A cannot be declared inside a namespace",
[h]=k,
[g]=k,
[c]="(.*?) cannot be declared inside a namespace",
[h]="(.*?) cannot be declared inside a namespace",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={pc,1260573802,oc,nc},
[j]={vc,1260573802,uc,qc},
[d]={{w,15951,"static inline bool CheckOperatorNewDeleteDeclarationScope(Sema &SemaRef, const FunctionDecl *FnDecl) {\n  // ...\n  if (isa<NamespaceDecl>(DC)) {\n    return SemaRef.Diag(FnDecl->getLocation(), diag::err_operator_new_delete_declared_in_namespace) << FnDecl->getDeclName();"}},
[i]={{w,15951,"static inline bool CheckOperatorNewDeleteDeclarationScope(Sema &SemaRef, const FunctionDecl *FnDecl) {\n  // ...\n  if (isa<NamespaceDecl>(DC)) {\n    return SemaRef.Diag(FnDecl->getLocation(), diag::err_operator_new_delete_declared_in_namespace) << FnDecl->getDeclName();"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp"]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp:8:8: error: \'operator delete\' cannot be declared inside a namespace"}
["clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp"]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp:8:8: error: \'operator delete\' cannot be declared inside a namespace"}
Line 211: Line 212:
},
},
["err_operator_new_delete_declared_static"]={
["err_operator_new_delete_declared_static"]={
[b]="err_operator_new_delete_declared_static",
[d]="err_operator_new_delete_declared_static",
[j]="%0 cannot be declared static in global scope",
[e]="%0 cannot be declared static in global scope",
[i]="A cannot be declared static in global scope",
[f]="A cannot be declared static in global scope",
[h]=k,
[g]=k,
[c]="(.*?) cannot be declared static in global scope",
[h]="(.*?) cannot be declared static in global scope",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={pc,1260573802,oc,nc},
[j]={vc,1260573802,uc,qc},
[d]={{w,15958,"static inline bool CheckOperatorNewDeleteDeclarationScope(Sema &SemaRef, const FunctionDecl *FnDecl) {\n  // ...\n  if (isa<TranslationUnitDecl>(DC) && FnDecl->getStorageClass() == SC_Static) {\n    return SemaRef.Diag(FnDecl->getLocation(), diag::err_operator_new_delete_declared_static) << FnDecl->getDeclName();"}},
[i]={{w,15958,"static inline bool CheckOperatorNewDeleteDeclarationScope(Sema &SemaRef, const FunctionDecl *FnDecl) {\n  // ...\n  if (isa<TranslationUnitDecl>(DC) && FnDecl->getStorageClass() == SC_Static) {\n    return SemaRef.Diag(FnDecl->getLocation(), diag::err_operator_new_delete_declared_static) << FnDecl->getDeclName();"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp"]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp:12:13: error: \'operator delete\' cannot be declared static in global scope"}
["clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp"]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp:12:13: error: \'operator delete\' cannot be declared static in global scope"}
Line 225: Line 226:
},
},
["err_operator_new_delete_dependent_result_type"]={
["err_operator_new_delete_dependent_result_type"]={
[b]="err_operator_new_delete_dependent_result_type",
[d]="err_operator_new_delete_dependent_result_type",
[j]="%0 cannot have a dependent return type; use %1 instead",
[e]="%0 cannot have a dependent return type; use %1 instead",
[i]="A cannot have a dependent return type; use B instead",
[f]="A cannot have a dependent return type; use B instead",
[h]=k,
[g]=k,
[c]="(.*?) cannot have a dependent return type; use (.*?) instead",
[h]="(.*?) cannot have a dependent return type; use (.*?) instead",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"c0b2ce14cdc1",1260576962,"More work on improving the operator delete diagnostics.","More work on improving the operator delete diagnostics.\n\nllvm-svn: 91187"},
[j]={"c0b2ce14cdc1",1260576962,"More work on improving the operator delete diagnostics.","More work on improving the operator delete diagnostics.\n\nllvm-svn: 91187"},
[d]={{w,16000,"static inline bool CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl, CanQualType ExpectedResultType, CanQualType ExpectedFirstParamType, unsigned DependentParamTypeDiag, unsigned InvalidParamTypeDiag) {\n  // ...\n  // Check that the result type is what we expect.\n  if (SemaRef.Context.getCanonicalType(ResultType) != ExpectedResultType) {\n    // ...\n    return SemaRef.Diag(FnDecl->getLocation(), ResultType->isDependentType() ? diag::err_operator_new_delete_dependent_result_type : diag::err_operator_new_delete_invalid_result_type) << FnDecl->getDeclName() << ExpectedResultType;"}},
[i]={{w,16000,"static inline bool CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl, CanQualType ExpectedResultType, CanQualType ExpectedFirstParamType, unsigned DependentParamTypeDiag, unsigned InvalidParamTypeDiag) {\n  // ...\n  // Check that the result type is what we expect.\n  if (SemaRef.Context.getCanonicalType(ResultType) != ExpectedResultType) {\n    // ...\n    return SemaRef.Diag(FnDecl->getLocation(), ResultType->isDependentType() ? diag::err_operator_new_delete_dependent_result_type : diag::err_operator_new_delete_invalid_result_type) << FnDecl->getDeclName() << ExpectedResultType;"}},
[l]={
[l]={
[Rb]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:36:26: error: \'operator new\' cannot have a dependent return type; use \'void *\' instead"}
[Rb]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:36:26: error: \'operator new\' cannot have a dependent return type; use \'void *\' instead"}
Line 239: Line 240:
},
},
["err_operator_new_delete_invalid_result_type"]={
["err_operator_new_delete_invalid_result_type"]={
[b]="err_operator_new_delete_invalid_result_type",
[d]="err_operator_new_delete_invalid_result_type",
[j]="%0 must return type %1",
[e]="%0 must return type %1",
[i]="A must return type B",
[f]="A must return type B",
[h]=k,
[g]=k,
[c]="(.*?) must return type (.*?)",
[h]="(.*?) must return type (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={pc,1260573802,oc,nc},
[j]={vc,1260573802,uc,qc},
[d]={{w,16001,"static inline bool CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl, CanQualType ExpectedResultType, CanQualType ExpectedFirstParamType, unsigned DependentParamTypeDiag, unsigned InvalidParamTypeDiag) {\n  // ...\n  // Check that the result type is what we expect.\n  if (SemaRef.Context.getCanonicalType(ResultType) != ExpectedResultType) {\n    // ...\n    return SemaRef.Diag(FnDecl->getLocation(), ResultType->isDependentType() ? diag::err_operator_new_delete_dependent_result_type : diag::err_operator_new_delete_invalid_result_type) << FnDecl->getDeclName() << ExpectedResultType;"}},
[i]={{w,16001,"static inline bool CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl, CanQualType ExpectedResultType, CanQualType ExpectedFirstParamType, unsigned DependentParamTypeDiag, unsigned InvalidParamTypeDiag) {\n  // ...\n  // Check that the result type is what we expect.\n  if (SemaRef.Context.getCanonicalType(ResultType) != ExpectedResultType) {\n    // ...\n    return SemaRef.Diag(FnDecl->getLocation(), ResultType->isDependentType() ? diag::err_operator_new_delete_dependent_result_type : diag::err_operator_new_delete_invalid_result_type) << FnDecl->getDeclName() << ExpectedResultType;"}},
[l]={
[l]={
[Rb]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:16:8: error: \'operator new\' must return type \'void *\'"}
[Rb]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:16:8: error: \'operator new\' must return type \'void *\'"}
Line 253: Line 254:
},
},
["err_operator_new_delete_template_too_few_parameters"]={
["err_operator_new_delete_template_too_few_parameters"]={
[b]="err_operator_new_delete_template_too_few_parameters",
[d]="err_operator_new_delete_template_too_few_parameters",
[j]="%0 template must have at least two parameters",
[e]="%0 template must have at least two parameters",
[i]="A template must have at least two parameters",
[f]="A template must have at least two parameters",
[h]=k,
[g]=k,
[c]="(.*?) template must have at least two parameters",
[h]="(.*?) template must have at least two parameters",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"c0b2ce14cdc1",1260576962,"More work on improving the operator delete diagnostics.","More work on improving the operator delete diagnostics.\n\nllvm-svn: 91187"},
[j]={"c0b2ce14cdc1",1260576962,"More work on improving the operator delete diagnostics.","More work on improving the operator delete diagnostics.\n\nllvm-svn: 91187"},
[d]={{w,16008,"static inline bool CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl, CanQualType ExpectedResultType, CanQualType ExpectedFirstParamType, unsigned DependentParamTypeDiag, unsigned InvalidParamTypeDiag) {\n  // ...\n  // A function template must have at least 2 parameters.\n  if (FnDecl->getDescribedFunctionTemplate() && FnDecl->getNumParams() < 2)\n    return SemaRef.Diag(FnDecl->getLocation(), diag::err_operator_new_delete_template_too_few_parameters) << FnDecl->getDeclName();"}},
[i]={{w,16008,"static inline bool CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl, CanQualType ExpectedResultType, CanQualType ExpectedFirstParamType, unsigned DependentParamTypeDiag, unsigned InvalidParamTypeDiag) {\n  // ...\n  // A function template must have at least 2 parameters.\n  if (FnDecl->getDescribedFunctionTemplate() && FnDecl->getNumParams() < 2)\n    return SemaRef.Diag(FnDecl->getLocation(), diag::err_operator_new_delete_template_too_few_parameters) << FnDecl->getDeclName();"}},
[l]={
[l]={
[Rb]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:44:30: error: \'operator new\' template must have at least two parameters"}
[Rb]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:44:30: error: \'operator new\' template must have at least two parameters"}
Line 267: Line 268:
},
},
["err_operator_new_delete_too_few_parameters"]={
["err_operator_new_delete_too_few_parameters"]={
[b]="err_operator_new_delete_too_few_parameters",
[d]="err_operator_new_delete_too_few_parameters",
[j]="%0 must have at least one parameter",
[e]="%0 must have at least one parameter",
[i]="A must have at least one parameter",
[f]="A must have at least one parameter",
[h]=k,
[g]=k,
[c]="(.*?) must have at least one parameter",
[h]="(.*?) must have at least one parameter",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={pc,1260573802,oc,nc},
[j]={vc,1260573802,uc,qc},
[d]={{w,16014,"static inline bool CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl, CanQualType ExpectedResultType, CanQualType ExpectedFirstParamType, unsigned DependentParamTypeDiag, unsigned InvalidParamTypeDiag) {\n  // ...\n  // The function decl must have at least 1 parameter.\n  if (FnDecl->getNumParams() == 0)\n    return SemaRef.Diag(FnDecl->getLocation(), diag::err_operator_new_delete_too_few_parameters) << FnDecl->getDeclName();"}},
[i]={{w,16014,"static inline bool CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl, CanQualType ExpectedResultType, CanQualType ExpectedFirstParamType, unsigned DependentParamTypeDiag, unsigned InvalidParamTypeDiag) {\n  // ...\n  // The function decl must have at least 1 parameter.\n  if (FnDecl->getNumParams() == 0)\n    return SemaRef.Diag(FnDecl->getLocation(), diag::err_operator_new_delete_too_few_parameters) << FnDecl->getDeclName();"}},
[l]={
[l]={
["clang/test/SemaCXX/PR12778.cpp"]={"clang/test/SemaCXX/PR12778.cpp:3:6: error: \'operator delete\' must have at least one parameter"}
["clang/test/SemaCXX/PR12778.cpp"]={"clang/test/SemaCXX/PR12778.cpp:3:6: error: \'operator delete\' must have at least one parameter"}
Line 281: Line 282:
},
},
["err_operator_new_dependent_param_type"]={
["err_operator_new_dependent_param_type"]={
[b]="err_operator_new_dependent_param_type",
[d]="err_operator_new_dependent_param_type",
[j]="%0 cannot take a dependent type as first parameter; use size_t (%1) instead",
[e]="%0 cannot take a dependent type as first parameter; use size_t (%1) instead",
[i]="A cannot take a dependent type as first parameter; use size_t (B) instead",
[f]="A cannot take a dependent type as first parameter; use size_t (B) instead",
[h]=k,
[g]=k,
[c]="(.*?) cannot take a dependent type as first parameter; use size_t \\((.*?)\\) instead",
[h]="(.*?) cannot take a dependent type as first parameter; use size_t \\((.*?)\\) instead",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"c0b2ce14cdc1",1260576962,"More work on improving the operator delete diagnostics.","More work on improving the operator delete diagnostics.\n\nllvm-svn: 91187"},
[j]={"c0b2ce14cdc1",1260576962,"More work on improving the operator delete diagnostics.","More work on improving the operator delete diagnostics.\n\nllvm-svn: 91187"},
[d]={{w,16062,"static bool CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {\n  // ...\n  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidPtrTy, SizeTy, diag::err_operator_new_dependent_param_type, diag::err_operator_new_param_type))"}},
[i]={{w,16062,"static bool CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {\n  // ...\n  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidPtrTy, SizeTy, diag::err_operator_new_dependent_param_type, diag::err_operator_new_param_type))"}},
[l]={
[l]={
[Rb]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:40:30: error: \'operator new\' cannot take a dependent type as first parameter; use size_t (\'unsigned long\') instead"}
[Rb]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:40:30: error: \'operator new\' cannot take a dependent type as first parameter; use size_t (\'unsigned long\') instead"}
Line 295: Line 296:
},
},
["err_operator_new_param_type"]={
["err_operator_new_param_type"]={
[b]="err_operator_new_param_type",
[d]="err_operator_new_param_type",
[j]="%0 takes type size_t (%1) as first parameter",
[e]="%0 takes type size_t (%1) as first parameter",
[i]="A takes type size_t (B) as first parameter",
[f]="A takes type size_t (B) as first parameter",
[h]=k,
[g]=k,
[c]="(.*?) takes type size_t \\((.*?)\\) as first parameter",
[h]="(.*?) takes type size_t \\((.*?)\\) as first parameter",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"4e088941ad99",1257896838,"Diagnose illegally typed operator new/new[].","Diagnose illegally typed operator new/new[].\n\nllvm-svn: 86755"},
[j]={"4e088941ad99",1257896838,"Diagnose illegally typed operator new/new[].","Diagnose illegally typed operator new/new[].\n\nllvm-svn: 86755"},
[d]={{w,16063,"static bool CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {\n  // ...\n  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidPtrTy, SizeTy, diag::err_operator_new_dependent_param_type, diag::err_operator_new_param_type))"}},
[i]={{w,16063,"static bool CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {\n  // ...\n  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidPtrTy, SizeTy, diag::err_operator_new_dependent_param_type, diag::err_operator_new_param_type))"}},
[l]={
[l]={
[Rb]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:24:9: error: \'operator new\' takes type size_t (\'unsigned long\') as first parameter"}
[Rb]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:24:9: error: \'operator new\' takes type size_t (\'unsigned long\') as first parameter"}
Line 309: Line 310:
},
},
["err_operator_overload_default_arg"]={
["err_operator_overload_default_arg"]={
[b]="err_operator_overload_default_arg",
[d]="err_operator_overload_default_arg",
[j]="parameter of overloaded %0 cannot have a default argument",
[e]="parameter of overloaded %0 cannot have a default argument",
[i]="parameter of overloaded A cannot have a default argument",
[f]="parameter of overloaded A cannot have a default argument",
[h]=k,
[g]=k,
[c]="parameter of overloaded (.*?) cannot have a default argument",
[h]="parameter of overloaded (.*?) cannot have a default argument",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{w,16198,"/// CheckOverloadedOperatorDeclaration - Check whether the declaration\n/// of this overloaded operator is well-formed. If so, returns false;\n/// otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // C++ [over.oper]p8:\n  //  An operator function cannot have default arguments (8.3.6),\n  //  except where explicitly stated below.\n  //\n  // Only the function-call operator (C++ [over.call]p1) and the subscript\n  // operator (CWG2507) allow default arguments.\n  if (Op != OO_Call) {\n    // ...\n    if (FirstDefaultedParam) {\n      if (Op == OO_Subscript) {\n      // ...\n      } else {\n        return Diag(FirstDefaultedParam->getLocation(), diag::err_operator_overload_default_arg) << FnDecl->getDeclName() << FirstDefaultedParam->getDefaultArgRange();"}},
[i]={{w,16198,"/// CheckOverloadedOperatorDeclaration - Check whether the declaration\n/// of this overloaded operator is well-formed. If so, returns false;\n/// otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // C++ [over.oper]p8:\n  //  An operator function cannot have default arguments (8.3.6),\n  //  except where explicitly stated below.\n  //\n  // Only the function-call operator (C++ [over.call]p1) and the subscript\n  // operator (CWG2507) allow default arguments.\n  if (Op != OO_Call) {\n    // ...\n    if (FirstDefaultedParam) {\n      if (Op == OO_Subscript) {\n      // ...\n      } else {\n        return Diag(FirstDefaultedParam->getLocation(), diag::err_operator_overload_default_arg) << FnDecl->getDeclName() << FirstDefaultedParam->getDefaultArgRange();"}},
[l]={
[l]={
[ub]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:25:18: error: parameter of overloaded \'operator*\' cannot have a default argument"}
[vb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:25:18: error: parameter of overloaded \'operator*\' cannot have a default argument"}
}
}
},
},
["err_operator_overload_must_be"]={
["err_operator_overload_must_be"]={
[b]="err_operator_overload_must_be",
[d]="err_operator_overload_must_be",
[j]="overloaded %0 must be a %select{unary|binary|unary or binary}2 operator (has %1 parameter%s1)",
[e]="overloaded %0 must be a %select{unary|binary|unary or binary}2 operator (has %1 parameter%s1)",
[i]={{nil,nil,{"overloaded A must be a ",{"unary","binary","unary or binary"}," operator (has B parameterB)"}}},
[f]={{nil,nil,{"overloaded A must be a ",{"unary","binary","unary or binary"}," operator (has B parameterB)"}}},
[h]=k,
[g]=k,
[c]="overloaded (.*?) must be a (?:unary|binary|unary or binary) operator \\(has (.*?) parameter(.*?)\\)",
[h]="overloaded (.*?) must be a (?:unary|binary|unary or binary) operator \\(has (.*?) parameter(.*?)\\)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{w,16237,"#include \"clang/Basic/OperatorKinds.def\"\n  // ...\n  if (Op != OO_Call && Op != OO_Subscript && ((NumParams == 1 && !CanBeUnaryOperator) || (NumParams == 2 && !CanBeBinaryOperator) || (NumParams < 1) || (NumParams > 2))) {\n    // ...\n    return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be) << FnDecl->getDeclName() << NumParams << ErrorKind;"}},
[i]={{w,16237,"#include \"clang/Basic/OperatorKinds.def\"\n  // ...\n  if (Op != OO_Call && Op != OO_Subscript && ((NumParams == 1 && !CanBeUnaryOperator) || (NumParams == 2 && !CanBeBinaryOperator) || (NumParams < 1) || (NumParams > 2))) {\n    // ...\n    return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be) << FnDecl->getDeclName() << NumParams << ErrorKind;"}},
[l]={
[l]={
[ub]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:29:3: error: overloaded \'operator%\' must be a binary operator (has 1 parameter)"}
[vb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:29:3: error: overloaded \'operator%\' must be a binary operator (has 1 parameter)"}
}
}
},
},
["err_operator_overload_must_be_member"]={
["err_operator_overload_must_be_member"]={
[b]="err_operator_overload_must_be_member",
[d]="err_operator_overload_must_be_member",
[j]="overloaded %0 must be a non-static member function",
[e]="overloaded %0 must be a non-static member function",
[i]="overloaded A must be a non-static member function",
[f]="overloaded A must be a non-static member function",
[h]=k,
[g]=k,
[c]="overloaded (.*?) must be a non\\-static member function",
[h]="overloaded (.*?) must be a non\\-static member function",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{w,16259,"#include \"clang/Basic/OperatorKinds.def\"\n  // ...\n  // Some operators must be member functions.\n  if (MustBeMemberOperator && !isa<CXXMethodDecl>(FnDecl)) {\n    return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be_member) << FnDecl->getDeclName();"}},
[i]={{w,16259,"#include \"clang/Basic/OperatorKinds.def\"\n  // ...\n  // Some operators must be member functions.\n  if (MustBeMemberOperator && !isa<CXXMethodDecl>(FnDecl)) {\n    return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be_member) << FnDecl->getDeclName();"}},
[l]={
[l]={
[ub]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:31:6: error: overloaded \'operator()\' must be a non-static member function"}
[vb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:31:6: error: overloaded \'operator()\' must be a non-static member function"}
}
}
},
},
["err_operator_overload_needs_class_or_enum"]={
["err_operator_overload_needs_class_or_enum"]={
[b]="err_operator_overload_needs_class_or_enum",
[d]="err_operator_overload_needs_class_or_enum",
[j]="overloaded %0 must have at least one parameter of class or enumeration type",
[e]="overloaded %0 must have at least one parameter of class or enumeration type",
[i]="overloaded A must have at least one parameter of class or enumeration type",
[f]="overloaded A must have at least one parameter of class or enumeration type",
[h]=k,
[g]=k,
[c]="overloaded (.*?) must have at least one parameter of class or enumeration type",
[h]="overloaded (.*?) must have at least one parameter of class or enumeration type",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{w,16171,"/// CheckOverloadedOperatorDeclaration - Check whether the declaration\n/// of this overloaded operator is well-formed. If so, returns false;\n/// otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // C++ [over.oper]p7:\n  //  An operator function shall either be a member function or\n  //  be a non-member function and have at least one parameter\n  //  whose type is a class, a reference to a class, an enumeration,\n  //  or a reference to an enumeration.\n  // Note: Before C++23, a member function could not be static. The only member\n  //      function allowed to be static is the call operator function.\n  if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {\n  // ...\n  } else {\n    // ...\n    if (!ClassOrEnumParam)\n      return Diag(FnDecl->getLocation(), diag::err_operator_overload_needs_class_or_enum) << FnDecl->getDeclName();"}},
[i]={{w,16171,"/// CheckOverloadedOperatorDeclaration - Check whether the declaration\n/// of this overloaded operator is well-formed. If so, returns false;\n/// otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // C++ [over.oper]p7:\n  //  An operator function shall either be a member function or\n  //  be a non-member function and have at least one parameter\n  //  whose type is a class, a reference to a class, an enumeration,\n  //  or a reference to an enumeration.\n  // Note: Before C++23, a member function could not be static. The only member\n  //      function allowed to be static is the call operator function.\n  if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {\n  // ...\n  } else {\n    // ...\n    if (!ClassOrEnumParam)\n      return Diag(FnDecl->getLocation(), diag::err_operator_overload_needs_class_or_enum) << FnDecl->getDeclName();"}},
[l]={
[l]={
[ub]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:23:3: error: overloaded \'operator+\' must have at least one parameter of class or enumeration type"}
[vb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:23:3: error: overloaded \'operator+\' must have at least one parameter of class or enumeration type"}
}
}
},
},
["err_operator_overload_post_incdec_must_be_int"]={
["err_operator_overload_post_incdec_must_be_int"]={
[b]="err_operator_overload_post_incdec_must_be_int",
[d]="err_operator_overload_post_incdec_must_be_int",
[j]="parameter of overloaded post-%select{increment|decrement}1 operator must have type \'int\' (not %0)",
[e]="parameter of overloaded post-%select{increment|decrement}1 operator must have type \'int\' (not %0)",
[i]={{nil,nil,{"parameter of overloaded post-",{"increment","decrement"}," operator must have type \'int\' (not A)"}}},
[f]={{nil,nil,{"parameter of overloaded post-",{"increment","decrement"}," operator must have type \'int\' (not A)"}}},
[h]=k,
[g]=k,
[c]="parameter of overloaded post\\-(?:increment|decrement) operator must have type \'int\' \\(not (.*?)\\)",
[h]="parameter of overloaded post\\-(?:increment|decrement) operator must have type \'int\' \\(not (.*?)\\)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{w,16280,"#include \"clang/Basic/OperatorKinds.def\"\n  // ...\n  // C++ [over.inc]p1:\n  //  The user-defined function called operator++ implements the\n  //  prefix and postfix ++ operator. If this function is a member\n  //  function with no parameters, or a non-member function with one\n  //  parameter of class or enumeration type, it defines the prefix\n  //  increment operator ++ for objects of that type. If the function\n  //  is a member function with one parameter (which shall be of type\n  //  int) or a non-member function with two parameters (the second\n  //  of which shall be of type int), it defines the postfix\n  //  increment operator ++ for objects of that type.\n  if ((Op == OO_PlusPlus || Op == OO_MinusMinus) && NumParams == 2) {\n    // ...\n    if (!ParamType->isSpecificBuiltinType(BuiltinType::Int) && !ParamType->isDependentType())\n      return Diag(LastParam->getLocation(), diag::err_operator_overload_post_incdec_must_be_int) << LastParam->getType() << (Op == OO_MinusMinus);"}},
[i]={{w,16280,"#include \"clang/Basic/OperatorKinds.def\"\n  // ...\n  // C++ [over.inc]p1:\n  //  The user-defined function called operator++ implements the\n  //  prefix and postfix ++ operator. If this function is a member\n  //  function with no parameters, or a non-member function with one\n  //  parameter of class or enumeration type, it defines the prefix\n  //  increment operator ++ for objects of that type. If the function\n  //  is a member function with one parameter (which shall be of type\n  //  int) or a non-member function with two parameters (the second\n  //  of which shall be of type int), it defines the postfix\n  //  increment operator ++ for objects of that type.\n  if ((Op == OO_PlusPlus || Op == OO_MinusMinus) && NumParams == 2) {\n    // ...\n    if (!ParamType->isSpecificBuiltinType(BuiltinType::Int) && !ParamType->isDependentType())\n      return Diag(LastParam->getLocation(), diag::err_operator_overload_post_incdec_must_be_int) << LastParam->getType() << (Op == OO_MinusMinus);"}},
[l]={
[l]={
[ub]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:37:23: error: parameter of overloaded post-increment operator must have type \'int\' (not \'FLOAT\' (aka \'float\'))"}
[vb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:37:23: error: parameter of overloaded post-increment operator must have type \'int\' (not \'FLOAT\' (aka \'float\'))"}
}
}
},
},
["err_operator_overload_static"]={
["err_operator_overload_static"]={
[b]="err_operator_overload_static",
[d]="err_operator_overload_static",
[j]="overloaded %0 cannot be a static member function",
[e]="overloaded %0 cannot be a static member function",
[i]="overloaded A cannot be a static member function",
[f]="overloaded A cannot be a static member function",
[h]=k,
[g]=k,
[c]="overloaded (.*?) cannot be a static member function",
[h]="overloaded (.*?) cannot be a static member function",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{w,16155,"/// CheckOverloadedOperatorDeclaration - Check whether the declaration\n/// of this overloaded operator is well-formed. If so, returns false;\n/// otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // C++ [over.oper]p7:\n  //  An operator function shall either be a member function or\n  //  be a non-member function and have at least one parameter\n  //  whose type is a class, a reference to a class, an enumeration,\n  //  or a reference to an enumeration.\n  // Note: Before C++23, a member function could not be static. The only member\n  //      function allowed to be static is the call operator function.\n  if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {\n    if (MethodDecl->isStatic()) {\n      if (Op == OO_Call || Op == OO_Subscript)\n      // ...\n      else\n        return Diag(FnDecl->getLocation(), diag::err_operator_overload_static) << FnDecl;"}},
[i]={{w,16155,"/// CheckOverloadedOperatorDeclaration - Check whether the declaration\n/// of this overloaded operator is well-formed. If so, returns false;\n/// otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // C++ [over.oper]p7:\n  //  An operator function shall either be a member function or\n  //  be a non-member function and have at least one parameter\n  //  whose type is a class, a reference to a class, an enumeration,\n  //  or a reference to an enumeration.\n  // Note: Before C++23, a member function could not be static. The only member\n  //      function allowed to be static is the call operator function.\n  if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {\n    if (MethodDecl->isStatic()) {\n      if (Op == OO_Call || Op == OO_Subscript)\n      // ...\n      else\n        return Diag(FnDecl->getLocation(), diag::err_operator_overload_static) << FnDecl;"}},
[l]={
[l]={
[ub]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:15:14: error: overloaded \'operator+\' cannot be a static member function"}
[vb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:15:14: error: overloaded \'operator+\' cannot be a static member function"}
}
}
},
},
["err_operator_overload_variadic"]={
["err_operator_overload_variadic"]={
[b]="err_operator_overload_variadic",
[d]="err_operator_overload_variadic",
[j]="overloaded %0 cannot be variadic",
[e]="overloaded %0 cannot be variadic",
[i]="overloaded A cannot be variadic",
[f]="overloaded A cannot be variadic",
[h]=k,
[g]=k,
[c]="overloaded (.*?) cannot be variadic",
[h]="overloaded (.*?) cannot be variadic",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{w,16252,"#include \"clang/Basic/OperatorKinds.def\"\n  // ...\n  // Overloaded operators other than operator() and operator[] cannot be\n  // variadic.\n  if (Op != OO_Call && FnDecl->getType()->castAs<FunctionProtoType>()->isVariadic()) {\n    return Diag(FnDecl->getLocation(), diag::err_operator_overload_variadic) << FnDecl->getDeclName();"}},
[i]={{w,16252,"#include \"clang/Basic/OperatorKinds.def\"\n  // ...\n  // Overloaded operators other than operator() and operator[] cannot be\n  // variadic.\n  if (Op != OO_Call && FnDecl->getType()->castAs<FunctionProtoType>()->isVariadic()) {\n    return Diag(FnDecl->getLocation(), diag::err_operator_overload_variadic) << FnDecl->getDeclName();"}},
[l]={
[l]={
[ub]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:27:3: error: overloaded \'operator/\' cannot be variadic"}
[vb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:27:3: error: overloaded \'operator/\' cannot be variadic"}
}
}
},
},
["err_opt_not_valid_on_target"]={
["err_opt_not_valid_on_target"]={
[b]={{nil,K,"err_opt_not_valid_on_target"}},
[d]={{nil,K,"err_opt_not_valid_on_target"}},
[j]={{nil,K,"option \'%0\' cannot be specified on this target"}},
[e]={{nil,K,"option \'%0\' cannot be specified on this target"}},
[i]={{nil,K,"option \'A\' cannot be specified on this target"}},
[f]={{nil,K,"option \'A\' cannot be specified on this target"}},
[h]=k,
[g]=k,
[c]="option \'(.*?)\' cannot be specified on this target",
[h]="option \'(.*?)\' cannot be specified on this target",
[f]=a,
[b]=a,
[e]={{nil,K,a}},
[c]={{nil,K,S}},
[g]={"0fb8c877c4a3",1526644581,"This patch aims to match the changes introduced","This patch aims to match the changes introduced\nin gcc by https://gcc.gnu.org/ml/gcc-cvs/2018-04/msg00534.html.\nThe -mibt feature flag is being removed, and the -fcf-protection\noption now also defines a CET macro and causes errors when used\non non-X86 targets, while X86 targets no longer check for -mibt\nand -mshstk to determine if -fcf-protection is supported. -mshstk\nis now used only to determine availability of shadow stack intrinsics.\n\nComes with an LLVM patch (D46882).\n\nPatch by mike.dvoretsky\n\nDifferential Revision: https://reviews.llvm.org/D46881\n\nllvm-svn: 332704"},
[j]={"0fb8c877c4a3",1526644581,"This patch aims to match the changes introduced","This patch aims to match the changes introduced\nin gcc by https://gcc.gnu.org/ml/gcc-cvs/2018-04/msg00534.html.\nThe -mibt feature flag is being removed, and the -fcf-protection\noption now also defines a CET macro and causes errors when used\non non-X86 targets, while X86 targets no longer check for -mibt\nand -mshstk to determine if -fcf-protection is supported. -mshstk\nis now used only to determine availability of shadow stack intrinsics.\n\nComes with an LLVM patch (D46882).\n\nPatch by mike.dvoretsky\n\nDifferential Revision: https://reviews.llvm.org/D46881\n\nllvm-svn: 332704"},
[d]={{"clang/lib/Basic/TargetInfo.cpp",197,"bool TargetInfo::checkCFProtectionBranchSupported(DiagnosticsEngine &Diags) const {\n  Diags.Report(diag::err_opt_not_valid_on_target) << \"cf-protection=branch\";"},{"clang/lib/Basic/TargetInfo.cpp",203,"bool TargetInfo::checkCFProtectionReturnSupported(DiagnosticsEngine &Diags) const {\n  Diags.Report(diag::err_opt_not_valid_on_target) << \"cf-protection=return\";"},{"clang/lib/Basic/TargetInfo.cpp",511,"/// adjust - Set forced language options.\n/// Apply changes to the target information with respect to certain\n/// language options which change the target configuration and adjust\n/// the language based on the target options where applicable.\nvoid TargetInfo::adjust(DiagnosticsEngine &Diags, LangOptions &Opts) {\n  // ...\n  if (Opts.ProtectParens && !checkArithmeticFenceSupported()) {\n    Diags.Report(diag::err_opt_not_valid_on_target) << \"-fprotect-parens\";"},{"clang/lib/CodeGen/CodeGenFunction.cpp",1098,"#include \"clang/Basic/Sanitizers.def\"\n  // ...\n  if (CGM.getCodeGenOpts().PackedStack) {\n    if (getContext().getTargetInfo().getTriple().getArch() != llvm::Triple::systemz)\n      CGM.getDiags().Report(diag::err_opt_not_valid_on_target) << \"-mpacked-stack\";"}}
[i]={{"clang/lib/Basic/TargetInfo.cpp",197,"bool TargetInfo::checkCFProtectionBranchSupported(DiagnosticsEngine &Diags) const {\n  Diags.Report(diag::err_opt_not_valid_on_target) << \"cf-protection=branch\";"},{"clang/lib/Basic/TargetInfo.cpp",203,"bool TargetInfo::checkCFProtectionReturnSupported(DiagnosticsEngine &Diags) const {\n  Diags.Report(diag::err_opt_not_valid_on_target) << \"cf-protection=return\";"},{"clang/lib/Basic/TargetInfo.cpp",511,"/// adjust - Set forced language options.\n/// Apply changes to the target information with respect to certain\n/// language options which change the target configuration and adjust\n/// the language based on the target options where applicable.\nvoid TargetInfo::adjust(DiagnosticsEngine &Diags, LangOptions &Opts) {\n  // ...\n  if (Opts.ProtectParens && !checkArithmeticFenceSupported()) {\n    Diags.Report(diag::err_opt_not_valid_on_target) << \"-fprotect-parens\";"},{"clang/lib/CodeGen/CodeGenFunction.cpp",1098,"#include \"clang/Basic/Sanitizers.def\"\n  // ...\n  if (CGM.getCodeGenOpts().PackedStack) {\n    if (getContext().getTargetInfo().getTriple().getArch() != llvm::Triple::systemz)\n      CGM.getDiags().Report(diag::err_opt_not_valid_on_target) << \"-mpacked-stack\";"}}
},
},
["err_opt_not_valid_with_opt"]={
["err_opt_not_valid_with_opt"]={
[b]="err_opt_not_valid_with_opt",
[d]="err_opt_not_valid_with_opt",
[j]="option \'%0\' cannot be specified with \'%1\'",
[e]="option \'%0\' cannot be specified with \'%1\'",
[i]="option \'A\' cannot be specified with \'B\'",
[f]="option \'A\' cannot be specified with \'B\'",
[h]=k,
[g]=k,
[c]="option \'(.*?)\' cannot be specified with \'(.*?)\'",
[h]="option \'(.*?)\' cannot be specified with \'(.*?)\'",
[f]=a,
[b]=a,
[e]=a,
[c]=S,
[g]={"26c3534b84f2",1436533894,"Add missing builtins to altivec.h for ABI compliance (vol. 3)","Add missing builtins to altivec.h for ABI compliance (vol. 3)\n\nThis patch corresponds to review:\nhttp://reviews.llvm.org/D10972\n\nFix for the handling of dependent features that are enabled by default\non some CPU\'s (such as -mvsx, -mpower8-vector).\n\nAlso provides a number of new interfaces or fixes existing ones in\naltivec.h.\n\nChanged signatures to conform to ABI:\nvector short vec_perm(vector signed short, vector signed short, vector unsigned char)\nvector int vec_perm(vector signed int, vector signed int, vector unsigned char)\nvector long long vec_perm(vector signed long long, vector signed long long, vector unsigned char)\nvector signed char vec_sld(vector signed char, vector signed char, const int)\nvector unsigned char vec_sld(vector unsigned char, vector unsigned char, const int)\nvector bool char vec_sld(vector bool char, vector bool char, const int)\nvector unsigned short vec_sld(vector unsigned short, vector unsigned short, const int)\nvector signed short vec_sld(vector signed short, vector signed short, const int)\nvector signed int vec_sld(vector signed int, vector signed int, const int)\nvector unsigned int vec_sld(vector unsigned int, vector unsigned int, const int)\nvector float vec_sld(vector float, vector float, const int)\nvector signed char vec_splat(vector signed char, const int)\nvector unsigned char vec_splat(vector unsigned char, const int)\nvector bool char vec_splat(vector bool char, const int)\nvector signed short vec_splat(vector signed short, const int)\nvector unsigned short vec_splat(vector unsigned short, const int)\nvector bool short vec_splat(vector bool short, const int)\nvector pixel vec_splat(vector pixel, const int)\nvector signed int vec_splat(vector signed int, const int)\nvector unsigned int vec_splat(vector unsigned int, const int)\nvector bool int vec_splat(vector bool int, const int)\nvector float vec_splat(vector float, const int)\n\nAdded a VSX path to:\nvector float vec_round(vector float)\n\nAdded interfaces:\nvector signed char vec_eqv(vector signed char, vector signed char)\nvector signed char vec_eqv(vector bool char, vector signed char)\nvector signed char vec_eqv(vector signed char, vector bool char)\nvector unsigned char vec_eqv(vector unsigned char, vector unsigned char)\nvector unsigned char vec_eqv(vector bool char, vector unsigned char)\nvector unsigned char vec_eqv(vector unsigned char, vector bool char)\nvector signed short vec_eqv(vector signed short, vector signed short)\nvector signed short vec_eqv(vector bool short, vector signed short)\nvector signed short vec_eqv(vector signed short, vector bool short)\nvector unsigned short vec_eqv(vector unsigned short, vector unsigned short)\nvector unsigned short vec_eqv(vector bool short, vector unsigned short)\nvector unsigned short vec_eqv(vector unsigned short, vector bool short)\nvector signed int vec_eqv(vector signed int, vector signed int)\nvector signed int vec_eqv(vector bool int, vector signed int)\nvector signed int vec_eqv(vector signed int, vector bool int)\nvector unsigned int vec_eqv(vector unsigned int, vector unsigned int)\nvector unsigned int vec_eqv(vector bool int, vector unsigned int)\nvector unsigned int vec_eqv(vector unsigned int, vector bool int)\nvector signed long long vec_eqv(vector signed long long, vector signed long long)\nvector signed long long vec_eqv(vector bool long long, vector signed long long)\nvector signed long long vec_eqv(vector signed long long, vector bool long long)\nvector unsigned long long vec_eqv(vector unsigned long long, vector unsigned long long)\nvector unsigned long long vec_eqv(vector bool long long, vector unsigned long long)\nvector unsigned long long vec_eqv(vector unsigned long long, vector bool long long)\nvector float vec_eqv(vector float, vector float)\nvector float vec_eqv(vector bool int, vector float)\nvector float vec_eqv(vector float, vector bool int)\nvector double vec_eqv(vector double, vector double)\nvector double vec_eqv(vector bool long long, vector double)\nvector double vec_eqv(vector double, vector bool long long)\nvector bool long long vec_perm(vector bool long long, vector bool long long, vector unsigned char)\nvector double vec_round(vector double)\nvector double vec_splat(vector double, const int)\nvector bool long long vec_splat(vector bool long long, const int)\nvector signed long long vec_splat(vector signed long long, const int)\nvector unsigned long long vec_splat(vector unsigned long long,\nvector bool int vec_sld(vector bool int, vector bool int, const int)\nvector bool short vec_sld(vector bool short, vector bool short, const int)\n\nllvm-svn: 241904"},
[j]={"26c3534b84f2",1436533894,"Add missing builtins to altivec.h for ABI compliance (vol. 3)","Add missing builtins to altivec.h for ABI compliance (vol. 3)\n\nThis patch corresponds to review:\nhttp://reviews.llvm.org/D10972\n\nFix for the handling of dependent features that are enabled by default\non some CPU\'s (such as -mvsx, -mpower8-vector).\n\nAlso provides a number of new interfaces or fixes existing ones in\naltivec.h.\n\nChanged signatures to conform to ABI:\nvector short vec_perm(vector signed short, vector signed short, vector unsigned char)\nvector int vec_perm(vector signed int, vector signed int, vector unsigned char)\nvector long long vec_perm(vector signed long long, vector signed long long, vector unsigned char)\nvector signed char vec_sld(vector signed char, vector signed char, const int)\nvector unsigned char vec_sld(vector unsigned char, vector unsigned char, const int)\nvector bool char vec_sld(vector bool char, vector bool char, const int)\nvector unsigned short vec_sld(vector unsigned short, vector unsigned short, const int)\nvector signed short vec_sld(vector signed short, vector signed short, const int)\nvector signed int vec_sld(vector signed int, vector signed int, const int)\nvector unsigned int vec_sld(vector unsigned int, vector unsigned int, const int)\nvector float vec_sld(vector float, vector float, const int)\nvector signed char vec_splat(vector signed char, const int)\nvector unsigned char vec_splat(vector unsigned char, const int)\nvector bool char vec_splat(vector bool char, const int)\nvector signed short vec_splat(vector signed short, const int)\nvector unsigned short vec_splat(vector unsigned short, const int)\nvector bool short vec_splat(vector bool short, const int)\nvector pixel vec_splat(vector pixel, const int)\nvector signed int vec_splat(vector signed int, const int)\nvector unsigned int vec_splat(vector unsigned int, const int)\nvector bool int vec_splat(vector bool int, const int)\nvector float vec_splat(vector float, const int)\n\nAdded a VSX path to:\nvector float vec_round(vector float)\n\nAdded interfaces:\nvector signed char vec_eqv(vector signed char, vector signed char)\nvector signed char vec_eqv(vector bool char, vector signed char)\nvector signed char vec_eqv(vector signed char, vector bool char)\nvector unsigned char vec_eqv(vector unsigned char, vector unsigned char)\nvector unsigned char vec_eqv(vector bool char, vector unsigned char)\nvector unsigned char vec_eqv(vector unsigned char, vector bool char)\nvector signed short vec_eqv(vector signed short, vector signed short)\nvector signed short vec_eqv(vector bool short, vector signed short)\nvector signed short vec_eqv(vector signed short, vector bool short)\nvector unsigned short vec_eqv(vector unsigned short, vector unsigned short)\nvector unsigned short vec_eqv(vector bool short, vector unsigned short)\nvector unsigned short vec_eqv(vector unsigned short, vector bool short)\nvector signed int vec_eqv(vector signed int, vector signed int)\nvector signed int vec_eqv(vector bool int, vector signed int)\nvector signed int vec_eqv(vector signed int, vector bool int)\nvector unsigned int vec_eqv(vector unsigned int, vector unsigned int)\nvector unsigned int vec_eqv(vector bool int, vector unsigned int)\nvector unsigned int vec_eqv(vector unsigned int, vector bool int)\nvector signed long long vec_eqv(vector signed long long, vector signed long long)\nvector signed long long vec_eqv(vector bool long long, vector signed long long)\nvector signed long long vec_eqv(vector signed long long, vector bool long long)\nvector unsigned long long vec_eqv(vector unsigned long long, vector unsigned long long)\nvector unsigned long long vec_eqv(vector bool long long, vector unsigned long long)\nvector unsigned long long vec_eqv(vector unsigned long long, vector bool long long)\nvector float vec_eqv(vector float, vector float)\nvector float vec_eqv(vector bool int, vector float)\nvector float vec_eqv(vector float, vector bool int)\nvector double vec_eqv(vector double, vector double)\nvector double vec_eqv(vector bool long long, vector double)\nvector double vec_eqv(vector double, vector bool long long)\nvector bool long long vec_perm(vector bool long long, vector bool long long, vector unsigned char)\nvector double vec_round(vector double)\nvector double vec_splat(vector double, const int)\nvector bool long long vec_splat(vector bool long long, const int)\nvector signed long long vec_splat(vector signed long long, const int)\nvector unsigned long long vec_splat(vector unsigned long long,\nvector bool int vec_sld(vector bool int, vector bool int, const int)\nvector bool short vec_sld(vector bool short, vector bool short, const int)\n\nllvm-svn: 241904"},
[d]={{"clang/lib/Basic/Targets/Mips.cpp",258,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // ...\n  // -mfp32 and n32/n64 ABIs are incompatible\n  if (FPMode != FP64 && FPMode != FPXX && !IsSingleFloat && (ABI == \"n32\" || ABI == \"n64\")) {\n    Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mfpxx\" << CPU;"},{"clang/lib/Basic/Targets/Mips.cpp",264,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // ...\n  // Mips revision 6 and -mfp32 are incompatible\n  if (FPMode != FP64 && FPMode != FPXX && (CPU == \"mips32r6\" || CPU == \"mips64r6\")) {\n    Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mfp32\" << CPU;"},{pb,459,"// Handle explicit options being passed to the compiler here: if we\'ve\n// explicitly turned off vsx and turned on any of:\n// - power8-vector\n// - direct-move\n// - float128\n// - power9-vector\n// - paired-vector-memops\n// - mma\n// - power10-vector\n// then go ahead and error since the customer has expressed an incompatible\n// set of options.\nstatic bool ppcUserFeaturesCheck(DiagnosticsEngine &Diags, const std::vector<std::string> &FeaturesVec) {\n  // ...\n  auto FindVSXSubfeature = [&](StringRef Feature, StringRef Option) {\n    if (llvm::is_contained(FeaturesVec, Feature)) {\n      Diags.Report(diag::err_opt_not_valid_with_opt) << Option << \"-mno-vsx\";"},{pb,593,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr7) && (ArchDefs & ArchDefinePpcgr) && llvm::is_contained(FeaturesVec, \"+float128\")) {\n    // ...\n    Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mfloat128\" << CPU;"},{pb,600,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr10)) {\n    if (llvm::is_contained(FeaturesVec, \"+mma\")) {\n      // ...\n      Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mmma\" << CPU;"},{pb,629,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr8) && llvm::is_contained(FeaturesVec, \"+rop-protect\")) {\n    // ...\n    Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mrop-protect\" << CPU;"},{pb,635,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr8) && llvm::is_contained(FeaturesVec, \"+privileged\")) {\n    Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mprivileged\" << CPU;"},{"clang/lib/Basic/Targets/WebAssembly.cpp",265,"bool WebAssemblyTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  for (const auto &Feature : Features) {\n    // ...\n    Diags.Report(diag::err_opt_not_valid_with_opt) << Feature << \"-target-feature\";"},{"clang/lib/Driver/Driver.cpp",3158,"/// Provides a convenient interface for different programming models to generate\n/// the required device actions.\nclass OffloadingActionBuilder final {\n  // ...\n  /// Base class for CUDA/HIP action builder. It injects device code in\n  /// the host backend action.\n  class CudaActionBuilderBase : public DeviceActionBuilder {\n    // ...\n    bool initialize() override {\n      // ...\n      // --offload and --offload-arch options are mutually exclusive.\n      if (Args.hasArgNoClaim(options::OPT_offload_EQ) && Args.hasArgNoClaim(options::OPT_offload_arch_EQ, options::OPT_no_offload_arch_EQ)) {\n        C.getDriver().Diag(diag::err_opt_not_valid_with_opt) << \"--offload-arch\""},{"clang/lib/Driver/Driver.cpp",3383,"/// Provides a convenient interface for different programming models to generate\n/// the required device actions.\nclass OffloadingActionBuilder final {\n  // ...\n  /// \\brief HIP action builder. It injects device code in the host backend\n  /// action.\n  class HIPActionBuilder final : public CudaActionBuilderBase {\n    // ...\n    HIPActionBuilder(Compilation &C, DerivedArgList &Args, const Driver::InputList &Inputs) : CudaActionBuilderBase(C, Args, Inputs, Action::OFK_HIP) {\n      // ...\n      if (Args.hasArg(options::OPT_fhip_emit_relocatable, options::OPT_fno_hip_emit_relocatable)) {\n        // ...\n        if (*EmitReloc) {\n          if (Relocatable) {\n            C.getDriver().Diag(diag::err_opt_not_valid_with_opt) << \"-fhip-emit-relocatable\""},{"clang/lib/Driver/Driver.cpp",4411,"llvm::DenseSet<StringRef> Driver::getOffloadArchs(Compilation &C, const llvm::opt::DerivedArgList &Args, Action::OffloadKind Kind, const ToolChain *TC, bool SuppressError) const {\n  // ...\n  // --offload and --offload-arch options are mutually exclusive.\n  if (Args.hasArgNoClaim(options::OPT_offload_EQ) && Args.hasArgNoClaim(options::OPT_offload_arch_EQ, options::OPT_no_offload_arch_EQ)) {\n    C.getDriver().Diag(diag::err_opt_not_valid_with_opt) << \"--offload\" << (Args.hasArgNoClaim(options::OPT_offload_arch_EQ) ? \"--offload-arch\" : \"--no-offload-arch\");"},{"clang/lib/Driver/ToolChains/Arch/ARM.cpp",851,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  // Generate execute-only output (no data access to code sections).\n  // This only makes sense for the compiler, not for the assembler.\n  // It\'s not needed for multilib selection and may hide an unused\n  // argument diagnostic if the code is always run.\n  if (!ForAS && !ForMultilib) {\n    // Supported only on ARMv6T2 and ARMv7 and above.\n    // Cannot be combined with -mno-movt.\n    if (Arg *A = Args.getLastArg(options::OPT_mexecute_only, options::OPT_mno_execute_only)) {\n      if (A->getOption().matches(options::OPT_mexecute_only)) {\n        if (getARMSubArchVersionNumber(Triple) < 7 && llvm::ARM::parseArch(Triple.getArchName()) != llvm::ARM::ArchKind::ARMV6T2)\n        // ...\n        else if (Arg *B = Args.getLastArg(options::OPT_mno_movt))\n          D.Diag(diag::err_opt_not_valid_with_opt) << A->getAsString(Args) << B->getAsString(Args);"}}
[i]={{"clang/lib/Basic/Targets/Mips.cpp",258,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // ...\n  // -mfp32 and n32/n64 ABIs are incompatible\n  if (FPMode != FP64 && FPMode != FPXX && !IsSingleFloat && (ABI == \"n32\" || ABI == \"n64\")) {\n    Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mfpxx\" << CPU;"},{"clang/lib/Basic/Targets/Mips.cpp",264,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // ...\n  // Mips revision 6 and -mfp32 are incompatible\n  if (FPMode != FP64 && FPMode != FPXX && (CPU == \"mips32r6\" || CPU == \"mips64r6\")) {\n    Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mfp32\" << CPU;"},{mb,459,"// Handle explicit options being passed to the compiler here: if we\'ve\n// explicitly turned off vsx and turned on any of:\n// - power8-vector\n// - direct-move\n// - float128\n// - power9-vector\n// - paired-vector-memops\n// - mma\n// - power10-vector\n// then go ahead and error since the customer has expressed an incompatible\n// set of options.\nstatic bool ppcUserFeaturesCheck(DiagnosticsEngine &Diags, const std::vector<std::string> &FeaturesVec) {\n  // ...\n  auto FindVSXSubfeature = [&](StringRef Feature, StringRef Option) {\n    if (llvm::is_contained(FeaturesVec, Feature)) {\n      Diags.Report(diag::err_opt_not_valid_with_opt) << Option << \"-mno-vsx\";"},{mb,593,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr7) && (ArchDefs & ArchDefinePpcgr) && llvm::is_contained(FeaturesVec, \"+float128\")) {\n    // ...\n    Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mfloat128\" << CPU;"},{mb,600,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr10)) {\n    if (llvm::is_contained(FeaturesVec, \"+mma\")) {\n      // ...\n      Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mmma\" << CPU;"},{mb,629,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr8) && llvm::is_contained(FeaturesVec, \"+rop-protect\")) {\n    // ...\n    Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mrop-protect\" << CPU;"},{mb,635,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr8) && llvm::is_contained(FeaturesVec, \"+privileged\")) {\n    Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mprivileged\" << CPU;"},{"clang/lib/Basic/Targets/WebAssembly.cpp",265,"bool WebAssemblyTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  for (const auto &Feature : Features) {\n    // ...\n    Diags.Report(diag::err_opt_not_valid_with_opt) << Feature << \"-target-feature\";"},{"clang/lib/Driver/Driver.cpp",3158,"/// Provides a convenient interface for different programming models to generate\n/// the required device actions.\nclass OffloadingActionBuilder final {\n  // ...\n  /// Base class for CUDA/HIP action builder. It injects device code in\n  /// the host backend action.\n  class CudaActionBuilderBase : public DeviceActionBuilder {\n    // ...\n    bool initialize() override {\n      // ...\n      // --offload and --offload-arch options are mutually exclusive.\n      if (Args.hasArgNoClaim(options::OPT_offload_EQ) && Args.hasArgNoClaim(options::OPT_offload_arch_EQ, options::OPT_no_offload_arch_EQ)) {\n        C.getDriver().Diag(diag::err_opt_not_valid_with_opt) << \"--offload-arch\""},{"clang/lib/Driver/Driver.cpp",3383,"/// Provides a convenient interface for different programming models to generate\n/// the required device actions.\nclass OffloadingActionBuilder final {\n  // ...\n  /// \\brief HIP action builder. It injects device code in the host backend\n  /// action.\n  class HIPActionBuilder final : public CudaActionBuilderBase {\n    // ...\n    HIPActionBuilder(Compilation &C, DerivedArgList &Args, const Driver::InputList &Inputs) : CudaActionBuilderBase(C, Args, Inputs, Action::OFK_HIP) {\n      // ...\n      if (Args.hasArg(options::OPT_fhip_emit_relocatable, options::OPT_fno_hip_emit_relocatable)) {\n        // ...\n        if (*EmitReloc) {\n          if (Relocatable) {\n            C.getDriver().Diag(diag::err_opt_not_valid_with_opt) << \"-fhip-emit-relocatable\""},{"clang/lib/Driver/Driver.cpp",4411,"llvm::DenseSet<StringRef> Driver::getOffloadArchs(Compilation &C, const llvm::opt::DerivedArgList &Args, Action::OffloadKind Kind, const ToolChain *TC, bool SuppressError) const {\n  // ...\n  // --offload and --offload-arch options are mutually exclusive.\n  if (Args.hasArgNoClaim(options::OPT_offload_EQ) && Args.hasArgNoClaim(options::OPT_offload_arch_EQ, options::OPT_no_offload_arch_EQ)) {\n    C.getDriver().Diag(diag::err_opt_not_valid_with_opt) << \"--offload\" << (Args.hasArgNoClaim(options::OPT_offload_arch_EQ) ? \"--offload-arch\" : \"--no-offload-arch\");"},{"clang/lib/Driver/ToolChains/Arch/ARM.cpp",851,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  // Generate execute-only output (no data access to code sections).\n  // This only makes sense for the compiler, not for the assembler.\n  // It\'s not needed for multilib selection and may hide an unused\n  // argument diagnostic if the code is always run.\n  if (!ForAS && !ForMultilib) {\n    // Supported only on ARMv6T2 and ARMv7 and above.\n    // Cannot be combined with -mno-movt.\n    if (Arg *A = Args.getLastArg(options::OPT_mexecute_only, options::OPT_mno_execute_only)) {\n      if (A->getOption().matches(options::OPT_mexecute_only)) {\n        if (getARMSubArchVersionNumber(Triple) < 7 && llvm::ARM::parseArch(Triple.getArchName()) != llvm::ARM::ArchKind::ARMV6T2)\n        // ...\n        else if (Arg *B = Args.getLastArg(options::OPT_mno_movt))\n          D.Diag(diag::err_opt_not_valid_with_opt) << A->getAsString(Args) << B->getAsString(Args);"}}
},
},
["err_opt_not_valid_without_opt"]={
["err_opt_not_valid_without_opt"]={
[b]={{nil,K,"err_opt_not_valid_without_opt"}},
[d]={{nil,K,"err_opt_not_valid_without_opt"}},
[j]={{nil,K,"option \'%0\' cannot be specified without \'%1\'"}},
[e]={{nil,K,"option \'%0\' cannot be specified without \'%1\'"}},
[i]={{nil,K,"option \'A\' cannot be specified without \'B\'"}},
[f]={{nil,K,"option \'A\' cannot be specified without \'B\'"}},
[h]=k,
[g]=k,
[c]="option \'(.*?)\' cannot be specified without \'(.*?)\'",
[h]="option \'(.*?)\' cannot be specified without \'(.*?)\'",
[f]=a,
[b]=a,
[e]={{nil,K,a}},
[c]={{nil,K,S}},
[g]={"57cc1a5d77d8",1515488039,"Added Control Flow Protection Flag","Added Control Flow Protection Flag\n\nCf-protection is a target independent flag that instructs the back-end to instrument control flow mechanisms like: Branch, Return, etc.\nFor example in X86 this flag will be used to instrument Indirect Branch Tracking instructions.\n\nDifferential Revision: https://reviews.llvm.org/D40478\n\nChange-Id: I5126e766c0e6b84118cae0ee8a20fe78cc373dea\nllvm-svn: 322063"},
[j]={"57cc1a5d77d8",1515488039,"Added Control Flow Protection Flag","Added Control Flow Protection Flag\n\nCf-protection is a target independent flag that instructs the back-end to instrument control flow mechanisms like: Branch, Return, etc.\nFor example in X86 this flag will be used to instrument Indirect Branch Tracking instructions.\n\nDifferential Revision: https://reviews.llvm.org/D40478\n\nChange-Id: I5126e766c0e6b84118cae0ee8a20fe78cc373dea\nllvm-svn: 322063"},
[d]={{pb,606,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr10)) {\n    // ...\n    if (llvm::is_contained(FeaturesVec, \"+pcrel\")) {\n      // ...\n      Diags.Report(diag::err_opt_not_valid_without_opt) << \"-mpcrel\""},{pb,613,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr10)) {\n    // ...\n    if (llvm::is_contained(FeaturesVec, \"+prefixed\")) {\n      // ...\n      Diags.Report(diag::err_opt_not_valid_without_opt) << \"-mprefixed\""},{pb,619,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr10)) {\n    // ...\n    if (llvm::is_contained(FeaturesVec, \"+paired-vector-memops\")) {\n      // ...\n      Diags.Report(diag::err_opt_not_valid_without_opt) << \"-mpaired-vector-memops\""},{"clang/lib/CodeGen/CodeGenFunction.cpp",1081,"#include \"clang/Basic/Sanitizers.def\"\n  // ...\n  // Since emitting the mcount call here impacts optimizations such as function\n  // inlining, we just add an attribute to insert a mcount call in backend.\n  // The attribute \"counting-function\" is set to mcount function name which is\n  // architecture dependent.\n  if (CGM.getCodeGenOpts().InstrumentForProfiling) {\n    // Calls to fentry/mcount should not be generated if function has\n    // the no_instrument_function attribute.\n    if (!CurFuncDecl || !CurFuncDecl->hasAttr<NoInstrumentFunctionAttr>()) {\n      // ...\n      if (CGM.getCodeGenOpts().MNopMCount) {\n        if (!CGM.getCodeGenOpts().CallFEntry)\n          CGM.getDiags().Report(diag::err_opt_not_valid_without_opt) << \"-mnop-mcount\""},{"clang/lib/CodeGen/CodeGenFunction.cpp",1088,"#include \"clang/Basic/Sanitizers.def\"\n  // ...\n  // Since emitting the mcount call here impacts optimizations such as function\n  // inlining, we just add an attribute to insert a mcount call in backend.\n  // The attribute \"counting-function\" is set to mcount function name which is\n  // architecture dependent.\n  if (CGM.getCodeGenOpts().InstrumentForProfiling) {\n    // Calls to fentry/mcount should not be generated if function has\n    // the no_instrument_function attribute.\n    if (!CurFuncDecl || !CurFuncDecl->hasAttr<NoInstrumentFunctionAttr>()) {\n      // ...\n      if (CGM.getCodeGenOpts().RecordMCount) {\n        if (!CGM.getCodeGenOpts().CallFEntry)\n          CGM.getDiags().Report(diag::err_opt_not_valid_without_opt) << \"-mrecord-mcount\""},{"clang/lib/Driver/Driver.cpp",3389,"/// Provides a convenient interface for different programming models to generate\n/// the required device actions.\nclass OffloadingActionBuilder final {\n  // ...\n  /// \\brief HIP action builder. It injects device code in the host backend\n  /// action.\n  class HIPActionBuilder final : public CudaActionBuilderBase {\n    // ...\n    HIPActionBuilder(Compilation &C, DerivedArgList &Args, const Driver::InputList &Inputs) : CudaActionBuilderBase(C, Args, Inputs, Action::OFK_HIP) {\n      // ...\n      if (Args.hasArg(options::OPT_fhip_emit_relocatable, options::OPT_fno_hip_emit_relocatable)) {\n        // ...\n        if (*EmitReloc) {\n          // ...\n          if (!CompileDeviceOnly) {\n            C.getDriver().Diag(diag::err_opt_not_valid_without_opt) << \"-fhip-emit-relocatable\""},{"clang/lib/Driver/ToolChains/Arch/ARM.cpp",807,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mfix_cmse_cve_2021_35465, options::OPT_mno_fix_cmse_cve_2021_35465)) {\n    if (!Args.getLastArg(options::OPT_mcmse))\n      D.Diag(diag::err_opt_not_valid_without_opt) << A->getOption().getName() << \"-mcmse\";"}}
[i]={{mb,606,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr10)) {\n    // ...\n    if (llvm::is_contained(FeaturesVec, \"+pcrel\")) {\n      // ...\n      Diags.Report(diag::err_opt_not_valid_without_opt) << \"-mpcrel\""},{mb,613,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr10)) {\n    // ...\n    if (llvm::is_contained(FeaturesVec, \"+prefixed\")) {\n      // ...\n      Diags.Report(diag::err_opt_not_valid_without_opt) << \"-mprefixed\""},{mb,619,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr10)) {\n    // ...\n    if (llvm::is_contained(FeaturesVec, \"+paired-vector-memops\")) {\n      // ...\n      Diags.Report(diag::err_opt_not_valid_without_opt) << \"-mpaired-vector-memops\""},{"clang/lib/CodeGen/CodeGenFunction.cpp",1081,"#include \"clang/Basic/Sanitizers.def\"\n  // ...\n  // Since emitting the mcount call here impacts optimizations such as function\n  // inlining, we just add an attribute to insert a mcount call in backend.\n  // The attribute \"counting-function\" is set to mcount function name which is\n  // architecture dependent.\n  if (CGM.getCodeGenOpts().InstrumentForProfiling) {\n    // Calls to fentry/mcount should not be generated if function has\n    // the no_instrument_function attribute.\n    if (!CurFuncDecl || !CurFuncDecl->hasAttr<NoInstrumentFunctionAttr>()) {\n      // ...\n      if (CGM.getCodeGenOpts().MNopMCount) {\n        if (!CGM.getCodeGenOpts().CallFEntry)\n          CGM.getDiags().Report(diag::err_opt_not_valid_without_opt) << \"-mnop-mcount\""},{"clang/lib/CodeGen/CodeGenFunction.cpp",1088,"#include \"clang/Basic/Sanitizers.def\"\n  // ...\n  // Since emitting the mcount call here impacts optimizations such as function\n  // inlining, we just add an attribute to insert a mcount call in backend.\n  // The attribute \"counting-function\" is set to mcount function name which is\n  // architecture dependent.\n  if (CGM.getCodeGenOpts().InstrumentForProfiling) {\n    // Calls to fentry/mcount should not be generated if function has\n    // the no_instrument_function attribute.\n    if (!CurFuncDecl || !CurFuncDecl->hasAttr<NoInstrumentFunctionAttr>()) {\n      // ...\n      if (CGM.getCodeGenOpts().RecordMCount) {\n        if (!CGM.getCodeGenOpts().CallFEntry)\n          CGM.getDiags().Report(diag::err_opt_not_valid_without_opt) << \"-mrecord-mcount\""},{"clang/lib/Driver/Driver.cpp",3389,"/// Provides a convenient interface for different programming models to generate\n/// the required device actions.\nclass OffloadingActionBuilder final {\n  // ...\n  /// \\brief HIP action builder. It injects device code in the host backend\n  /// action.\n  class HIPActionBuilder final : public CudaActionBuilderBase {\n    // ...\n    HIPActionBuilder(Compilation &C, DerivedArgList &Args, const Driver::InputList &Inputs) : CudaActionBuilderBase(C, Args, Inputs, Action::OFK_HIP) {\n      // ...\n      if (Args.hasArg(options::OPT_fhip_emit_relocatable, options::OPT_fno_hip_emit_relocatable)) {\n        // ...\n        if (*EmitReloc) {\n          // ...\n          if (!CompileDeviceOnly) {\n            C.getDriver().Diag(diag::err_opt_not_valid_without_opt) << \"-fhip-emit-relocatable\""},{"clang/lib/Driver/ToolChains/Arch/ARM.cpp",807,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mfix_cmse_cve_2021_35465, options::OPT_mno_fix_cmse_cve_2021_35465)) {\n    if (!Args.getLastArg(options::OPT_mcmse))\n      D.Diag(diag::err_opt_not_valid_without_opt) << A->getOption().getName() << \"-mcmse\";"}}
},
},
["err_os_log_argument_too_big"]={
["err_os_log_argument_too_big"]={
[b]="err_os_log_argument_too_big",
[d]="err_os_log_argument_too_big",
[j]="os_log() argument %0 is too big (%1 bytes, max %2)",
[e]="os_log() argument %0 is too big (%1 bytes, max %2)",
[i]="os_log() argument A is too big (B bytes, max C)",
[f]="os_log() argument A is too big (B bytes, max C)",
[h]=k,
[g]=k,
[c]="os_log\\(\\) argument (.*?) is too big \\((.*?) bytes, max (.*?)\\)",
[h]="os_log\\(\\) argument (.*?) is too big \\((.*?) bytes, max (.*?)\\)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]","Add support for __builtin_os_log_format[_buffer_size]\n\nThese new builtins support a mechanism for logging OS events, using a\nprintf-like format string to specify the layout of data in a buffer.\nThe _buffer_size version of the builtin can be used to determine the size\nof the buffer to allocate to hold the data, and then __builtin_os_log_format\ncan write data into that buffer. This implements format checking to report\nmismatches between the format string and the data arguments. Most of this\ncode was written by Chris Willmore.\n\nDifferential Revision: https://reviews.llvm.org/D25888\n\nllvm-svn: 284990"},
[j]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]","Add support for __builtin_os_log_format[_buffer_size]\n\nThese new builtins support a mechanism for logging OS events, using a\nprintf-like format string to specify the layout of data in a buffer.\nThe _buffer_size version of the builtin can be used to determine the size\nof the buffer to allocate to hold the data, and then __builtin_os_log_format\ncan write data into that buffer. This implements format checking to report\nmismatches between the format string and the data arguments. Most of this\ncode was written by Chris Willmore.\n\nDifferential Revision: https://reviews.llvm.org/D25888\n\nllvm-svn: 284990"},
[d]={{I,8743,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n  // ...\n  while (i < NumArgs) {\n    // ...\n    if (ArgSize.getQuantity() >= 0x100) {\n      return Diag(Arg.get()->getEndLoc(), diag::err_os_log_argument_too_big) << i << (int)ArgSize.getQuantity() << 0xff << TheCall->getSourceRange();"}},
[i]={{I,8743,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n  // ...\n  while (i < NumArgs) {\n    // ...\n    if (ArgSize.getQuantity() >= 0x100) {\n      return Diag(Arg.get()->getEndLoc(), diag::err_os_log_argument_too_big) << i << (int)ArgSize.getQuantity() << 0xff << TheCall->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjC/format-strings-oslog.m"]={"clang/test/SemaObjC/format-strings-oslog.m:41:38: error: os_log() argument 2 is too big (256 bytes, max 255)"}
["clang/test/SemaObjC/format-strings-oslog.m"]={"clang/test/SemaObjC/format-strings-oslog.m:41:38: error: os_log() argument 2 is too big (256 bytes, max 255)"}
Line 454: Line 455:
},
},
["err_os_log_format_not_string_constant"]={
["err_os_log_format_not_string_constant"]={
[b]="err_os_log_format_not_string_constant",
[d]="err_os_log_format_not_string_constant",
[j]="os_log() format argument is not a string constant",
[e]="os_log() format argument is not a string constant",
[i]="os_log() format argument is not a string constant",
[f]="os_log() format argument is not a string constant",
[h]=k,
[g]=k,
[c]="os_log\\(\\) format argument is not a string constant",
[h]="os_log\\(\\) format argument is not a string constant",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]","Add support for __builtin_os_log_format[_buffer_size]\n\nThese new builtins support a mechanism for logging OS events, using a\nprintf-like format string to specify the layout of data in a buffer.\nThe _buffer_size version of the builtin can be used to determine the size\nof the buffer to allocate to hold the data, and then __builtin_os_log_format\ncan write data into that buffer. This implements format checking to report\nmismatches between the format string and the data arguments. Most of this\ncode was written by Chris Willmore.\n\nDifferential Revision: https://reviews.llvm.org/D25888\n\nllvm-svn: 284990"},
[j]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]","Add support for __builtin_os_log_format[_buffer_size]\n\nThese new builtins support a mechanism for logging OS events, using a\nprintf-like format string to specify the layout of data in a buffer.\nThe _buffer_size version of the builtin can be used to determine the size\nof the buffer to allocate to hold the data, and then __builtin_os_log_format\ncan write data into that buffer. This implements format checking to report\nmismatches between the format string and the data arguments. Most of this\ncode was written by Chris Willmore.\n\nDifferential Revision: https://reviews.llvm.org/D25888\n\nllvm-svn: 284990"},
[d]={{I,8014,"/// CheckObjCString - Checks that the format string argument to the os_log()\n/// and os_trace() functions is correct, and converts it to const char *.\nExprResult Sema::CheckOSLogFormatStringArg(Expr *Arg) {\n  // ...\n  if (!Literal || (!Literal->isOrdinary() && !Literal->isUTF8())) {\n    return ExprError(Diag(Arg->getBeginLoc(), diag::err_os_log_format_not_string_constant) << Arg->getSourceRange());"}},
[i]={{I,8014,"/// CheckObjCString - Checks that the format string argument to the os_log()\n/// and os_trace() functions is correct, and converts it to const char *.\nExprResult Sema::CheckOSLogFormatStringArg(Expr *Arg) {\n  // ...\n  if (!Literal || (!Literal->isOrdinary() && !Literal->isUTF8())) {\n    return ExprError(Diag(Arg->getBeginLoc(), diag::err_os_log_format_not_string_constant) << Arg->getSourceRange());"}},
[l]={
[l]={
["clang/test/SemaObjC/format-strings-oslog.m"]={"clang/test/SemaObjC/format-strings-oslog.m:23:32: error: os_log() format argument is not a string constant"}
["clang/test/SemaObjC/format-strings-oslog.m"]={"clang/test/SemaObjC/format-strings-oslog.m:23:32: error: os_log() format argument is not a string constant"}
Line 468: Line 469:
},
},
["err_out_of_line_constructor_template_id"]={
["err_out_of_line_constructor_template_id"]={
[b]="err_out_of_line_constructor_template_id",
[d]="err_out_of_line_constructor_template_id",
[j]="out-of-line constructor for %0 cannot have template arguments",
[e]="out-of-line constructor for %0 cannot have template arguments",
[i]="out-of-line constructor for A cannot have template arguments",
[f]="out-of-line constructor for A cannot have template arguments",
[h]=k,
[g]=k,
[c]="out\\-of\\-line constructor for (.*?) cannot have template arguments",
[h]="out\\-of\\-line constructor for (.*?) cannot have template arguments",
[f]=a,
[b]=a,
[e]=y,
[c]=y,
[g]={"9de54ea41bdc",1263403896,"Reimplement constructor declarator parsing to cope with template-ids","Reimplement constructor declarator parsing to cope with template-ids\nthat name constructors, the endless joys of out-of-line constructor\ndefinitions, and various other corner cases that the previous hack\nnever imagined. Fixes PR5688 and tightens up semantic analysis for\nconstructor names.\n\nAdditionally, fixed a problem where we wouldn\'t properly enter the\ndeclarator scope of a parenthesized declarator. We were entering the\nscope, then leaving it when we saw the \")\"; now, we re-enter the\ndeclarator scope before parsing the parameter list.\n\nNote that we are forced to perform some tentative parsing within a\nclass (call it C) to tell the difference between\n\n  C(int); // constructor\n\nand\n\n  C (f)(int); // member function\n\nwhich is rather unfortunate. And, although it isn\'t necessary for\ncorrectness, we use the same tentative-parsing mechanism for\nout-of-line constructors to improve diagnostics in icky cases like:\n\n  C::C C::f(int); // error: C::C refers to the constructor name, but\n                  // we complain nicely and recover by treating it as\n                  // a type.\n\nllvm-svn: 93322"},
[j]={"9de54ea41bdc",1263403896,"Reimplement constructor declarator parsing to cope with template-ids","Reimplement constructor declarator parsing to cope with template-ids\nthat name constructors, the endless joys of out-of-line constructor\ndefinitions, and various other corner cases that the previous hack\nnever imagined. Fixes PR5688 and tightens up semantic analysis for\nconstructor names.\n\nAdditionally, fixed a problem where we wouldn\'t properly enter the\ndeclarator scope of a parenthesized declarator. We were entering the\nscope, then leaving it when we saw the \")\"; now, we re-enter the\ndeclarator scope before parsing the parameter list.\n\nNote that we are forced to perform some tentative parsing within a\nclass (call it C) to tell the difference between\n\n  C(int); // constructor\n\nand\n\n  C (f)(int); // member function\n\nwhich is rather unfortunate. And, although it isn\'t necessary for\ncorrectness, we use the same tentative-parsing mechanism for\nout-of-line constructors to improve diagnostics in icky cases like:\n\n  C::C C::f(int); // error: C::C refers to the constructor name, but\n                  // we complain nicely and recover by treating it as\n                  // a type.\n\nllvm-svn: 93322"},
[d]={{Ob,2964,"/// Parse a C++ unqualified-id (or a C identifier), which describes the\n/// name of an entity.\n///\n/// \\code\n///      unqualified-id: [C++ expr.prim.general]\n///        identifier\n///        operator-function-id\n///        conversion-function-id\n/// [C++0x] literal-operator-id [TODO]\n///        ~ class-name\n///        template-id\n///\n/// \\endcode\n///\n/// \\param SS The nested-name-specifier that preceded this unqualified-id. If\n/// non-empty, then we are parsing the unqualified-id of a qualified-id.\n///\n/// \\param ObjectType if this unqualified-id occurs within a member access\n/// expression, the type of the base object whose member is being accessed.\n///\n/// \\param ObjectHadErrors if this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n/// When true, diagnostics for missing \'template\' keyword will be supressed.\n///\n/// \\param EnteringContext whether we are entering the scope of the\n/// nested-name-specifier.\n///\n/// \\param AllowDestructorName whether we allow parsing of a destructor name.\n///\n/// \\param AllowConstructorName whether we allow parsing a constructor name.\n///\n/// \\param AllowDeductionGuide whether we allow parsing a deduction guide name.\n///\n/// \\param Result on a successful parse, contains the parsed unqualified-id.\n///\n/// \\returns true if parsing fails, false otherwise.\nbool Parser::ParseUnqualifiedId(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool AllowDestructorName, bool AllowConstructorName, bool AllowDeductionGuide, SourceLocation *TemplateKWLoc, UnqualifiedId &Result) {\n  // ...\n  // unqualified-id:\n  //  template-id (already parsed and annotated)\n  if (Tok.is(tok::annot_template_id)) {\n    // ...\n    // If the template-name names the current class, then this is a constructor\n    if (AllowConstructorName && TemplateId->Name && Actions.isCurrentClassName(*TemplateId->Name, getCurScope(), &SS)) {\n      if (SS.isSet()) {\n        // ...\n        Diag(TemplateId->TemplateNameLoc, diag::err_out_of_line_constructor_template_id) << TemplateId->Name << FixItHint::CreateRemoval(SourceRange(TemplateId->LAngleLoc, TemplateId->RAngleLoc));"}},
[i]={{Nb,2964,"/// Parse a C++ unqualified-id (or a C identifier), which describes the\n/// name of an entity.\n///\n/// \\code\n///      unqualified-id: [C++ expr.prim.general]\n///        identifier\n///        operator-function-id\n///        conversion-function-id\n/// [C++0x] literal-operator-id [TODO]\n///        ~ class-name\n///        template-id\n///\n/// \\endcode\n///\n/// \\param SS The nested-name-specifier that preceded this unqualified-id. If\n/// non-empty, then we are parsing the unqualified-id of a qualified-id.\n///\n/// \\param ObjectType if this unqualified-id occurs within a member access\n/// expression, the type of the base object whose member is being accessed.\n///\n/// \\param ObjectHadErrors if this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n/// When true, diagnostics for missing \'template\' keyword will be supressed.\n///\n/// \\param EnteringContext whether we are entering the scope of the\n/// nested-name-specifier.\n///\n/// \\param AllowDestructorName whether we allow parsing of a destructor name.\n///\n/// \\param AllowConstructorName whether we allow parsing a constructor name.\n///\n/// \\param AllowDeductionGuide whether we allow parsing a deduction guide name.\n///\n/// \\param Result on a successful parse, contains the parsed unqualified-id.\n///\n/// \\returns true if parsing fails, false otherwise.\nbool Parser::ParseUnqualifiedId(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool AllowDestructorName, bool AllowConstructorName, bool AllowDeductionGuide, SourceLocation *TemplateKWLoc, UnqualifiedId &Result) {\n  // ...\n  // unqualified-id:\n  //  template-id (already parsed and annotated)\n  if (Tok.is(tok::annot_template_id)) {\n    // ...\n    // If the template-name names the current class, then this is a constructor\n    if (AllowConstructorName && TemplateId->Name && Actions.isCurrentClassName(*TemplateId->Name, getCurScope(), &SS)) {\n      if (SS.isSet()) {\n        // ...\n        Diag(TemplateId->TemplateNameLoc, diag::err_out_of_line_constructor_template_id) << TemplateId->Name << FixItHint::CreateRemoval(SourceRange(TemplateId->LAngleLoc, TemplateId->RAngleLoc));"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:26:29: error: out-of-line constructor for \'X1\' cannot have template arguments","clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:27:30: error: out-of-line constructor for \'X1\' cannot have template arguments"}
["clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:26:29: error: out-of-line constructor for \'X1\' cannot have template arguments","clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:27:30: error: out-of-line constructor for \'X1\' cannot have template arguments"}
Line 482: Line 483:
},
},
["err_out_of_line_default_deletes"]={
["err_out_of_line_default_deletes"]={
[b]="err_out_of_line_default_deletes",
[d]="err_out_of_line_default_deletes",
[j]="defaulting this %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 would delete it after its first declaration",
[e]="defaulting this %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 would delete it after its first declaration",
[i]={{nil,nil,{"defaulting this ",{"default constructor","copy constructor","move constructor","copy assignment operator","move assignment operator","destructor"}," would delete it after its first declaration"}}},
[f]={{nil,nil,{"defaulting this ",{"default constructor","copy constructor","move constructor","copy assignment operator","move assignment operator","destructor"}," would delete it after its first declaration"}}},
[h]=k,
[g]=k,
[c]="defaulting this (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) would delete it after its first declaration",
[h]="defaulting this (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) would delete it after its first declaration",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"b315302bf94a",1305172308,"Implement deletion of explicitly defaulted default constructors.","Implement deletion of explicitly defaulted default constructors.\n\nWe still don\'t parse out-of-line defaults correctly, which is needed to\nget the full effect out of this patch.\n\nllvm-svn: 131223"},
[j]={"b315302bf94a",1305172308,"Implement deletion of explicitly defaulted default constructors.","Implement deletion of explicitly defaulted default constructors.\n\nWe still don\'t parse out-of-line defaults correctly, which is needed to\nget the full effect out of this patch.\n\nllvm-svn: 131223"},
[d]={{w,7790,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n    if (First) {\n    // ...\n    } else {\n      // ...\n      Diag(MD->getLocation(), diag::err_out_of_line_default_deletes) << CSM;"}},
[i]={{w,7790,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n    if (First) {\n    // ...\n    } else {\n      // ...\n      Diag(MD->getLocation(), diag::err_out_of_line_default_deletes) << CSM;"}},
[l]={
[l]={
["clang/test/CXX/special/class.copy/p11.0x.copy.cpp"]={"clang/test/CXX/special/class.copy/p11.0x.copy.cpp:167:6: error: defaulting this copy constructor would delete it after its first declaration"}
["clang/test/CXX/special/class.copy/p11.0x.copy.cpp"]={"clang/test/CXX/special/class.copy/p11.0x.copy.cpp:167:6: error: defaulting this copy constructor would delete it after its first declaration"}
Line 496: Line 497:
},
},
["err_out_of_line_qualified_id_type_names_constructor"]={
["err_out_of_line_qualified_id_type_names_constructor"]={
[b]={{nil,n,"err_out_of_line_qualified_id_type_names_constructor"}},
[d]={{nil,n,"err_out_of_line_qualified_id_type_names_constructor"}},
[j]={{nil,n,"qualified reference to %0 is a constructor name rather than a %select{template name|type}1 in this context"}},
[e]={{nil,n,"qualified reference to %0 is a constructor name rather than a %select{template name|type}1 in this context"}},
[i]={{nil,n,{"qualified reference to A is a constructor name rather than a ",{"template name","type"}," in this context"}}},
[f]={{nil,n,{"qualified reference to A is a constructor name rather than a ",{"template name","type"}," in this context"}}},
[h]=k,
[g]=k,
[c]="qualified reference to (.*?) is a constructor name rather than a (?:template name|type) in this context",
[h]="qualified reference to (.*?) is a constructor name rather than a (?:template name|type) in this context",
[f]=a,
[b]=a,
[e]={{nil,n,m}},
[c]={{nil,n,m}},
[g]={"74f02347ca16",1484859613,"PR13403 (+duplicates): implement C++ DR1310 (http://wg21.link/cwg1310).","PR13403 (+duplicates): implement C++ DR1310 (http://wg21.link/cwg1310).\n\nUnder this defect resolution, the injected-class-name of a class or class\ntemplate cannot be used except in very limited circumstances (when declaring a\nconstructor, in a nested-name-specifier, in a base-specifier, or in an\nelaborated-type-specifier). This is apparently done to make parsing easier, but\nit\'s a pain for us since we don\'t know whether a template-id using the\ninjected-class-name is valid at the point when we annotate it (we don\'t yet\nknow whether the template-id will become part of an elaborated-type-specifier).\n\nAs a tentative resolution to a perceived language defect, mem-initializer-ids\nare added to the list of exceptions here (they generally follow the same rules\nas base-specifiers).\n\nWhen the reference to the injected-class-name uses the \'typename\' or \'template\'\nkeywords, we permit it to be used to name a type or template as an extension;\nother compilers also accept some cases in this area. There are also a couple of\ncorner cases with dependent template names that we do not yet diagnose, but\nwhich will also get this treatment.\n\nllvm-svn: 292518"},
[j]={"74f02347ca16",1484859613,"PR13403 (+duplicates): implement C++ DR1310 (http://wg21.link/cwg1310).","PR13403 (+duplicates): implement C++ DR1310 (http://wg21.link/cwg1310).\n\nUnder this defect resolution, the injected-class-name of a class or class\ntemplate cannot be used except in very limited circumstances (when declaring a\nconstructor, in a nested-name-specifier, in a base-specifier, or in an\nelaborated-type-specifier). This is apparently done to make parsing easier, but\nit\'s a pain for us since we don\'t know whether a template-id using the\ninjected-class-name is valid at the point when we annotate it (we don\'t yet\nknow whether the template-id will become part of an elaborated-type-specifier).\n\nAs a tentative resolution to a perceived language defect, mem-initializer-ids\nare added to the list of exceptions here (they generally follow the same rules\nas base-specifiers).\n\nWhen the reference to the injected-class-name uses the \'typename\' or \'template\'\nkeywords, we permit it to be used to name a type or template as an extension;\nother compilers also accept some cases in this area. There are also a couple of\ncorner cases with dependent template names that we do not yet diagnose, but\nwhich will also get this treatment.\n\nllvm-svn: 292518"},
[d]={{D,548,"/// If the identifier refers to a type name within this scope,\n/// return the declaration of that type.\n///\n/// This routine performs ordinary name lookup of the identifier II\n/// within the given scope, with optional C++ scope specifier SS, to\n/// determine whether the name refers to a type. If so, returns an\n/// opaque pointer (actually a QualType) corresponding to that\n/// type. Otherwise, returns NULL.\nParsedType Sema::getTypeName(const IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec *SS, bool isClassName, bool HasTrailingDot, ParsedType ObjectTypePtr, bool IsCtorOrDtorName, bool WantNontrivialTypeSourceInfo, bool IsClassTemplateDeductionContext, ImplicitTypenameContext AllowImplicitTypename, IdentifierInfo **CorrectedII) {\n  // ...\n  if (TypeDecl *TD = dyn_cast<TypeDecl>(IIDecl)) {\n    // ...\n    if (!isClassName && !IsCtorOrDtorName && LookupRD && FoundRD && FoundRD->isInjectedClassName() && declaresSameEntity(LookupRD, cast<Decl>(FoundRD->getParent())))\n      Diag(NameLoc, diag::err_out_of_line_qualified_id_type_names_constructor) << &II << /*Type*/ 1;"},{W,4172,"TypeResult Sema::ActOnTemplateIdType(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, IdentifierInfo *TemplateII, SourceLocation TemplateIILoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, bool IsCtorOrDtorName, bool IsClassName, ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  if (!IsCtorOrDtorName && !IsClassName && SS.isSet()) {\n    // ...\n    if (LookupRD && LookupRD->getIdentifier() == TemplateII) {\n      Diag(TemplateIILoc, TemplateKWLoc.isInvalid() ? diag::err_out_of_line_qualified_id_type_names_constructor : diag::ext_out_of_line_qualified_id_type_names_constructor) << TemplateII << 0 /*injected-class-name used as template name*/"}},
[i]={{D,548,"/// If the identifier refers to a type name within this scope,\n/// return the declaration of that type.\n///\n/// This routine performs ordinary name lookup of the identifier II\n/// within the given scope, with optional C++ scope specifier SS, to\n/// determine whether the name refers to a type. If so, returns an\n/// opaque pointer (actually a QualType) corresponding to that\n/// type. Otherwise, returns NULL.\nParsedType Sema::getTypeName(const IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec *SS, bool isClassName, bool HasTrailingDot, ParsedType ObjectTypePtr, bool IsCtorOrDtorName, bool WantNontrivialTypeSourceInfo, bool IsClassTemplateDeductionContext, ImplicitTypenameContext AllowImplicitTypename, IdentifierInfo **CorrectedII) {\n  // ...\n  if (TypeDecl *TD = dyn_cast<TypeDecl>(IIDecl)) {\n    // ...\n    if (!isClassName && !IsCtorOrDtorName && LookupRD && FoundRD && FoundRD->isInjectedClassName() && declaresSameEntity(LookupRD, cast<Decl>(FoundRD->getParent())))\n      Diag(NameLoc, diag::err_out_of_line_qualified_id_type_names_constructor) << &II << /*Type*/ 1;"},{W,4172,"TypeResult Sema::ActOnTemplateIdType(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, IdentifierInfo *TemplateII, SourceLocation TemplateIILoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, bool IsCtorOrDtorName, bool IsClassName, ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  if (!IsCtorOrDtorName && !IsClassName && SS.isSet()) {\n    // ...\n    if (LookupRD && LookupRD->getIdentifier() == TemplateII) {\n      Diag(TemplateIILoc, TemplateKWLoc.isInvalid() ? diag::err_out_of_line_qualified_id_type_names_constructor : diag::ext_out_of_line_qualified_id_type_names_constructor) << TemplateII << 0 /*injected-class-name used as template name*/"}},
[l]={
[l]={
["clang/test/SemaTemplate/injected-class-name.cpp"]={"clang/test/SemaTemplate/injected-class-name.cpp:14:11: error: qualified reference to \'X\' is a constructor name rather than a template name in this context","clang/test/SemaTemplate/injected-class-name.cpp:16:13: error: qualified reference to \'X\' is a constructor name rather than a template name in this context"}
["clang/test/SemaTemplate/injected-class-name.cpp"]={"clang/test/SemaTemplate/injected-class-name.cpp:14:11: error: qualified reference to \'X\' is a constructor name rather than a template name in this context","clang/test/SemaTemplate/injected-class-name.cpp:16:13: error: qualified reference to \'X\' is a constructor name rather than a template name in this context"}
Line 510: Line 511:
},
},
["err_overflow_builtin_bit_int_max_size"]={
["err_overflow_builtin_bit_int_max_size"]={
[b]={{nil,F,"err_overflow_builtin_bit_int_max_size"}},
[d]={{nil,F,"err_overflow_builtin_bit_int_max_size"}},
[j]={{nil,F,"__builtin_mul_overflow does not support \'signed _BitInt\' operands of more than %0 bits"}},
[e]={{nil,F,"__builtin_mul_overflow does not support \'signed _BitInt\' operands of more than %0 bits"}},
[i]={{nil,F,"__builtin_mul_overflow does not support \'signed _BitInt\' operands of more than A bits"}},
[f]={{nil,F,"__builtin_mul_overflow does not support \'signed _BitInt\' operands of more than A bits"}},
[h]=k,
[g]=k,
[c]="__builtin_mul_overflow does not support \'signed _BitInt\' operands of more than (.*?) bits",
[h]="__builtin_mul_overflow does not support \'signed _BitInt\' operands of more than (.*?) bits",
[f]=a,
[b]=a,
[e]={{nil,F,m}},
[c]={{nil,F,m}},
[g]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[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"},
[j]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[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"},
[d]={{I,417,"static bool SemaBuiltinOverflow(Sema &S, CallExpr *TheCall, unsigned BuiltinID) {\n  // ...\n  // Disallow signed bit-precise integer args larger than 128 bits to mul\n  // function until we improve backend support.\n  if (BuiltinID == Builtin::BI__builtin_mul_overflow) {\n    for (unsigned I = 0; I < 3; ++I) {\n      // ...\n      if (Ty->isBitIntType() && Ty->isSignedIntegerType() && S.getASTContext().getIntWidth(Ty) > 128)\n        return S.Diag(Arg->getBeginLoc(), diag::err_overflow_builtin_bit_int_max_size) << 128;"}},
[i]={{I,417,"static bool SemaBuiltinOverflow(Sema &S, CallExpr *TheCall, unsigned BuiltinID) {\n  // ...\n  // Disallow signed bit-precise integer args larger than 128 bits to mul\n  // function until we improve backend support.\n  if (BuiltinID == Builtin::BI__builtin_mul_overflow) {\n    for (unsigned I = 0; I < 3; ++I) {\n      // ...\n      if (Ty->isBitIntType() && Ty->isSignedIntegerType() && S.getASTContext().getIntWidth(Ty) > 128)\n        return S.Diag(Arg->getBeginLoc(), diag::err_overflow_builtin_bit_int_max_size) << 128;"}},
[l]={
[l]={
["clang/test/Sema/builtins-overflow.c"]={"clang/test/Sema/builtins-overflow.c:40:43: error: __builtin_mul_overflow does not support \'signed _BitInt\' operands of more than 128 bits"}
["clang/test/Sema/builtins-overflow.c"]={"clang/test/Sema/builtins-overflow.c:40:43: error: __builtin_mul_overflow does not support \'signed _BitInt\' operands of more than 128 bits"}
Line 524: Line 525:
},
},
["err_overflow_builtin_must_be_int"]={
["err_overflow_builtin_must_be_int"]={
[b]="err_overflow_builtin_must_be_int",
[d]="err_overflow_builtin_must_be_int",
[j]="operand argument to overflow builtin must be an integer (%0 invalid)",
[e]="operand argument to overflow builtin must be an integer (%0 invalid)",
[i]="operand argument to overflow builtin must be an integer (A invalid)",
[f]="operand argument to overflow builtin must be an integer (A invalid)",
[h]=k,
[g]=k,
[c]="operand argument to overflow builtin must be an integer \\((.*?) invalid\\)",
[h]="operand argument to overflow builtin must be an integer \\((.*?) invalid\\)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"03107a4ef015",1446151681,"Add support for __builtin_{add,sub,mul}_overflow.","Add support for __builtin_{add,sub,mul}_overflow.\n\nPatch by David Grayson!\n\nllvm-svn: 251651"},
[j]={"03107a4ef015",1446151681,"Add support for __builtin_{add,sub,mul}_overflow.","Add support for __builtin_{add,sub,mul}_overflow.\n\nPatch by David Grayson!\n\nllvm-svn: 251651"},
[d]={{I,381,"static bool SemaBuiltinOverflow(Sema &S, CallExpr *TheCall, unsigned BuiltinID) {\n  // ...\n  // First two arguments should be integers.\n  for (unsigned I = 0; I < 2; ++I) {\n    // ...\n    if (!Ty->isIntegerType()) {\n      S.Diag(Arg.get()->getBeginLoc(), diag::err_overflow_builtin_must_be_int) << Ty << Arg.get()->getSourceRange();"}},
[i]={{I,381,"static bool SemaBuiltinOverflow(Sema &S, CallExpr *TheCall, unsigned BuiltinID) {\n  // ...\n  // First two arguments should be integers.\n  for (unsigned I = 0; I < 2; ++I) {\n    // ...\n    if (!Ty->isIntegerType()) {\n      S.Diag(Arg.get()->getBeginLoc(), diag::err_overflow_builtin_must_be_int) << Ty << Arg.get()->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/builtins-overflow.c"]={"clang/test/Sema/builtins-overflow.c:17:26: error: operand argument to overflow builtin must be an integer (\'const char *\' invalid)","clang/test/Sema/builtins-overflow.c:18:29: error: operand argument to overflow builtin must be an integer (\'const char *\' invalid)"}
["clang/test/Sema/builtins-overflow.c"]={"clang/test/Sema/builtins-overflow.c:17:26: error: operand argument to overflow builtin must be an integer (\'const char *\' invalid)","clang/test/Sema/builtins-overflow.c:18:29: error: operand argument to overflow builtin must be an integer (\'const char *\' invalid)"}
Line 538: Line 539:
},
},
["err_overflow_builtin_must_be_ptr_int"]={
["err_overflow_builtin_must_be_ptr_int"]={
[b]="err_overflow_builtin_must_be_ptr_int",
[d]="err_overflow_builtin_must_be_ptr_int",
[j]="result argument to overflow builtin must be a pointer to a non-const integer (%0 invalid)",
[e]="result argument to overflow builtin must be a pointer to a non-const integer (%0 invalid)",
[i]="result argument to overflow builtin must be a pointer to a non-const integer (A invalid)",
[f]="result argument to overflow builtin must be a pointer to a non-const integer (A invalid)",
[h]=k,
[g]=k,
[c]="result argument to overflow builtin must be a pointer to a non\\-const integer \\((.*?) invalid\\)",
[h]="result argument to overflow builtin must be a pointer to a non\\-const integer \\((.*?) invalid\\)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"03107a4ef015",1446151681,"Add support for __builtin_{add,sub,mul}_overflow.","Add support for __builtin_{add,sub,mul}_overflow.\n\nPatch by David Grayson!\n\nllvm-svn: 251651"},
[j]={"03107a4ef015",1446151681,"Add support for __builtin_{add,sub,mul}_overflow.","Add support for __builtin_{add,sub,mul}_overflow.\n\nPatch by David Grayson!\n\nllvm-svn: 251651"},
[d]={{I,401,"static bool SemaBuiltinOverflow(Sema &S, CallExpr *TheCall, unsigned BuiltinID) {\n  // ...\n  // Third argument should be a pointer to a non-const integer.\n  // IRGen correctly handles volatile, restrict, and address spaces, and\n  // the other qualifiers aren\'t possible.\n  {\n    // ...\n    if (!PtrTy || !PtrTy->getPointeeType()->isIntegerType() || PtrTy->getPointeeType().isConstQualified()) {\n      S.Diag(Arg.get()->getBeginLoc(), diag::err_overflow_builtin_must_be_ptr_int) << Ty << Arg.get()->getSourceRange();"}},
[i]={{I,401,"static bool SemaBuiltinOverflow(Sema &S, CallExpr *TheCall, unsigned BuiltinID) {\n  // ...\n  // Third argument should be a pointer to a non-const integer.\n  // IRGen correctly handles volatile, restrict, and address spaces, and\n  // the other qualifiers aren\'t possible.\n  {\n    // ...\n    if (!PtrTy || !PtrTy->getPointeeType()->isIntegerType() || PtrTy->getPointeeType().isConstQualified()) {\n      S.Diag(Arg.get()->getBeginLoc(), diag::err_overflow_builtin_must_be_ptr_int) << Ty << Arg.get()->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/builtins-overflow.c"]={"clang/test/Sema/builtins-overflow.c:19:32: error: result argument to overflow builtin must be a pointer to a non-const integer (\'int\' invalid)","clang/test/Sema/builtins-overflow.c:20:32: error: result argument to overflow builtin must be a pointer to a non-const integer (\'float *\' invalid)","clang/test/Sema/builtins-overflow.c:21:32: error: result argument to overflow builtin must be a pointer to a non-const integer (\'const unsigned int *\' invalid)"}
["clang/test/Sema/builtins-overflow.c"]={"clang/test/Sema/builtins-overflow.c:19:32: error: result argument to overflow builtin must be a pointer to a non-const integer (\'int\' invalid)","clang/test/Sema/builtins-overflow.c:20:32: error: result argument to overflow builtin must be a pointer to a non-const integer (\'float *\' invalid)","clang/test/Sema/builtins-overflow.c:21:32: error: result argument to overflow builtin must be a pointer to a non-const integer (\'const unsigned int *\' invalid)"}
Line 552: Line 553:
},
},
["err_override_control_interface"]={
["err_override_control_interface"]={
[b]="err_override_control_interface",
[d]="err_override_control_interface",
[j]="\'%0\' keyword not permitted with interface types",
[e]="\'%0\' keyword not permitted with interface types",
[i]="\'A\' keyword not permitted with interface types",
[f]="\'A\' keyword not permitted with interface types",
[h]=k,
[g]=k,
[c]="\'(.*?)\' keyword not permitted with interface types",
[h]="\'(.*?)\' keyword not permitted with interface types",
[f]=a,
[b]=a,
[e]=y,
[c]=y,
[g]={"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"},
[j]={"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"},
[d]={{kc,2462,"/// ParseOptionalCXX11VirtSpecifierSeq - Parse a virt-specifier-seq.\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\nvoid Parser::ParseOptionalCXX11VirtSpecifierSeq(VirtSpecifiers &VS, bool IsInterface, SourceLocation FriendLoc) {\n  while (true) {\n    // ...\n    if (IsInterface && (Specifier == VirtSpecifiers::VS_Final || Specifier == VirtSpecifiers::VS_Sealed)) {\n      Diag(Tok.getLocation(), diag::err_override_control_interface) << VirtSpecifiers::getSpecifierName(Specifier);"},{kc,3524,"/// ParseCXXMemberSpecification - Parse the class definition.\n///\n///      member-specification:\n///        member-declaration member-specification[opt]\n///        access-specifier \':\' member-specification[opt]\n///\nvoid Parser::ParseCXXMemberSpecification(SourceLocation RecordLoc, SourceLocation AttrFixitLoc, ParsedAttributes &Attrs, unsigned TagType, Decl *TagDecl) {\n  // ...\n  // Parse the optional \'final\' keyword.\n  if (getLangOpts().CPlusPlus && Tok.is(tok::identifier)) {\n    while (true) {\n      // ...\n      if (TagType == DeclSpec::TST_interface)\n        Diag(FinalLoc, diag::err_override_control_interface) << VirtSpecifiers::getSpecifierName(Specifier);"}},
[i]={{lc,2462,"/// ParseOptionalCXX11VirtSpecifierSeq - Parse a virt-specifier-seq.\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\nvoid Parser::ParseOptionalCXX11VirtSpecifierSeq(VirtSpecifiers &VS, bool IsInterface, SourceLocation FriendLoc) {\n  while (true) {\n    // ...\n    if (IsInterface && (Specifier == VirtSpecifiers::VS_Final || Specifier == VirtSpecifiers::VS_Sealed)) {\n      Diag(Tok.getLocation(), diag::err_override_control_interface) << VirtSpecifiers::getSpecifierName(Specifier);"},{lc,3524,"/// ParseCXXMemberSpecification - Parse the class definition.\n///\n///      member-specification:\n///        member-declaration member-specification[opt]\n///        access-specifier \':\' member-specification[opt]\n///\nvoid Parser::ParseCXXMemberSpecification(SourceLocation RecordLoc, SourceLocation AttrFixitLoc, ParsedAttributes &Attrs, unsigned TagType, Decl *TagDecl) {\n  // ...\n  // Parse the optional \'final\' keyword.\n  if (getLangOpts().CPlusPlus && Tok.is(tok::identifier)) {\n    while (true) {\n      // ...\n      if (TagType == DeclSpec::TST_interface)\n        Diag(FinalLoc, diag::err_override_control_interface) << VirtSpecifiers::getSpecifierName(Specifier);"}},
[l]={
[l]={
["clang/test/SemaCXX/ms-interface.cpp"]={"clang/test/SemaCXX/ms-interface.cpp:41:16: error: \'final\' keyword not permitted with interface types","clang/test/SemaCXX/ms-interface.cpp:47:14: error: \'final\' keyword not permitted with interface types"}
["clang/test/SemaCXX/ms-interface.cpp"]={"clang/test/SemaCXX/ms-interface.cpp:41:16: error: \'final\' keyword not permitted with interface types","clang/test/SemaCXX/ms-interface.cpp:47:14: error: \'final\' keyword not permitted with interface types"}
Line 566: Line 567:
},
},
["err_override_exception_spec"]={
["err_override_exception_spec"]={
[b]="err_override_exception_spec",
[d]="err_override_exception_spec",
[j]="exception specification of overriding function is more lax than base version",
[e]="exception specification of overriding function is more lax than base version",
[i]="exception specification of overriding function is more lax than base version",
[f]="exception specification of overriding function is more lax than base version",
[h]=k,
[g]=k,
[c]="exception specification of overriding function is more lax than base version",
[h]="exception specification of overriding function is more lax than base version",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"86be854fa869",1246998597,"Implement checking of exception spec compatibility for overriding virtual functions.","Implement checking of exception spec compatibility for overriding virtual functions.\n\nllvm-svn: 74943"},
[j]={"86be854fa869",1246998597,"Implement checking of exception spec compatibility for overriding virtual functions.","Implement checking of exception spec compatibility for overriding virtual functions.\n\nllvm-svn: 74943"},
[d]={{"clang/lib/Sema/SemaExceptionSpec.cpp",990,"bool Sema::CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  unsigned DiagID = diag::err_override_exception_spec;"}},
[i]={{"clang/lib/Sema/SemaExceptionSpec.cpp",990,"bool Sema::CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  unsigned DiagID = diag::err_override_exception_spec;"}},
[l]={
[l]={
["clang/test/CXX/except/except.spec/p5-delayed.cpp"]={"clang/test/CXX/except/except.spec/p5-delayed.cpp:13:10: error: exception specification of overriding function is more lax than base version"}
["clang/test/CXX/except/except.spec/p5-delayed.cpp"]={"clang/test/CXX/except/except.spec/p5-delayed.cpp:13:10: error: exception specification of overriding function is more lax than base version"}
Line 580: Line 581:
},
},
["err_ovl_ambiguous_call"]={
["err_ovl_ambiguous_call"]={
[b]="err_ovl_ambiguous_call",
[d]="err_ovl_ambiguous_call",
[j]="call to %0 is ambiguous",
[e]="call to %0 is ambiguous",
[i]="call to A is ambiguous",
[f]="call to A is ambiguous",
[h]=k,
[g]=k,
[c]="call to (.*?) is ambiguous",
[h]="call to (.*?) is ambiguous",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{Q,2617,"static bool resolveAllocationOverload(Sema &S, LookupResult &R, SourceRange Range, SmallVectorImpl<Expr *> &Args, bool &PassAlignment, FunctionDecl *&Operator, OverloadCandidateSet *AlignedCandidates, Expr *AlignArg, bool Diagnose) {\n  // ...\n  case OR_Ambiguous:\n    if (Diagnose) {\n      Candidates.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), S.PDiag(diag::err_ovl_ambiguous_call) << R.getLookupName() << Range), S, OCD_AmbiguousCandidates, Args);"},{Q,3881,"static bool resolveBuiltinNewDeleteOverload(Sema &S, CallExpr *TheCall, bool IsDelete, FunctionDecl *&Operator) {\n  // ...\n  case OR_Ambiguous:\n    Candidates.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), S.PDiag(diag::err_ovl_ambiguous_call) << R.getLookupName() << Range), S, OCD_AmbiguousCandidates, Args);"},{"clang/lib/Sema/SemaLookup.cpp",3764,"/// LookupLiteralOperator - Determine which literal operator should be used for\n/// a user-defined literal, per C++11 [lex.ext].\n///\n/// Normal overload resolution is not used to select which literal operator to\n/// call for a user-defined literal. Look up the provided literal operator name,\n/// and filter the results to the appropriate set for the given argument types.\nSema::LiteralOperatorLookupResult Sema::LookupLiteralOperator(Scope *S, LookupResult &R, ArrayRef<QualType> ArgTys, bool AllowRaw, bool AllowTemplate, bool AllowStringTemplatePack, bool DiagnoseMissing, StringLiteral *StringLit) {\n  // ...\n  // C++11 [lex.ext]p3, p4: S shall contain a raw literal operator or a literal\n  // operator template, but not both.\n  if (FoundRaw && FoundTemplate) {\n    Diag(R.getNameLoc(), diag::err_ovl_ambiguous_call) << R.getLookupName();"},{E,13536,"/// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns\n/// the completed call expression. If overload resolution fails, emits\n/// diagnostics and returns ExprError()\nstatic ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, OverloadCandidateSet *CandidateSet, OverloadCandidateSet::iterator *Best, OverloadingResult OverloadResult, bool AllowTypoCorrection) {\n  // ...\n  case OR_Ambiguous:\n    CandidateSet->NoteCandidates(PartialDiagnosticAt(Fn->getBeginLoc(), SemaRef.PDiag(diag::err_ovl_ambiguous_call) << ULE->getName() << Fn->getSourceRange()), SemaRef, OCD_AmbiguousCandidates, Args);"},{E,15371,"/// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to\n/// a literal operator described by the provided lookup results.\nExprResult Sema::BuildLiteralOperatorCall(LookupResult &R, DeclarationNameInfo &SuffixInfo, ArrayRef<Expr *> Args, SourceLocation LitEndLoc, TemplateArgumentListInfo *TemplateArgs) {\n  // ...\n  case OR_Ambiguous:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), PDiag(diag::err_ovl_ambiguous_call) << R.getLookupName()), *this, OCD_AmbiguousCandidates, Args);"}},
[i]={{Q,2617,"static bool resolveAllocationOverload(Sema &S, LookupResult &R, SourceRange Range, SmallVectorImpl<Expr *> &Args, bool &PassAlignment, FunctionDecl *&Operator, OverloadCandidateSet *AlignedCandidates, Expr *AlignArg, bool Diagnose) {\n  // ...\n  case OR_Ambiguous:\n    if (Diagnose) {\n      Candidates.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), S.PDiag(diag::err_ovl_ambiguous_call) << R.getLookupName() << Range), S, OCD_AmbiguousCandidates, Args);"},{Q,3881,"static bool resolveBuiltinNewDeleteOverload(Sema &S, CallExpr *TheCall, bool IsDelete, FunctionDecl *&Operator) {\n  // ...\n  case OR_Ambiguous:\n    Candidates.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), S.PDiag(diag::err_ovl_ambiguous_call) << R.getLookupName() << Range), S, OCD_AmbiguousCandidates, Args);"},{"clang/lib/Sema/SemaLookup.cpp",3764,"/// LookupLiteralOperator - Determine which literal operator should be used for\n/// a user-defined literal, per C++11 [lex.ext].\n///\n/// Normal overload resolution is not used to select which literal operator to\n/// call for a user-defined literal. Look up the provided literal operator name,\n/// and filter the results to the appropriate set for the given argument types.\nSema::LiteralOperatorLookupResult Sema::LookupLiteralOperator(Scope *S, LookupResult &R, ArrayRef<QualType> ArgTys, bool AllowRaw, bool AllowTemplate, bool AllowStringTemplatePack, bool DiagnoseMissing, StringLiteral *StringLit) {\n  // ...\n  // C++11 [lex.ext]p3, p4: S shall contain a raw literal operator or a literal\n  // operator template, but not both.\n  if (FoundRaw && FoundTemplate) {\n    Diag(R.getNameLoc(), diag::err_ovl_ambiguous_call) << R.getLookupName();"},{E,13536,"/// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns\n/// the completed call expression. If overload resolution fails, emits\n/// diagnostics and returns ExprError()\nstatic ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, OverloadCandidateSet *CandidateSet, OverloadCandidateSet::iterator *Best, OverloadingResult OverloadResult, bool AllowTypoCorrection) {\n  // ...\n  case OR_Ambiguous:\n    CandidateSet->NoteCandidates(PartialDiagnosticAt(Fn->getBeginLoc(), SemaRef.PDiag(diag::err_ovl_ambiguous_call) << ULE->getName() << Fn->getSourceRange()), SemaRef, OCD_AmbiguousCandidates, Args);"},{E,15371,"/// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to\n/// a literal operator described by the provided lookup results.\nExprResult Sema::BuildLiteralOperatorCall(LookupResult &R, DeclarationNameInfo &SuffixInfo, ArrayRef<Expr *> Args, SourceLocation LitEndLoc, TemplateArgumentListInfo *TemplateArgs) {\n  // ...\n  case OR_Ambiguous:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), PDiag(diag::err_ovl_ambiguous_call) << R.getLookupName()), *this, OCD_AmbiguousCandidates, Args);"}},
[l]={
[l]={
["clang/test/Sema/overloadable-complex.c"]={"clang/test/Sema/overloadable-complex.c:34:14: error: call to \'promote_or_convert\' is ambiguous","clang/test/Sema/overloadable-complex.c:35:14: error: call to \'promote_or_convert\' is ambiguous"}
["clang/test/Sema/overloadable-complex.c"]={"clang/test/Sema/overloadable-complex.c:34:14: error: call to \'promote_or_convert\' is ambiguous","clang/test/Sema/overloadable-complex.c:35:14: error: call to \'promote_or_convert\' is ambiguous"}
Line 594: Line 595:
},
},
["err_ovl_ambiguous_conversion_in_cast"]={
["err_ovl_ambiguous_conversion_in_cast"]={
[b]="err_ovl_ambiguous_conversion_in_cast",
[d]="err_ovl_ambiguous_conversion_in_cast",
[j]={{nil,t,"ambiguous conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2"},{o,nil,"ambiguous conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2"}},
[e]={{nil,t,"ambiguous conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2"},{o,nil,"ambiguous conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2"}},
[i]={{nil,t,{"ambiguous conversion for ",{a,xb,Nb,Qb,Mb,Sb,a}," from B to C"}},{o,nil,{"ambiguous conversion for ",{a,xb,Nb,Qb,Mb,Sb}," from B to C"}}},
[f]={{nil,t,{"ambiguous conversion for ",{a,Eb,Tb,Sb,Qb,Pb,a}," from B to C"}},{o,nil,{"ambiguous conversion for ",{a,Eb,Tb,Sb,Qb,Pb}," from B to C"}}},
[h]=k,
[g]=k,
[c]="ambiguous conversion for (?:|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?)",
[h]="ambiguous conversion for (?:|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"909acf820969",1297708450,"Provide overload diagnostics when explicit casts involving class types fail.","Provide overload diagnostics when explicit casts involving class types fail.\nPR8626.\n\nllvm-svn: 125506"},
[j]={"909acf820969",1297708450,"Provide overload diagnostics when explicit casts involving class types fail.","Provide overload diagnostics when explicit casts involving class types fail.\nPR8626.\n\nllvm-svn: 125506"},
[d]={{"clang/lib/Sema/SemaCast.cpp",498,"/// Try to diagnose a failed overloaded cast.  Returns true if\n/// diagnostics were emitted.\nstatic bool tryDiagnoseOverloadedCast(Sema &S, CastType CT, SourceRange range, Expr *src, QualType destType, bool listInitialization) {\n  // ...\n  case OR_Ambiguous:\n    msg = diag::err_ovl_ambiguous_conversion_in_cast;"}},
[i]={{"clang/lib/Sema/SemaCast.cpp",498,"/// Try to diagnose a failed overloaded cast.  Returns true if\n/// diagnostics were emitted.\nstatic bool tryDiagnoseOverloadedCast(Sema &S, CastType CT, SourceRange range, Expr *src, QualType destType, bool listInitialization) {\n  // ...\n  case OR_Ambiguous:\n    msg = diag::err_ovl_ambiguous_conversion_in_cast;"}},
[l]={
[l]={
["clang/test/SemaCXX/cast-conversion.cpp"]={"clang/test/SemaCXX/cast-conversion.cpp:73:10: error: ambiguous conversion for static_cast from \'AmbiguousCast\' to \'long long\'"}
["clang/test/SemaCXX/cast-conversion.cpp"]={"clang/test/SemaCXX/cast-conversion.cpp:73:10: error: ambiguous conversion for static_cast from \'AmbiguousCast\' to \'long long\'"}
Line 608: Line 609:
},
},
["err_ovl_ambiguous_init"]={
["err_ovl_ambiguous_init"]={
[b]="err_ovl_ambiguous_init",
[d]="err_ovl_ambiguous_init",
[j]="call to constructor of %0 is ambiguous",
[e]="call to constructor of %0 is ambiguous",
[i]="call to constructor of A is ambiguous",
[f]="call to constructor of A is ambiguous",
[h]=k,
[g]=k,
[c]="call to constructor of (.*?) is ambiguous",
[h]="call to constructor of (.*?) is ambiguous",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{P,9857,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ListConstructorOverloadFailed:\n  case FK_ConstructorOverloadFailed: {\n    // ...\n    case OR_Ambiguous:\n      FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), S.PDiag(diag::err_ovl_ambiguous_init) << DestType << ArgsRange), S, OCD_AmbiguousCandidates, Args);"}},
[i]={{P,9857,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ListConstructorOverloadFailed:\n  case FK_ConstructorOverloadFailed: {\n    // ...\n    case OR_Ambiguous:\n      FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), S.PDiag(diag::err_ovl_ambiguous_init) << DestType << ArgsRange), S, OCD_AmbiguousCandidates, Args);"}},
[l]={
[l]={
["clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p15.cpp"]={"clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p15.cpp:15:4: error: call to constructor of \'D1\' is ambiguous","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p15.cpp:93:7: error: call to constructor of \'D\' is ambiguous"}
["clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p15.cpp"]={"clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p15.cpp:15:4: error: call to constructor of \'D1\' is ambiguous","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p15.cpp:93:7: error: call to constructor of \'D\' is ambiguous"}
Line 622: Line 623:
},
},
["err_ovl_ambiguous_member_call"]={
["err_ovl_ambiguous_member_call"]={
[b]="err_ovl_ambiguous_member_call",
[d]="err_ovl_ambiguous_member_call",
[j]="call to member function %0 is ambiguous",
[e]="call to member function %0 is ambiguous",
[i]="call to member function A is ambiguous",
[f]="call to member function A is ambiguous",
[h]=k,
[g]=k,
[c]="call to member function (.*?) is ambiguous",
[h]="call to member function (.*?) is ambiguous",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{E,14831,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  if (isa<MemberExpr>(NakedMemExpr)) {\n  // ...\n  } else {\n    // ...\n    case OR_Ambiguous:\n      CandidateSet.NoteCandidates(PartialDiagnosticAt(UnresExpr->getMemberLoc(), PDiag(diag::err_ovl_ambiguous_member_call) << DeclName << MemExprE->getSourceRange()), *this, OCD_AmbiguousCandidates, Args);"}},
[i]={{E,14831,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  if (isa<MemberExpr>(NakedMemExpr)) {\n  // ...\n  } else {\n    // ...\n    case OR_Ambiguous:\n      CandidateSet.NoteCandidates(PartialDiagnosticAt(UnresExpr->getMemberLoc(), PDiag(diag::err_ovl_ambiguous_member_call) << DeclName << MemExprE->getSourceRange()), *this, OCD_AmbiguousCandidates, Args);"}},
[l]={
[l]={
["clang/test/SemaTemplate/concepts-using-decl.cpp"]={"clang/test/SemaTemplate/concepts-using-decl.cpp:91:9: error: call to member function \'foo\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:127:10: error: call to member function \'foo1\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:128:10: error: call to member function \'foo2\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:129:10: error: call to member function \'foo3\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:130:10: error: call to member function \'foo1\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:131:10: error: call to member function \'foo2\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:132:10: error: call to member function \'foo3\' is ambiguous"}
["clang/test/SemaTemplate/concepts-using-decl.cpp"]={"clang/test/SemaTemplate/concepts-using-decl.cpp:91:9: error: call to member function \'foo\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:127:10: error: call to member function \'foo1\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:128:10: error: call to member function \'foo2\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:129:10: error: call to member function \'foo3\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:130:10: error: call to member function \'foo1\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:131:10: error: call to member function \'foo2\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:132:10: error: call to member function \'foo3\' is ambiguous"}
Line 636: Line 637:
},
},
["err_ovl_ambiguous_object_call"]={
["err_ovl_ambiguous_object_call"]={
[b]="err_ovl_ambiguous_object_call",
[d]="err_ovl_ambiguous_object_call",
[j]="call to object of type %0 is ambiguous",
[e]="call to object of type %0 is ambiguous",
[i]="call to object of type A is ambiguous",
[f]="call to object of type A is ambiguous",
[h]=k,
[g]=k,
[c]="call to object of type (.*?) is ambiguous",
[h]="call to object of type (.*?) is ambiguous",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{E,15081,"/// BuildCallToObjectOfClassType - Build a call to an object of class\n/// type (C++ [over.call.object]), which can end up invoking an\n/// overloaded function call operator (@c operator()) or performing a\n/// user-defined conversion on the object argument.\nExprResult Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc) {\n  // ...\n  case OR_Ambiguous:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(Object.get()->getBeginLoc(), PDiag(diag::err_ovl_ambiguous_object_call) << Object.get()->getType() << Object.get()->getSourceRange()), *this, OCD_AmbiguousCandidates, Args);"}},
[i]={{E,15081,"/// BuildCallToObjectOfClassType - Build a call to an object of class\n/// type (C++ [over.call.object]), which can end up invoking an\n/// overloaded function call operator (@c operator()) or performing a\n/// user-defined conversion on the object argument.\nExprResult Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc) {\n  // ...\n  case OR_Ambiguous:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(Object.get()->getBeginLoc(), PDiag(diag::err_ovl_ambiguous_object_call) << Object.get()->getType() << Object.get()->getSourceRange()), *this, OCD_AmbiguousCandidates, Args);"}},
[l]={
[l]={
["clang/test/SemaCXX/overloaded-operator.cpp"]={"clang/test/SemaCXX/overloaded-operator.cpp:211:3: error: call to object of type \'ConvertToFunc\' is ambiguous","clang/test/SemaCXX/overloaded-operator.cpp:216:3: error: call to object of type \'ConvertToFuncDerived\' is ambiguous"}
["clang/test/SemaCXX/overloaded-operator.cpp"]={"clang/test/SemaCXX/overloaded-operator.cpp:211:3: error: call to object of type \'ConvertToFunc\' is ambiguous","clang/test/SemaCXX/overloaded-operator.cpp:216:3: error: call to object of type \'ConvertToFuncDerived\' is ambiguous"}
Line 650: Line 651:
},
},
["err_ovl_ambiguous_oper_binary"]={
["err_ovl_ambiguous_oper_binary"]={
[b]="err_ovl_ambiguous_oper_binary",
[d]="err_ovl_ambiguous_oper_binary",
[j]="use of overloaded operator \'%0\' is ambiguous (with operand types %1 and %2)",
[e]="use of overloaded operator \'%0\' is ambiguous (with operand types %1 and %2)",
[i]="use of overloaded operator \'A\' is ambiguous (with operand types B and C)",
[f]="use of overloaded operator \'A\' is ambiguous (with operand types B and C)",
[h]=k,
[g]=k,
[c]="use of overloaded operator \'(.*?)\' is ambiguous \\(with operand types (.*?) and (.*?)\\)",
[h]="use of overloaded operator \'(.*?)\' is ambiguous \\(with operand types (.*?) and (.*?)\\)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"052caec1f3ff",1289678798,"When complaining about ambiguous overload resolution for a unary or","When complaining about ambiguous overload resolution for a unary or\nbinary operator, provide the types.\n\nllvm-svn: 119008"},
[j]={"052caec1f3ff",1289678798,"When complaining about ambiguous overload resolution for a unary or","When complaining about ambiguous overload resolution for a unary or\nbinary operator, provide the types.\n\nllvm-svn: 119008"},
[d]={{E,14284,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_Ambiguous:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_ambiguous_oper_binary) << BinaryOperator::getOpcodeStr(Opc) << Args[0]->getType() << Args[1]->getType() << Args[0]->getSourceRange() << Args[1]->getSourceRange()), *this, OCD_AmbiguousCandidates, Args, BinaryOperator::getOpcodeStr(Opc), OpLoc);"},{E,14618,"ExprResult Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, SourceLocation RLoc, Expr *Base, MultiExprArg ArgExpr) {\n  // ...\n  case OR_Ambiguous:\n    if (Args.size() == 2) {\n      CandidateSet.NoteCandidates(PartialDiagnosticAt(LLoc, PDiag(diag::err_ovl_ambiguous_oper_binary) << \"[]\" << Args[0]->getType() << Args[1]->getType() << Args[0]->getSourceRange() << Range), *this, OCD_AmbiguousCandidates, Args, \"[]\", LLoc);"}},
[i]={{E,14284,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_Ambiguous:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_ambiguous_oper_binary) << BinaryOperator::getOpcodeStr(Opc) << Args[0]->getType() << Args[1]->getType() << Args[0]->getSourceRange() << Args[1]->getSourceRange()), *this, OCD_AmbiguousCandidates, Args, BinaryOperator::getOpcodeStr(Opc), OpLoc);"},{E,14618,"ExprResult Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, SourceLocation RLoc, Expr *Base, MultiExprArg ArgExpr) {\n  // ...\n  case OR_Ambiguous:\n    if (Args.size() == 2) {\n      CandidateSet.NoteCandidates(PartialDiagnosticAt(LLoc, PDiag(diag::err_ovl_ambiguous_oper_binary) << \"[]\" << Args[0]->getType() << Args[1]->getType() << Args[0]->getSourceRange() << Range), *this, OCD_AmbiguousCandidates, Args, \"[]\", LLoc);"}},
[l]={
[l]={
["clang/test/SemaCXX/builtin-ptrtomember-overload-1.cpp"]={"clang/test/SemaCXX/builtin-ptrtomember-overload-1.cpp:43:19: error: use of overloaded operator \'->*\' is ambiguous (with operand types \'C1\' and \'int E::*\')"}
["clang/test/SemaCXX/builtin-ptrtomember-overload-1.cpp"]={"clang/test/SemaCXX/builtin-ptrtomember-overload-1.cpp:43:19: error: use of overloaded operator \'->*\' is ambiguous (with operand types \'C1\' and \'int E::*\')"}
Line 664: Line 665:
},
},
["err_ovl_ambiguous_oper_unary"]={
["err_ovl_ambiguous_oper_unary"]={
[b]="err_ovl_ambiguous_oper_unary",
[d]="err_ovl_ambiguous_oper_unary",
[j]="use of overloaded operator \'%0\' is ambiguous (operand type %1)",
[e]="use of overloaded operator \'%0\' is ambiguous (operand type %1)",
[i]="use of overloaded operator \'A\' is ambiguous (operand type B)",
[f]="use of overloaded operator \'A\' is ambiguous (operand type B)",
[h]=k,
[g]=k,
[c]="use of overloaded operator \'(.*?)\' is ambiguous \\(operand type (.*?)\\)",
[h]="use of overloaded operator \'(.*?)\' is ambiguous \\(operand type (.*?)\\)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"052caec1f3ff",1289678798,"When complaining about ambiguous overload resolution for a unary or","When complaining about ambiguous overload resolution for a unary or\nbinary operator, provide the types.\n\nllvm-svn: 119008"},
[j]={"052caec1f3ff",1289678798,"When complaining about ambiguous overload resolution for a unary or","When complaining about ambiguous overload resolution for a unary or\nbinary operator, provide the types.\n\nllvm-svn: 119008"},
[d]={{E,13796,"/// Create a unary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'*\').\n///\n/// \\param Opc The UnaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedUnaryOp().\n///\n/// \\param Input The input argument.\nExprResult Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *Input, bool PerformADL) {\n  // ...\n  case OR_Ambiguous:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_ambiguous_oper_unary) << UnaryOperator::getOpcodeStr(Opc) << Input->getType() << Input->getSourceRange()), *this, OCD_AmbiguousCandidates, ArgsArray, UnaryOperator::getOpcodeStr(Opc), OpLoc);"},{E,15289,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  // ...\n  case OR_Ambiguous:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_ambiguous_oper_unary) << \"->\" << Base->getType() << Base->getSourceRange()), *this, OCD_AmbiguousCandidates, Base);"}},
[i]={{E,13796,"/// Create a unary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'*\').\n///\n/// \\param Opc The UnaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedUnaryOp().\n///\n/// \\param Input The input argument.\nExprResult Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *Input, bool PerformADL) {\n  // ...\n  case OR_Ambiguous:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_ambiguous_oper_unary) << UnaryOperator::getOpcodeStr(Opc) << Input->getType() << Input->getSourceRange()), *this, OCD_AmbiguousCandidates, ArgsArray, UnaryOperator::getOpcodeStr(Opc), OpLoc);"},{E,15289,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  // ...\n  case OR_Ambiguous:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_ambiguous_oper_unary) << \"->\" << Base->getType() << Base->getSourceRange()), *this, OCD_AmbiguousCandidates, Base);"}},
[l]={
[l]={
["clang/test/SemaCXX/ambiguous-builtin-unary-operator.cpp"]={"clang/test/SemaCXX/ambiguous-builtin-unary-operator.cpp:16:3: error: use of overloaded operator \'++\' is ambiguous (operand type \'C\')","clang/test/SemaCXX/ambiguous-builtin-unary-operator.cpp:30:3: error: use of overloaded operator \'++\' is ambiguous (operand type \'C1\')"}
["clang/test/SemaCXX/ambiguous-builtin-unary-operator.cpp"]={"clang/test/SemaCXX/ambiguous-builtin-unary-operator.cpp:16:3: error: use of overloaded operator \'++\' is ambiguous (operand type \'C\')","clang/test/SemaCXX/ambiguous-builtin-unary-operator.cpp:30:3: error: use of overloaded operator \'++\' is ambiguous (operand type \'C1\')"}
Line 678: Line 679:
},
},
["err_ovl_ambiguous_subscript_call"]={
["err_ovl_ambiguous_subscript_call"]={
[b]={{nil,C,"err_ovl_ambiguous_subscript_call"}},
[d]={{nil,C,"err_ovl_ambiguous_subscript_call"}},
[j]={{nil,C,"call to subscript operator of type %0 is ambiguous"}},
[e]={{nil,C,"call to subscript operator of type %0 is ambiguous"}},
[i]={{nil,C,"call to subscript operator of type A is ambiguous"}},
[f]={{nil,C,"call to subscript operator of type A is ambiguous"}},
[h]=k,
[g]=k,
[c]="call to subscript operator of type (.*?) is ambiguous",
[h]="call to subscript operator of type (.*?) is ambiguous",
[f]=a,
[b]=a,
[e]={{nil,C,m}},
[c]={{nil,C,m}},
[g]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[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"},
[j]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[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"},
[d]={{E,14625,"ExprResult Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, SourceLocation RLoc, Expr *Base, MultiExprArg ArgExpr) {\n  // ...\n  case OR_Ambiguous:\n    if (Args.size() == 2) {\n    // ...\n    } else {\n      CandidateSet.NoteCandidates(PartialDiagnosticAt(LLoc, PDiag(diag::err_ovl_ambiguous_subscript_call) << Args[0]->getType() << Args[0]->getSourceRange() << Range), *this, OCD_AmbiguousCandidates, Args, \"[]\", LLoc);"}},
[i]={{E,14625,"ExprResult Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, SourceLocation RLoc, Expr *Base, MultiExprArg ArgExpr) {\n  // ...\n  case OR_Ambiguous:\n    if (Args.size() == 2) {\n    // ...\n    } else {\n      CandidateSet.NoteCandidates(PartialDiagnosticAt(LLoc, PDiag(diag::err_ovl_ambiguous_subscript_call) << Args[0]->getType() << Args[0]->getSourceRange() << Range), *this, OCD_AmbiguousCandidates, Args, \"[]\", LLoc);"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx2b-overloaded-operator.cpp"]={"clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:51:20: error: call to subscript operator of type \'S\' is ambiguous"}
["clang/test/SemaCXX/cxx2b-overloaded-operator.cpp"]={"clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:51:20: error: call to subscript operator of type \'S\' is ambiguous"}
Line 692: Line 693:
},
},
["err_ovl_deleted_call"]={
["err_ovl_deleted_call"]={
[b]="err_ovl_deleted_call",
[d]="err_ovl_deleted_call",
[j]={{nil,x,"call to deleted function %0"},{u,nil,"call to %select{unavailable|deleted}0 function %1%2"}},
[e]={{nil,x,"call to deleted function %0"},{u,nil,"call to %select{unavailable|deleted}0 function %1%2"}},
[i]={{nil,x,"call to deleted function A"},{u,nil,{"call to ",{Zb,ac}," function BC"}}},
[f]={{nil,x,"call to deleted function A"},{u,nil,{"call to ",{fc,ec}," function BC"}}},
[h]=k,
[g]=k,
[c]="call to deleted function (.*?)",
[h]="call to deleted function (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{"clang/lib/ARCMigrate/TransGCCalls.cpp",56,"class GCCollectableCallsChecker : public RecursiveASTVisitor<GCCollectableCallsChecker> {\n  // ...\n  bool VisitCallExpr(CallExpr *E) {\n    // ...\n    if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CEE)) {\n      if (FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(DRE->getDecl())) {\n        // ...\n        if (FD->getIdentifier() == NSMakeCollectableII) {\n          // ...\n          TA.clearDiagnostic(diag::err_unavailable, diag::err_unavailable_message,\n                            diag::err_ovl_deleted_call, // ObjC++"},{Q,2627,"static bool resolveAllocationOverload(Sema &S, LookupResult &R, SourceRange Range, SmallVectorImpl<Expr *> &Args, bool &PassAlignment, FunctionDecl *&Operator, OverloadCandidateSet *AlignedCandidates, Expr *AlignArg, bool Diagnose) {\n  // ...\n  case OR_Deleted: {\n    if (Diagnose) {\n      Candidates.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), S.PDiag(diag::err_ovl_deleted_call) << R.getLookupName() << Range), S, OCD_AllCandidates, Args);"},{Q,3888,"static bool resolveBuiltinNewDeleteOverload(Sema &S, CallExpr *TheCall, bool IsDelete, FunctionDecl *&Operator) {\n  // ...\n  case OR_Deleted: {\n    Candidates.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), S.PDiag(diag::err_ovl_deleted_call) << R.getLookupName() << Range), S, OCD_AllCandidates, Args);"},{E,13544,"/// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns\n/// the completed call expression. If overload resolution fails, emits\n/// diagnostics and returns ExprError()\nstatic ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, OverloadCandidateSet *CandidateSet, OverloadCandidateSet::iterator *Best, OverloadingResult OverloadResult, bool AllowTypoCorrection) {\n  // ...\n  case OR_Deleted: {\n    CandidateSet->NoteCandidates(PartialDiagnosticAt(Fn->getBeginLoc(), SemaRef.PDiag(diag::err_ovl_deleted_call) << ULE->getName() << Fn->getSourceRange()), SemaRef, OCD_AllCandidates, Args);"}},
[i]={{"clang/lib/ARCMigrate/TransGCCalls.cpp",56,"class GCCollectableCallsChecker : public RecursiveASTVisitor<GCCollectableCallsChecker> {\n  // ...\n  bool VisitCallExpr(CallExpr *E) {\n    // ...\n    if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CEE)) {\n      if (FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(DRE->getDecl())) {\n        // ...\n        if (FD->getIdentifier() == NSMakeCollectableII) {\n          // ...\n          TA.clearDiagnostic(diag::err_unavailable, diag::err_unavailable_message,\n                            diag::err_ovl_deleted_call, // ObjC++"},{Q,2627,"static bool resolveAllocationOverload(Sema &S, LookupResult &R, SourceRange Range, SmallVectorImpl<Expr *> &Args, bool &PassAlignment, FunctionDecl *&Operator, OverloadCandidateSet *AlignedCandidates, Expr *AlignArg, bool Diagnose) {\n  // ...\n  case OR_Deleted: {\n    if (Diagnose) {\n      Candidates.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), S.PDiag(diag::err_ovl_deleted_call) << R.getLookupName() << Range), S, OCD_AllCandidates, Args);"},{Q,3888,"static bool resolveBuiltinNewDeleteOverload(Sema &S, CallExpr *TheCall, bool IsDelete, FunctionDecl *&Operator) {\n  // ...\n  case OR_Deleted: {\n    Candidates.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), S.PDiag(diag::err_ovl_deleted_call) << R.getLookupName() << Range), S, OCD_AllCandidates, Args);"},{E,13544,"/// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns\n/// the completed call expression. If overload resolution fails, emits\n/// diagnostics and returns ExprError()\nstatic ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, OverloadCandidateSet *CandidateSet, OverloadCandidateSet::iterator *Best, OverloadingResult OverloadResult, bool AllowTypoCorrection) {\n  // ...\n  case OR_Deleted: {\n    CandidateSet->NoteCandidates(PartialDiagnosticAt(Fn->getBeginLoc(), SemaRef.PDiag(diag::err_ovl_deleted_call) << ULE->getName() << Fn->getSourceRange()), SemaRef, OCD_AllCandidates, Args);"}},
[l]={
[l]={
["clang/test/CXX/over/over.match/over.match.best/over.best.ics/over.ics.scs/p3.cpp"]={"clang/test/CXX/over/over.match/over.match.best/over.best.ics/over.ics.scs/p3.cpp:10:3: error: call to deleted function \'f\'"}
["clang/test/CXX/over/over.match/over.match.best/over.best.ics/over.ics.scs/p3.cpp"]={"clang/test/CXX/over/over.match/over.match.best/over.best.ics/over.ics.scs/p3.cpp:10:3: error: call to deleted function \'f\'"}
Line 706: Line 707:
},
},
["err_ovl_deleted_comparison"]={
["err_ovl_deleted_comparison"]={
[b]={{nil,o,"err_ovl_deleted_comparison"}},
[d]={{nil,o,"err_ovl_deleted_comparison"}},
[j]={{nil,o,"object of type %0 cannot be compared because its %1 is implicitly deleted"}},
[e]={{nil,o,"object of type %0 cannot be compared because its %1 is implicitly deleted"}},
[i]={{nil,o,"object of type A cannot be compared because its B is implicitly deleted"}},
[f]={{nil,o,"object of type A cannot be compared because its B is implicitly deleted"}},
[h]=k,
[g]=k,
[c]="object of type (.*?) cannot be compared because its (.*?) is implicitly deleted",
[h]="object of type (.*?) cannot be compared because its (.*?) is implicitly deleted",
[f]=a,
[b]=a,
[e]={{nil,o,m}},
[c]={{nil,o,m}},
[g]={"5253d9138eb3",1573070592,"[c++20] Determine whether a defaulted comparison should be deleted or","[c++20] Determine whether a defaulted comparison should be deleted or\nconstexpr."},
[j]={"5253d9138eb3",1573070592,"[c++20] Determine whether a defaulted comparison should be deleted or","[c++20] Determine whether a defaulted comparison should be deleted or\nconstexpr."},
[d]={{E,14303,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_Deleted:\n    if (isImplicitlyDeleted(Best->Function)) {\n      // ...\n      if (DFK.isSpecialMember()) {\n      // ...\n      } else {\n        // ...\n        Diag(OpLoc, diag::err_ovl_deleted_comparison) << Args[0]->getType() << DeletedFD;"}},
[i]={{E,14303,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_Deleted:\n    if (isImplicitlyDeleted(Best->Function)) {\n      // ...\n      if (DFK.isSpecialMember()) {\n      // ...\n      } else {\n        // ...\n        Diag(OpLoc, diag::err_ovl_deleted_comparison) << Args[0]->getType() << DeletedFD;"}},
[l]={
[l]={
["clang/test/CXX/class/class.compare/class.compare.default/p2.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:24:10: error: object of type \'A1\' cannot be compared because its \'operator==\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:25:10: error: object of type \'A1\' cannot be compared because its \'operator==\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:26:10: error: object of type \'A1\' cannot be compared because its \'operator<=>\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:27:10: error: object of type \'A1\' cannot be compared because its \'operator<=>\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:28:10: error: object of type \'A1\' cannot be compared because its \'operator<=>\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:29:10: error: object of type \'A1\' cannot be compared because its \'operator<=>\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:30:10: error: object of type \'A1\' cannot be compared because its \'operator<=>\' is implicitly deleted"}
["clang/test/CXX/class/class.compare/class.compare.default/p2.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:24:10: error: object of type \'A1\' cannot be compared because its \'operator==\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:25:10: error: object of type \'A1\' cannot be compared because its \'operator==\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:26:10: error: object of type \'A1\' cannot be compared because its \'operator<=>\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:27:10: error: object of type \'A1\' cannot be compared because its \'operator<=>\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:28:10: error: object of type \'A1\' cannot be compared because its \'operator<=>\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:29:10: error: object of type \'A1\' cannot be compared because its \'operator<=>\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:30:10: error: object of type \'A1\' cannot be compared because its \'operator<=>\' is implicitly deleted"}
Line 720: Line 721:
},
},
["err_ovl_deleted_conversion_in_cast"]={
["err_ovl_deleted_conversion_in_cast"]={
[b]="err_ovl_deleted_conversion_in_cast",
[d]="err_ovl_deleted_conversion_in_cast",
[j]={{nil,t,"%select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2 uses deleted function"},{o,nil,"%select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2 uses deleted function"}},
[e]={{nil,t,"%select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2 uses deleted function"},{o,nil,"%select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2 uses deleted function"}},
[i]={{nil,t,{{a,xb,Nb,Qb,Mb,Sb,a}," from B to C uses deleted function"}},{o,nil,{{a,xb,Nb,Qb,Mb,Sb}," from B to C uses deleted function"}}},
[f]={{nil,t,{{a,Eb,Tb,Sb,Qb,Pb,a}," from B to C uses deleted function"}},{o,nil,{{a,Eb,Tb,Sb,Qb,Pb}," from B to C uses deleted function"}}},
[h]=k,
[g]=k,
[c]="(?:|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?) uses deleted function",
[h]="(?:|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?) uses deleted function",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"909acf820969",1297708450,"Provide overload diagnostics when explicit casts involving class types fail.","Provide overload diagnostics when explicit casts involving class types fail.\nPR8626.\n\nllvm-svn: 125506"},
[j]={"909acf820969",1297708450,"Provide overload diagnostics when explicit casts involving class types fail.","Provide overload diagnostics when explicit casts involving class types fail.\nPR8626.\n\nllvm-svn: 125506"},
[d]={{"clang/lib/Sema/SemaCast.cpp",503,"/// Try to diagnose a failed overloaded cast.  Returns true if\n/// diagnostics were emitted.\nstatic bool tryDiagnoseOverloadedCast(Sema &S, CastType CT, SourceRange range, Expr *src, QualType destType, bool listInitialization) {\n  // ...\n  case OR_Deleted:\n    msg = diag::err_ovl_deleted_conversion_in_cast;"}},
[i]={{"clang/lib/Sema/SemaCast.cpp",503,"/// Try to diagnose a failed overloaded cast.  Returns true if\n/// diagnostics were emitted.\nstatic bool tryDiagnoseOverloadedCast(Sema &S, CastType CT, SourceRange range, Expr *src, QualType destType, bool listInitialization) {\n  // ...\n  case OR_Deleted:\n    msg = diag::err_ovl_deleted_conversion_in_cast;"}},
[l]={
[l]={
["clang/test/SemaCXX/deleted-function.cpp"]={"clang/test/SemaCXX/deleted-function.cpp:78:15: error: C-style cast from \'int\' to \'DelCtor\' uses deleted function","clang/test/SemaCXX/deleted-function.cpp:79:15: error: functional-style cast from \'int\' to \'DelCtor\' uses deleted function"}
["clang/test/SemaCXX/deleted-function.cpp"]={"clang/test/SemaCXX/deleted-function.cpp:78:15: error: C-style cast from \'int\' to \'DelCtor\' uses deleted function","clang/test/SemaCXX/deleted-function.cpp:79:15: error: functional-style cast from \'int\' to \'DelCtor\' uses deleted function"}
Line 734: Line 735:
},
},
["err_ovl_deleted_init"]={
["err_ovl_deleted_init"]={
[b]="err_ovl_deleted_init",
[d]="err_ovl_deleted_init",
[j]={{nil,x,"call to deleted constructor of %0"},{u,nil,"call to %select{unavailable|deleted}0 constructor of %1"}},
[e]={{nil,x,"call to deleted constructor of %0"},{u,nil,"call to %select{unavailable|deleted}0 constructor of %1"}},
[i]={{nil,x,"call to deleted constructor of A"},{u,nil,{"call to ",{Zb,ac}," constructor of B"}}},
[f]={{nil,x,"call to deleted constructor of A"},{u,nil,{"call to ",{fc,ec}," constructor of B"}}},
[h]=k,
[g]=k,
[c]="call to deleted constructor of (.*?)",
[h]="call to deleted constructor of (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{P,9922,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ListConstructorOverloadFailed:\n  case FK_ConstructorOverloadFailed: {\n    // ...\n    case OR_Deleted: {\n      // ...\n      if (Ovl != OR_Deleted) {\n        S.Diag(Kind.getLocation(), diag::err_ovl_deleted_init) << DestType << ArgsRange;"},{P,9936,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ListConstructorOverloadFailed:\n  case FK_ConstructorOverloadFailed: {\n    // ...\n    case OR_Deleted: {\n      // ...\n      // If this is a defaulted or implicitly-declared function, then\n      // it was implicitly deleted. Make it clear that the deletion was\n      // implicit.\n      if (S.isImplicitlyDeleted(Best->Function))\n      // ...\n      else\n        S.Diag(Kind.getLocation(), diag::err_ovl_deleted_init) << DestType << ArgsRange;"}},
[i]={{P,9922,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ListConstructorOverloadFailed:\n  case FK_ConstructorOverloadFailed: {\n    // ...\n    case OR_Deleted: {\n      // ...\n      if (Ovl != OR_Deleted) {\n        S.Diag(Kind.getLocation(), diag::err_ovl_deleted_init) << DestType << ArgsRange;"},{P,9936,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ListConstructorOverloadFailed:\n  case FK_ConstructorOverloadFailed: {\n    // ...\n    case OR_Deleted: {\n      // ...\n      // If this is a defaulted or implicitly-declared function, then\n      // it was implicitly deleted. Make it clear that the deletion was\n      // implicit.\n      if (S.isImplicitlyDeleted(Best->Function))\n      // ...\n      else\n        S.Diag(Kind.getLocation(), diag::err_ovl_deleted_init) << DestType << ArgsRange;"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx11-call-to-deleted-constructor.cpp"]={"clang/test/SemaCXX/cxx11-call-to-deleted-constructor.cpp:37:12: error: call to deleted constructor of \'Matrix<double> &&\'"}
["clang/test/SemaCXX/cxx11-call-to-deleted-constructor.cpp"]={"clang/test/SemaCXX/cxx11-call-to-deleted-constructor.cpp:37:12: error: call to deleted constructor of \'Matrix<double> &&\'"}
Line 748: Line 749:
},
},
["err_ovl_deleted_member_call"]={
["err_ovl_deleted_member_call"]={
[b]="err_ovl_deleted_member_call",
[d]="err_ovl_deleted_member_call",
[j]={{nil,x,"call to deleted member function %0"},{u,nil,"call to %select{unavailable|deleted}0 member function %1%2"}},
[e]={{nil,x,"call to deleted member function %0"},{u,nil,"call to %select{unavailable|deleted}0 member function %1%2"}},
[i]={{nil,x,"call to deleted member function A"},{u,nil,{"call to ",{Zb,ac}," member function BC"}}},
[f]={{nil,x,"call to deleted member function A"},{u,nil,{"call to ",{fc,ec}," member function BC"}}},
[h]=k,
[g]=k,
[c]="call to deleted member function (.*?)",
[h]="call to deleted member function (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{E,14838,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  if (isa<MemberExpr>(NakedMemExpr)) {\n  // ...\n  } else {\n    // ...\n    case OR_Deleted:\n      CandidateSet.NoteCandidates(PartialDiagnosticAt(UnresExpr->getMemberLoc(), PDiag(diag::err_ovl_deleted_member_call) << DeclName << MemExprE->getSourceRange()), *this, OCD_AllCandidates, Args);"}},
[i]={{E,14838,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  if (isa<MemberExpr>(NakedMemExpr)) {\n  // ...\n  } else {\n    // ...\n    case OR_Deleted:\n      CandidateSet.NoteCandidates(PartialDiagnosticAt(UnresExpr->getMemberLoc(), PDiag(diag::err_ovl_deleted_member_call) << DeclName << MemExprE->getSourceRange()), *this, OCD_AllCandidates, Args);"}},
[l]={
[l]={
["clang/test/SemaCXX/co_await-range-for.cpp"]={"clang/test/SemaCXX/co_await-range-for.cpp:53:23: error: call to deleted member function \'await_transform\'","clang/test/SemaCXX/co_await-range-for.cpp:75:23: error: call to deleted member function \'await_transform\'","clang/test/SemaCXX/co_await-range-for.cpp:82:23: error: call to deleted member function \'await_transform\'"}
["clang/test/SemaCXX/co_await-range-for.cpp"]={"clang/test/SemaCXX/co_await-range-for.cpp:53:23: error: call to deleted member function \'await_transform\'","clang/test/SemaCXX/co_await-range-for.cpp:75:23: error: call to deleted member function \'await_transform\'","clang/test/SemaCXX/co_await-range-for.cpp:82:23: error: call to deleted member function \'await_transform\'"}
Line 762: Line 763:
},
},
["err_ovl_deleted_object_call"]={
["err_ovl_deleted_object_call"]={
[b]="err_ovl_deleted_object_call",
[d]="err_ovl_deleted_object_call",
[j]={{nil,x,"call to deleted function call operator in type %0"},{u,nil,"call to %select{unavailable|deleted}0 function call operator in type %1%2"}},
[e]={{nil,x,"call to deleted function call operator in type %0"},{u,nil,"call to %select{unavailable|deleted}0 function call operator in type %1%2"}},
[i]={{nil,x,"call to deleted function call operator in type A"},{u,nil,{"call to ",{Zb,ac}," function call operator in type BC"}}},
[f]={{nil,x,"call to deleted function call operator in type A"},{u,nil,{"call to ",{fc,ec}," function call operator in type BC"}}},
[h]=k,
[g]=k,
[c]="call to deleted function call operator in type (.*?)",
[h]="call to deleted function call operator in type (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{E,15090,"/// BuildCallToObjectOfClassType - Build a call to an object of class\n/// type (C++ [over.call.object]), which can end up invoking an\n/// overloaded function call operator (@c operator()) or performing a\n/// user-defined conversion on the object argument.\nExprResult Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc) {\n  // ...\n  case OR_Deleted:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(Object.get()->getBeginLoc(), PDiag(diag::err_ovl_deleted_object_call) << Object.get()->getType() << Object.get()->getSourceRange()), *this, OCD_AllCandidates, Args);"}}
[i]={{E,15090,"/// BuildCallToObjectOfClassType - Build a call to an object of class\n/// type (C++ [over.call.object]), which can end up invoking an\n/// overloaded function call operator (@c operator()) or performing a\n/// user-defined conversion on the object argument.\nExprResult Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc) {\n  // ...\n  case OR_Deleted:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(Object.get()->getBeginLoc(), PDiag(diag::err_ovl_deleted_object_call) << Object.get()->getType() << Object.get()->getSourceRange()), *this, OCD_AllCandidates, Args);"}}
},
},
["err_ovl_deleted_oper"]={
["err_ovl_deleted_oper"]={
[b]="err_ovl_deleted_oper",
[d]="err_ovl_deleted_oper",
[j]={{nil,x,"overload resolution selected deleted operator \'%0\'"},{u,nil,"overload resolution selected %select{unavailable|deleted}0 operator \'%1\'%2"}},
[e]={{nil,x,"overload resolution selected deleted operator \'%0\'"},{u,nil,"overload resolution selected %select{unavailable|deleted}0 operator \'%1\'%2"}},
[i]={{nil,x,"overload resolution selected deleted operator \'A\'"},{u,nil,{"overload resolution selected ",{Zb,ac}," operator \'B\'C"}}},
[f]={{nil,x,"overload resolution selected deleted operator \'A\'"},{u,nil,{"overload resolution selected ",{fc,ec}," operator \'B\'C"}}},
[h]=k,
[g]=k,
[c]="overload resolution selected deleted operator \'(.*?)\'",
[h]="overload resolution selected deleted operator \'(.*?)\'",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{E,13805,"/// Create a unary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'*\').\n///\n/// \\param Opc The UnaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedUnaryOp().\n///\n/// \\param Input The input argument.\nExprResult Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *Input, bool PerformADL) {\n  // ...\n  case OR_Deleted:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_deleted_oper) << UnaryOperator::getOpcodeStr(Opc) << Input->getSourceRange()), *this, OCD_AllCandidates, ArgsArray, UnaryOperator::getOpcodeStr(Opc), OpLoc);"},{E,14314,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_Deleted:\n    // ...\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_deleted_oper) << getOperatorSpelling(Best->Function->getDeclName().getCXXOverloadedOperator()) << Args[0]->getSourceRange() << Args[1]->getSourceRange()), *this, OCD_AllCandidates, Args, BinaryOperator::getOpcodeStr(Opc), OpLoc);"},{E,14634,"ExprResult Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, SourceLocation RLoc, Expr *Base, MultiExprArg ArgExpr) {\n  // ...\n  case OR_Deleted:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(LLoc, PDiag(diag::err_ovl_deleted_oper) << \"[]\" << Args[0]->getSourceRange() << Range), *this, OCD_AllCandidates, Args, \"[]\", LLoc);"},{E,15297,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  // ...\n  case OR_Deleted:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_deleted_oper) << \"->\" << Base->getSourceRange()), *this, OCD_AllCandidates, Base);"}},
[i]={{E,13805,"/// Create a unary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'*\').\n///\n/// \\param Opc The UnaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedUnaryOp().\n///\n/// \\param Input The input argument.\nExprResult Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *Input, bool PerformADL) {\n  // ...\n  case OR_Deleted:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_deleted_oper) << UnaryOperator::getOpcodeStr(Opc) << Input->getSourceRange()), *this, OCD_AllCandidates, ArgsArray, UnaryOperator::getOpcodeStr(Opc), OpLoc);"},{E,14314,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_Deleted:\n    // ...\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_deleted_oper) << getOperatorSpelling(Best->Function->getDeclName().getCXXOverloadedOperator()) << Args[0]->getSourceRange() << Args[1]->getSourceRange()), *this, OCD_AllCandidates, Args, BinaryOperator::getOpcodeStr(Opc), OpLoc);"},{E,14634,"ExprResult Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, SourceLocation RLoc, Expr *Base, MultiExprArg ArgExpr) {\n  // ...\n  case OR_Deleted:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(LLoc, PDiag(diag::err_ovl_deleted_oper) << \"[]\" << Args[0]->getSourceRange() << Range), *this, OCD_AllCandidates, Args, \"[]\", LLoc);"},{E,15297,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  // ...\n  case OR_Deleted:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_deleted_oper) << \"->\" << Base->getSourceRange()), *this, OCD_AllCandidates, Base);"}},
[l]={
[l]={
["clang/test/SemaCXX/rval-references-examples.cpp"]={"clang/test/SemaCXX/rval-references-examples.cpp:80:6: error: overload resolution selected deleted operator \'=\'"}
["clang/test/SemaCXX/rval-references-examples.cpp"]={"clang/test/SemaCXX/rval-references-examples.cpp:80:6: error: overload resolution selected deleted operator \'=\'"}
Line 787: Line 788:
},
},
["err_ovl_deleted_special_init"]={
["err_ovl_deleted_special_init"]={
[b]="err_ovl_deleted_special_init",
[d]="err_ovl_deleted_special_init",
[j]="call to implicitly-deleted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function}0 of %1",
[e]="call to implicitly-deleted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function}0 of %1",
[i]={{nil,nil,{"call to implicitly-deleted ",{"default constructor","copy constructor","move constructor","copy assignment operator","move assignment operator","destructor","function"}," of B"}}},
[f]={{nil,nil,{"call to implicitly-deleted ",{"default constructor","copy constructor","move constructor","copy assignment operator","move assignment operator","destructor","function"}," of B"}}},
[h]=k,
[g]=k,
[c]="call to implicitly\\-deleted (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function) of (.*?)",
[h]="call to implicitly\\-deleted (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function) of (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"74f7d50f6a5b",1329334432,"When overload resolution picks an implicitly-deleted special member","When overload resolution picks an implicitly-deleted special member\nfunction, provide a specialized diagnostic that indicates the kind of\nspecial member function (default constructor, copy assignment\noperator, etc.) and that it was implicitly deleted. Add a hook where\nwe can provide more detailed information later.\n\nllvm-svn: 150611"},
[j]={"74f7d50f6a5b",1329334432,"When overload resolution picks an implicitly-deleted special member","When overload resolution picks an implicitly-deleted special member\nfunction, provide a specialized diagnostic that indicates the kind of\nspecial member function (default constructor, copy assignment\noperator, etc.) and that it was implicitly deleted. Add a hook where\nwe can provide more detailed information later.\n\nllvm-svn: 150611"},
[d]={{P,9932,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ListConstructorOverloadFailed:\n  case FK_ConstructorOverloadFailed: {\n    // ...\n    case OR_Deleted: {\n      // ...\n      // If this is a defaulted or implicitly-declared function, then\n      // it was implicitly deleted. Make it clear that the deletion was\n      // implicit.\n      if (S.isImplicitlyDeleted(Best->Function))\n        S.Diag(Kind.getLocation(), diag::err_ovl_deleted_special_init) << S.getSpecialMember(cast<CXXMethodDecl>(Best->Function)) << DestType << ArgsRange;"}},
[i]={{P,9932,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ListConstructorOverloadFailed:\n  case FK_ConstructorOverloadFailed: {\n    // ...\n    case OR_Deleted: {\n      // ...\n      // If this is a defaulted or implicitly-declared function, then\n      // it was implicitly deleted. Make it clear that the deletion was\n      // implicit.\n      if (S.isImplicitlyDeleted(Best->Function))\n        S.Diag(Kind.getLocation(), diag::err_ovl_deleted_special_init) << S.getSpecialMember(cast<CXXMethodDecl>(Best->Function)) << DestType << ArgsRange;"}},
[l]={
[l]={
["clang/test/SemaCXX/dr1301.cpp"]={"clang/test/SemaCXX/dr1301.cpp:17:9: error: call to implicitly-deleted default constructor of \'C\'","clang/test/SemaCXX/dr1301.cpp:23:9: error: call to implicitly-deleted default constructor of \'D\'","clang/test/SemaCXX/dr1301.cpp:40:9: error: call to implicitly-deleted default constructor of \'G\'","clang/test/SemaCXX/dr1301.cpp:52:9: error: call to implicitly-deleted default constructor of \'I\'","clang/test/SemaCXX/dr1301.cpp:66:10: error: call to implicitly-deleted default constructor of \'K\'","clang/test/SemaCXX/dr1301.cpp:67:10: error: call to implicitly-deleted default constructor of \'K\'"}
["clang/test/SemaCXX/dr1301.cpp"]={"clang/test/SemaCXX/dr1301.cpp:17:9: error: call to implicitly-deleted default constructor of \'C\'","clang/test/SemaCXX/dr1301.cpp:23:9: error: call to implicitly-deleted default constructor of \'D\'","clang/test/SemaCXX/dr1301.cpp:40:9: error: call to implicitly-deleted default constructor of \'G\'","clang/test/SemaCXX/dr1301.cpp:52:9: error: call to implicitly-deleted default constructor of \'I\'","clang/test/SemaCXX/dr1301.cpp:66:10: error: call to implicitly-deleted default constructor of \'K\'","clang/test/SemaCXX/dr1301.cpp:67:10: error: call to implicitly-deleted default constructor of \'K\'"}
Line 801: Line 802:
},
},
["err_ovl_deleted_special_oper"]={
["err_ovl_deleted_special_oper"]={
[b]="err_ovl_deleted_special_oper",
[d]="err_ovl_deleted_special_oper",
[j]="object of type %0 cannot be %select{constructed|copied|moved|assigned|assigned|destroyed}1 because its %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}1 is implicitly deleted",
[e]="object of type %0 cannot be %select{constructed|copied|moved|assigned|assigned|destroyed}1 because its %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}1 is implicitly deleted",
[i]={{nil,nil,{"object of type A cannot be ",{"constructed","copied","moved","assigned","assigned","destroyed"}," because its ",{"default constructor","copy constructor","move constructor","copy assignment operator","move assignment operator","destructor"}," is implicitly deleted"}}},
[f]={{nil,nil,{"object of type A cannot be ",{"constructed","copied","moved","assigned","assigned","destroyed"}," because its ",{"default constructor","copy constructor","move constructor","copy assignment operator","move assignment operator","destructor"}," is implicitly deleted"}}},
[h]=k,
[g]=k,
[c]="object of type (.*?) cannot be (?:constructed|copied|moved|assigned|assigned|destroyed) because its (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) is implicitly deleted",
[h]="object of type (.*?) cannot be (?:constructed|copied|moved|assigned|assigned|destroyed) because its (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) is implicitly deleted",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"74f7d50f6a5b",1329334432,"When overload resolution picks an implicitly-deleted special member","When overload resolution picks an implicitly-deleted special member\nfunction, provide a specialized diagnostic that indicates the kind of\nspecial member function (default constructor, copy assignment\noperator, etc.) and that it was implicitly deleted. Add a hook where\nwe can provide more detailed information later.\n\nllvm-svn: 150611"},
[j]={"74f7d50f6a5b",1329334432,"When overload resolution picks an implicitly-deleted special member","When overload resolution picks an implicitly-deleted special member\nfunction, provide a specialized diagnostic that indicates the kind of\nspecial member function (default constructor, copy assignment\noperator, etc.) and that it was implicitly deleted. Add a hook where\nwe can provide more detailed information later.\n\nllvm-svn: 150611"},
[d]={{E,14299,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_Deleted:\n    if (isImplicitlyDeleted(Best->Function)) {\n      // ...\n      if (DFK.isSpecialMember()) {\n        Diag(OpLoc, diag::err_ovl_deleted_special_oper) << Args[0]->getType() << DFK.asSpecialMember();"}},
[i]={{E,14299,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_Deleted:\n    if (isImplicitlyDeleted(Best->Function)) {\n      // ...\n      if (DFK.isSpecialMember()) {\n        Diag(OpLoc, diag::err_ovl_deleted_special_oper) << Args[0]->getType() << DFK.asSpecialMember();"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:16:11: error: object of type \'(lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:10:18)\' cannot be assigned because its copy assignment operator is implicitly deleted","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:19:11: error: object of type \'(lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:10:18)\' cannot be assigned because its copy assignment operator is implicitly deleted"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:16:11: error: object of type \'(lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:10:18)\' cannot be assigned because its copy assignment operator is implicitly deleted","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:19:11: error: object of type \'(lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:10:18)\' cannot be assigned because its copy assignment operator is implicitly deleted"}
Line 815: Line 816:
},
},
["err_ovl_diff_return_type"]={
["err_ovl_diff_return_type"]={
[b]="err_ovl_diff_return_type",
[d]="err_ovl_diff_return_type",
[j]="functions that differ only in their return type cannot be overloaded",
[e]="functions that differ only in their return type cannot be overloaded",
[i]="functions that differ only in their return type cannot be overloaded",
[f]="functions that differ only in their return type cannot be overloaded",
[h]=k,
[g]=k,
[c]="functions that differ only in their return type cannot be overloaded",
[h]="functions that differ only in their return type cannot be overloaded",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{D,3939,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    if (!Context.hasSameType(OldDeclaredReturnType, NewDeclaredReturnType) && canFullyTypeCheckRedeclaration(New, Old, NewDeclaredReturnType, OldDeclaredReturnType)) {\n      // ...\n      if (ResQT.isNull()) {\n        if (New->isCXXClassMember() && New->isOutOfLine())\n        // ...\n        else\n          Diag(New->getLocation(), diag::err_ovl_diff_return_type) << New->getReturnTypeSourceRange();"}},
[i]={{D,3939,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    if (!Context.hasSameType(OldDeclaredReturnType, NewDeclaredReturnType) && canFullyTypeCheckRedeclaration(New, Old, NewDeclaredReturnType, OldDeclaredReturnType)) {\n      // ...\n      if (ResQT.isNull()) {\n        if (New->isCXXClassMember() && New->isOutOfLine())\n        // ...\n        else\n          Diag(New->getLocation(), diag::err_ovl_diff_return_type) << New->getReturnTypeSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:163:14: error: functions that differ only in their return type cannot be overloaded","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:174:9: error: functions that differ only in their return type cannot be overloaded"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:163:14: error: functions that differ only in their return type cannot be overloaded","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:174:9: error: functions that differ only in their return type cannot be overloaded"}
Line 829: Line 830:
},
},
["err_ovl_no_conversion_in_cast"]={
["err_ovl_no_conversion_in_cast"]={
[b]="err_ovl_no_conversion_in_cast",
[d]="err_ovl_no_conversion_in_cast",
[j]="cannot convert %1 to %2 without a conversion operator",
[e]="cannot convert %1 to %2 without a conversion operator",
[i]="cannot convert B to C without a conversion operator",
[f]="cannot convert B to C without a conversion operator",
[h]=k,
[g]=k,
[c]="cannot convert (.*?) to (.*?) without a conversion operator",
[h]="cannot convert (.*?) to (.*?) without a conversion operator",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"909acf820969",1297708450,"Provide overload diagnostics when explicit casts involving class types fail.","Provide overload diagnostics when explicit casts involving class types fail.\nPR8626.\n\nllvm-svn: 125506"},
[j]={"909acf820969",1297708450,"Provide overload diagnostics when explicit casts involving class types fail.","Provide overload diagnostics when explicit casts involving class types fail.\nPR8626.\n\nllvm-svn: 125506"},
[d]={{"clang/lib/Sema/SemaCast.cpp",491,"/// Try to diagnose a failed overloaded cast.  Returns true if\n/// diagnostics were emitted.\nstatic bool tryDiagnoseOverloadedCast(Sema &S, CastType CT, SourceRange range, Expr *src, QualType destType, bool listInitialization) {\n  // ...\n  case OR_No_Viable_Function:\n    if (candidates.empty())\n      msg = diag::err_ovl_no_conversion_in_cast;"}},
[i]={{"clang/lib/Sema/SemaCast.cpp",491,"/// Try to diagnose a failed overloaded cast.  Returns true if\n/// diagnostics were emitted.\nstatic bool tryDiagnoseOverloadedCast(Sema &S, CastType CT, SourceRange range, Expr *src, QualType destType, bool listInitialization) {\n  // ...\n  case OR_No_Viable_Function:\n    if (candidates.empty())\n      msg = diag::err_ovl_no_conversion_in_cast;"}},
[l]={
[l]={
["clang/test/SemaObjCXX/cstyle-cast.mm"]={"clang/test/SemaObjCXX/cstyle-cast.mm:21:3: error: cannot convert \'X\' to \'id\' without a conversion operator"}
["clang/test/SemaObjCXX/cstyle-cast.mm"]={"clang/test/SemaObjCXX/cstyle-cast.mm:21:3: error: cannot convert \'X\' to \'id\' without a conversion operator"}
Line 843: Line 844:
},
},
["err_ovl_no_oper"]={
["err_ovl_no_oper"]={
[b]="err_ovl_no_oper",
[d]="err_ovl_no_oper",
[j]="type %0 does not provide a %select{subscript|call}1 operator",
[e]="type %0 does not provide a %select{subscript|call}1 operator",
[i]={{nil,nil,{"type A does not provide a ",{"subscript","call"}," operator"}}},
[f]={{nil,nil,{"type A does not provide a ",{"subscript","call"}," operator"}}},
[h]=k,
[g]=k,
[c]="type (.*?) does not provide a (?:subscript|call) operator",
[h]="type (.*?) does not provide a (?:subscript|call) operator",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"0237485287e9",1262829855,"Improve the lead diagnostic for C++ object subscript expressions with","Improve the lead diagnostic for C++ object subscript expressions with\nno viable overloads.  Use a different message when the class provides\nno operator[] overloads at all; use it for operator(), too.\n\nPartially addresses PR 5900.\n\nllvm-svn: 92894"},
[j]={"0237485287e9",1262829855,"Improve the lead diagnostic for C++ object subscript expressions with","Improve the lead diagnostic for C++ object subscript expressions with\nno viable overloads.  Use a different message when the class provides\nno operator[] overloads at all; use it for operator(), too.\n\nPartially addresses PR 5900.\n\nllvm-svn: 92894"},
[d]={{E,14604,"ExprResult Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, SourceLocation RLoc, Expr *Base, MultiExprArg ArgExpr) {\n  // ...\n  case OR_No_Viable_Function: {\n    PartialDiagnostic PD = CandidateSet.empty() ? (PDiag(diag::err_ovl_no_oper) << Args[0]->getType() << /*subscript*/ 0 << Args[0]->getSourceRange() << Range) : (PDiag(diag::err_ovl_no_viable_subscript) << Args[0]->getType() << Args[0]->getSourceRange() << Range);"},{E,15068,"/// BuildCallToObjectOfClassType - Build a call to an object of class\n/// type (C++ [over.call.object]), which can end up invoking an\n/// overloaded function call operator (@c operator()) or performing a\n/// user-defined conversion on the object argument.\nExprResult Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc) {\n  // ...\n  case OR_No_Viable_Function: {\n    PartialDiagnostic PD = CandidateSet.empty() ? (PDiag(diag::err_ovl_no_oper) << Object.get()->getType() << /*call*/ 1 << Object.get()->getSourceRange()) : (PDiag(diag::err_ovl_no_viable_object_call) << Object.get()->getType() << Object.get()->getSourceRange());"}},
[i]={{E,14604,"ExprResult Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, SourceLocation RLoc, Expr *Base, MultiExprArg ArgExpr) {\n  // ...\n  case OR_No_Viable_Function: {\n    PartialDiagnostic PD = CandidateSet.empty() ? (PDiag(diag::err_ovl_no_oper) << Args[0]->getType() << /*subscript*/ 0 << Args[0]->getSourceRange() << Range) : (PDiag(diag::err_ovl_no_viable_subscript) << Args[0]->getType() << Args[0]->getSourceRange() << Range);"},{E,15068,"/// BuildCallToObjectOfClassType - Build a call to an object of class\n/// type (C++ [over.call.object]), which can end up invoking an\n/// overloaded function call operator (@c operator()) or performing a\n/// user-defined conversion on the object argument.\nExprResult Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc) {\n  // ...\n  case OR_No_Viable_Function: {\n    PartialDiagnostic PD = CandidateSet.empty() ? (PDiag(diag::err_ovl_no_oper) << Object.get()->getType() << /*call*/ 1 << Object.get()->getSourceRange()) : (PDiag(diag::err_ovl_no_viable_object_call) << Object.get()->getType() << Object.get()->getSourceRange());"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx2b-overloaded-operator.cpp"]={"clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:101:13: error: type \'int[3]\' does not provide a subscript operator","clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:101:13: error: type \'int[3]\' does not provide a subscript operator"}
["clang/test/SemaCXX/cxx2b-overloaded-operator.cpp"]={"clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:101:13: error: type \'int[3]\' does not provide a subscript operator","clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:101:13: error: type \'int[3]\' does not provide a subscript operator"}
Line 857: Line 858:
},
},
["err_ovl_no_viable_conversion_in_cast"]={
["err_ovl_no_viable_conversion_in_cast"]={
[b]="err_ovl_no_viable_conversion_in_cast",
[d]="err_ovl_no_viable_conversion_in_cast",
[j]={{nil,t,"no matching conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2"},{o,nil,"no matching conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2"}},
[e]={{nil,t,"no matching conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2"},{o,nil,"no matching conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2"}},
[i]={{nil,t,{"no matching conversion for ",{a,xb,Nb,Qb,Mb,Sb,a}," from B to C"}},{o,nil,{"no matching conversion for ",{a,xb,Nb,Qb,Mb,Sb}," from B to C"}}},
[f]={{nil,t,{"no matching conversion for ",{a,Eb,Tb,Sb,Qb,Pb,a}," from B to C"}},{o,nil,{"no matching conversion for ",{a,Eb,Tb,Sb,Qb,Pb}," from B to C"}}},
[h]=k,
[g]=k,
[c]="no matching conversion for (?:|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?)",
[h]="no matching conversion for (?:|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"909acf820969",1297708450,"Provide overload diagnostics when explicit casts involving class types fail.","Provide overload diagnostics when explicit casts involving class types fail.\nPR8626.\n\nllvm-svn: 125506"},
[j]={"909acf820969",1297708450,"Provide overload diagnostics when explicit casts involving class types fail.","Provide overload diagnostics when explicit casts involving class types fail.\nPR8626.\n\nllvm-svn: 125506"},
[d]={{"clang/lib/Sema/SemaCast.cpp",493,"/// Try to diagnose a failed overloaded cast.  Returns true if\n/// diagnostics were emitted.\nstatic bool tryDiagnoseOverloadedCast(Sema &S, CastType CT, SourceRange range, Expr *src, QualType destType, bool listInitialization) {\n  // ...\n  case OR_No_Viable_Function:\n    if (candidates.empty())\n    // ...\n    else\n      msg = diag::err_ovl_no_viable_conversion_in_cast;"}},
[i]={{"clang/lib/Sema/SemaCast.cpp",493,"/// Try to diagnose a failed overloaded cast.  Returns true if\n/// diagnostics were emitted.\nstatic bool tryDiagnoseOverloadedCast(Sema &S, CastType CT, SourceRange range, Expr *src, QualType destType, bool listInitialization) {\n  // ...\n  case OR_No_Viable_Function:\n    if (candidates.empty())\n    // ...\n    else\n      msg = diag::err_ovl_no_viable_conversion_in_cast;"}},
[l]={
[l]={
["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:36:9: error: no matching conversion for C-style cast from \'__v2si\' (vector of 2 \'int\' values) to \'S\'"}
["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:36:9: error: no matching conversion for C-style cast from \'__v2si\' (vector of 2 \'int\' values) to \'S\'"}
Line 871: Line 872:
},
},
["err_ovl_no_viable_function_in_call"]={
["err_ovl_no_viable_function_in_call"]={
[b]="err_ovl_no_viable_function_in_call",
[d]="err_ovl_no_viable_function_in_call",
[j]="no matching function for call to %0",
[e]="no matching function for call to %0",
[i]="no matching function for call to A",
[f]="no matching function for call to A",
[h]=k,
[g]=k,
[c]="no matching function for call to (.*?)",
[h]="no matching function for call to (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{O,6910,"static void checkDirectCallValidity(Sema &S, const Expr *Fn, FunctionDecl *Callee, MultiExprArg ArgExprs) {\n  // ...\n  if (const EnableIfAttr *Attr = S.CheckEnableIf(Callee, Fn->getBeginLoc(), ArgExprs, true)) {\n    S.Diag(Fn->getBeginLoc(), isa<CXXMethodDecl>(Callee) ? diag::err_ovl_no_viable_member_function_in_call : diag::err_ovl_no_viable_function_in_call) << Callee << Callee->getSourceRange();"},{Q,2604,"static bool resolveAllocationOverload(Sema &S, LookupResult &R, SourceRange Range, SmallVectorImpl<Expr *> &Args, bool &PassAlignment, FunctionDecl *&Operator, OverloadCandidateSet *AlignedCandidates, Expr *AlignArg, bool Diagnose) {\n  // ...\n  case OR_No_Viable_Function:\n    // ...\n    if (Diagnose) {\n      // ...\n      S.Diag(R.getNameLoc(), diag::err_ovl_no_viable_function_in_call) << R.getLookupName() << Range;"},{Q,3873,"static bool resolveBuiltinNewDeleteOverload(Sema &S, CallExpr *TheCall, bool IsDelete, FunctionDecl *&Operator) {\n  // ...\n  case OR_No_Viable_Function:\n    Candidates.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), S.PDiag(diag::err_ovl_no_viable_function_in_call) << R.getLookupName() << Range), S, OCD_AllCandidates, Args);"},{E,13527,"/// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns\n/// the completed call expression. If overload resolution fails, emits\n/// diagnostics and returns ExprError()\nstatic ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, OverloadCandidateSet *CandidateSet, OverloadCandidateSet::iterator *Best, OverloadingResult OverloadResult, bool AllowTypoCorrection) {\n  // ...\n  case OR_No_Viable_Function: {\n    // ...\n    CandidateSet->NoteCandidates(PartialDiagnosticAt(Fn->getBeginLoc(), SemaRef.PDiag(diag::err_ovl_no_viable_function_in_call) << ULE->getName() << Fn->getSourceRange()), SemaRef, OCD_AllCandidates, Args);"},{E,15364,"/// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to\n/// a literal operator described by the provided lookup results.\nExprResult Sema::BuildLiteralOperatorCall(LookupResult &R, DeclarationNameInfo &SuffixInfo, ArrayRef<Expr *> Args, SourceLocation LitEndLoc, TemplateArgumentListInfo *TemplateArgs) {\n  // ...\n  case OR_No_Viable_Function:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(UDSuffixLoc, PDiag(diag::err_ovl_no_viable_function_in_call) << R.getLookupName()), *this, OCD_AllCandidates, Args);"}},
[i]={{O,6910,"static void checkDirectCallValidity(Sema &S, const Expr *Fn, FunctionDecl *Callee, MultiExprArg ArgExprs) {\n  // ...\n  if (const EnableIfAttr *Attr = S.CheckEnableIf(Callee, Fn->getBeginLoc(), ArgExprs, true)) {\n    S.Diag(Fn->getBeginLoc(), isa<CXXMethodDecl>(Callee) ? diag::err_ovl_no_viable_member_function_in_call : diag::err_ovl_no_viable_function_in_call) << Callee << Callee->getSourceRange();"},{Q,2604,"static bool resolveAllocationOverload(Sema &S, LookupResult &R, SourceRange Range, SmallVectorImpl<Expr *> &Args, bool &PassAlignment, FunctionDecl *&Operator, OverloadCandidateSet *AlignedCandidates, Expr *AlignArg, bool Diagnose) {\n  // ...\n  case OR_No_Viable_Function:\n    // ...\n    if (Diagnose) {\n      // ...\n      S.Diag(R.getNameLoc(), diag::err_ovl_no_viable_function_in_call) << R.getLookupName() << Range;"},{Q,3873,"static bool resolveBuiltinNewDeleteOverload(Sema &S, CallExpr *TheCall, bool IsDelete, FunctionDecl *&Operator) {\n  // ...\n  case OR_No_Viable_Function:\n    Candidates.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), S.PDiag(diag::err_ovl_no_viable_function_in_call) << R.getLookupName() << Range), S, OCD_AllCandidates, Args);"},{E,13527,"/// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns\n/// the completed call expression. If overload resolution fails, emits\n/// diagnostics and returns ExprError()\nstatic ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, OverloadCandidateSet *CandidateSet, OverloadCandidateSet::iterator *Best, OverloadingResult OverloadResult, bool AllowTypoCorrection) {\n  // ...\n  case OR_No_Viable_Function: {\n    // ...\n    CandidateSet->NoteCandidates(PartialDiagnosticAt(Fn->getBeginLoc(), SemaRef.PDiag(diag::err_ovl_no_viable_function_in_call) << ULE->getName() << Fn->getSourceRange()), SemaRef, OCD_AllCandidates, Args);"},{E,15364,"/// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to\n/// a literal operator described by the provided lookup results.\nExprResult Sema::BuildLiteralOperatorCall(LookupResult &R, DeclarationNameInfo &SuffixInfo, ArrayRef<Expr *> Args, SourceLocation LitEndLoc, TemplateArgumentListInfo *TemplateArgs) {\n  // ...\n  case OR_No_Viable_Function:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(UDSuffixLoc, PDiag(diag::err_ovl_no_viable_function_in_call) << R.getLookupName()), *this, OCD_AllCandidates, Args);"}},
[l]={
[l]={
["clang/test/SemaOpenCL/queue_t_overload.cl"]={"clang/test/SemaOpenCL/queue_t_overload.cl:10:3: error: no matching function for call to \'foo\'","clang/test/SemaOpenCL/queue_t_overload.cl:11:3: error: no matching function for call to \'foo\'"}
["clang/test/SemaOpenCL/queue_t_overload.cl"]={"clang/test/SemaOpenCL/queue_t_overload.cl:10:3: error: no matching function for call to \'foo\'","clang/test/SemaOpenCL/queue_t_overload.cl:11:3: error: no matching function for call to \'foo\'"}
Line 885: Line 886:
},
},
["err_ovl_no_viable_function_in_init"]={
["err_ovl_no_viable_function_in_init"]={
[b]="err_ovl_no_viable_function_in_init",
[d]="err_ovl_no_viable_function_in_init",
[j]="no matching constructor for initialization of %0",
[e]="no matching constructor for initialization of %0",
[i]="no matching constructor for initialization of A",
[f]="no matching constructor for initialization of A",
[h]=k,
[g]=k,
[c]="no matching constructor for initialization of (.*?)",
[h]="no matching constructor for initialization of (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{P,9912,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ListConstructorOverloadFailed:\n  case FK_ConstructorOverloadFailed: {\n    // ...\n    case OR_No_Viable_Function:\n      // ...\n      FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), S.PDiag(diag::err_ovl_no_viable_function_in_init) << DestType << ArgsRange), S, OCD_AllCandidates, Args);"}},
[i]={{P,9912,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ListConstructorOverloadFailed:\n  case FK_ConstructorOverloadFailed: {\n    // ...\n    case OR_No_Viable_Function:\n      // ...\n      FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), S.PDiag(diag::err_ovl_no_viable_function_in_init) << DestType << ArgsRange), S, OCD_AllCandidates, Args);"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:13:21: error: no matching constructor for initialization of \'decltype(lambda1)\' (aka \'(lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:10:18)\')"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:13:21: error: no matching constructor for initialization of \'decltype(lambda1)\' (aka \'(lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:10:18)\')"}
Line 899: Line 900:
},
},
["err_ovl_no_viable_literal_operator"]={
["err_ovl_no_viable_literal_operator"]={
[b]="err_ovl_no_viable_literal_operator",
[d]="err_ovl_no_viable_literal_operator",
[j]="no matching literal operator for call to %0%select{| with argument of type %2| with arguments of types %2 and %3}1%select{| or \'const char *\'}4%select{|, and no matching literal operator template}5",
[e]="no matching literal operator for call to %0%select{| with argument of type %2| with arguments of types %2 and %3}1%select{| or \'const char *\'}4%select{|, and no matching literal operator template}5",
[i]={{nil,nil,{"no matching literal operator for call to A",{a," with argument of type C"," with arguments of types C and D"},{a," or \'const char *\'"},{a,", and no matching literal operator template"}}}},
[f]={{nil,nil,{"no matching literal operator for call to A",{a," with argument of type C"," with arguments of types C and D"},{a," or \'const char *\'"},{a,", and no matching literal operator template"}}}},
[h]=k,
[g]=k,
[c]="no matching literal operator for call to (.*?)(?:| with argument of type (.*?)| with arguments of types (.*?) and (.*?))(?:| or \'const char \\*\')(?:|, and no matching literal operator template)",
[h]="no matching literal operator for call to (.*?)(?:| with argument of type (.*?)| with arguments of types (.*?) and (.*?))(?:| or \'const char \\*\')(?:|, and no matching literal operator template)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"bcc22fc4e1b2",1331280036,"Support for raw and template forms of numeric user-defined literals,","Support for raw and template forms of numeric user-defined literals,\nand lots of tidying up.\n\nllvm-svn: 152392"},
[j]={"bcc22fc4e1b2",1331280036,"Support for raw and template forms of numeric user-defined literals,","Support for raw and template forms of numeric user-defined literals,\nand lots of tidying up.\n\nllvm-svn: 152392"},
[d]={{"clang/lib/Sema/SemaLookup.cpp",3781,"/// LookupLiteralOperator - Determine which literal operator should be used for\n/// a user-defined literal, per C++11 [lex.ext].\n///\n/// Normal overload resolution is not used to select which literal operator to\n/// call for a user-defined literal. Look up the provided literal operator name,\n/// and filter the results to the appropriate set for the given argument types.\nSema::LiteralOperatorLookupResult Sema::LookupLiteralOperator(Scope *S, LookupResult &R, ArrayRef<QualType> ArgTys, bool AllowRaw, bool AllowTemplate, bool AllowStringTemplatePack, bool DiagnoseMissing, StringLiteral *StringLit) {\n  // ...\n  // Didn\'t find anything we could use.\n  if (DiagnoseMissing) {\n    Diag(R.getNameLoc(), diag::err_ovl_no_viable_literal_operator) << R.getLookupName() << (int)ArgTys.size() << ArgTys[0] << (ArgTys.size() == 2 ? ArgTys[1] : QualType()) << AllowRaw << (AllowTemplate || AllowStringTemplatePack);"}},
[i]={{"clang/lib/Sema/SemaLookup.cpp",3781,"/// LookupLiteralOperator - Determine which literal operator should be used for\n/// a user-defined literal, per C++11 [lex.ext].\n///\n/// Normal overload resolution is not used to select which literal operator to\n/// call for a user-defined literal. Look up the provided literal operator name,\n/// and filter the results to the appropriate set for the given argument types.\nSema::LiteralOperatorLookupResult Sema::LookupLiteralOperator(Scope *S, LookupResult &R, ArrayRef<QualType> ArgTys, bool AllowRaw, bool AllowTemplate, bool AllowStringTemplatePack, bool DiagnoseMissing, StringLiteral *StringLit) {\n  // ...\n  // Didn\'t find anything we could use.\n  if (DiagnoseMissing) {\n    Diag(R.getNameLoc(), diag::err_ovl_no_viable_literal_operator) << R.getLookupName() << (int)ArgTys.size() << ArgTys[0] << (ArgTys.size() == 2 ? ArgTys[1] : QualType()) << AllowRaw << (AllowTemplate || AllowStringTemplatePack);"}},
[l]={
[l]={
["clang/test/Lexer/half-literal.cpp"]={"clang/test/Lexer/half-literal.cpp:2:14: error: no matching literal operator for call to \'operator\"\"h\' with argument of type \'long double\' or \'const char *\', and no matching literal operator template"}
["clang/test/Lexer/half-literal.cpp"]={"clang/test/Lexer/half-literal.cpp:2:14: error: no matching literal operator for call to \'operator\"\"h\' with argument of type \'long double\' or \'const char *\', and no matching literal operator template"}
Line 913: Line 914:
},
},
["err_ovl_no_viable_member_function_in_call"]={
["err_ovl_no_viable_member_function_in_call"]={
[b]="err_ovl_no_viable_member_function_in_call",
[d]="err_ovl_no_viable_member_function_in_call",
[j]="no matching member function for call to %0",
[e]="no matching member function for call to %0",
[i]="no matching member function for call to A",
[f]="no matching member function for call to A",
[h]=k,
[g]=k,
[c]="no matching member function for call to (.*?)",
[h]="no matching member function for call to (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{O,6907,"static void checkDirectCallValidity(Sema &S, const Expr *Fn, FunctionDecl *Callee, MultiExprArg ArgExprs) {\n  // ...\n  if (const EnableIfAttr *Attr = S.CheckEnableIf(Callee, Fn->getBeginLoc(), ArgExprs, true)) {\n    S.Diag(Fn->getBeginLoc(), isa<CXXMethodDecl>(Callee) ? diag::err_ovl_no_viable_member_function_in_call : diag::err_ovl_no_viable_function_in_call) << Callee << Callee->getSourceRange();"},{E,14824,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  if (isa<MemberExpr>(NakedMemExpr)) {\n  // ...\n  } else {\n    // ...\n    case OR_No_Viable_Function:\n      CandidateSet.NoteCandidates(PartialDiagnosticAt(UnresExpr->getMemberLoc(), PDiag(diag::err_ovl_no_viable_member_function_in_call) << DeclName << MemExprE->getSourceRange()), *this, OCD_AllCandidates, Args);"},{E,14903,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  // In the case the method to call was not selected by the overloading\n  // resolution process, we still need to handle the enable_if attribute. Do\n  // that here, so it will not hide previous -- and more relevant -- errors.\n  if (auto *MemE = dyn_cast<MemberExpr>(NakedMemExpr)) {\n    if (const EnableIfAttr *Attr = CheckEnableIf(Method, LParenLoc, Args, true)) {\n      Diag(MemE->getMemberLoc(), diag::err_ovl_no_viable_member_function_in_call) << Method << Method->getSourceRange();"}},
[i]={{O,6907,"static void checkDirectCallValidity(Sema &S, const Expr *Fn, FunctionDecl *Callee, MultiExprArg ArgExprs) {\n  // ...\n  if (const EnableIfAttr *Attr = S.CheckEnableIf(Callee, Fn->getBeginLoc(), ArgExprs, true)) {\n    S.Diag(Fn->getBeginLoc(), isa<CXXMethodDecl>(Callee) ? diag::err_ovl_no_viable_member_function_in_call : diag::err_ovl_no_viable_function_in_call) << Callee << Callee->getSourceRange();"},{E,14824,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  if (isa<MemberExpr>(NakedMemExpr)) {\n  // ...\n  } else {\n    // ...\n    case OR_No_Viable_Function:\n      CandidateSet.NoteCandidates(PartialDiagnosticAt(UnresExpr->getMemberLoc(), PDiag(diag::err_ovl_no_viable_member_function_in_call) << DeclName << MemExprE->getSourceRange()), *this, OCD_AllCandidates, Args);"},{E,14903,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  // In the case the method to call was not selected by the overloading\n  // resolution process, we still need to handle the enable_if attribute. Do\n  // that here, so it will not hide previous -- and more relevant -- errors.\n  if (auto *MemE = dyn_cast<MemberExpr>(NakedMemExpr)) {\n    if (const EnableIfAttr *Attr = CheckEnableIf(Method, LParenLoc, Args, true)) {\n      Diag(MemE->getMemberLoc(), diag::err_ovl_no_viable_member_function_in_call) << Method << Method->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaOpenCLCXX/method-overload-address-space.clcpp"]={"clang/test/SemaOpenCLCXX/method-overload-address-space.clcpp:19:10: error: no matching member function for call to \'m1\'"}
["clang/test/SemaOpenCLCXX/method-overload-address-space.clcpp"]={"clang/test/SemaOpenCLCXX/method-overload-address-space.clcpp:19:10: error: no matching member function for call to \'m1\'"}
Line 927: Line 928:
},
},
["err_ovl_no_viable_object_call"]={
["err_ovl_no_viable_object_call"]={
[b]="err_ovl_no_viable_object_call",
[d]="err_ovl_no_viable_object_call",
[j]="no matching function for call to object of type %0",
[e]="no matching function for call to object of type %0",
[i]="no matching function for call to object of type A",
[f]="no matching function for call to object of type A",
[h]=k,
[g]=k,
[c]="no matching function for call to object of type (.*?)",
[h]="no matching function for call to object of type (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{E,15071,"/// BuildCallToObjectOfClassType - Build a call to an object of class\n/// type (C++ [over.call.object]), which can end up invoking an\n/// overloaded function call operator (@c operator()) or performing a\n/// user-defined conversion on the object argument.\nExprResult Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc) {\n  // ...\n  case OR_No_Viable_Function: {\n    PartialDiagnostic PD = CandidateSet.empty() ? (PDiag(diag::err_ovl_no_oper) << Object.get()->getType() << /*call*/ 1 << Object.get()->getSourceRange()) : (PDiag(diag::err_ovl_no_viable_object_call) << Object.get()->getType() << Object.get()->getSourceRange());"}},
[i]={{E,15071,"/// BuildCallToObjectOfClassType - Build a call to an object of class\n/// type (C++ [over.call.object]), which can end up invoking an\n/// overloaded function call operator (@c operator()) or performing a\n/// user-defined conversion on the object argument.\nExprResult Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc) {\n  // ...\n  case OR_No_Viable_Function: {\n    PartialDiagnostic PD = CandidateSet.empty() ? (PDiag(diag::err_ovl_no_oper) << Object.get()->getType() << /*call*/ 1 << Object.get()->getSourceRange()) : (PDiag(diag::err_ovl_no_viable_object_call) << Object.get()->getType() << Object.get()->getSourceRange());"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:31:3: error: no matching function for call to object of type \'const decltype(ml)\' (aka \'const (lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:27:13)\')","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:36:3: error: no matching function for call to object of type \'volatile decltype(l)\' (aka \'volatile (lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:22:12)\')","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:37:3: error: no matching function for call to object of type \'volatile decltype(ml)\' (aka \'volatile (lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:27:13)\')"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:31:3: error: no matching function for call to object of type \'const decltype(ml)\' (aka \'const (lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:27:13)\')","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:36:3: error: no matching function for call to object of type \'volatile decltype(l)\' (aka \'volatile (lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:22:12)\')","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:37:3: error: no matching function for call to object of type \'volatile decltype(ml)\' (aka \'volatile (lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:27:13)\')"}
Line 941: Line 942:
},
},
["err_ovl_no_viable_oper"]={
["err_ovl_no_viable_oper"]={
[b]="err_ovl_no_viable_oper",
[d]="err_ovl_no_viable_oper",
[j]="no viable overloaded \'%0\'",
[e]="no viable overloaded \'%0\'",
[i]="no viable overloaded \'A\'",
[f]="no viable overloaded \'A\'",
[h]=k,
[g]=k,
[c]="no viable overloaded \'(.*?)\'",
[h]="no viable overloaded \'(.*?)\'",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{E,14256,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_No_Viable_Function: {\n    // ...\n    if (Args[0]->getType()->isRecordType() && Opc >= BO_Assign && Opc <= BO_OrAssign) {\n      Diag(OpLoc, diag::err_ovl_no_viable_oper) << BinaryOperator::getOpcodeStr(Opc) << Args[0]->getSourceRange() << Args[1]->getSourceRange();"},{E,15282,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  // ...\n  case OR_No_Viable_Function: {\n    // ...\n    if (CandidateSet.empty()) {\n    // ...\n    } else\n      Diag(OpLoc, diag::err_ovl_no_viable_oper) << \"operator->\" << Base->getSourceRange();"}},
[i]={{E,14256,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_No_Viable_Function: {\n    // ...\n    if (Args[0]->getType()->isRecordType() && Opc >= BO_Assign && Opc <= BO_OrAssign) {\n      Diag(OpLoc, diag::err_ovl_no_viable_oper) << BinaryOperator::getOpcodeStr(Opc) << Args[0]->getSourceRange() << Args[1]->getSourceRange();"},{E,15282,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  // ...\n  case OR_No_Viable_Function: {\n    // ...\n    if (CandidateSet.empty()) {\n    // ...\n    } else\n      Diag(OpLoc, diag::err_ovl_no_viable_oper) << \"operator->\" << Base->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCUDA/implicit-member-target-inherited.cu"]={"clang/test/SemaCUDA/implicit-member-target-inherited.cu:172:6: error: no viable overloaded \'=\'","clang/test/SemaCUDA/implicit-member-target-inherited.cu:204:6: error: no viable overloaded \'=\'"}
["clang/test/SemaCUDA/implicit-member-target-inherited.cu"]={"clang/test/SemaCUDA/implicit-member-target-inherited.cu:172:6: error: no viable overloaded \'=\'","clang/test/SemaCUDA/implicit-member-target-inherited.cu:204:6: error: no viable overloaded \'=\'"}
Line 955: Line 956:
},
},
["err_ovl_no_viable_subscript"]={
["err_ovl_no_viable_subscript"]={
[b]="err_ovl_no_viable_subscript",
[d]="err_ovl_no_viable_subscript",
[j]="no viable overloaded operator[] for type %0",
[e]="no viable overloaded operator[] for type %0",
[i]="no viable overloaded operator[] for type A",
[f]="no viable overloaded operator[] for type A",
[h]=k,
[g]=k,
[c]="no viable overloaded operator\\[\\] for type (.*?)",
[h]="no viable overloaded operator\\[\\] for type (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"0237485287e9",1262829855,"Improve the lead diagnostic for C++ object subscript expressions with","Improve the lead diagnostic for C++ object subscript expressions with\nno viable overloads.  Use a different message when the class provides\nno operator[] overloads at all; use it for operator(), too.\n\nPartially addresses PR 5900.\n\nllvm-svn: 92894"},
[j]={"0237485287e9",1262829855,"Improve the lead diagnostic for C++ object subscript expressions with","Improve the lead diagnostic for C++ object subscript expressions with\nno viable overloads.  Use a different message when the class provides\nno operator[] overloads at all; use it for operator(), too.\n\nPartially addresses PR 5900.\n\nllvm-svn: 92894"},
[d]={{E,14607,"ExprResult Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, SourceLocation RLoc, Expr *Base, MultiExprArg ArgExpr) {\n  // ...\n  case OR_No_Viable_Function: {\n    PartialDiagnostic PD = CandidateSet.empty() ? (PDiag(diag::err_ovl_no_oper) << Args[0]->getType() << /*subscript*/ 0 << Args[0]->getSourceRange() << Range) : (PDiag(diag::err_ovl_no_viable_subscript) << Args[0]->getType() << Args[0]->getSourceRange() << Range);"}},
[i]={{E,14607,"ExprResult Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, SourceLocation RLoc, Expr *Base, MultiExprArg ArgExpr) {\n  // ...\n  case OR_No_Viable_Function: {\n    PartialDiagnostic PD = CandidateSet.empty() ? (PDiag(diag::err_ovl_no_oper) << Args[0]->getType() << /*subscript*/ 0 << Args[0]->getSourceRange() << Range) : (PDiag(diag::err_ovl_no_viable_subscript) << Args[0]->getType() << Args[0]->getSourceRange() << Range);"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx2b-overloaded-operator.cpp"]={"clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:11:6: error: no viable overloaded operator[] for type \'S\'","clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:20:20: error: no viable overloaded operator[] for type \'S\'","clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:65:29: error: no viable overloaded operator[] for type \'T1<int, int>\'"}
["clang/test/SemaCXX/cxx2b-overloaded-operator.cpp"]={"clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:11:6: error: no viable overloaded operator[] for type \'S\'","clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:20:20: error: no viable overloaded operator[] for type \'S\'","clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:65:29: error: no viable overloaded operator[] for type \'T1<int, int>\'"}
Line 969: Line 970:
},
},
["err_ovl_rewrite_equalequal_not_bool"]={
["err_ovl_rewrite_equalequal_not_bool"]={
[b]={{nil,o,"err_ovl_rewrite_equalequal_not_bool"}},
[d]={{nil,o,"err_ovl_rewrite_equalequal_not_bool"}},
[j]={{nil,o,"return type %0 of selected \'operator==\' function for rewritten \'%1\' comparison is not \'bool\'"}},
[e]={{nil,o,"return type %0 of selected \'operator==\' function for rewritten \'%1\' comparison is not \'bool\'"}},
[i]={{nil,o,"return type A of selected \'operator==\' function for rewritten \'B\' comparison is not \'bool\'"}},
[f]={{nil,o,"return type A of selected \'operator==\' function for rewritten \'B\' comparison is not \'bool\'"}},
[h]=k,
[g]=k,
[c]="return type (.*?) of selected \'operator\\=\\=\' function for rewritten \'(.*?)\' comparison is not \'bool\'",
[h]="return type (.*?) of selected \'operator\\=\\=\' function for rewritten \'(.*?)\' comparison is not \'bool\'",
[f]=a,
[b]=a,
[e]={{nil,o,m}},
[c]={{nil,o,m}},
[g]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[j]={"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"},
[d]={{E,14011,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_Success: {\n    // ...\n    if (FnDecl) {\n      // ...\n      // C++2a [over.match.oper]p9:\n      //  If a rewritten operator== candidate is selected by overload\n      //  resolution for an operator@, its return type shall be cv bool\n      if (Best->RewriteKind && ChosenOp == OO_EqualEqual && !FnDecl->getReturnType()->isBooleanType()) {\n        // ...\n        Diag(OpLoc, IsExtension ? diag::ext_ovl_rewrite_equalequal_not_bool : diag::err_ovl_rewrite_equalequal_not_bool) << FnDecl->getReturnType() << BinaryOperator::getOpcodeStr(Opc) << Args[0]->getSourceRange() << Args[1]->getSourceRange();"}},
[i]={{E,14011,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_Success: {\n    // ...\n    if (FnDecl) {\n      // ...\n      // C++2a [over.match.oper]p9:\n      //  If a rewritten operator== candidate is selected by overload\n      //  resolution for an operator@, its return type shall be cv bool\n      if (Best->RewriteKind && ChosenOp == OO_EqualEqual && !FnDecl->getReturnType()->isBooleanType()) {\n        // ...\n        Diag(OpLoc, IsExtension ? diag::ext_ovl_rewrite_equalequal_not_bool : diag::err_ovl_rewrite_equalequal_not_bool) << FnDecl->getReturnType() << BinaryOperator::getOpcodeStr(Opc) << Args[0]->getSourceRange() << Args[1]->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp"]={"clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp:9:14: error: return type \'double\' of selected \'operator==\' function for rewritten \'==\' comparison is not \'bool\'","clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp:10:14: error: return type \'double\' of selected \'operator==\' function for rewritten \'!=\' comparison is not \'bool\'","clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp:11:14: error: return type \'double\' of selected \'operator==\' function for rewritten \'!=\' comparison is not \'bool\'","clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp:18:14: error: return type \'double\' of selected \'operator==\' function for rewritten \'!=\' comparison is not \'bool\'"}
["clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp"]={"clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp:9:14: error: return type \'double\' of selected \'operator==\' function for rewritten \'==\' comparison is not \'bool\'","clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp:10:14: error: return type \'double\' of selected \'operator==\' function for rewritten \'!=\' comparison is not \'bool\'","clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp:11:14: error: return type \'double\' of selected \'operator==\' function for rewritten \'!=\' comparison is not \'bool\'","clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp:18:14: error: return type \'double\' of selected \'operator==\' function for rewritten \'!=\' comparison is not \'bool\'"}
Line 983: Line 984:
},
},
["err_ovl_static_nonstatic_member"]={
["err_ovl_static_nonstatic_member"]={
[b]="err_ovl_static_nonstatic_member",
[d]="err_ovl_static_nonstatic_member",
[j]="static and non-static member functions with the same parameter types cannot be overloaded",
[e]="static and non-static member functions with the same parameter types cannot be overloaded",
[i]="static and non-static member functions with the same parameter types cannot be overloaded",
[f]="static and non-static member functions with the same parameter types cannot be overloaded",
[h]=k,
[g]=k,
[c]="static and non\\-static member functions with the same parameter types cannot be overloaded",
[h]="static and non\\-static member functions with the same parameter types cannot be overloaded",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{D,3987,"/// 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        //    -- Member function declarations with the same name and the\n        //      same parameter types cannot be overloaded if any of them\n        //      is a static member function declaration.\n        if (OldMethod->isStatic() != NewMethod->isStatic()) {\n          Diag(New->getLocation(), diag::err_ovl_static_nonstatic_member);"}},
[i]={{D,3987,"/// 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        //    -- Member function declarations with the same name and the\n        //      same parameter types cannot be overloaded if any of them\n        //      is a static member function declaration.\n        if (OldMethod->isStatic() != NewMethod->isStatic()) {\n          Diag(New->getLocation(), diag::err_ovl_static_nonstatic_member);"}},
[l]={
[l]={
["clang/test/SemaCXX/overload-decl.cpp"]={"clang/test/SemaCXX/overload-decl.cpp:30:15: error: static and non-static member functions with the same parameter types cannot be overloaded"}
["clang/test/SemaCXX/overload-decl.cpp"]={"clang/test/SemaCXX/overload-decl.cpp:30:15: error: static and non-static member functions with the same parameter types cannot be overloaded"}
Line 997: Line 998:
},
},
["err_ovl_unresolvable"]={
["err_ovl_unresolvable"]={
[b]="err_ovl_unresolvable",
[d]="err_ovl_unresolvable",
[j]={{nil,K,"reference to %select{overloaded|multiversioned}1 function could not be resolved; did you mean to call it%select{| with no arguments}0?"},{B,nil,"reference to overloaded function could not be resolved; did you mean to call it%select{| with no arguments}0?"}},
[e]={{nil,K,"reference to %select{overloaded|multiversioned}1 function could not be resolved; did you mean to call it%select{| with no arguments}0?"},{B,nil,"reference to overloaded function could not be resolved; did you mean to call it%select{| with no arguments}0?"}},
[i]={{nil,K,{"reference to ",{"overloaded","multiversioned"}," function could not be resolved; did you mean to call it",{a," with no arguments"},"?"}},{B,nil,{"reference to overloaded function could not be resolved; did you mean to call it",{a," with no arguments"},"?"}}},
[f]={{nil,K,{"reference to ",{"overloaded","multiversioned"}," function could not be resolved; did you mean to call it",{a," with no arguments"},"?"}},{B,nil,{"reference to overloaded function could not be resolved; did you mean to call it",{a," with no arguments"},"?"}}},
[h]=k,
[g]=k,
[c]="reference to (?:overloaded|multiversioned) function could not be resolved; did you mean to call it(?:| with no arguments)\\?",
[h]="reference to (?:overloaded|multiversioned) function could not be resolved; did you mean to call it(?:| with no arguments)\\?",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"36226621f600",1286849357,"Progress.","Progress.\n\nllvm-svn: 116287"},
[j]={"36226621f600",1286849357,"Progress.","Progress.\n\nllvm-svn: 116287"},
[d]={{O,21546,"/// 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  // Overloaded expressions.\n  case BuiltinType::Overload: {\n    // ...\n    tryToRecoverWithCall(Result, PDiag(diag::err_ovl_unresolvable),"}},
[i]={{O,21546,"/// 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  // Overloaded expressions.\n  case BuiltinType::Overload: {\n    // ...\n    tryToRecoverWithCall(Result, PDiag(diag::err_ovl_unresolvable),"}},
[l]={
[l]={
["clang/test/Sema/PR28181.c"]={"clang/test/Sema/PR28181.c:12:21: error: reference to overloaded function could not be resolved; did you mean to call it?"}
["clang/test/Sema/PR28181.c"]={"clang/test/Sema/PR28181.c:12:21: error: reference to overloaded function could not be resolved; did you mean to call it?"}
Line 1,011: Line 1,012:
},
},
["err_ownership_returns_index_mismatch"]={
["err_ownership_returns_index_mismatch"]={
[b]="err_ownership_returns_index_mismatch",
[d]="err_ownership_returns_index_mismatch",
[j]="\'ownership_returns\' attribute index does not match; here it is %0",
[e]="\'ownership_returns\' attribute index does not match; here it is %0",
[i]="\'ownership_returns\' attribute index does not match; here it is A",
[f]="\'ownership_returns\' attribute index does not match; here it is A",
[h]=k,
[g]=k,
[c]="\'ownership_returns\' attribute index does not match; here it is (.*?)",
[h]="\'ownership_returns\' attribute index does not match; here it is (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"ef7aef8fe5d3",1406839466,"Implemented a diagnostic to handle multiple, distinct ownership_return attributes on the same declar...","Implemented a diagnostic to handle multiple, distinct ownership_return attributes on the same declaration. This removes a FIXME from the code.\n\nllvm-svn: 214436"},
[j]={"ef7aef8fe5d3",1406839466,"Implemented a diagnostic to handle multiple, distinct ownership_return attributes on the same declar...","Implemented a diagnostic to handle multiple, distinct ownership_return attributes on the same declaration. This removes a FIXME from the code.\n\nllvm-svn: 214436"},
[d]={{dc,1895,"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      // ...\n      } else if (K == OwnershipAttr::Returns && I->getOwnKind() == OwnershipAttr::Returns) {\n        // A returns attribute conflicts with any other returns attribute using\n        // a different index.\n        if (!llvm::is_contained(I->args(), Idx)) {\n          S.Diag(I->getLocation(), diag::err_ownership_returns_index_mismatch) << I->args_begin()->getSourceIndex();"}},
[i]={{dc,1895,"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      // ...\n      } else if (K == OwnershipAttr::Returns && I->getOwnKind() == OwnershipAttr::Returns) {\n        // A returns attribute conflicts with any other returns attribute using\n        // a different index.\n        if (!llvm::is_contained(I->args(), Idx)) {\n          S.Diag(I->getLocation(), diag::err_ownership_returns_index_mismatch) << I->args_begin()->getSourceIndex();"}},
[l]={
[l]={
["clang/test/Sema/attr-ownership.cpp"]={"clang/test/Sema/attr-ownership.cpp:5:22: error: \'ownership_returns\' attribute index does not match; here it is 2"}
["clang/test/Sema/attr-ownership.cpp"]={"clang/test/Sema/attr-ownership.cpp:5:22: error: \'ownership_returns\' attribute index does not match; here it is 2"}
Line 1,025: Line 1,026:
},
},
["err_ownership_type"]={
["err_ownership_type"]={
[b]="err_ownership_type",
[d]="err_ownership_type",
[j]="%0 attribute only applies to %select{pointer|integer}1 arguments",
[e]="%0 attribute only applies to %select{pointer|integer}1 arguments",
[i]={{nil,nil,{"A attribute only applies to ",{"pointer","integer"}," arguments"}}},
[f]={{nil,nil,{"A attribute only applies to ",{"pointer","integer"}," arguments"}}},
[h]=k,
[g]=k,
[c]="(.*?) attribute only applies to (?:pointer|integer) arguments",
[h]="(.*?) attribute only applies to (?:pointer|integer) arguments",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"d21139a34f51",1280541131,"After a lengthy design discussion, add support for \"ownership attributes\" for malloc/free checking. ...","After a lengthy design discussion, add support for \"ownership attributes\" for malloc/free checking.  Patch by Andrew McGregor!\n\nllvm-svn: 109939"},
[j]={"d21139a34f51",1280541131,"After a lengthy design discussion, add support for \"ownership attributes\" for malloc/free checking. ...","After a lengthy design discussion, add support for \"ownership attributes\" for malloc/free checking.  Patch by Andrew McGregor!\n\nllvm-svn: 109939"},
[d]={{dc,1875,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned i = 1; i < AL.getNumArgs(); ++i) {\n    // ...\n    if (-1 != Err) {\n      S.Diag(AL.getLoc(), diag::err_ownership_type) << AL << Err << Ex->getSourceRange();"}},
[i]={{dc,1875,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned i = 1; i < AL.getNumArgs(); ++i) {\n    // ...\n    if (-1 != Err) {\n      S.Diag(AL.getLoc(), diag::err_ownership_type) << AL << Err << Ex->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/attr-ownership.c"]={"clang/test/Sema/attr-ownership.c:15:35: error: \'ownership_returns\' attribute only applies to integer arguments","clang/test/Sema/attr-ownership.c:16:57: error: \'ownership_returns\' attribute only applies to integer arguments"}
["clang/test/Sema/attr-ownership.c"]={"clang/test/Sema/attr-ownership.c:15:35: error: \'ownership_returns\' attribute only applies to integer arguments","clang/test/Sema/attr-ownership.c:16:57: error: \'ownership_returns\' attribute only applies to integer arguments"}
Line 1,039: Line 1,040:
},
},
["err_pack_expansion_length_conflict"]={
["err_pack_expansion_length_conflict"]={
[b]="err_pack_expansion_length_conflict",
[d]="err_pack_expansion_length_conflict",
[j]="pack expansion contains parameter packs %0 and %1 that have different lengths (%2 vs. %3)",
[e]="pack expansion contains parameter packs %0 and %1 that have different lengths (%2 vs. %3)",
[i]="pack expansion contains parameter packs A and B that have different lengths (C vs. D)",
[f]="pack expansion contains parameter packs A and B that have different lengths (C vs. D)",
[h]=k,
[g]=k,
[c]="pack expansion contains parameter packs (.*?) and (.*?) that have different lengths \\((.*?) vs\\. (.*?)\\)",
[h]="pack expansion contains parameter packs (.*?) and (.*?) that have different lengths \\((.*?) vs\\. (.*?)\\)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"840bd6cce5ac",1292882700,"Implement basic support for template instantiation of pack expansions","Implement basic support for template instantiation of pack expansions\nwhose patterns are template arguments. We can now instantiate, e.g.,\n\n  typedef tuple<pair<OuterTypes, InnerTypes>...> type;\n\nwhere OuterTypes and InnerTypes are template type parameter packs.\n\nThere is a horrible inefficiency in\nTemplateArgumentLoc::getPackExpansionPattern(), where we need to\ncreate copies of TypeLoc data because our interfaces traffic in\nTypeSourceInfo pointers where they should traffic in TypeLocs\ninstead. I\'ve isolated in efficiency in this one routine; once we\nrefactor our interfaces to traffic in TypeLocs, we can eliminate it.\n\nllvm-svn: 122278"},
[j]={"840bd6cce5ac",1292882700,"Implement basic support for template instantiation of pack expansions","Implement basic support for template instantiation of pack expansions\nwhose patterns are template arguments. We can now instantiate, e.g.,\n\n  typedef tuple<pair<OuterTypes, InnerTypes>...> type;\n\nwhere OuterTypes and InnerTypes are template type parameter packs.\n\nThere is a horrible inefficiency in\nTemplateArgumentLoc::getPackExpansionPattern(), where we need to\ncreate copies of TypeLoc data because our interfaces traffic in\nTypeSourceInfo pointers where they should traffic in TypeLocs\ninstead. I\'ve isolated in efficiency in this one routine; once we\nrefactor our interfaces to traffic in TypeLocs, we can eliminate it.\n\nllvm-svn: 122278"},
[d]={{tb,770,"bool Sema::CheckParameterPacksForExpansion(SourceLocation EllipsisLoc, SourceRange PatternRange, ArrayRef<UnexpandedParameterPack> Unexpanded, const MultiLevelTemplateArgumentList &TemplateArgs, bool &ShouldExpand, bool &RetainExpansion, std::optional<unsigned> &NumExpansions) {\n  // ...\n  for (UnexpandedParameterPack ParmPack : Unexpanded) {\n    // ...\n    if (NewPackSize != *NumExpansions) {\n      // C++0x [temp.variadic]p5:\n      //  All of the parameter packs expanded by a pack expansion shall have\n      //  the same number of arguments specified.\n      if (HaveFirstPack)\n        Diag(EllipsisLoc, diag::err_pack_expansion_length_conflict) << FirstPack.first << Name << *NumExpansions << NewPackSize << SourceRange(FirstPack.second) << SourceRange(ParmPack.second);"}},
[i]={{rb,770,"bool Sema::CheckParameterPacksForExpansion(SourceLocation EllipsisLoc, SourceRange PatternRange, ArrayRef<UnexpandedParameterPack> Unexpanded, const MultiLevelTemplateArgumentList &TemplateArgs, bool &ShouldExpand, bool &RetainExpansion, std::optional<unsigned> &NumExpansions) {\n  // ...\n  for (UnexpandedParameterPack ParmPack : Unexpanded) {\n    // ...\n    if (NewPackSize != *NumExpansions) {\n      // C++0x [temp.variadic]p5:\n      //  All of the parameter packs expanded by a pack expansion shall have\n      //  the same number of arguments specified.\n      if (HaveFirstPack)\n        Diag(EllipsisLoc, diag::err_pack_expansion_length_conflict) << FirstPack.first << Name << *NumExpansions << NewPackSize << SourceRange(FirstPack.second) << SourceRange(ParmPack.second);"}},
[l]={
[l]={
["clang/test/SemaCXX/attr-cxx0x.cpp"]={"clang/test/SemaCXX/attr-cxx0x.cpp:28:35: error: pack expansion contains parameter packs \'A\' and \'B\' that have different lengths (1 vs. 2)"}
["clang/test/SemaCXX/attr-cxx0x.cpp"]={"clang/test/SemaCXX/attr-cxx0x.cpp:28:35: error: pack expansion contains parameter packs \'A\' and \'B\' that have different lengths (1 vs. 2)"}
Line 1,053: Line 1,054:
},
},
["err_pack_expansion_length_conflict_multilevel"]={
["err_pack_expansion_length_conflict_multilevel"]={
[b]="err_pack_expansion_length_conflict_multilevel",
[d]="err_pack_expansion_length_conflict_multilevel",
[j]="pack expansion contains parameter pack %0 that has a different length (%1 vs. %2) from outer parameter packs",
[e]="pack expansion contains parameter pack %0 that has a different length (%1 vs. %2) from outer parameter packs",
[i]="pack expansion contains parameter pack A that has a different length (B vs. C) from outer parameter packs",
[f]="pack expansion contains parameter pack A that has a different length (B vs. C) from outer parameter packs",
[h]=k,
[g]=k,
[c]="pack expansion contains parameter pack (.*?) that has a different length \\((.*?) vs\\. (.*?)\\) from outer parameter packs",
[h]="pack expansion contains parameter pack (.*?) that has a different length \\((.*?) vs\\. (.*?)\\) from outer parameter packs",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"0dca5fdb4e03",1295024684,"Keep track of the number of expansions to be produced from a type pack","Keep track of the number of expansions to be produced from a type pack\nexpansion, when it is known due to the substitution of an out\nparameter pack. This allows us to properly handle substitution into\npack expansions that involve multiple parameter packs at different\ntemplate parameter levels, even when this substitution happens one\nlevel at a time (as with partial specializations of member class\ntemplates and the signatures of member function templates).\n\nNote that the diagnostic we provide when there is an arity mismatch\nbetween an outer parameter pack and an inner parameter pack in this\ncase isn\'t as clear as the normal diagnostic for an arity\nmismatch. However, this doesn\'t matter because these cases are very,\nvery rare and (even then) only typically occur in a SFINAE context.\n\nThe other kinds of pack expansions (expression, template, etc.) still\nneed to support optional tracking of the number of expansions, and we\nneed the moral equivalent of SubstTemplateTypeParmPackType for\nsubstituted argument packs of template template and non-type template\nparameters.\n\nllvm-svn: 123448"},
[j]={"0dca5fdb4e03",1295024684,"Keep track of the number of expansions to be produced from a type pack","Keep track of the number of expansions to be produced from a type pack\nexpansion, when it is known due to the substitution of an out\nparameter pack. This allows us to properly handle substitution into\npack expansions that involve multiple parameter packs at different\ntemplate parameter levels, even when this substitution happens one\nlevel at a time (as with partial specializations of member class\ntemplates and the signatures of member function templates).\n\nNote that the diagnostic we provide when there is an arity mismatch\nbetween an outer parameter pack and an inner parameter pack in this\ncase isn\'t as clear as the normal diagnostic for an arity\nmismatch. However, this doesn\'t matter because these cases are very,\nvery rare and (even then) only typically occur in a SFINAE context.\n\nThe other kinds of pack expansions (expression, template, etc.) still\nneed to support optional tracking of the number of expansions, and we\nneed the moral equivalent of SubstTemplateTypeParmPackType for\nsubstituted argument packs of template template and non-type template\nparameters.\n\nllvm-svn: 123448"},
[d]={{tb,774,"bool Sema::CheckParameterPacksForExpansion(SourceLocation EllipsisLoc, SourceRange PatternRange, ArrayRef<UnexpandedParameterPack> Unexpanded, const MultiLevelTemplateArgumentList &TemplateArgs, bool &ShouldExpand, bool &RetainExpansion, std::optional<unsigned> &NumExpansions) {\n  // ...\n  for (UnexpandedParameterPack ParmPack : Unexpanded) {\n    // ...\n    if (NewPackSize != *NumExpansions) {\n      // C++0x [temp.variadic]p5:\n      //  All of the parameter packs expanded by a pack expansion shall have\n      //  the same number of arguments specified.\n      if (HaveFirstPack)\n      // ...\n      else\n        Diag(EllipsisLoc, diag::err_pack_expansion_length_conflict_multilevel) << Name << *NumExpansions << NewPackSize << SourceRange(ParmPack.second);"}},
[i]={{rb,774,"bool Sema::CheckParameterPacksForExpansion(SourceLocation EllipsisLoc, SourceRange PatternRange, ArrayRef<UnexpandedParameterPack> Unexpanded, const MultiLevelTemplateArgumentList &TemplateArgs, bool &ShouldExpand, bool &RetainExpansion, std::optional<unsigned> &NumExpansions) {\n  // ...\n  for (UnexpandedParameterPack ParmPack : Unexpanded) {\n    // ...\n    if (NewPackSize != *NumExpansions) {\n      // C++0x [temp.variadic]p5:\n      //  All of the parameter packs expanded by a pack expansion shall have\n      //  the same number of arguments specified.\n      if (HaveFirstPack)\n      // ...\n      else\n        Diag(EllipsisLoc, diag::err_pack_expansion_length_conflict_multilevel) << Name << *NumExpansions << NewPackSize << SourceRange(ParmPack.second);"}},
[l]={
[l]={
["clang/test/SemaTemplate/cxx1z-fold-expressions.cpp"]={"clang/test/SemaTemplate/cxx1z-fold-expressions.cpp:100:61: error: pack expansion contains parameter pack \'Js\' that has a different length (1 vs. 2) from outer parameter packs"}
["clang/test/SemaTemplate/cxx1z-fold-expressions.cpp"]={"clang/test/SemaTemplate/cxx1z-fold-expressions.cpp:100:61: error: pack expansion contains parameter pack \'Js\' that has a different length (1 vs. 2) from outer parameter packs"}
Line 1,067: Line 1,068:
},
},
["err_pack_expansion_length_conflict_partial"]={
["err_pack_expansion_length_conflict_partial"]={
[b]={{nil,K,"err_pack_expansion_length_conflict_partial"}},
[d]={{nil,K,"err_pack_expansion_length_conflict_partial"}},
[j]={{nil,K,"pack expansion contains parameter pack %0 that has a different length (at least %1 vs. %2) from outer parameter packs"}},
[e]={{nil,K,"pack expansion contains parameter pack %0 that has a different length (at least %1 vs. %2) from outer parameter packs"}},
[i]={{nil,K,"pack expansion contains parameter pack A that has a different length (at least B vs. C) from outer parameter packs"}},
[f]={{nil,K,"pack expansion contains parameter pack A that has a different length (at least B vs. C) from outer parameter packs"}},
[h]=k,
[g]=k,
[c]="pack expansion contains parameter pack (.*?) that has a different length \\(at least (.*?) vs\\. (.*?)\\) from outer parameter packs",
[h]="pack expansion contains parameter pack (.*?) that has a different length \\(at least (.*?) vs\\. (.*?)\\) from outer parameter packs",
[f]=a,
[b]=a,
[e]={{nil,K,m}},
[c]={{nil,K,m}},
[g]={"4a8f3518cb14",1532026837,"Fix template argument deduction when a parameter pack has a value","Fix template argument deduction when a parameter pack has a value\nprovided by an outer template.\n\nWe made the incorrect assumption in various places that the only way we\ncan have any arguments already provided for a pack during template\nargument deduction was from a partially-specified pack. That\'s not true;\nwe can also have arguments from an enclosing already-instantiated\ntemplate, and that can even result in the function template\'s own pack\nparameters having a fixed length and not being packs for the purposes of\ntemplate argument deduction.\n\nllvm-svn: 337481"},
[j]={"4a8f3518cb14",1532026837,"Fix template argument deduction when a parameter pack has a value","Fix template argument deduction when a parameter pack has a value\nprovided by an outer template.\n\nWe made the incorrect assumption in various places that the only way we\ncan have any arguments already provided for a pack during template\nargument deduction was from a partially-specified pack. That\'s not true;\nwe can also have arguments from an enclosing already-instantiated\ntemplate, and that can even result in the function template\'s own pack\nparameters having a fixed length and not being packs for the purposes of\ntemplate argument deduction.\n\nllvm-svn: 337481"},
[d]={{tb,794,"bool Sema::CheckParameterPacksForExpansion(SourceLocation EllipsisLoc, SourceRange PatternRange, ArrayRef<UnexpandedParameterPack> Unexpanded, const MultiLevelTemplateArgumentList &TemplateArgs, bool &ShouldExpand, bool &RetainExpansion, std::optional<unsigned> &NumExpansions) {\n  // ...\n  // If we\'re performing a partial expansion but we also have a full expansion,\n  // expand to the number of common arguments. For example, given:\n  //\n  //  template<typename ...T> struct A {\n  //    template<typename ...U> void f(pair<T, U>...);\n  //  };\n  //\n  // ... a call to \'A<int, int>().f<int>\' should expand the pack once and\n  // retain an expansion.\n  if (NumPartialExpansions) {\n    if (NumExpansions && *NumExpansions < *NumPartialExpansions) {\n      // ...\n      Diag(EllipsisLoc, diag::err_pack_expansion_length_conflict_partial) << PartialPack << *NumPartialExpansions << *NumExpansions << SourceRange(PartiallySubstitutedPackLoc);"}}
[i]={{rb,794,"bool Sema::CheckParameterPacksForExpansion(SourceLocation EllipsisLoc, SourceRange PatternRange, ArrayRef<UnexpandedParameterPack> Unexpanded, const MultiLevelTemplateArgumentList &TemplateArgs, bool &ShouldExpand, bool &RetainExpansion, std::optional<unsigned> &NumExpansions) {\n  // ...\n  // If we\'re performing a partial expansion but we also have a full expansion,\n  // expand to the number of common arguments. For example, given:\n  //\n  //  template<typename ...T> struct A {\n  //    template<typename ...U> void f(pair<T, U>...);\n  //  };\n  //\n  // ... a call to \'A<int, int>().f<int>\' should expand the pack once and\n  // retain an expansion.\n  if (NumPartialExpansions) {\n    if (NumExpansions && *NumExpansions < *NumPartialExpansions) {\n      // ...\n      Diag(EllipsisLoc, diag::err_pack_expansion_length_conflict_partial) << PartialPack << *NumPartialExpansions << *NumExpansions << SourceRange(PartiallySubstitutedPackLoc);"}}
},
},
["err_pack_expansion_member_init"]={
["err_pack_expansion_member_init"]={
[b]="err_pack_expansion_member_init",
[d]="err_pack_expansion_member_init",
[j]="pack expansion for initialization of member %0",
[e]="pack expansion for initialization of member %0",
[i]="pack expansion for initialization of member A",
[f]="pack expansion for initialization of member A",
[h]=k,
[g]=k,
[c]="pack expansion for initialization of member (.*?)",
[h]="pack expansion for initialization of member (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"44e7df67d963",1294101176,"Implement pack expansion of base initializers, so that we can","Implement pack expansion of base initializers, so that we can\ninitialize those lovely mixins that come from pack expansions of base\nspecifiers.\n\nllvm-svn: 122793"},
[j]={"44e7df67d963",1294101176,"Implement pack expansion of base initializers, so that we can","Implement pack expansion of base initializers, so that we can\ninitialize those lovely mixins that come from pack expansions of base\nspecifiers.\n\nllvm-svn: 122793"},
[d]={{w,4392,"/// Handle a C++ member initializer.\nMemInitResult Sema::BuildMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS, IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy, const DeclSpec &DS, SourceLocation IdLoc, Expr *Init, SourceLocation EllipsisLoc) {\n  // ...\n  // Look for a member, first.\n  if (ValueDecl *Member = tryLookupCtorInitMemberDecl(ClassDecl, SS, TemplateTypeTy, MemberOrBase)) {\n    if (EllipsisLoc.isValid())\n      Diag(EllipsisLoc, diag::err_pack_expansion_member_init) << MemberOrBase << SourceRange(IdLoc, Init->getSourceRange().getEnd());"}},
[i]={{w,4392,"/// Handle a C++ member initializer.\nMemInitResult Sema::BuildMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS, IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy, const DeclSpec &DS, SourceLocation IdLoc, Expr *Init, SourceLocation EllipsisLoc) {\n  // ...\n  // Look for a member, first.\n  if (ValueDecl *Member = tryLookupCtorInitMemberDecl(ClassDecl, SS, TemplateTypeTy, MemberOrBase)) {\n    if (EllipsisLoc.isValid())\n      Diag(EllipsisLoc, diag::err_pack_expansion_member_init) << MemberOrBase << SourceRange(IdLoc, Init->getSourceRange().getEnd());"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.decls/temp.variadic/p4.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/p4.cpp:144:17: error: pack expansion for initialization of member \'member\'"}
["clang/test/CXX/temp/temp.decls/temp.variadic/p4.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/p4.cpp:144:17: error: pack expansion for initialization of member \'member\'"}
Line 1,092: Line 1,093:
},
},
["err_pack_expansion_without_parameter_packs"]={
["err_pack_expansion_without_parameter_packs"]={
[b]="err_pack_expansion_without_parameter_packs",
[d]="err_pack_expansion_without_parameter_packs",
[j]="pack expansion does not contain any unexpanded parameter packs",
[e]="pack expansion does not contain any unexpanded parameter packs",
[i]="pack expansion does not contain any unexpanded parameter packs",
[f]="pack expansion does not contain any unexpanded parameter packs",
[h]=k,
[g]=k,
[c]="pack expansion does not contain any unexpanded parameter packs",
[h]="pack expansion does not contain any unexpanded parameter packs",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"d2fa766ad03e",1292811851,"Introduce a new type, PackExpansionType, to capture types that are","Introduce a new type, PackExpansionType, to capture types that are\npack expansions, e.g. given\n\n  template<typename... Types> struct tuple;\n\n  template<typename... Types>\n  struct tuple_of_refs {\n    typedef tuple<Types&...> types;\n  };\n\nthe type of the \"types\" typedef is a PackExpansionType whose pattern\nis Types&. \n\nThis commit introduces support for creating pack expansions for\ntemplate type arguments, as above, but not for any other kind of pack\nexpansion, nor for any form of instantiation.\n\nllvm-svn: 122223"},
[j]={"d2fa766ad03e",1292811851,"Introduce a new type, PackExpansionType, to capture types that are","Introduce a new type, PackExpansionType, to capture types that are\npack expansions, e.g. given\n\n  template<typename... Types> struct tuple;\n\n  template<typename... Types>\n  struct tuple_of_refs {\n    typedef tuple<Types&...> types;\n  };\n\nthe type of the \"types\" typedef is a PackExpansionType whose pattern\nis Types&. \n\nThis commit introduces support for creating pack expansions for\ntemplate type arguments, as above, but not for any other kind of pack\nexpansion, nor for any form of instantiation.\n\nllvm-svn: 122223"},
[d]={{dc,4358,"static void handleAlignedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.hasParsedType()) {\n    // ...\n    if (AL.isPackExpansion() && !TInfo->getType()->containsUnexpandedParameterPack()) {\n      S.Diag(AL.getEllipsisLoc(), diag::err_pack_expansion_without_parameter_packs);"},{dc,4385,"static void handleAlignedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.isPackExpansion() && !E->containsUnexpandedParameterPack()) {\n    S.Diag(AL.getEllipsisLoc(), diag::err_pack_expansion_without_parameter_packs);"},{w,2670,"/// 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 (EllipsisLoc.isValid() && !TInfo->getType()->containsUnexpandedParameterPack()) {\n    Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << TInfo->getTypeLoc().getSourceRange();"},{w,4705,"MemInitResult Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, Expr *Init, CXXRecordDecl *ClassDecl, SourceLocation EllipsisLoc) {\n  // ...\n  if (EllipsisLoc.isValid()) {\n    // This is a pack expansion.\n    if (!BaseType->containsUnexpandedParameterPack()) {\n      Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << SourceRange(BaseLoc, InitRange.getEnd());"},{w,12080,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n  // ...\n  if (EllipsisLoc.isInvalid()) {\n  // ...\n  } else {\n    if (!SS.getScopeRep()->containsUnexpandedParameterPack() && !TargetNameInfo.containsUnexpandedParameterPack()) {\n      Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << SourceRange(SS.getBeginLoc(), TargetNameInfo.getEndLoc());"},{lb,1110,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  // ...\n  for (ObjCDictionaryElement &Element : Elements) {\n    // ...\n    if (!Element.Key->containsUnexpandedParameterPack() && !Element.Value->containsUnexpandedParameterPack()) {\n      Diag(Element.EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << SourceRange(Element.Key->getBeginLoc(), Element.Value->getEndLoc());"},{"clang/lib/Sema/SemaLambda.cpp",1198,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // ...\n    if (C->EllipsisLoc.isValid()) {\n      if (Var->isParameterPack()) {\n      // ...\n      } else {\n        Diag(C->EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << (C->Init.isUsable() ? C->Init.get()->getSourceRange() : SourceRange(C->Loc));"},{tb,582,"ParsedTemplateArgument Sema::ActOnPackExpansion(const ParsedTemplateArgument &Arg, SourceLocation EllipsisLoc) {\n  // ...\n  case ParsedTemplateArgument::Template:\n    if (!Arg.getAsTemplate().get().containsUnexpandedParameterPack()) {\n      // ...\n      Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << R;"},{tb,637,"QualType Sema::CheckPackExpansion(QualType Pattern, SourceRange PatternRange, SourceLocation EllipsisLoc, std::optional<unsigned> NumExpansions) {\n  // C++11 [temp.variadic]p5:\n  //  The pattern of a pack expansion shall name one or more\n  //  parameter packs that are not expanded by a nested pack\n  //  expansion.\n  //\n  // A pattern containing a deduced type can\'t occur \"naturally\" but arises in\n  // the desugaring of an init-capture pack.\n  if (!Pattern->containsUnexpandedParameterPack() && !Pattern->getContainedDeducedType()) {\n    Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << PatternRange;"},{tb,660,"ExprResult Sema::CheckPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc, std::optional<unsigned> NumExpansions) {\n  // ...\n  // C++0x [temp.variadic]p5:\n  //  The pattern of a pack expansion shall name one or more\n  //  parameter packs that are not expanded by a nested pack\n  //  expansion.\n  if (!Pattern->containsUnexpandedParameterPack()) {\n    Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << Pattern->getSourceRange();"},{tb,1214,"ExprResult Sema::ActOnCXXFoldExpr(Scope *S, SourceLocation LParenLoc, Expr *LHS, tok::TokenKind Operator, SourceLocation EllipsisLoc, Expr *RHS, SourceLocation RParenLoc) {\n  // ...\n  // [expr.prim.fold]p3:\n  //  In a binary fold, op1 and op2 shall be the same fold-operator, and\n  //  either e1 shall contain an unexpanded parameter pack or e2 shall contain\n  //  an unexpanded parameter pack, but not both.\n  if (LHS && RHS && LHS->containsUnexpandedParameterPack() == RHS->containsUnexpandedParameterPack()) {\n    // ...\n    return Diag(EllipsisLoc, LHS->containsUnexpandedParameterPack() ? diag::err_fold_expression_packs_both_sides : diag::err_pack_expansion_without_parameter_packs) << LHS->getSourceRange() << RHS->getSourceRange();"},{tb,1226,"ExprResult Sema::ActOnCXXFoldExpr(Scope *S, SourceLocation LParenLoc, Expr *LHS, tok::TokenKind Operator, SourceLocation EllipsisLoc, Expr *RHS, SourceLocation RParenLoc) {\n  // ...\n  // [expr.prim.fold]p2:\n  //  In a unary fold, the cast-expression shall contain an unexpanded\n  //  parameter pack.\n  if (!LHS || !RHS) {\n    // ...\n    if (!Pack->containsUnexpandedParameterPack()) {\n      // ...\n      return Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << Pack->getSourceRange();"}},
[i]={{dc,4358,"static void handleAlignedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.hasParsedType()) {\n    // ...\n    if (AL.isPackExpansion() && !TInfo->getType()->containsUnexpandedParameterPack()) {\n      S.Diag(AL.getEllipsisLoc(), diag::err_pack_expansion_without_parameter_packs);"},{dc,4385,"static void handleAlignedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.isPackExpansion() && !E->containsUnexpandedParameterPack()) {\n    S.Diag(AL.getEllipsisLoc(), diag::err_pack_expansion_without_parameter_packs);"},{w,2670,"/// 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 (EllipsisLoc.isValid() && !TInfo->getType()->containsUnexpandedParameterPack()) {\n    Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << TInfo->getTypeLoc().getSourceRange();"},{w,4705,"MemInitResult Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, Expr *Init, CXXRecordDecl *ClassDecl, SourceLocation EllipsisLoc) {\n  // ...\n  if (EllipsisLoc.isValid()) {\n    // This is a pack expansion.\n    if (!BaseType->containsUnexpandedParameterPack()) {\n      Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << SourceRange(BaseLoc, InitRange.getEnd());"},{w,12080,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n  // ...\n  if (EllipsisLoc.isInvalid()) {\n  // ...\n  } else {\n    if (!SS.getScopeRep()->containsUnexpandedParameterPack() && !TargetNameInfo.containsUnexpandedParameterPack()) {\n      Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << SourceRange(SS.getBeginLoc(), TargetNameInfo.getEndLoc());"},{qb,1110,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  // ...\n  for (ObjCDictionaryElement &Element : Elements) {\n    // ...\n    if (!Element.Key->containsUnexpandedParameterPack() && !Element.Value->containsUnexpandedParameterPack()) {\n      Diag(Element.EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << SourceRange(Element.Key->getBeginLoc(), Element.Value->getEndLoc());"},{"clang/lib/Sema/SemaLambda.cpp",1198,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // ...\n    if (C->EllipsisLoc.isValid()) {\n      if (Var->isParameterPack()) {\n      // ...\n      } else {\n        Diag(C->EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << (C->Init.isUsable() ? C->Init.get()->getSourceRange() : SourceRange(C->Loc));"},{rb,582,"ParsedTemplateArgument Sema::ActOnPackExpansion(const ParsedTemplateArgument &Arg, SourceLocation EllipsisLoc) {\n  // ...\n  case ParsedTemplateArgument::Template:\n    if (!Arg.getAsTemplate().get().containsUnexpandedParameterPack()) {\n      // ...\n      Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << R;"},{rb,637,"QualType Sema::CheckPackExpansion(QualType Pattern, SourceRange PatternRange, SourceLocation EllipsisLoc, std::optional<unsigned> NumExpansions) {\n  // C++11 [temp.variadic]p5:\n  //  The pattern of a pack expansion shall name one or more\n  //  parameter packs that are not expanded by a nested pack\n  //  expansion.\n  //\n  // A pattern containing a deduced type can\'t occur \"naturally\" but arises in\n  // the desugaring of an init-capture pack.\n  if (!Pattern->containsUnexpandedParameterPack() && !Pattern->getContainedDeducedType()) {\n    Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << PatternRange;"},{rb,660,"ExprResult Sema::CheckPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc, std::optional<unsigned> NumExpansions) {\n  // ...\n  // C++0x [temp.variadic]p5:\n  //  The pattern of a pack expansion shall name one or more\n  //  parameter packs that are not expanded by a nested pack\n  //  expansion.\n  if (!Pattern->containsUnexpandedParameterPack()) {\n    Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << Pattern->getSourceRange();"},{rb,1214,"ExprResult Sema::ActOnCXXFoldExpr(Scope *S, SourceLocation LParenLoc, Expr *LHS, tok::TokenKind Operator, SourceLocation EllipsisLoc, Expr *RHS, SourceLocation RParenLoc) {\n  // ...\n  // [expr.prim.fold]p3:\n  //  In a binary fold, op1 and op2 shall be the same fold-operator, and\n  //  either e1 shall contain an unexpanded parameter pack or e2 shall contain\n  //  an unexpanded parameter pack, but not both.\n  if (LHS && RHS && LHS->containsUnexpandedParameterPack() == RHS->containsUnexpandedParameterPack()) {\n    // ...\n    return Diag(EllipsisLoc, LHS->containsUnexpandedParameterPack() ? diag::err_fold_expression_packs_both_sides : diag::err_pack_expansion_without_parameter_packs) << LHS->getSourceRange() << RHS->getSourceRange();"},{rb,1226,"ExprResult Sema::ActOnCXXFoldExpr(Scope *S, SourceLocation LParenLoc, Expr *LHS, tok::TokenKind Operator, SourceLocation EllipsisLoc, Expr *RHS, SourceLocation RParenLoc) {\n  // ...\n  // [expr.prim.fold]p2:\n  //  In a unary fold, the cast-expression shall contain an unexpanded\n  //  parameter pack.\n  if (!LHS || !RHS) {\n    // ...\n    if (!Pack->containsUnexpandedParameterPack()) {\n      // ...\n      return Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << Pack->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaTemplate/stmt-expr.cpp"]={"clang/test/SemaTemplate/stmt-expr.cpp:9:8: error: pack expansion does not contain any unexpanded parameter packs"}
["clang/test/SemaTemplate/stmt-expr.cpp"]={"clang/test/SemaTemplate/stmt-expr.cpp:9:8: error: pack expansion does not contain any unexpanded parameter packs"}
Line 1,106: Line 1,107:
},
},
["err_param_default_argument"]={
["err_param_default_argument"]={
[b]="err_param_default_argument",
[d]="err_param_default_argument",
[j]="C does not support default arguments",
[e]="C does not support default arguments",
[i]="C does not support default arguments",
[f]="C does not support default arguments",
[h]=k,
[g]=k,
[c]="C does not support default arguments",
[h]="C does not support default arguments",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{w,341,"/// ActOnParamDefaultArgument - Check whether the default argument\n/// provided for a function parameter is well-formed. If so, attach it\n/// to the parameter declaration.\nvoid Sema::ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc, Expr *DefaultArg) {\n  // ...\n  // Default arguments are only permitted in C++\n  if (!getLangOpts().CPlusPlus) {\n    Diag(EqualLoc, diag::err_param_default_argument) << DefaultArg->getSourceRange();"}},
[i]={{w,341,"/// ActOnParamDefaultArgument - Check whether the default argument\n/// provided for a function parameter is well-formed. If so, attach it\n/// to the parameter declaration.\nvoid Sema::ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc, Expr *DefaultArg) {\n  // ...\n  // Default arguments are only permitted in C++\n  if (!getLangOpts().CPlusPlus) {\n    Diag(EqualLoc, diag::err_param_default_argument) << DefaultArg->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/default1.c"]={"clang/test/Sema/default1.c:2:14: error: C does not support default arguments"}
["clang/test/Sema/default1.c"]={"clang/test/Sema/default1.c:2:14: error: C does not support default arguments"}
Line 1,120: Line 1,121:
},
},
["err_param_default_argument_member_template_redecl"]={
["err_param_default_argument_member_template_redecl"]={
[b]="err_param_default_argument_member_template_redecl",
[d]="err_param_default_argument_member_template_redecl",
[j]="default arguments cannot be added to an out-of-line definition of a member of a %select{class template|class template partial specialization|nested class in a template}0",
[e]="default arguments cannot be added to an out-of-line definition of a member of a %select{class template|class template partial specialization|nested class in a template}0",
[i]={{nil,nil,{"default arguments cannot be added to an out-of-line definition of a member of a ",{"class template","class template partial specialization","nested class in a template"}}}},
[f]={{nil,nil,{"default arguments cannot be added to an out-of-line definition of a member of a ",{"class template","class template partial specialization","nested class in a template"}}}},
[h]=k,
[g]=k,
[c]="default arguments cannot be added to an out\\-of\\-line definition of a member of a (?:class template|class template partial specialization|nested class in a template)",
[h]="default arguments cannot be added to an out\\-of\\-line definition of a member of a (?:class template|class template partial specialization|nested class in a template)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"c732aba9a98c",1252694672,"Cleanup and test C++ default arguments. Improvements include:","Cleanup and test C++ default arguments. Improvements include:\n\n  - Diagnose attempts to add default arguments to templates (or member\n    functions of templates) after the initial declaration (DR217).\n  - Improve diagnostics when a default argument is redefined. Now, the\n    note will always point at the place where the default argument was\n    previously defined, rather than pointing to the most recent\n    declaration of the function.\n\nllvm-svn: 81548"},
[j]={"c732aba9a98c",1252694672,"Cleanup and test C++ default arguments. Improvements include:","Cleanup and test C++ default arguments. Improvements include:\n\n  - Diagnose attempts to add default arguments to templates (or member\n    functions of templates) after the initial declaration (DR217).\n  - Improve diagnostics when a default argument is redefined. Now, the\n    note will always point at the place where the default argument was\n    previously defined, rather than pointing to the most recent\n    declaration of the function.\n\nllvm-svn: 81548"},
[d]={{w,644,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // ...\n  // C++ [dcl.fct.default]p4:\n  //  For non-template functions, default arguments can be added in\n  //  later declarations of a function in the same\n  //  scope. Declarations in different scopes have completely\n  //  distinct sets of default arguments. That is, declarations in\n  //  inner scopes do not acquire default arguments from\n  //  declarations in outer scopes, and vice versa. In a given\n  //  function declaration, all parameters subsequent to a\n  //  parameter with a default argument shall have default\n  //  arguments supplied in this or previous declarations. A\n  //  default argument shall not be redefined by a later\n  //  declaration (not even to the same value).\n  //\n  // C++ [dcl.fct.default]p6:\n  //  Except for member functions of class templates, the default arguments\n  //  in a member function definition that appears outside of the class\n  //  definition are added to the set of default arguments provided by the\n  //  member function declaration in the class definition.\n  for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n    // ...\n    if (OldParamHasDfl && NewParamHasDfl) {\n    // ...\n    } else if (OldParamHasDfl) {\n    // ...\n    } else if (NewParamHasDfl) {\n      if (New->getDescribedFunctionTemplate()) {\n      // ...\n      } else if (New->getTemplateSpecializationKind() != TSK_ImplicitInstantiation && New->getTemplateSpecializationKind() != TSK_Undeclared) {\n      // ...\n      } else if (New->getDeclContext()->isDependentContext()) {\n        // ...\n        Diag(NewParam->getLocation(), diag::err_param_default_argument_member_template_redecl) << WhichKind << NewParam->getDefaultArgRange();"}},
[i]={{w,644,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // ...\n  // C++ [dcl.fct.default]p4:\n  //  For non-template functions, default arguments can be added in\n  //  later declarations of a function in the same\n  //  scope. Declarations in different scopes have completely\n  //  distinct sets of default arguments. That is, declarations in\n  //  inner scopes do not acquire default arguments from\n  //  declarations in outer scopes, and vice versa. In a given\n  //  function declaration, all parameters subsequent to a\n  //  parameter with a default argument shall have default\n  //  arguments supplied in this or previous declarations. A\n  //  default argument shall not be redefined by a later\n  //  declaration (not even to the same value).\n  //\n  // C++ [dcl.fct.default]p6:\n  //  Except for member functions of class templates, the default arguments\n  //  in a member function definition that appears outside of the class\n  //  definition are added to the set of default arguments provided by the\n  //  member function declaration in the class definition.\n  for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n    // ...\n    if (OldParamHasDfl && NewParamHasDfl) {\n    // ...\n    } else if (OldParamHasDfl) {\n    // ...\n    } else if (NewParamHasDfl) {\n      if (New->getDescribedFunctionTemplate()) {\n      // ...\n      } else if (New->getTemplateSpecializationKind() != TSK_ImplicitInstantiation && New->getTemplateSpecializationKind() != TSK_Undeclared) {\n      // ...\n      } else if (New->getDeclContext()->isDependentContext()) {\n        // ...\n        Diag(NewParam->getLocation(), diag::err_param_default_argument_member_template_redecl) << WhichKind << NewParam->getDefaultArgRange();"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p6.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p6.cpp:29:19: error: default arguments cannot be added to an out-of-line definition of a member of a class template","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p6.cpp:33:26: error: default arguments cannot be added to an out-of-line definition of a member of a nested class in a template"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p6.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p6.cpp:29:19: error: default arguments cannot be added to an out-of-line definition of a member of a class template","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p6.cpp:33:26: error: default arguments cannot be added to an out-of-line definition of a member of a nested class in a template"}
Line 1,134: Line 1,135:
},
},
["err_param_default_argument_missing"]={
["err_param_default_argument_missing"]={
[b]="err_param_default_argument_missing",
[d]="err_param_default_argument_missing",
[j]="missing default argument on parameter",
[e]="missing default argument on parameter",
[i]="missing default argument on parameter",
[f]="missing default argument on parameter",
[h]=k,
[g]=k,
[c]="missing default argument on parameter",
[h]="missing default argument on parameter",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{w,1659,"/// CheckCXXDefaultArguments - Verify that the default arguments for a\n/// function declaration are well-formed according to C++\n/// [dcl.fct.default].\nvoid Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {\n  // ...\n  // C++20 [dcl.fct.default]p4:\n  //  In a given function declaration, each parameter subsequent to a parameter\n  //  with a default argument shall have a default argument supplied in this or\n  //  a previous declaration, unless the parameter was expanded from a\n  //  parameter pack, or shall be a function parameter pack.\n  for (; ParamIdx < NumParams; ++ParamIdx) {\n    // ...\n    if (!Param->hasDefaultArg() && !Param->isParameterPack() && !(CurrentInstantiationScope && CurrentInstantiationScope->isLocalPackExpansion(Param))) {\n      if (Param->isInvalidDecl())\n      // ...\n      else if (Param->getIdentifier())\n      // ...\n      else\n        Diag(Param->getLocation(), diag::err_param_default_argument_missing);"}},
[i]={{w,1659,"/// CheckCXXDefaultArguments - Verify that the default arguments for a\n/// function declaration are well-formed according to C++\n/// [dcl.fct.default].\nvoid Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {\n  // ...\n  // C++20 [dcl.fct.default]p4:\n  //  In a given function declaration, each parameter subsequent to a parameter\n  //  with a default argument shall have a default argument supplied in this or\n  //  a previous declaration, unless the parameter was expanded from a\n  //  parameter pack, or shall be a function parameter pack.\n  for (; ParamIdx < NumParams; ++ParamIdx) {\n    // ...\n    if (!Param->hasDefaultArg() && !Param->isParameterPack() && !(CurrentInstantiationScope && CurrentInstantiationScope->isLocalPackExpansion(Param))) {\n      if (Param->isInvalidDecl())\n      // ...\n      else if (Param->getIdentifier())\n      // ...\n      else\n        Diag(Param->getLocation(), diag::err_param_default_argument_missing);"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p4.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p4.cpp:40:24: error: missing default argument on parameter"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p4.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p4.cpp:40:24: error: missing default argument on parameter"}
Line 1,148: Line 1,149:
},
},
["err_param_default_argument_missing_name"]={
["err_param_default_argument_missing_name"]={
[b]="err_param_default_argument_missing_name",
[d]="err_param_default_argument_missing_name",
[j]="missing default argument on parameter %0",
[e]="missing default argument on parameter %0",
[i]="missing default argument on parameter A",
[f]="missing default argument on parameter A",
[h]=k,
[g]=k,
[c]="missing default argument on parameter (.*?)",
[h]="missing default argument on parameter (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{w,1655,"/// CheckCXXDefaultArguments - Verify that the default arguments for a\n/// function declaration are well-formed according to C++\n/// [dcl.fct.default].\nvoid Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {\n  // ...\n  // C++20 [dcl.fct.default]p4:\n  //  In a given function declaration, each parameter subsequent to a parameter\n  //  with a default argument shall have a default argument supplied in this or\n  //  a previous declaration, unless the parameter was expanded from a\n  //  parameter pack, or shall be a function parameter pack.\n  for (; ParamIdx < NumParams; ++ParamIdx) {\n    // ...\n    if (!Param->hasDefaultArg() && !Param->isParameterPack() && !(CurrentInstantiationScope && CurrentInstantiationScope->isLocalPackExpansion(Param))) {\n      if (Param->isInvalidDecl())\n      // ...\n      else if (Param->getIdentifier())\n        Diag(Param->getLocation(), diag::err_param_default_argument_missing_name) << Param->getIdentifier();"}},
[i]={{w,1655,"/// CheckCXXDefaultArguments - Verify that the default arguments for a\n/// function declaration are well-formed according to C++\n/// [dcl.fct.default].\nvoid Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {\n  // ...\n  // C++20 [dcl.fct.default]p4:\n  //  In a given function declaration, each parameter subsequent to a parameter\n  //  with a default argument shall have a default argument supplied in this or\n  //  a previous declaration, unless the parameter was expanded from a\n  //  parameter pack, or shall be a function parameter pack.\n  for (; ParamIdx < NumParams; ++ParamIdx) {\n    // ...\n    if (!Param->hasDefaultArg() && !Param->isParameterPack() && !(CurrentInstantiationScope && CurrentInstantiationScope->isLocalPackExpansion(Param))) {\n      if (Param->isInvalidDecl())\n      // ...\n      else if (Param->getIdentifier())\n        Diag(Param->getLocation(), diag::err_param_default_argument_missing_name) << Param->getIdentifier();"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.post/expr.call/p4.cpp"]={"clang/test/CXX/expr/expr.post/expr.call/p4.cpp:3:23: error: missing default argument on parameter \'y\'"}
["clang/test/CXX/expr/expr.post/expr.call/p4.cpp"]={"clang/test/CXX/expr/expr.post/expr.call/p4.cpp:3:23: error: missing default argument on parameter \'y\'"}
Line 1,162: Line 1,163:
},
},
["err_param_default_argument_nonfunc"]={
["err_param_default_argument_nonfunc"]={
[b]="err_param_default_argument_nonfunc",
[d]="err_param_default_argument_nonfunc",
[j]="default arguments can only be specified for parameters in a function declaration",
[e]="default arguments can only be specified for parameters in a function declaration",
[i]="default arguments can only be specified for parameters in a function declaration",
[f]="default arguments can only be specified for parameters in a function declaration",
[h]=k,
[g]=k,
[c]="default arguments can only be specified for parameters in a function declaration",
[h]="default arguments can only be specified for parameters in a function declaration",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{w,441,"/// CheckExtraCXXDefaultArguments - Check for any extra default\n/// arguments in the declarator, which is not a function declaration\n/// or definition and therefore is not permitted to have default\n/// arguments. This routine should be invoked for every declarator\n/// that is not a function declaration or definition.\nvoid Sema::CheckExtraCXXDefaultArguments(Declarator &D) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    if (chunk.Kind == DeclaratorChunk::Function) {\n      // ...\n      for (unsigned argIdx = 0, e = chunk.Fun.NumParams; argIdx != e; ++argIdx) {\n        // ...\n        if (Param->hasUnparsedDefaultArg()) {\n          // ...\n          Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc) << SR;"},{w,444,"/// CheckExtraCXXDefaultArguments - Check for any extra default\n/// arguments in the declarator, which is not a function declaration\n/// or definition and therefore is not permitted to have default\n/// arguments. This routine should be invoked for every declarator\n/// that is not a function declaration or definition.\nvoid Sema::CheckExtraCXXDefaultArguments(Declarator &D) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    if (chunk.Kind == DeclaratorChunk::Function) {\n      // ...\n      for (unsigned argIdx = 0, e = chunk.Fun.NumParams; argIdx != e; ++argIdx) {\n        // ...\n        if (Param->hasUnparsedDefaultArg()) {\n        // ...\n        } else if (Param->getDefaultArg()) {\n          Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc) << Param->getDefaultArg()->getSourceRange();"}},
[i]={{w,441,"/// CheckExtraCXXDefaultArguments - Check for any extra default\n/// arguments in the declarator, which is not a function declaration\n/// or definition and therefore is not permitted to have default\n/// arguments. This routine should be invoked for every declarator\n/// that is not a function declaration or definition.\nvoid Sema::CheckExtraCXXDefaultArguments(Declarator &D) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    if (chunk.Kind == DeclaratorChunk::Function) {\n      // ...\n      for (unsigned argIdx = 0, e = chunk.Fun.NumParams; argIdx != e; ++argIdx) {\n        // ...\n        if (Param->hasUnparsedDefaultArg()) {\n          // ...\n          Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc) << SR;"},{w,444,"/// CheckExtraCXXDefaultArguments - Check for any extra default\n/// arguments in the declarator, which is not a function declaration\n/// or definition and therefore is not permitted to have default\n/// arguments. This routine should be invoked for every declarator\n/// that is not a function declaration or definition.\nvoid Sema::CheckExtraCXXDefaultArguments(Declarator &D) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    if (chunk.Kind == DeclaratorChunk::Function) {\n      // ...\n      for (unsigned argIdx = 0, e = chunk.Fun.NumParams; argIdx != e; ++argIdx) {\n        // ...\n        if (Param->hasUnparsedDefaultArg()) {\n        // ...\n        } else if (Param->getDefaultArg()) {\n          Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc) << Param->getDefaultArg()->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:13:22: error: default arguments can only be specified for parameters in a function declaration"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:13:22: error: default arguments can only be specified for parameters in a function declaration"}
Line 1,176: Line 1,177:
},
},
["err_param_default_argument_on_parameter_pack"]={
["err_param_default_argument_on_parameter_pack"]={
[b]="err_param_default_argument_on_parameter_pack",
[d]="err_param_default_argument_on_parameter_pack",
[j]="parameter pack cannot have a default argument",
[e]="parameter pack cannot have a default argument",
[i]="parameter pack cannot have a default argument",
[f]="parameter pack cannot have a default argument",
[h]=k,
[g]=k,
[c]="parameter pack cannot have a default argument",
[h]="parameter pack cannot have a default argument",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"3b8044c02d33",1427464711,"[Sema] Diagnose default argument on a parameter pack.","[Sema] Diagnose default argument on a parameter pack.\n\nThis is ill-formed (and cannot be used anyways).\n\nPR23028.\n\nllvm-svn: 233376"},
[j]={"3b8044c02d33",1427464711,"[Sema] Diagnose default argument on a parameter pack.","[Sema] Diagnose default argument on a parameter pack.\n\nThis is ill-formed (and cannot be used anyways).\n\nPR23028.\n\nllvm-svn: 233376"},
[d]={{w,355,"/// ActOnParamDefaultArgument - Check whether the default argument\n/// provided for a function parameter is well-formed. If so, attach it\n/// to the parameter declaration.\nvoid Sema::ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc, Expr *DefaultArg) {\n  // ...\n  // C++11 [dcl.fct.default]p3\n  //  A default argument expression [...] shall not be specified for a\n  //  parameter pack.\n  if (Param->isParameterPack()) {\n    Diag(EqualLoc, diag::err_param_default_argument_on_parameter_pack) << DefaultArg->getSourceRange();"}},
[i]={{w,355,"/// ActOnParamDefaultArgument - Check whether the default argument\n/// provided for a function parameter is well-formed. If so, attach it\n/// to the parameter declaration.\nvoid Sema::ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc, Expr *DefaultArg) {\n  // ...\n  // C++11 [dcl.fct.default]p3\n  //  A default argument expression [...] shall not be specified for a\n  //  parameter pack.\n  if (Param->isParameterPack()) {\n    Diag(EqualLoc, diag::err_param_default_argument_on_parameter_pack) << DefaultArg->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p3.cpp:19:24: error: parameter pack cannot have a default argument"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p3.cpp:19:24: error: parameter pack cannot have a default argument"}
Line 1,190: Line 1,191:
},
},
["err_param_default_argument_redefinition"]={
["err_param_default_argument_redefinition"]={
[b]="err_param_default_argument_redefinition",
[d]="err_param_default_argument_redefinition",
[j]="redefinition of default argument",
[e]="redefinition of default argument",
[i]="redefinition of default argument",
[f]="redefinition of default argument",
[h]=k,
[g]=k,
[c]="redefinition of default argument",
[h]="redefinition of default argument",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{w,538,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // ...\n  // C++ [dcl.fct.default]p4:\n  //  For non-template functions, default arguments can be added in\n  //  later declarations of a function in the same\n  //  scope. Declarations in different scopes have completely\n  //  distinct sets of default arguments. That is, declarations in\n  //  inner scopes do not acquire default arguments from\n  //  declarations in outer scopes, and vice versa. In a given\n  //  function declaration, all parameters subsequent to a\n  //  parameter with a default argument shall have default\n  //  arguments supplied in this or previous declarations. A\n  //  default argument shall not be redefined by a later\n  //  declaration (not even to the same value).\n  //\n  // C++ [dcl.fct.default]p6:\n  //  Except for member functions of class templates, the default arguments\n  //  in a member function definition that appears outside of the class\n  //  definition are added to the set of default arguments provided by the\n  //  member function declaration in the class definition.\n  for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n    // ...\n    if (OldParamHasDfl && NewParamHasDfl) {\n      unsigned DiagDefaultParamID = diag::err_param_default_argument_redefinition;"}},
[i]={{w,538,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // ...\n  // C++ [dcl.fct.default]p4:\n  //  For non-template functions, default arguments can be added in\n  //  later declarations of a function in the same\n  //  scope. Declarations in different scopes have completely\n  //  distinct sets of default arguments. That is, declarations in\n  //  inner scopes do not acquire default arguments from\n  //  declarations in outer scopes, and vice versa. In a given\n  //  function declaration, all parameters subsequent to a\n  //  parameter with a default argument shall have default\n  //  arguments supplied in this or previous declarations. A\n  //  default argument shall not be redefined by a later\n  //  declaration (not even to the same value).\n  //\n  // C++ [dcl.fct.default]p6:\n  //  Except for member functions of class templates, the default arguments\n  //  in a member function definition that appears outside of the class\n  //  definition are added to the set of default arguments provided by the\n  //  member function declaration in the class definition.\n  for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n    // ...\n    if (OldParamHasDfl && NewParamHasDfl) {\n      unsigned DiagDefaultParamID = diag::err_param_default_argument_redefinition;"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p6.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p6.cpp:9:15: error: redefinition of default argument"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p6.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p6.cpp:9:15: error: redefinition of default argument"}
Line 1,204: Line 1,205:
},
},
["err_param_default_argument_references_local"]={
["err_param_default_argument_references_local"]={
[b]="err_param_default_argument_references_local",
[d]="err_param_default_argument_references_local",
[j]="default argument references local variable %0 of enclosing function",
[e]="default argument references local variable %0 of enclosing function",
[i]="default argument references local variable A of enclosing function",
[f]="default argument references local variable A of enclosing function",
[h]=k,
[g]=k,
[c]="default argument references local variable (.*?) of enclosing function",
[h]="default argument references local variable (.*?) of enclosing function",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{w,128,"/// VisitDeclRefExpr - Visit a reference to a declaration, to\n/// determine whether this declaration can be used in the default\n/// argument expression.\nbool CheckDefaultArgumentVisitor::VisitDeclRefExpr(const DeclRefExpr *DRE) {\n  // ...\n  if (const auto *Param = dyn_cast<ParmVarDecl>(Decl)) {\n  // ...\n  } else if (auto *VD = Decl->getPotentiallyDecomposedVarDecl()) {\n    // C++ [dcl.fct.default]p7:\n    //  Local variables shall not be used in default argument\n    //  expressions.\n    //\n    // C++17 [dcl.fct.default]p7 (by CWG 2082):\n    //  A local variable shall not appear as a potentially-evaluated\n    //  expression in a default argument.\n    //\n    // C++20 [dcl.fct.default]p7 (DR as part of P0588R1, see also CWG 2346):\n    //  Note: A local variable cannot be odr-used (6.3) in a default\n    //  argument.\n    //\n    if (VD->isLocalVarDecl() && !DRE->isNonOdrUse())\n      return S.Diag(DRE->getBeginLoc(), diag::err_param_default_argument_references_local) << Decl << DefaultArg->getSourceRange();"}},
[i]={{w,128,"/// VisitDeclRefExpr - Visit a reference to a declaration, to\n/// determine whether this declaration can be used in the default\n/// argument expression.\nbool CheckDefaultArgumentVisitor::VisitDeclRefExpr(const DeclRefExpr *DRE) {\n  // ...\n  if (const auto *Param = dyn_cast<ParmVarDecl>(Decl)) {\n  // ...\n  } else if (auto *VD = Decl->getPotentiallyDecomposedVarDecl()) {\n    // C++ [dcl.fct.default]p7:\n    //  Local variables shall not be used in default argument\n    //  expressions.\n    //\n    // C++17 [dcl.fct.default]p7 (by CWG 2082):\n    //  A local variable shall not appear as a potentially-evaluated\n    //  expression in a default argument.\n    //\n    // C++20 [dcl.fct.default]p7 (DR as part of P0588R1, see also CWG 2346):\n    //  Note: A local variable cannot be odr-used (6.3) in a default\n    //  argument.\n    //\n    if (VD->isLocalVarDecl() && !DRE->isNonOdrUse())\n      return S.Diag(DRE->getBeginLoc(), diag::err_param_default_argument_references_local) << Decl << DefaultArg->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p7.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p7.cpp:5:26: error: default argument references local variable \'i1\' of enclosing function","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p7.cpp:13:34: error: default argument references local variable \'i3\' of enclosing function","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p7.cpp:24:24: error: default argument references local variable \'\' of enclosing function","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p7.cpp:30:24: error: default argument references local variable \'x\' of enclosing function"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p7.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p7.cpp:5:26: error: default argument references local variable \'i1\' of enclosing function","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p7.cpp:13:34: error: default argument references local variable \'i3\' of enclosing function","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p7.cpp:24:24: error: default argument references local variable \'\' of enclosing function","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p7.cpp:30:24: error: default argument references local variable \'x\' of enclosing function"}
Line 1,218: Line 1,219:
},
},
["err_param_default_argument_references_param"]={
["err_param_default_argument_references_param"]={
[b]="err_param_default_argument_references_param",
[d]="err_param_default_argument_references_param",
[j]="default argument references parameter %0",
[e]="default argument references parameter %0",
[i]="default argument references parameter A",
[f]="default argument references parameter A",
[h]=k,
[g]=k,
[c]="default argument references parameter (.*?)",
[h]="default argument references parameter (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{w,111,"/// VisitDeclRefExpr - Visit a reference to a declaration, to\n/// determine whether this declaration can be used in the default\n/// argument expression.\nbool CheckDefaultArgumentVisitor::VisitDeclRefExpr(const DeclRefExpr *DRE) {\n  // ...\n  if (const auto *Param = dyn_cast<ParmVarDecl>(Decl)) {\n    // C++ [dcl.fct.default]p9:\n    //  [...] parameters of a function shall not be used in default\n    //  argument expressions, even if they are not evaluated. [...]\n    //\n    // C++17 [dcl.fct.default]p9 (by CWG 2082):\n    //  [...] A parameter shall not appear as a potentially-evaluated\n    //  expression in a default argument. [...]\n    //\n    if (DRE->isNonOdrUse() != NOUR_Unevaluated)\n      return S.Diag(DRE->getBeginLoc(), diag::err_param_default_argument_references_param) << Param->getDeclName() << DefaultArg->getSourceRange();"}},
[i]={{w,111,"/// VisitDeclRefExpr - Visit a reference to a declaration, to\n/// determine whether this declaration can be used in the default\n/// argument expression.\nbool CheckDefaultArgumentVisitor::VisitDeclRefExpr(const DeclRefExpr *DRE) {\n  // ...\n  if (const auto *Param = dyn_cast<ParmVarDecl>(Decl)) {\n    // C++ [dcl.fct.default]p9:\n    //  [...] parameters of a function shall not be used in default\n    //  argument expressions, even if they are not evaluated. [...]\n    //\n    // C++17 [dcl.fct.default]p9 (by CWG 2082):\n    //  [...] A parameter shall not appear as a potentially-evaluated\n    //  expression in a default argument. [...]\n    //\n    if (DRE->isNonOdrUse() != NOUR_Unevaluated)\n      return S.Diag(DRE->getBeginLoc(), diag::err_param_default_argument_references_param) << Param->getDeclName() << DefaultArg->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.lookup/basic.lookup.unqual/p11.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.unqual/p11.cpp:6:17: error: default argument references parameter \'a\'"}
["clang/test/CXX/basic/basic.lookup/basic.lookup.unqual/p11.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.unqual/p11.cpp:6:17: error: default argument references parameter \'a\'"}
Line 1,232: Line 1,233:
},
},
["err_param_default_argument_references_this"]={
["err_param_default_argument_references_this"]={
[b]="err_param_default_argument_references_this",
[d]="err_param_default_argument_references_this",
[j]="default argument references \'this\'",
[e]="default argument references \'this\'",
[i]="default argument references \'this\'",
[f]="default argument references \'this\'",
[h]=k,
[g]=k,
[c]="default argument references \'this\'",
[h]="default argument references \'this\'",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{w,140,"/// VisitCXXThisExpr - Visit a C++ \"this\" expression.\nbool CheckDefaultArgumentVisitor::VisitCXXThisExpr(const CXXThisExpr *ThisE) {\n  // ...\n  return S.Diag(ThisE->getBeginLoc(), diag::err_param_default_argument_references_this) << ThisE->getSourceRange();"}},
[i]={{w,140,"/// VisitCXXThisExpr - Visit a C++ \"this\" expression.\nbool CheckDefaultArgumentVisitor::VisitCXXThisExpr(const CXXThisExpr *ThisE) {\n  // ...\n  return S.Diag(ThisE->getBeginLoc(), diag::err_param_default_argument_references_this) << ThisE->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p8.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p8.cpp:13:23: error: default argument references \'this\'"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p8.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p8.cpp:13:23: error: default argument references \'this\'"}
Line 1,246: Line 1,247:
},
},
["err_param_default_argument_template_redecl"]={
["err_param_default_argument_template_redecl"]={
[b]="err_param_default_argument_template_redecl",
[d]="err_param_default_argument_template_redecl",
[j]="default arguments cannot be added to a function template that has already been declared",
[e]="default arguments cannot be added to a function template that has already been declared",
[i]="default arguments cannot be added to a function template that has already been declared",
[f]="default arguments cannot be added to a function template that has already been declared",
[h]=k,
[g]=k,
[c]="default arguments cannot be added to a function template that has already been declared",
[h]="default arguments cannot be added to a function template that has already been declared",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"c732aba9a98c",1252694672,"Cleanup and test C++ default arguments. Improvements include:","Cleanup and test C++ default arguments. Improvements include:\n\n  - Diagnose attempts to add default arguments to templates (or member\n    functions of templates) after the initial declaration (DR217).\n  - Improve diagnostics when a default argument is redefined. Now, the\n    note will always point at the place where the default argument was\n    previously defined, rather than pointing to the most recent\n    declaration of the function.\n\nllvm-svn: 81548"},
[j]={"c732aba9a98c",1252694672,"Cleanup and test C++ default arguments. Improvements include:","Cleanup and test C++ default arguments. Improvements include:\n\n  - Diagnose attempts to add default arguments to templates (or member\n    functions of templates) after the initial declaration (DR217).\n  - Improve diagnostics when a default argument is redefined. Now, the\n    note will always point at the place where the default argument was\n    previously defined, rather than pointing to the most recent\n    declaration of the function.\n\nllvm-svn: 81548"},
[d]={{w,601,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // ...\n  // C++ [dcl.fct.default]p4:\n  //  For non-template functions, default arguments can be added in\n  //  later declarations of a function in the same\n  //  scope. Declarations in different scopes have completely\n  //  distinct sets of default arguments. That is, declarations in\n  //  inner scopes do not acquire default arguments from\n  //  declarations in outer scopes, and vice versa. In a given\n  //  function declaration, all parameters subsequent to a\n  //  parameter with a default argument shall have default\n  //  arguments supplied in this or previous declarations. A\n  //  default argument shall not be redefined by a later\n  //  declaration (not even to the same value).\n  //\n  // C++ [dcl.fct.default]p6:\n  //  Except for member functions of class templates, the default arguments\n  //  in a member function definition that appears outside of the class\n  //  definition are added to the set of default arguments provided by the\n  //  member function declaration in the class definition.\n  for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n    // ...\n    if (OldParamHasDfl && NewParamHasDfl) {\n    // ...\n    } else if (OldParamHasDfl) {\n    // ...\n    } else if (NewParamHasDfl) {\n      if (New->getDescribedFunctionTemplate()) {\n        // ...\n        Diag(NewParam->getLocation(), diag::err_param_default_argument_template_redecl) << NewParam->getDefaultArgRange();"}},
[i]={{w,601,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // ...\n  // C++ [dcl.fct.default]p4:\n  //  For non-template functions, default arguments can be added in\n  //  later declarations of a function in the same\n  //  scope. Declarations in different scopes have completely\n  //  distinct sets of default arguments. That is, declarations in\n  //  inner scopes do not acquire default arguments from\n  //  declarations in outer scopes, and vice versa. In a given\n  //  function declaration, all parameters subsequent to a\n  //  parameter with a default argument shall have default\n  //  arguments supplied in this or previous declarations. A\n  //  default argument shall not be redefined by a later\n  //  declaration (not even to the same value).\n  //\n  // C++ [dcl.fct.default]p6:\n  //  Except for member functions of class templates, the default arguments\n  //  in a member function definition that appears outside of the class\n  //  definition are added to the set of default arguments provided by the\n  //  member function declaration in the class definition.\n  for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n    // ...\n    if (OldParamHasDfl && NewParamHasDfl) {\n    // ...\n    } else if (OldParamHasDfl) {\n    // ...\n    } else if (NewParamHasDfl) {\n      if (New->getDescribedFunctionTemplate()) {\n        // ...\n        Diag(NewParam->getLocation(), diag::err_param_default_argument_template_redecl) << NewParam->getDefaultArgRange();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp:19:25: error: default arguments cannot be added to a function template that has already been declared"}
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp:19:25: error: default arguments cannot be added to a function template that has already been declared"}
Line 1,260: Line 1,261:
},
},
["err_param_redefinition"]={
["err_param_redefinition"]={
[b]="err_param_redefinition",
[d]="err_param_redefinition",
[j]="redefinition of parameter %0",
[e]="redefinition of parameter %0",
[i]="redefinition of parameter A",
[f]="redefinition of parameter A",
[h]=k,
[g]=k,
[c]="redefinition of parameter (.*?)",
[h]="redefinition of parameter (.*?)",
[f]=a,
[b]=a,
[e]=y,
[c]=y,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{Kb,7241,"/// ParseFunctionDeclaratorIdentifierList - While parsing a function declarator\n/// we found a K&R-style identifier list instead of a typed parameter list.\n///\n/// After returning, ParamInfo will hold the parsed parameters.\n///\n///      identifier-list: [C99 6.7.5]\n///        identifier\n///        identifier-list \',\' identifier\n///\nvoid Parser::ParseFunctionDeclaratorIdentifierList(Declarator &D, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo) {\n  // ...\n  do {\n    // ...\n    // Verify that the argument identifier has not already been mentioned.\n    if (!ParamsSoFar.insert(ParmII).second) {\n      Diag(Tok, diag::err_param_redefinition) << ParmII;"},{"clang/lib/Parse/Parser.cpp",1573,"/// ParseKNRParamDeclarations - Parse \'declaration-list[opt]\' which provides\n/// types for a function with a K&R-style identifier list for arguments.\nvoid Parser::ParseKNRParamDeclarations(Declarator &D) {\n  // ...\n  // Read all the argument declarations.\n  while (isDeclarationSpecifier(ImplicitTypenameContext::No)) {\n    // ...\n    // Handle the full declarator list.\n    while (true) {\n      // ...\n      if (Param &&\n        // ...\n        // Scan the argument list looking for the correct param to apply this\n        // type.\n        for (unsigned i = 0;; ++i) {\n          // ...\n          if (FTI.Params[i].Ident == ParmDeclarator.getIdentifier()) {\n            // Reject redefinitions of parameters.\n            if (FTI.Params[i].Param) {\n              Diag(ParmDeclarator.getIdentifierLoc(), diag::err_param_redefinition) << ParmDeclarator.getIdentifier();"},{D,14782,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (II) {\n    // ...\n    if (R.isSingleResult()) {\n      // ...\n      if (PrevDecl->isTemplateParameter()) {\n      // ...\n      } else if (S->isDeclScope(PrevDecl)) {\n        Diag(D.getIdentifierLoc(), diag::err_param_redefinition) << II;"}},
[i]={{yb,7241,"/// ParseFunctionDeclaratorIdentifierList - While parsing a function declarator\n/// we found a K&R-style identifier list instead of a typed parameter list.\n///\n/// After returning, ParamInfo will hold the parsed parameters.\n///\n///      identifier-list: [C99 6.7.5]\n///        identifier\n///        identifier-list \',\' identifier\n///\nvoid Parser::ParseFunctionDeclaratorIdentifierList(Declarator &D, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo) {\n  // ...\n  do {\n    // ...\n    // Verify that the argument identifier has not already been mentioned.\n    if (!ParamsSoFar.insert(ParmII).second) {\n      Diag(Tok, diag::err_param_redefinition) << ParmII;"},{"clang/lib/Parse/Parser.cpp",1573,"/// ParseKNRParamDeclarations - Parse \'declaration-list[opt]\' which provides\n/// types for a function with a K&R-style identifier list for arguments.\nvoid Parser::ParseKNRParamDeclarations(Declarator &D) {\n  // ...\n  // Read all the argument declarations.\n  while (isDeclarationSpecifier(ImplicitTypenameContext::No)) {\n    // ...\n    // Handle the full declarator list.\n    while (true) {\n      // ...\n      if (Param &&\n        // ...\n        // Scan the argument list looking for the correct param to apply this\n        // type.\n        for (unsigned i = 0;; ++i) {\n          // ...\n          if (FTI.Params[i].Ident == ParmDeclarator.getIdentifier()) {\n            // Reject redefinitions of parameters.\n            if (FTI.Params[i].Param) {\n              Diag(ParmDeclarator.getIdentifierLoc(), diag::err_param_redefinition) << ParmDeclarator.getIdentifier();"},{D,14782,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (II) {\n    // ...\n    if (R.isSingleResult()) {\n      // ...\n      if (PrevDecl->isTemplateParameter()) {\n      // ...\n      } else if (S->isDeclScope(PrevDecl)) {\n        Diag(D.getIdentifierLoc(), diag::err_param_redefinition) << II;"}},
[l]={
[l]={
["clang/test/Parser/declarators.c"]={"clang/test/Parser/declarators.c:34:15: error: redefinition of parameter \'x\'"}
["clang/test/Parser/declarators.c"]={"clang/test/Parser/declarators.c:34:15: error: redefinition of parameter \'x\'"}
Line 1,274: Line 1,275:
},
},
["err_param_with_void_type"]={
["err_param_with_void_type"]={
[b]="err_param_with_void_type",
[d]="err_param_with_void_type",
[j]="argument may not have \'void\' type",
[e]="argument may not have \'void\' type",
[i]="argument may not have \'void\' type",
[f]="argument may not have \'void\' type",
[h]=k,
[g]=k,
[c]="argument may not have \'void\' type",
[h]="argument may not have \'void\' type",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{"clang/lib/Sema/SemaTemplateInstantiate.cpp",2853,"ParmVarDecl *Sema::SubstParmVarDecl(ParmVarDecl *OldParm, const MultiLevelTemplateArgumentList &TemplateArgs, int indexAdjustment, std::optional<unsigned> NumExpansions, bool ExpectParameterPack, bool EvaluateConstraint) {\n  // ...\n  if (NewDI->getType()->isVoidType()) {\n    Diag(OldParm->getLocation(), diag::err_param_with_void_type);"},{rb,3025,"QualType Sema::BuildFunctionType(QualType T, MutableArrayRef<QualType> ParamTypes, SourceLocation Loc, DeclarationName Entity, const FunctionProtoType::ExtProtoInfo &EPI) {\n  // ...\n  for (unsigned Idx = 0, Cnt = ParamTypes.size(); Idx < Cnt; ++Idx) {\n    // ...\n    if (ParamType->isVoidType()) {\n      Diag(Loc, diag::err_param_with_void_type);"},{rb,5508,"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      // OpenCL disallows functions without a prototype, but it doesn\'t enforce\n      // strict prototypes as in C2x because it allows a function definition to\n      // have an identifier list. See OpenCL 3.0 6.11/g for more details.\n      if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.requiresStrictPrototypes() && !LangOpts.OpenCL) {\n      // ...\n      } else {\n        // ...\n        for (unsigned i = 0, e = FTI.NumParams; i != e; ++i) {\n          // ...\n          // Look for \'void\'.  void is allowed only as a single parameter to a\n          // function with no other parameters (C99 6.7.5.3p10).  We record\n          // int(void) as a FunctionProtoType with an empty parameter list.\n          if (ParamTy->isVoidType()) {\n            // If this is something like \'float(int, void)\', reject it.  \'void\'\n            // is an incomplete type (C99 6.2.5p19) and function decls cannot\n            // have parameters of incomplete type.\n            if (FTI.NumParams != 1 || FTI.isVariadic) {\n            // ...\n            } else if (FTI.Params[i].Ident) {\n              // ...\n              S.Diag(FTI.Params[i].IdentLoc, diag::err_param_with_void_type);"}},
[i]={{"clang/lib/Sema/SemaTemplateInstantiate.cpp",2853,"ParmVarDecl *Sema::SubstParmVarDecl(ParmVarDecl *OldParm, const MultiLevelTemplateArgumentList &TemplateArgs, int indexAdjustment, std::optional<unsigned> NumExpansions, bool ExpectParameterPack, bool EvaluateConstraint) {\n  // ...\n  if (NewDI->getType()->isVoidType()) {\n    Diag(OldParm->getLocation(), diag::err_param_with_void_type);"},{ob,3025,"QualType Sema::BuildFunctionType(QualType T, MutableArrayRef<QualType> ParamTypes, SourceLocation Loc, DeclarationName Entity, const FunctionProtoType::ExtProtoInfo &EPI) {\n  // ...\n  for (unsigned Idx = 0, Cnt = ParamTypes.size(); Idx < Cnt; ++Idx) {\n    // ...\n    if (ParamType->isVoidType()) {\n      Diag(Loc, diag::err_param_with_void_type);"},{ob,5508,"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      // OpenCL disallows functions without a prototype, but it doesn\'t enforce\n      // strict prototypes as in C2x because it allows a function definition to\n      // have an identifier list. See OpenCL 3.0 6.11/g for more details.\n      if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.requiresStrictPrototypes() && !LangOpts.OpenCL) {\n      // ...\n      } else {\n        // ...\n        for (unsigned i = 0, e = FTI.NumParams; i != e; ++i) {\n          // ...\n          // Look for \'void\'.  void is allowed only as a single parameter to a\n          // function with no other parameters (C99 6.7.5.3p10).  We record\n          // int(void) as a FunctionProtoType with an empty parameter list.\n          if (ParamTy->isVoidType()) {\n            // If this is something like \'float(int, void)\', reject it.  \'void\'\n            // is an incomplete type (C99 6.2.5p19) and function decls cannot\n            // have parameters of incomplete type.\n            if (FTI.NumParams != 1 || FTI.isVariadic) {\n            // ...\n            } else if (FTI.Params[i].Ident) {\n              // ...\n              S.Diag(FTI.Params[i].IdentLoc, diag::err_param_with_void_type);"}},
[l]={
[l]={
["clang/test/Sema/void_arg.c"]={"clang/test/Sema/void_arg.c:9:24: error: argument may not have \'void\' type","clang/test/Sema/void_arg.c:13:24: error: argument may not have \'void\' type"}
["clang/test/Sema/void_arg.c"]={"clang/test/Sema/void_arg.c:9:24: error: argument may not have \'void\' type","clang/test/Sema/void_arg.c:13:24: error: argument may not have \'void\' type"}
Line 1,288: Line 1,289:
},
},
["err_parameter_shadow_capture"]={
["err_parameter_shadow_capture"]={
[b]={{nil,u,"err_parameter_shadow_capture"}},
[d]={{nil,u,"err_parameter_shadow_capture"}},
[j]={{nil,u,"a lambda parameter cannot shadow an explicitly captured entity"}},
[e]={{nil,u,"a lambda parameter cannot shadow an explicitly captured entity"}},
[i]={{nil,u,"a lambda parameter cannot shadow an explicitly captured entity"}},
[f]={{nil,u,"a lambda parameter cannot shadow an explicitly captured entity"}},
[h]=k,
[g]=k,
[c]="a lambda parameter cannot shadow an explicitly captured entity",
[h]="a lambda parameter cannot shadow an explicitly captured entity",
[f]=a,
[b]=a,
[e]={{nil,u,"Lambda Issue"}},
[c]={{nil,u,"Lambda Issue"}},
[g]={"3cde5e4a4c69",1540498503,"[C++17] Reject shadowing of capture by parameter in lambda","[C++17] Reject shadowing of capture by parameter in lambda\n\nSummary:\nThis change rejects the shadowing of a capture by a parameter in lambdas in C++17.\n\n```\nint main() {\n  int a;\n  auto f = [a](int a) { return a; };\n}\n```\n\nresults in:\n\n```\nmain.cpp:3:20: error: a lambda parameter cannot shadow an explicitly captured entity\n  auto f = [a](int a) { return a; };\n                  ^\nmain.cpp:3:13: note: variable a is explicitly captured here\n  auto f = [a](int a) { return a; };\n            ^\n```\n\nReviewers: rsmith\n\nReviewed By: rsmith\n\nSubscribers: lebedev.ri, erik.pilkington, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D53595\n\nllvm-svn: 345308"},
[j]={"3cde5e4a4c69",1540498503,"[C++17] Reject shadowing of capture by parameter in lambda","[C++17] Reject shadowing of capture by parameter in lambda\n\nSummary:\nThis change rejects the shadowing of a capture by a parameter in lambdas in C++17.\n\n```\nint main() {\n  int a;\n  auto f = [a](int a) { return a; };\n}\n```\n\nresults in:\n\n```\nmain.cpp:3:20: error: a lambda parameter cannot shadow an explicitly captured entity\n  auto f = [a](int a) { return a; };\n                  ^\nmain.cpp:3:13: note: variable a is explicitly captured here\n  auto f = [a](int a) { return a; };\n            ^\n```\n\nReviewers: rsmith\n\nReviewed By: rsmith\n\nSubscribers: lebedev.ri, erik.pilkington, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D53595\n\nllvm-svn: 345308"},
[d]={{"clang/lib/Sema/SemaLambda.cpp",1351,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  // ...\n  auto CheckRedefinition = [&](ParmVarDecl *Param) {\n    for (const auto &Capture : Intro.Captures) {\n      if (Capture.Id == Param->getIdentifier()) {\n        Diag(Param->getLocation(), diag::err_parameter_shadow_capture);"}},
[i]={{"clang/lib/Sema/SemaLambda.cpp",1351,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  // ...\n  auto CheckRedefinition = [&](ParmVarDecl *Param) {\n    for (const auto &Capture : Intro.Captures) {\n      if (Capture.Id == Param->getIdentifier()) {\n        Diag(Param->getLocation(), diag::err_parameter_shadow_capture);"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/expr.prim.lambda.capture/p5.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/expr.prim.lambda.capture/p5.cpp:5:20: error: a lambda parameter cannot shadow an explicitly captured entity"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/expr.prim.lambda.capture/p5.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/expr.prim.lambda.capture/p5.cpp:5:20: error: a lambda parameter cannot shadow an explicitly captured entity"}
Line 1,302: Line 1,303:
},
},
["err_parameters_retval_cannot_have_fp16_type"]={
["err_parameters_retval_cannot_have_fp16_type"]={
[b]="err_parameters_retval_cannot_have_fp16_type",
[d]="err_parameters_retval_cannot_have_fp16_type",
[j]="%select{parameters|function return value}0 cannot have __fp16 type; did you forget * ?",
[e]="%select{parameters|function return value}0 cannot have __fp16 type; did you forget * ?",
[i]={{nil,nil,{{"parameters","function return value"}," cannot have __fp16 type; did you forget * ?"}}},
[f]={{nil,nil,{{"parameters","function return value"}," cannot have __fp16 type; did you forget * ?"}}},
[h]=k,
[g]=k,
[c]="(?:parameters|function return value) cannot have __fp16 type; did you forget \\* \\?",
[h]="(?:parameters|function return value) cannot have __fp16 type; did you forget \\* \\?",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"f0c267e6e05c",1318634595,"Provide half floating point support as a storage only type.","Provide half floating point support as a storage only type.\nLack of half FP was a regression compared to llvm-gcc.\n\nllvm-svn: 142016"},
[j]={"f0c267e6e05c",1318634595,"Provide half floating point support as a storage only type.","Provide half floating point support as a storage only type.\nLack of half FP was a regression compared to llvm-gcc.\n\nllvm-svn: 142016"},
[d]={{rb,2920,"bool Sema::CheckFunctionReturnType(QualType T, SourceLocation Loc) {\n  // ...\n  // Functions cannot return half FP.\n  if (T->isHalfType() && !getLangOpts().NativeHalfArgsAndReturns && !Context.getTargetInfo().allowHalfArgsAndReturns()) {\n    Diag(Loc, diag::err_parameters_retval_cannot_have_fp16_type) << 1 << FixItHint::CreateInsertion(Loc, \"*\");"},{rb,3030,"QualType Sema::BuildFunctionType(QualType T, MutableArrayRef<QualType> ParamTypes, SourceLocation Loc, DeclarationName Entity, const FunctionProtoType::ExtProtoInfo &EPI) {\n  // ...\n  for (unsigned Idx = 0, Cnt = ParamTypes.size(); Idx < Cnt; ++Idx) {\n    // ...\n    if (ParamType->isVoidType()) {\n    // ...\n    } else if (ParamType->isHalfType() && !getLangOpts().NativeHalfArgsAndReturns && !Context.getTargetInfo().allowHalfArgsAndReturns()) {\n      // ...\n      Diag(Loc, diag::err_parameters_retval_cannot_have_fp16_type) << 0 << FixItHint::CreateInsertion(Loc, \"*\");"},{rb,5292,"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      // Do not allow returning half FP value.\n      // FIXME: This really should be in BuildFunctionType.\n      if (T->isHalfType()) {\n        if (S.getLangOpts().OpenCL) {\n        // ...\n        } else if (!S.getLangOpts().NativeHalfArgsAndReturns && !S.Context.getTargetInfo().allowHalfArgsAndReturns()) {\n          S.Diag(D.getIdentifierLoc(), diag::err_parameters_retval_cannot_have_fp16_type) << 1;"},{rb,5533,"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      // OpenCL disallows functions without a prototype, but it doesn\'t enforce\n      // strict prototypes as in C2x because it allows a function definition to\n      // have an identifier list. See OpenCL 3.0 6.11/g for more details.\n      if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.requiresStrictPrototypes() && !LangOpts.OpenCL) {\n      // ...\n      } else {\n        // ...\n        for (unsigned i = 0, e = FTI.NumParams; i != e; ++i) {\n          // ...\n          // Look for \'void\'.  void is allowed only as a single parameter to a\n          // function with no other parameters (C99 6.7.5.3p10).  We record\n          // int(void) as a FunctionProtoType with an empty parameter list.\n          if (ParamTy->isVoidType()) {\n          // ...\n          } else if (ParamTy->isHalfType()) {\n            // Disallow half FP parameters.\n            // FIXME: This really should be in BuildFunctionType.\n            if (S.getLangOpts().OpenCL) {\n            // ...\n            } else if (!S.getLangOpts().NativeHalfArgsAndReturns && !S.Context.getTargetInfo().allowHalfArgsAndReturns()) {\n              S.Diag(Param->getLocation(), diag::err_parameters_retval_cannot_have_fp16_type) << 0;"}},
[i]={{ob,2920,"bool Sema::CheckFunctionReturnType(QualType T, SourceLocation Loc) {\n  // ...\n  // Functions cannot return half FP.\n  if (T->isHalfType() && !getLangOpts().NativeHalfArgsAndReturns && !Context.getTargetInfo().allowHalfArgsAndReturns()) {\n    Diag(Loc, diag::err_parameters_retval_cannot_have_fp16_type) << 1 << FixItHint::CreateInsertion(Loc, \"*\");"},{ob,3030,"QualType Sema::BuildFunctionType(QualType T, MutableArrayRef<QualType> ParamTypes, SourceLocation Loc, DeclarationName Entity, const FunctionProtoType::ExtProtoInfo &EPI) {\n  // ...\n  for (unsigned Idx = 0, Cnt = ParamTypes.size(); Idx < Cnt; ++Idx) {\n    // ...\n    if (ParamType->isVoidType()) {\n    // ...\n    } else if (ParamType->isHalfType() && !getLangOpts().NativeHalfArgsAndReturns && !Context.getTargetInfo().allowHalfArgsAndReturns()) {\n      // ...\n      Diag(Loc, diag::err_parameters_retval_cannot_have_fp16_type) << 0 << FixItHint::CreateInsertion(Loc, \"*\");"},{ob,5292,"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      // Do not allow returning half FP value.\n      // FIXME: This really should be in BuildFunctionType.\n      if (T->isHalfType()) {\n        if (S.getLangOpts().OpenCL) {\n        // ...\n        } else if (!S.getLangOpts().NativeHalfArgsAndReturns && !S.Context.getTargetInfo().allowHalfArgsAndReturns()) {\n          S.Diag(D.getIdentifierLoc(), diag::err_parameters_retval_cannot_have_fp16_type) << 1;"},{ob,5533,"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      // OpenCL disallows functions without a prototype, but it doesn\'t enforce\n      // strict prototypes as in C2x because it allows a function definition to\n      // have an identifier list. See OpenCL 3.0 6.11/g for more details.\n      if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.requiresStrictPrototypes() && !LangOpts.OpenCL) {\n      // ...\n      } else {\n        // ...\n        for (unsigned i = 0, e = FTI.NumParams; i != e; ++i) {\n          // ...\n          // Look for \'void\'.  void is allowed only as a single parameter to a\n          // function with no other parameters (C99 6.7.5.3p10).  We record\n          // int(void) as a FunctionProtoType with an empty parameter list.\n          if (ParamTy->isVoidType()) {\n          // ...\n          } else if (ParamTy->isHalfType()) {\n            // Disallow half FP parameters.\n            // FIXME: This really should be in BuildFunctionType.\n            if (S.getLangOpts().OpenCL) {\n            // ...\n            } else if (!S.getLangOpts().NativeHalfArgsAndReturns && !S.Context.getTargetInfo().allowHalfArgsAndReturns()) {\n              S.Diag(Param->getLocation(), diag::err_parameters_retval_cannot_have_fp16_type) << 0;"}},
[l]={
[l]={
["clang/test/Sema/fp16-sema.c"]={"clang/test/Sema/fp16-sema.c:5:22: error: parameters cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:8:26: error: parameters cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:11:26: error: parameters cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:15:9: error: parameters cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:23:15: error: function return value cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:26:17: error: function return value cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:29:18: error: function return value cannot have __fp16 type; did you forget * ?"}
["clang/test/Sema/fp16-sema.c"]={"clang/test/Sema/fp16-sema.c:5:22: error: parameters cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:8:26: error: parameters cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:11:26: error: parameters cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:15:9: error: parameters cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:23:15: error: function return value cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:26:17: error: function return value cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:29:18: error: function return value cannot have __fp16 type; did you forget * ?"}
Line 1,316: Line 1,317:
},
},
["err_paren_sizeof_parameter_pack"]={
["err_paren_sizeof_parameter_pack"]={
[b]="err_paren_sizeof_parameter_pack",
[d]="err_paren_sizeof_parameter_pack",
[j]="missing parentheses around the size of parameter pack %0",
[e]="missing parentheses around the size of parameter pack %0",
[i]="missing parentheses around the size of parameter pack A",
[f]="missing parentheses around the size of parameter pack A",
[h]=k,
[g]=k,
[c]="missing parentheses around the size of parameter pack (.*?)",
[h]="missing parentheses around the size of parameter pack (.*?)",
[f]=a,
[b]=a,
[e]=y,
[c]=y,
[g]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a","Implement the sizeof...(pack) expression to compute the length of a\nparameter pack.\n\nNote that we\'re missing proper libclang support for the new\nSizeOfPackExpr expression node.\n\nllvm-svn: 122813"},
[j]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a","Implement the sizeof...(pack) expression to compute the length of a\nparameter pack.\n\nNote that we\'re missing proper libclang support for the new\nSizeOfPackExpr expression node.\n\nllvm-svn: 122813"},
[d]={{"clang/lib/Parse/ParseExpr.cpp",2472,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n///      unary-expression:  [C99 6.5.3]\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n  // ...\n  // [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n  if (Tok.is(tok::ellipsis) && OpTok.is(tok::kw_sizeof)) {\n    // ...\n    if (Tok.is(tok::l_paren)) {\n    // ...\n    } else if (Tok.is(tok::identifier)) {\n      // ...\n      Diag(LParenLoc, diag::err_paren_sizeof_parameter_pack) << Name << FixItHint::CreateInsertion(LParenLoc, \"(\") << FixItHint::CreateInsertion(RParenLoc, \")\");"}},
[i]={{"clang/lib/Parse/ParseExpr.cpp",2472,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n///      unary-expression:  [C99 6.5.3]\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n  // ...\n  // [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n  if (Tok.is(tok::ellipsis) && OpTok.is(tok::kw_sizeof)) {\n    // ...\n    if (Tok.is(tok::l_paren)) {\n    // ...\n    } else if (Tok.is(tok::identifier)) {\n      // ...\n      Diag(LParenLoc, diag::err_paren_sizeof_parameter_pack) << Name << FixItHint::CreateInsertion(LParenLoc, \"(\") << FixItHint::CreateInsertion(RParenLoc, \")\");"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp"]={"clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp:35:42: error: missing parentheses around the size of parameter pack \'Type\'"}
["clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp"]={"clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp:35:42: error: missing parentheses around the size of parameter pack \'Type\'"}
Line 1,330: Line 1,331:
},
},
["err_parens_pointer_member_function"]={
["err_parens_pointer_member_function"]={
[b]="err_parens_pointer_member_function",
[d]="err_parens_pointer_member_function",
[j]="cannot parenthesize the name of a method when forming a member pointer",
[e]="cannot parenthesize the name of a method when forming a member pointer",
[i]="cannot parenthesize the name of a method when forming a member pointer",
[f]="cannot parenthesize the name of a method when forming a member pointer",
[h]=k,
[g]=k,
[c]="cannot parenthesize the name of a method when forming a member pointer",
[h]="cannot parenthesize the name of a method when forming a member pointer",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"8d08b9b408ca",1282900108,"Propagate whether an id-expression is the immediate argument of","Propagate whether an id-expression is the immediate argument of\nan \'&\' expression from the second caller of ActOnIdExpression.\n\nTeach template argument deduction that an overloaded id-expression\ndoesn\'t give a valid type for deduction purposes to a non-static\nmember function unless the expression has the correct syntactic\nform.\n\nTeach ActOnIdExpression that it shouldn\'t try to create implicit\nmember expressions for \'&function\', because this isn\'t a        \npermitted form of use for member functions.\n\nTeach CheckAddressOfOperand to diagnose these more carefully.\nSome of these cases aren\'t reachable right now because earlier\ndiagnostics interrupt them.\n\nllvm-svn: 112258"},
[j]={"8d08b9b408ca",1282900108,"Propagate whether an id-expression is the immediate argument of","Propagate whether an id-expression is the immediate argument of\nan \'&\' expression from the second caller of ActOnIdExpression.\n\nTeach template argument deduction that an overloaded id-expression\ndoesn\'t give a valid type for deduction purposes to a non-static\nmember function unless the expression has the correct syntactic\nform.\n\nTeach ActOnIdExpression that it shouldn\'t try to create implicit\nmember expressions for \'&function\', because this isn\'t a        \npermitted form of use for member functions.\n\nTeach CheckAddressOfOperand to diagnose these more carefully.\nSome of these cases aren\'t reachable right now because earlier\ndiagnostics interrupt them.\n\nllvm-svn: 112258"},
[d]={{O,14965,"/// 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    // The id-expression was parenthesized.\n    if (OrigOp.get() != DRE) {\n      Diag(OpLoc, diag::err_parens_pointer_member_function) << OrigOp.get()->getSourceRange();"}}
[i]={{O,14965,"/// 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    // The id-expression was parenthesized.\n    if (OrigOp.get() != DRE) {\n      Diag(OpLoc, diag::err_parens_pointer_member_function) << OrigOp.get()->getSourceRange();"}}
},
},
["err_partial_spec_args_match_primary_template"]={
["err_partial_spec_args_match_primary_template"]={
[b]="err_partial_spec_args_match_primary_template",
[d]="err_partial_spec_args_match_primary_template",
[j]="%select{class|variable}0 template partial specialization does not specialize any template argument; to %select{declare|define}1 the primary template, remove the template argument list",
[e]="%select{class|variable}0 template partial specialization does not specialize any template argument; to %select{declare|define}1 the primary template, remove the template argument list",
[i]={{nil,nil,{{"class","variable"}," template partial specialization does not specialize any template argument; to ",{"declare","define"}," the primary template, remove the template argument list"}}},
[f]={{nil,nil,{{"class","variable"}," template partial specialization does not specialize any template argument; to ",{"declare","define"}," the primary template, remove the template argument list"}}},
[h]=k,
[g]=k,
[c]="(?:class|variable) template partial specialization does not specialize any template argument; to (?:declare|define) the primary template, remove the template argument list",
[h]="(?:class|variable) template partial specialization does not specialize any template argument; to (?:declare|define) the primary template, remove the template argument list",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"09a3023e65d1",1244844486,"Diagnose C++ [temp.class.spec]p9b3, where a class template partial","Diagnose C++ [temp.class.spec]p9b3, where a class template partial\nspecialization\'s arguments are identical to the implicit template\narguments of the primary template. Typically, this is meant to be a\ndeclaration/definition of the primary template, so we give that\nadvice.\n\nllvm-svn: 73259"},
[j]={"09a3023e65d1",1244844486,"Diagnose C++ [temp.class.spec]p9b3, where a class template partial","Diagnose C++ [temp.class.spec]p9b3, where a class template partial\nspecialization\'s arguments are identical to the implicit template\narguments of the primary template. Typically, this is meant to be a\ndeclaration/definition of the primary template, so we give that\nadvice.\n\nllvm-svn: 73259"},
[d]={{W,4588,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n  // ...\n  // Find the variable template (partial) specialization declaration that\n  // corresponds to these arguments.\n  if (IsPartialSpecialization) {\n    // ...\n    if (isSameAsPrimaryTemplate(VarTemplate->getTemplateParameters(), CanonicalConverted) && (!Context.getLangOpts().CPlusPlus20 || !TemplateParams->hasAssociatedConstraints())) {\n      // ...\n      Diag(TemplateNameLoc, diag::err_partial_spec_args_match_primary_template) << /*variable template*/ 1 << /*is definition*/ (SC != SC_Extern && !CurContext->isRecord()) << FixItHint::CreateRemoval(SourceRange(LAngleLoc, RAngleLoc));"},{W,8799,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (isPartialSpecialization) {\n    // ...\n    if (Context.hasSameType(CanonType, ClassTemplate->getInjectedClassNameSpecialization()) && (!Context.getLangOpts().CPlusPlus20 || !TemplateParams->hasAssociatedConstraints())) {\n      // ...\n      Diag(TemplateNameLoc, diag::err_partial_spec_args_match_primary_template) << /*class template*/ 0 << (TUK == TUK_Definition) << FixItHint::CreateRemoval(SourceRange(LAngleLoc, RAngleLoc));"}},
[i]={{W,4588,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n  // ...\n  // Find the variable template (partial) specialization declaration that\n  // corresponds to these arguments.\n  if (IsPartialSpecialization) {\n    // ...\n    if (isSameAsPrimaryTemplate(VarTemplate->getTemplateParameters(), CanonicalConverted) && (!Context.getLangOpts().CPlusPlus20 || !TemplateParams->hasAssociatedConstraints())) {\n      // ...\n      Diag(TemplateNameLoc, diag::err_partial_spec_args_match_primary_template) << /*variable template*/ 1 << /*is definition*/ (SC != SC_Extern && !CurContext->isRecord()) << FixItHint::CreateRemoval(SourceRange(LAngleLoc, RAngleLoc));"},{W,8799,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (isPartialSpecialization) {\n    // ...\n    if (Context.hasSameType(CanonType, ClassTemplate->getInjectedClassNameSpecialization()) && (!Context.getLangOpts().CPlusPlus20 || !TemplateParams->hasAssociatedConstraints())) {\n      // ...\n      Diag(TemplateNameLoc, diag::err_partial_spec_args_match_primary_template) << /*class template*/ 0 << (TUK == TUK_Definition) << FixItHint::CreateRemoval(SourceRange(LAngleLoc, RAngleLoc));"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.constr/temp.constr.order/var-template-partial-specializations.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.order/var-template-partial-specializations.cpp:33:6: error: variable template partial specialization does not specialize any template argument; to define the primary template, remove the template argument list","clang/test/CXX/temp/temp.constr/temp.constr.order/var-template-partial-specializations.cpp:39:6: error: variable template partial specialization does not specialize any template argument; to define the primary template, remove the template argument list"}
["clang/test/CXX/temp/temp.constr/temp.constr.order/var-template-partial-specializations.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.order/var-template-partial-specializations.cpp:33:6: error: variable template partial specialization does not specialize any template argument; to define the primary template, remove the template argument list","clang/test/CXX/temp/temp.constr/temp.constr.order/var-template-partial-specializations.cpp:39:6: error: variable template partial specialization does not specialize any template argument; to define the primary template, remove the template argument list"}
Line 1,355: Line 1,356:
},
},
["err_partial_spec_fully_specialized"]={
["err_partial_spec_fully_specialized"]={
[b]="err_partial_spec_fully_specialized",
[d]="err_partial_spec_fully_specialized",
[j]="partial specialization of %0 does not use any of its template parameters",
[e]="partial specialization of %0 does not use any of its template parameters",
[i]="partial specialization of A does not use any of its template parameters",
[f]="partial specialization of A does not use any of its template parameters",
[h]=k,
[g]=k,
[c]="partial specialization of (.*?) does not use any of its template parameters",
[h]="partial specialization of (.*?) does not use any of its template parameters",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"92354b6b552e",1265675852,"Implement a specific diagnostic when a class template partial","Implement a specific diagnostic when a class template partial\nspecialization does not use any of its template parameters, then\nrecover far more gracefully. Fixes PR6181.\n\nllvm-svn: 95629"},
[j]={"92354b6b552e",1265675852,"Implement a specific diagnostic when a class template partial","Implement a specific diagnostic when a class template partial\nspecialization does not use any of its template parameters, then\nrecover far more gracefully. Fixes PR6181.\n\nllvm-svn: 95629"},
[d]={{W,4575,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n  // ...\n  // Find the variable template (partial) specialization declaration that\n  // corresponds to these arguments.\n  if (IsPartialSpecialization) {\n    // ...\n    // FIXME: Move these checks to CheckTemplatePartialSpecializationArgs so we\n    // also do them during instantiation.\n    if (!Name.isDependent() && !TemplateSpecializationType::anyDependentTemplateArguments(TemplateArgs, CanonicalConverted)) {\n      Diag(TemplateNameLoc, diag::err_partial_spec_fully_specialized) << VarTemplate->getDeclName();"},{W,8754,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // ...\n  // Find the class template (partial) specialization declaration that\n  // corresponds to these arguments.\n  if (isPartialSpecialization) {\n    // ...\n    // FIXME: Move this to CheckTemplatePartialSpecializationArgs so we\n    // also do it during instantiation.\n    if (!Name.isDependent() && !TemplateSpecializationType::anyDependentTemplateArguments(TemplateArgs, CanonicalConverted)) {\n      Diag(TemplateNameLoc, diag::err_partial_spec_fully_specialized) << ClassTemplate->getDeclName();"}},
[i]={{W,4575,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n  // ...\n  // Find the variable template (partial) specialization declaration that\n  // corresponds to these arguments.\n  if (IsPartialSpecialization) {\n    // ...\n    // FIXME: Move these checks to CheckTemplatePartialSpecializationArgs so we\n    // also do them during instantiation.\n    if (!Name.isDependent() && !TemplateSpecializationType::anyDependentTemplateArguments(TemplateArgs, CanonicalConverted)) {\n      Diag(TemplateNameLoc, diag::err_partial_spec_fully_specialized) << VarTemplate->getDeclName();"},{W,8754,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // ...\n  // Find the class template (partial) specialization declaration that\n  // corresponds to these arguments.\n  if (isPartialSpecialization) {\n    // ...\n    // FIXME: Move this to CheckTemplatePartialSpecializationArgs so we\n    // also do it during instantiation.\n    if (!Name.isDependent() && !TemplateSpecializationType::anyDependentTemplateArguments(TemplateArgs, CanonicalConverted)) {\n      Diag(TemplateNameLoc, diag::err_partial_spec_fully_specialized) << ClassTemplate->getDeclName();"}},
[l]={
[l]={
["clang/test/SemaTemplate/temp_class_spec.cpp"]={"clang/test/SemaTemplate/temp_class_spec.cpp:359:9: error: partial specialization of \'a\' does not use any of its template parameters","clang/test/SemaTemplate/temp_class_spec.cpp:374:7: error: partial specialization of \'Bar\' does not use any of its template parameters","clang/test/SemaTemplate/temp_class_spec.cpp:386:7: error: partial specialization of \'Foo\' does not use any of its template parameters"}
["clang/test/SemaTemplate/temp_class_spec.cpp"]={"clang/test/SemaTemplate/temp_class_spec.cpp:359:9: error: partial specialization of \'a\' does not use any of its template parameters","clang/test/SemaTemplate/temp_class_spec.cpp:374:7: error: partial specialization of \'Bar\' does not use any of its template parameters","clang/test/SemaTemplate/temp_class_spec.cpp:386:7: error: partial specialization of \'Foo\' does not use any of its template parameters"}
Line 1,369: Line 1,370:
},
},
["err_partial_spec_ordering_ambiguous"]={
["err_partial_spec_ordering_ambiguous"]={
[b]="err_partial_spec_ordering_ambiguous",
[d]="err_partial_spec_ordering_ambiguous",
[j]="ambiguous partial specializations of %0",
[e]="ambiguous partial specializations of %0",
[i]="ambiguous partial specializations of A",
[f]="ambiguous partial specializations of A",
[h]=k,
[g]=k,
[c]="ambiguous partial specializations of (.*?)",
[h]="ambiguous partial specializations of (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"be999390ebc7",1253031831,"Implement partial ordering of class template partial specializations ","Implement partial ordering of class template partial specializations \n(C++ [temp.class.order]).\n\nllvm-svn: 81866"},
[j]={"be999390ebc7",1253031831,"Implement partial ordering of class template partial specializations ","Implement partial ordering of class template partial specializations \n(C++ [temp.class.order]).\n\nllvm-svn: 81866"},
[d]={{W,4852,"DeclResult Sema::CheckVarTemplateId(VarTemplateDecl *Template, SourceLocation TemplateLoc, SourceLocation TemplateNameLoc, const TemplateArgumentListInfo &TemplateArgs) {\n  // ...\n  if (AmbiguousPartialSpec) {\n    // ...\n    Diag(PointOfInstantiation, diag::err_partial_spec_ordering_ambiguous) << Decl;"},{"clang/lib/Sema/SemaTemplateInstantiate.cpp",3691,"/// Get the instantiation pattern to use to instantiate the definition of a\n/// given ClassTemplateSpecializationDecl (either the pattern of the primary\n/// template or of a partial specialization).\nstatic ActionResult<CXXRecordDecl *> getPatternForClassTemplateSpecialization(Sema &S, SourceLocation PointOfInstantiation, ClassTemplateSpecializationDecl *ClassTemplateSpec, TemplateSpecializationKind TSK) {\n  // ...\n  if (!Specialized.is<ClassTemplatePartialSpecializationDecl *>()) {\n    // ...\n    if (Matched.size() >= 1) {\n      // ...\n      if (Matched.size() == 1) {\n      // ...\n      } else {\n        // ...\n        if (Ambiguous) {\n          // ...\n          S.Diag(PointOfInstantiation, diag::err_partial_spec_ordering_ambiguous) << ClassTemplateSpec;"}},
[i]={{W,4852,"DeclResult Sema::CheckVarTemplateId(VarTemplateDecl *Template, SourceLocation TemplateLoc, SourceLocation TemplateNameLoc, const TemplateArgumentListInfo &TemplateArgs) {\n  // ...\n  if (AmbiguousPartialSpec) {\n    // ...\n    Diag(PointOfInstantiation, diag::err_partial_spec_ordering_ambiguous) << Decl;"},{"clang/lib/Sema/SemaTemplateInstantiate.cpp",3691,"/// Get the instantiation pattern to use to instantiate the definition of a\n/// given ClassTemplateSpecializationDecl (either the pattern of the primary\n/// template or of a partial specialization).\nstatic ActionResult<CXXRecordDecl *> getPatternForClassTemplateSpecialization(Sema &S, SourceLocation PointOfInstantiation, ClassTemplateSpecializationDecl *ClassTemplateSpec, TemplateSpecializationKind TSK) {\n  // ...\n  if (!Specialized.is<ClassTemplatePartialSpecializationDecl *>()) {\n    // ...\n    if (Matched.size() >= 1) {\n      // ...\n      if (Matched.size() == 1) {\n      // ...\n      } else {\n        // ...\n        if (Ambiguous) {\n          // ...\n          S.Diag(PointOfInstantiation, diag::err_partial_spec_ordering_ambiguous) << ClassTemplateSpec;"}},
[l]={
[l]={
["clang/test/SemaTemplate/temp_class_order.cpp"]={"clang/test/SemaTemplate/temp_class_order.cpp:41:16: error: ambiguous partial specializations of \'X2<int *, int *>\'"}
["clang/test/SemaTemplate/temp_class_order.cpp"]={"clang/test/SemaTemplate/temp_class_order.cpp:41:16: error: ambiguous partial specializations of \'X2<int *, int *>\'"}
Line 1,383: Line 1,384:
},
},
["err_partial_spec_redeclared"]={
["err_partial_spec_redeclared"]={
[b]="err_partial_spec_redeclared",
[d]="err_partial_spec_redeclared",
[j]="class template partial specialization %0 cannot be redeclared",
[e]="class template partial specialization %0 cannot be redeclared",
[i]="class template partial specialization A cannot be redeclared",
[f]="class template partial specialization A cannot be redeclared",
[h]=k,
[g]=k,
[c]="class template partial specialization (.*?) cannot be redeclared",
[h]="class template partial specialization (.*?) cannot be redeclared",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"21610380de97",1256774651,"Implement support for semantic checking and template instantiation of","Implement support for semantic checking and template instantiation of\nclass template partial specializations of member templates. Also,\nfixes a silly little bug in the marking of \"used\" template parameters\nin member templates. Fixes PR5236.\n\nllvm-svn: 85447"},
[j]={"21610380de97",1256774651,"Implement support for semantic checking and template instantiation of","Implement support for semantic checking and template instantiation of\nclass template partial specializations of member templates. Also,\nfixes a silly little bug in the marking of \"used\" template parameters\nin member templates. Fixes PR5236.\n\nllvm-svn: 85447"},
[d]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",4244,"/// Instantiate the declaration of a class template partial\n/// specialization.\n///\n/// \\param ClassTemplate the (instantiated) class template that is partially\n// specialized by the instantiation of \\p PartialSpec.\n///\n/// \\param PartialSpec the (uninstantiated) class template partial\n/// specialization that we are instantiating.\n///\n/// \\returns The instantiated partial specialization, if successful; otherwise,\n/// NULL to indicate an error.\nClassTemplatePartialSpecializationDecl *TemplateDeclInstantiator::InstantiateClassTemplatePartialSpecialization(ClassTemplateDecl *ClassTemplate, ClassTemplatePartialSpecializationDecl *PartialSpec) {\n  // ...\n  if (PrevDecl) {\n    // ...\n    SemaRef.Diag(PartialSpec->getLocation(), diag::err_partial_spec_redeclared) << WrittenTy->getType();"}},
[i]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",4244,"/// Instantiate the declaration of a class template partial\n/// specialization.\n///\n/// \\param ClassTemplate the (instantiated) class template that is partially\n// specialized by the instantiation of \\p PartialSpec.\n///\n/// \\param PartialSpec the (uninstantiated) class template partial\n/// specialization that we are instantiating.\n///\n/// \\returns The instantiated partial specialization, if successful; otherwise,\n/// NULL to indicate an error.\nClassTemplatePartialSpecializationDecl *TemplateDeclInstantiator::InstantiateClassTemplatePartialSpecialization(ClassTemplateDecl *ClassTemplate, ClassTemplatePartialSpecializationDecl *PartialSpec) {\n  // ...\n  if (PrevDecl) {\n    // ...\n    SemaRef.Diag(PartialSpec->getLocation(), diag::err_partial_spec_redeclared) << WrittenTy->getType();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.decls/temp.class.spec/p6.cpp"]={"clang/test/CXX/temp/temp.decls/temp.class.spec/p6.cpp:42:31: error: class template partial specialization \'Inner<int, Y>\' cannot be redeclared","clang/test/CXX/temp/temp.decls/temp.class.spec/p6.cpp:84:29: error: class template partial specialization \'Bar<0, int, Y>\' cannot be redeclared"}
["clang/test/CXX/temp/temp.decls/temp.class.spec/p6.cpp"]={"clang/test/CXX/temp/temp.decls/temp.class.spec/p6.cpp:42:31: error: class template partial specialization \'Inner<int, Y>\' cannot be redeclared","clang/test/CXX/temp/temp.decls/temp.class.spec/p6.cpp:84:29: error: class template partial specialization \'Bar<0, int, Y>\' cannot be redeclared"}
Line 1,397: Line 1,398:
},
},
["err_partial_specialization_friend"]={
["err_partial_specialization_friend"]={
[b]="err_partial_specialization_friend",
[d]="err_partial_specialization_friend",
[j]="partial specialization cannot be declared as a friend",
[e]="partial specialization cannot be declared as a friend",
[i]="partial specialization cannot be declared as a friend",
[f]="partial specialization cannot be declared as a friend",
[h]=k,
[g]=k,
[c]="partial specialization cannot be declared as a friend",
[h]="partial specialization cannot be declared as a friend",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"ec9518be89c9",1292919297,"A class template partial specialization cannot be a friend. Fixes PR8649.","A class template partial specialization cannot be a friend. Fixes PR8649.\n\nllvm-svn: 122325"},
[j]={"ec9518be89c9",1292919297,"A class template partial specialization cannot be a friend. Fixes PR8649.","A class template partial specialization cannot be a friend. Fixes PR8649.\n\nllvm-svn: 122325"},
[d]={{W,8662,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (TemplateParams && TemplateParams->size() > 0) {\n    // ...\n    if (TUK == TUK_Friend) {\n      Diag(KWLoc, diag::err_partial_specialization_friend) << SourceRange(LAngleLoc, RAngleLoc);"}},
[i]={{W,8662,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (TemplateParams && TemplateParams->size() > 0) {\n    // ...\n    if (TUK == TUK_Friend) {\n      Diag(KWLoc, diag::err_partial_specialization_friend) << SourceRange(LAngleLoc, RAngleLoc);"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.decls/temp.friend/p8.cpp"]={"clang/test/CXX/temp/temp.decls/temp.friend/p8.cpp:5:28: error: partial specialization cannot be declared as a friend"}
["clang/test/CXX/temp/temp.decls/temp.friend/p8.cpp"]={"clang/test/CXX/temp/temp.decls/temp.friend/p8.cpp:5:28: error: partial specialization cannot be declared as a friend"}
Line 1,411: Line 1,412:
},
},
["err_partition_import_outside_module"]={
["err_partition_import_outside_module"]={
[b]={{nil,C,"err_partition_import_outside_module"}},
[d]={{nil,C,"err_partition_import_outside_module"}},
[j]={{nil,C,"module partition imports must be within a module purview"}},
[e]={{nil,C,"module partition imports must be within a module purview"}},
[i]={{nil,C,"module partition imports must be within a module purview"}},
[f]={{nil,C,"module partition imports must be within a module purview"}},
[h]=k,
[g]=k,
[c]="module partition imports must be within a module purview",
[h]="module partition imports must be within a module purview",
[f]=a,
[b]=a,
[e]={{nil,C,fc}},
[c]={{nil,C,ac}},
[g]={"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"},
[j]={"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"},
[d]={{"clang/lib/Parse/Parser.cpp",2555,"/// 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  case Sema::ModuleImportState::FirstDecl:\n  case Sema::ModuleImportState::NotACXX20Module:\n    // We can only import a partition within a module purview.\n    if (IsPartition)\n      Diag(ImportLoc, diag::err_partition_import_outside_module);"}}
[i]={{"clang/lib/Parse/Parser.cpp",2555,"/// 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  case Sema::ModuleImportState::FirstDecl:\n  case Sema::ModuleImportState::NotACXX20Module:\n    // We can only import a partition within a module purview.\n    if (IsPartition)\n      Diag(ImportLoc, diag::err_partition_import_outside_module);"}}
},
},
["err_pascal_string_too_long"]={
["err_pascal_string_too_long"]={
[b]="err_pascal_string_too_long",
[d]="err_pascal_string_too_long",
[j]="Pascal string is too long",
[e]="Pascal string is too long",
[i]="Pascal string is too long",
[f]="Pascal string is too long",
[h]=k,
[g]=k,
[c]="Pascal string is too long",
[h]="Pascal string is too long",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{"clang/lib/Lex/LiteralSupport.cpp",2209,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n  // ...\n  if (Pascal) {\n    // ...\n    // Verify that pascal strings aren\'t too large.\n    if (GetStringLength() > 256) {\n      if (Diags)\n        Diags->Report(StringToks.front().getLocation(), diag::err_pascal_string_too_long) << SourceRange(StringToks.front().getLocation(), StringToks.back().getLocation());"}}
[i]={{"clang/lib/Lex/LiteralSupport.cpp",2209,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n  // ...\n  if (Pascal) {\n    // ...\n    // Verify that pascal strings aren\'t too large.\n    if (GetStringLength() > 256) {\n      if (Diags)\n        Diags->Report(StringToks.front().getLocation(), diag::err_pascal_string_too_long) << SourceRange(StringToks.front().getLocation(), StringToks.back().getLocation());"}}
},
},
["err_paste_at_end"]={
["err_paste_at_end"]={
[b]="err_paste_at_end",
[d]="err_paste_at_end",
[j]="\'##\' cannot appear at end of macro expansion",
[e]="\'##\' cannot appear at end of macro expansion",
[i]="\'##\' cannot appear at end of macro expansion",
[f]="\'##\' cannot appear at end of macro expansion",
[h]=k,
[g]=k,
[c]="\'\\#\\#\' cannot appear at end of macro expansion",
[h]="\'\\#\\#\' cannot appear at end of macro expansion",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,3080,"/// HandleDefineDirective - Implements \\#define.  This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  if (NumTokens != 0) {\n    // ...\n    if (MI->getReplacementToken(NumTokens - 1).is(tok::hashhash)) {\n      Diag(MI->getReplacementToken(NumTokens - 1), diag::err_paste_at_end);"}},
[i]={{z,3080,"/// HandleDefineDirective - Implements \\#define.  This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  if (NumTokens != 0) {\n    // ...\n    if (MI->getReplacementToken(NumTokens - 1).is(tok::hashhash)) {\n      Diag(MI->getReplacementToken(NumTokens - 1), diag::err_paste_at_end);"}},
[l]={
[l]={
["clang/test/Preprocessor/macro_paste_bad.c"]={"clang/test/Preprocessor/macro_paste_bad.c:10:18: error: \'##\' cannot appear at end of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:11:18: error: \'##\' cannot appear at end of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:12:15: error: \'##\' cannot appear at end of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:13:15: error: \'##\' cannot appear at end of macro expansion"}
["clang/test/Preprocessor/macro_paste_bad.c"]={"clang/test/Preprocessor/macro_paste_bad.c:10:18: error: \'##\' cannot appear at end of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:11:18: error: \'##\' cannot appear at end of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:12:15: error: \'##\' cannot appear at end of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:13:15: error: \'##\' cannot appear at end of macro expansion"}
Line 1,447: Line 1,448:
},
},
["err_paste_at_start"]={
["err_paste_at_start"]={
[b]="err_paste_at_start",
[d]="err_paste_at_start",
[j]="\'##\' cannot appear at start of macro expansion",
[e]="\'##\' cannot appear at start of macro expansion",
[i]="\'##\' cannot appear at start of macro expansion",
[f]="\'##\' cannot appear at start of macro expansion",
[h]=k,
[g]=k,
[c]="\'\\#\\#\' cannot appear at start of macro expansion",
[h]="\'\\#\\#\' cannot appear at start of macro expansion",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,3076,"/// HandleDefineDirective - Implements \\#define.  This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  if (NumTokens != 0) {\n    if (MI->getReplacementToken(0).is(tok::hashhash)) {\n      Diag(MI->getReplacementToken(0), diag::err_paste_at_start);"}},
[i]={{z,3076,"/// HandleDefineDirective - Implements \\#define.  This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  if (NumTokens != 0) {\n    if (MI->getReplacementToken(0).is(tok::hashhash)) {\n      Diag(MI->getReplacementToken(0), diag::err_paste_at_start);"}},
[l]={
[l]={
["clang/test/Preprocessor/macro_paste_bad.c"]={"clang/test/Preprocessor/macro_paste_bad.c:16:13: error: \'##\' cannot appear at start of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:17:13: error: \'##\' cannot appear at start of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:18:13: error: \'##\' cannot appear at start of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:19:13: error: \'##\' cannot appear at start of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:20:13: error: \'##\' cannot appear at start of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:21:13: error: \'##\' cannot appear at start of macro expansion"}
["clang/test/Preprocessor/macro_paste_bad.c"]={"clang/test/Preprocessor/macro_paste_bad.c:16:13: error: \'##\' cannot appear at start of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:17:13: error: \'##\' cannot appear at start of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:18:13: error: \'##\' cannot appear at start of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:19:13: error: \'##\' cannot appear at start of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:20:13: error: \'##\' cannot appear at start of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:21:13: error: \'##\' cannot appear at start of macro expansion"}
Line 1,461: Line 1,462:
},
},
["err_pch_diagopt_mismatch"]={
["err_pch_diagopt_mismatch"]={
[b]="err_pch_diagopt_mismatch",
[d]="err_pch_diagopt_mismatch",
[j]="%0 is currently enabled, but was not in the PCH file",
[e]="%0 is currently enabled, but was not in the PCH file",
[i]="A is currently enabled, but was not in the PCH file",
[f]="A is currently enabled, but was not in the PCH file",
[h]=k,
[g]=k,
[c]="(.*?) is currently enabled, but was not in the PCH file",
[h]="(.*?) is currently enabled, but was not in the PCH file",
[f]=a,
[b]=a,
[e]=V,
[c]=X,
[g]={"be84adbf1b7d",1398731813,"Check -Werror options during module validation","Check -Werror options during module validation\n\nThis patch checks whether the diagnostic options that could lead to\nerrors (principally -Werror) are consistent between when a module was\nbuilt and when it is loaded.  If there are new -Werror flags, then the\nmodule is rebuilt.  In order to canonicalize the options we do this\ncheck at the level of the constructed DiagnosticsEngine, which contains\nthe final set of diag to diagnostic level mappings.  Currently we only\nrebuild with the new diagnostic options, but we intend to refine this in\nthe future to include the union of the new and old flags, since we know\nthe old ones did not cause errors.  System modules are only rebuilt when\n-Wsystem-headers is enabled.\n\nOne oddity is that unlike checking language options, we don’t perform\nthis diagnostic option checking when loading from a precompiled header.\nThe reason for this is that the compiler cannot rebuild the PCH, so\nanything that requires it to be rebuilt effectively leaks into the build\nsystem.  And in this case, that would mean the build system\nunderstanding the complex relationship between diagnostic options and\nthe underlying diagnostic mappings, which is unreasonable.  Skipping the\ncheck is safe, because these options do not affect the generated AST.\nYou simply won’t get new build errors due to changed -Werror options\nautomatically, which is also true for non-module cases.\n\nllvm-svn: 207477"},
[j]={"be84adbf1b7d",1398731813,"Check -Werror options during module validation","Check -Werror options during module validation\n\nThis patch checks whether the diagnostic options that could lead to\nerrors (principally -Werror) are consistent between when a module was\nbuilt and when it is loaded.  If there are new -Werror flags, then the\nmodule is rebuilt.  In order to canonicalize the options we do this\ncheck at the level of the constructed DiagnosticsEngine, which contains\nthe final set of diag to diagnostic level mappings.  Currently we only\nrebuild with the new diagnostic options, but we intend to refine this in\nthe future to include the union of the new and old flags, since we know\nthe old ones did not cause errors.  System modules are only rebuilt when\n-Wsystem-headers is enabled.\n\nOne oddity is that unlike checking language options, we don’t perform\nthis diagnostic option checking when loading from a precompiled header.\nThe reason for this is that the compiler cannot rebuild the PCH, so\nanything that requires it to be rebuilt effectively leaks into the build\nsystem.  And in this case, that would mean the build system\nunderstanding the complex relationship between diagnostic options and\nthe underlying diagnostic mappings, which is unreasonable.  Skipping the\ncheck is safe, because these options do not affect the generated AST.\nYou simply won’t get new build errors due to changed -Werror options\nautomatically, which is also true for non-module cases.\n\nllvm-svn: 207477"},
[d]={{G,493,"static bool checkDiagnosticGroupMappings(DiagnosticsEngine &StoredDiags, DiagnosticsEngine &Diags, bool Complain) {\n  // ...\n  for (DiagnosticsEngine *MappingSource : MappingSources) {\n    for (auto DiagIDMappingPair : MappingSource->getDiagnosticMappings()) {\n      // ...\n      if (StoredLevel < DiagnosticsEngine::Error) {\n        if (Complain)\n          Diags.Report(diag::err_pch_diagopt_mismatch) << \"-Werror=\" + Diags.getDiagnosticIDs()->getWarningOptionForDiag(DiagID).str();"},{G,520,"static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags, DiagnosticsEngine &Diags, bool IsSystem, bool Complain) {\n  // Top-level options\n  if (IsSystem) {\n    // ...\n    // If -Wsystem-headers was not enabled before, be conservative\n    if (StoredDiags.getSuppressSystemWarnings()) {\n      if (Complain)\n        Diags.Report(diag::err_pch_diagopt_mismatch) << \"-Wsystem-headers\";"},{G,527,"static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags, DiagnosticsEngine &Diags, bool IsSystem, bool Complain) {\n  // ...\n  if (Diags.getWarningsAsErrors() && !StoredDiags.getWarningsAsErrors()) {\n    if (Complain)\n      Diags.Report(diag::err_pch_diagopt_mismatch) << \"-Werror\";"},{G,534,"static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags, DiagnosticsEngine &Diags, bool IsSystem, bool Complain) {\n  // ...\n  if (Diags.getWarningsAsErrors() && Diags.getEnableAllWarnings() && !StoredDiags.getEnableAllWarnings()) {\n    if (Complain)\n      Diags.Report(diag::err_pch_diagopt_mismatch) << \"-Weverything -Werror\";"},{G,541,"static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags, DiagnosticsEngine &Diags, bool IsSystem, bool Complain) {\n  // ...\n  if (isExtHandlingFromDiagsError(Diags) && !isExtHandlingFromDiagsError(StoredDiags)) {\n    if (Complain)\n      Diags.Report(diag::err_pch_diagopt_mismatch) << \"-pedantic-errors\";"}}
[i]={{G,493,"static bool checkDiagnosticGroupMappings(DiagnosticsEngine &StoredDiags, DiagnosticsEngine &Diags, bool Complain) {\n  // ...\n  for (DiagnosticsEngine *MappingSource : MappingSources) {\n    for (auto DiagIDMappingPair : MappingSource->getDiagnosticMappings()) {\n      // ...\n      if (StoredLevel < DiagnosticsEngine::Error) {\n        if (Complain)\n          Diags.Report(diag::err_pch_diagopt_mismatch) << \"-Werror=\" + Diags.getDiagnosticIDs()->getWarningOptionForDiag(DiagID).str();"},{G,520,"static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags, DiagnosticsEngine &Diags, bool IsSystem, bool Complain) {\n  // Top-level options\n  if (IsSystem) {\n    // ...\n    // If -Wsystem-headers was not enabled before, be conservative\n    if (StoredDiags.getSuppressSystemWarnings()) {\n      if (Complain)\n        Diags.Report(diag::err_pch_diagopt_mismatch) << \"-Wsystem-headers\";"},{G,527,"static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags, DiagnosticsEngine &Diags, bool IsSystem, bool Complain) {\n  // ...\n  if (Diags.getWarningsAsErrors() && !StoredDiags.getWarningsAsErrors()) {\n    if (Complain)\n      Diags.Report(diag::err_pch_diagopt_mismatch) << \"-Werror\";"},{G,534,"static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags, DiagnosticsEngine &Diags, bool IsSystem, bool Complain) {\n  // ...\n  if (Diags.getWarningsAsErrors() && Diags.getEnableAllWarnings() && !StoredDiags.getEnableAllWarnings()) {\n    if (Complain)\n      Diags.Report(diag::err_pch_diagopt_mismatch) << \"-Weverything -Werror\";"},{G,541,"static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags, DiagnosticsEngine &Diags, bool IsSystem, bool Complain) {\n  // ...\n  if (isExtHandlingFromDiagsError(Diags) && !isExtHandlingFromDiagsError(StoredDiags)) {\n    if (Complain)\n      Diags.Report(diag::err_pch_diagopt_mismatch) << \"-pedantic-errors\";"}}
},
},
["err_pch_different_branch"]={
["err_pch_different_branch"]={
[b]="err_pch_different_branch",
[d]="err_pch_different_branch",
[j]="PCH file built from a different branch (%0) than the compiler (%1)",
[e]="PCH file built from a different branch (%0) than the compiler (%1)",
[i]="PCH file built from a different branch (A) than the compiler (B)",
[f]="PCH file built from a different branch (A) than the compiler (B)",
[h]=k,
[g]=k,
[c]="PCH file built from a different branch \\((.*?)\\) than the compiler \\((.*?)\\)",
[h]="PCH file built from a different branch \\((.*?)\\) than the compiler \\((.*?)\\)",
[f]=a,
[b]=a,
[e]=V,
[c]=X,
[g]={"2228cd3f070d",1392133209,"Rename some PCH-related errors to have \'err_\' as their prefix","Rename some PCH-related errors to have \'err_\' as their prefix\n\nllvm-svn: 201157"},
[j]={"2228cd3f070d",1392133209,"Rename some PCH-related errors to have \'err_\' as their prefix","Rename some PCH-related errors to have \'err_\' as their prefix\n\nllvm-svn: 201157"},
[d]={{G,2869,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case METADATA: {\n      // ...\n      if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {\n        if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)\n          Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;"}}
[i]={{G,2869,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case METADATA: {\n      // ...\n      if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {\n        if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)\n          Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;"}}
},
},
["err_pch_langopt_mismatch"]={
["err_pch_langopt_mismatch"]={
[b]="err_pch_langopt_mismatch",
[d]="err_pch_langopt_mismatch",
[j]="%0 was %select{disabled|enabled}1 in PCH file but is currently %select{disabled|enabled}2",
[e]="%0 was %select{disabled|enabled}1 in PCH file but is currently %select{disabled|enabled}2",
[i]={{nil,nil,{"A was ",{"disabled","enabled"}," in PCH file but is currently ",{"disabled","enabled"}}}},
[f]={{nil,nil,{"A was ",{"disabled","enabled"}," in PCH file but is currently ",{"disabled","enabled"}}}},
[h]=k,
[g]=k,
[c]="(.*?) was (?:disabled|enabled) in PCH file but is currently (?:disabled|enabled)",
[h]="(.*?) was (?:disabled|enabled) in PCH file but is currently (?:disabled|enabled)",
[f]=a,
[b]=a,
[e]=V,
[c]=X,
[g]={"c2ae8800701c",1315938399,"Switch the serialization of LangOptions over to use the .def file. We","Switch the serialization of LangOptions over to use the .def file. We\nshould no longer have the serialization of LangOptions out of sync\nwith the structure itself (yay).\n\nllvm-svn: 139613"},
[j]={"c2ae8800701c",1315938399,"Switch the serialization of LangOptions over to use the .def file. We","Switch the serialization of LangOptions over to use the .def file. We\nshould no longer have the serialization of LangOptions out of sync\nwith the structure itself (yay).\n\nllvm-svn: 139613"},
[d]={{G,285,"#define LANGOPT(Name, Bits, Default, Description) \\\n  if (ExistingLangOpts.Name != LangOpts.Name) { \\\n    if (Diags) { \\\n      if (Bits == 1) \\\n        Diags->Report(diag::err_pch_langopt_mismatch) << Description << LangOpts.Name << ExistingLangOpts.Name; \\"}},
[i]={{G,285,"#define LANGOPT(Name, Bits, Default, Description) \\\n  if (ExistingLangOpts.Name != LangOpts.Name) { \\\n    if (Diags) { \\\n      if (Bits == 1) \\\n        Diags->Report(diag::err_pch_langopt_mismatch) << Description << LangOpts.Name << ExistingLangOpts.Name; \\"}},
[l]={
[l]={
["clang/test/Modules/prebuilt-implicit-modules.m"]={"error: signed char was disabled in PCH file but is currently enabled"}
["clang/test/Modules/prebuilt-implicit-modules.m"]={"error: signed char was disabled in PCH file but is currently enabled"}
Line 1,497: Line 1,498:
},
},
["err_pch_langopt_value_mismatch"]={
["err_pch_langopt_value_mismatch"]={
[b]="err_pch_langopt_value_mismatch",
[d]="err_pch_langopt_value_mismatch",
[j]="%0 differs in PCH file vs. current file",
[e]="%0 differs in PCH file vs. current file",
[i]="A differs in PCH file vs. current file",
[f]="A differs in PCH file vs. current file",
[h]=k,
[g]=k,
[c]="(.*?) differs in PCH file vs\\. current file",
[h]="(.*?) differs in PCH file vs\\. current file",
[f]=a,
[b]=a,
[e]=V,
[c]=X,
[g]={"c2ae8800701c",1315938399,"Switch the serialization of LangOptions over to use the .def file. We","Switch the serialization of LangOptions over to use the .def file. We\nshould no longer have the serialization of LangOptions out of sync\nwith the structure itself (yay).\n\nllvm-svn: 139613"},
[j]={"c2ae8800701c",1315938399,"Switch the serialization of LangOptions over to use the .def file. We","Switch the serialization of LangOptions over to use the .def file. We\nshould no longer have the serialization of LangOptions out of sync\nwith the structure itself (yay).\n\nllvm-svn: 139613"},
[d]={{G,288,"#define LANGOPT(Name, Bits, Default, Description) \\\n  if (ExistingLangOpts.Name != LangOpts.Name) { \\\n    if (Diags) { \\\n      if (Bits == 1) \\\n        Diags->Report(diag::err_pch_langopt_mismatch) << Description << LangOpts.Name << ExistingLangOpts.Name; \\\n      else \\\n        Diags->Report(diag::err_pch_langopt_value_mismatch) << Description; \\"},{G,297,"#define VALUE_LANGOPT(Name, Bits, Default, Description) \\\n  if (ExistingLangOpts.Name != LangOpts.Name) { \\\n    if (Diags) \\\n      Diags->Report(diag::err_pch_langopt_value_mismatch) << Description; \\"},{G,305,"#define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \\\n  if (ExistingLangOpts.get##Name() != LangOpts.get##Name()) { \\\n    if (Diags) \\\n      Diags->Report(diag::err_pch_langopt_value_mismatch) << Description; \\"},{G,329,"#include \"clang/Basic/LangOptions.def\"\n  if (ExistingLangOpts.ModuleFeatures != LangOpts.ModuleFeatures) {\n    if (Diags)\n      Diags->Report(diag::err_pch_langopt_value_mismatch) << \"module features\";"},{G,335,"#include \"clang/Basic/LangOptions.def\"\n  // ...\n  if (ExistingLangOpts.ObjCRuntime != LangOpts.ObjCRuntime) {\n    if (Diags)\n      Diags->Report(diag::err_pch_langopt_value_mismatch) << \"target Objective-C runtime\";"},{G,343,"#include \"clang/Basic/LangOptions.def\"\n  // ...\n  if (ExistingLangOpts.CommentOpts.BlockCommandNames != LangOpts.CommentOpts.BlockCommandNames) {\n    if (Diags)\n      Diags->Report(diag::err_pch_langopt_value_mismatch) << \"block command names\";"}}
[i]={{G,288,"#define LANGOPT(Name, Bits, Default, Description) \\\n  if (ExistingLangOpts.Name != LangOpts.Name) { \\\n    if (Diags) { \\\n      if (Bits == 1) \\\n        Diags->Report(diag::err_pch_langopt_mismatch) << Description << LangOpts.Name << ExistingLangOpts.Name; \\\n      else \\\n        Diags->Report(diag::err_pch_langopt_value_mismatch) << Description; \\"},{G,297,"#define VALUE_LANGOPT(Name, Bits, Default, Description) \\\n  if (ExistingLangOpts.Name != LangOpts.Name) { \\\n    if (Diags) \\\n      Diags->Report(diag::err_pch_langopt_value_mismatch) << Description; \\"},{G,305,"#define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \\\n  if (ExistingLangOpts.get##Name() != LangOpts.get##Name()) { \\\n    if (Diags) \\\n      Diags->Report(diag::err_pch_langopt_value_mismatch) << Description; \\"},{G,329,"#include \"clang/Basic/LangOptions.def\"\n  if (ExistingLangOpts.ModuleFeatures != LangOpts.ModuleFeatures) {\n    if (Diags)\n      Diags->Report(diag::err_pch_langopt_value_mismatch) << \"module features\";"},{G,335,"#include \"clang/Basic/LangOptions.def\"\n  // ...\n  if (ExistingLangOpts.ObjCRuntime != LangOpts.ObjCRuntime) {\n    if (Diags)\n      Diags->Report(diag::err_pch_langopt_value_mismatch) << \"target Objective-C runtime\";"},{G,343,"#include \"clang/Basic/LangOptions.def\"\n  // ...\n  if (ExistingLangOpts.CommentOpts.BlockCommandNames != LangOpts.CommentOpts.BlockCommandNames) {\n    if (Diags)\n      Diags->Report(diag::err_pch_langopt_value_mismatch) << \"block command names\";"}}
},
},
["err_pch_macro_def_conflict"]={
["err_pch_macro_def_conflict"]={
[b]="err_pch_macro_def_conflict",
[d]="err_pch_macro_def_conflict",
[j]="definition of macro \'%0\' differs between the precompiled header (\'%1\') and the command line (\'%2\')",
[e]="definition of macro \'%0\' differs between the precompiled header (\'%1\') and the command line (\'%2\')",
[i]="definition of macro \'A\' differs between the precompiled header (\'B\') and the command line (\'C\')",
[f]="definition of macro \'A\' differs between the precompiled header (\'B\') and the command line (\'C\')",
[h]=k,
[g]=k,
[c]="definition of macro \'(.*?)\' differs between the precompiled header \\(\'(.*?)\'\\) and the command line \\(\'(.*?)\'\\)",
[h]="definition of macro \'(.*?)\' differs between the precompiled header \\(\'(.*?)\'\\) and the command line \\(\'(.*?)\'\\)",
[f]=a,
[b]=a,
[e]=V,
[c]=X,
[g]={"b63687519610",1351122110,"Teach the PCH validator to check the preprocessor options, especially","Teach the PCH validator to check the preprocessor options, especially\nthe macros that are #define\'d or #undef\'d on the command line. This\nchecking happens much earlier than the current macro-definition\nchecking and is far cleaner, because it does a direct comparison\nrather than a diff of the predefines buffers. Moreover, it allows us\nto use the result of this check to skip over PCH files within a\ndirectory that have non-matching -D\'s or -U\'s on the command\nline. Finally, it improves the diagnostics a bit for mismatches,\nfixing <rdar://problem/8612222>.\n\nThe old predefines-buffer diff\'ing will go away in a subsequent commit.\n\nllvm-svn: 166641"},
[j]={"b63687519610",1351122110,"Teach the PCH validator to check the preprocessor options, especially","Teach the PCH validator to check the preprocessor options, especially\nthe macros that are #define\'d or #undef\'d on the command line. This\nchecking happens much earlier than the current macro-definition\nchecking and is far cleaner, because it does a direct comparison\nrather than a diff of the predefines buffers. Moreover, it allows us\nto use the result of this check to skip over PCH files within a\ndirectory that have non-matching -D\'s or -U\'s on the command\nline. Finally, it improves the diagnostics a bit for mismatches,\nfixing <rdar://problem/8612222>.\n\nThe old predefines-buffer diff\'ing will go away in a subsequent commit.\n\nllvm-svn: 166641"},
[d]={{G,721,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///        preprocessor options. If set to OptionValidateContradictions,\n///        require that options passed both in the AST file and on the command\n///        line (-D or -U) match, but tolerate options missing in one or the\n///        other. If set to OptionValidateContradictions, require that there\n///        are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n  // ...\n  for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {\n    // ...\n    // The macro bodies differ; complain.\n    if (Diags) {\n      Diags->Report(diag::err_pch_macro_def_conflict) << MacroName << Known->second.first << Existing.first;"}}
[i]={{G,721,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///        preprocessor options. If set to OptionValidateContradictions,\n///        require that options passed both in the AST file and on the command\n///        line (-D or -U) match, but tolerate options missing in one or the\n///        other. If set to OptionValidateContradictions, require that there\n///        are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n  // ...\n  for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {\n    // ...\n    // The macro bodies differ; complain.\n    if (Diags) {\n      Diags->Report(diag::err_pch_macro_def_conflict) << MacroName << Known->second.first << Existing.first;"}}
},
},
["err_pch_macro_def_undef"]={
["err_pch_macro_def_undef"]={
[b]="err_pch_macro_def_undef",
[d]="err_pch_macro_def_undef",
[j]="macro \'%0\' was %select{defined|undef\'d}1 in the precompiled header but %select{undef\'d|defined}1 on the command line",
[e]="macro \'%0\' was %select{defined|undef\'d}1 in the precompiled header but %select{undef\'d|defined}1 on the command line",
[i]={{nil,nil,{"macro \'A\' was ",{"defined","undef\'d"}," in the precompiled header but ",{"undef\'d","defined"}," on the command line"}}},
[f]={{nil,nil,{"macro \'A\' was ",{"defined","undef\'d"}," in the precompiled header but ",{"undef\'d","defined"}," on the command line"}}},
[h]=k,
[g]=k,
[c]="macro \'(.*?)\' was (?:defined|undef\'d) in the precompiled header but (?:undef\'d|defined) on the command line",
[h]="macro \'(.*?)\' was (?:defined|undef\'d) in the precompiled header but (?:undef\'d|defined) on the command line",
[f]=a,
[b]=a,
[e]=V,
[c]=X,
[g]={"b63687519610",1351122110,"Teach the PCH validator to check the preprocessor options, especially","Teach the PCH validator to check the preprocessor options, especially\nthe macros that are #define\'d or #undef\'d on the command line. This\nchecking happens much earlier than the current macro-definition\nchecking and is far cleaner, because it does a direct comparison\nrather than a diff of the predefines buffers. Moreover, it allows us\nto use the result of this check to skip over PCH files within a\ndirectory that have non-matching -D\'s or -U\'s on the command\nline. Finally, it improves the diagnostics a bit for mismatches,\nfixing <rdar://problem/8612222>.\n\nThe old predefines-buffer diff\'ing will go away in a subsequent commit.\n\nllvm-svn: 166641"},
[j]={"b63687519610",1351122110,"Teach the PCH validator to check the preprocessor options, especially","Teach the PCH validator to check the preprocessor options, especially\nthe macros that are #define\'d or #undef\'d on the command line. This\nchecking happens much earlier than the current macro-definition\nchecking and is far cleaner, because it does a direct comparison\nrather than a diff of the predefines buffers. Moreover, it allows us\nto use the result of this check to skip over PCH files within a\ndirectory that have non-matching -D\'s or -U\'s on the command\nline. Finally, it improves the diagnostics a bit for mismatches,\nfixing <rdar://problem/8612222>.\n\nThe old predefines-buffer diff\'ing will go away in a subsequent commit.\n\nllvm-svn: 166641"},
[d]={{G,680,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///        preprocessor options. If set to OptionValidateContradictions,\n///        require that options passed both in the AST file and on the command\n///        line (-D or -U) match, but tolerate options missing in one or the\n///        other. If set to OptionValidateContradictions, require that there\n///        are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n  // ...\n  for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {\n    // ...\n    if (Validation == OptionValidateNone || Known == ASTFileMacros.end()) {\n      if (Validation == OptionValidateStrictMatches) {\n        // If strict matches are requested, don\'t tolerate any extra defines on\n        // the command line that are missing in the AST file.\n        if (Diags) {\n          Diags->Report(diag::err_pch_macro_def_undef) << MacroName << true;"},{G,706,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///        preprocessor options. If set to OptionValidateContradictions,\n///        require that options passed both in the AST file and on the command\n///        line (-D or -U) match, but tolerate options missing in one or the\n///        other. If set to OptionValidateContradictions, require that there\n///        are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n  // ...\n  for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {\n    // ...\n    // If the macro was defined in one but undef\'d in the other, we have a\n    // conflict.\n    if (Existing.second != Known->second.second) {\n      if (Diags) {\n        Diags->Report(diag::err_pch_macro_def_undef) << MacroName << Known->second.second;"},{G,735,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///        preprocessor options. If set to OptionValidateContradictions,\n///        require that options passed both in the AST file and on the command\n///        line (-D or -U) match, but tolerate options missing in one or the\n///        other. If set to OptionValidateContradictions, require that there\n///        are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n  // ...\n  if (Validation == OptionValidateStrictMatches) {\n    // If strict matches are requested, don\'t tolerate any extra defines in\n    // the AST file that are missing on the command line.\n    for (const auto &MacroName : ASTFileMacros.keys()) {\n      if (Diags) {\n        Diags->Report(diag::err_pch_macro_def_undef) << MacroName << false;"}}
[i]={{G,680,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///        preprocessor options. If set to OptionValidateContradictions,\n///        require that options passed both in the AST file and on the command\n///        line (-D or -U) match, but tolerate options missing in one or the\n///        other. If set to OptionValidateContradictions, require that there\n///        are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n  // ...\n  for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {\n    // ...\n    if (Validation == OptionValidateNone || Known == ASTFileMacros.end()) {\n      if (Validation == OptionValidateStrictMatches) {\n        // If strict matches are requested, don\'t tolerate any extra defines on\n        // the command line that are missing in the AST file.\n        if (Diags) {\n          Diags->Report(diag::err_pch_macro_def_undef) << MacroName << true;"},{G,706,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///        preprocessor options. If set to OptionValidateContradictions,\n///        require that options passed both in the AST file and on the command\n///        line (-D or -U) match, but tolerate options missing in one or the\n///        other. If set to OptionValidateContradictions, require that there\n///        are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n  // ...\n  for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {\n    // ...\n    // If the macro was defined in one but undef\'d in the other, we have a\n    // conflict.\n    if (Existing.second != Known->second.second) {\n      if (Diags) {\n        Diags->Report(diag::err_pch_macro_def_undef) << MacroName << Known->second.second;"},{G,735,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///        preprocessor options. If set to OptionValidateContradictions,\n///        require that options passed both in the AST file and on the command\n///        line (-D or -U) match, but tolerate options missing in one or the\n///        other. If set to OptionValidateContradictions, require that there\n///        are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n  // ...\n  if (Validation == OptionValidateStrictMatches) {\n    // If strict matches are requested, don\'t tolerate any extra defines in\n    // the AST file that are missing on the command line.\n    for (const auto &MacroName : ASTFileMacros.keys()) {\n      if (Diags) {\n        Diags->Report(diag::err_pch_macro_def_undef) << MacroName << false;"}}
},
},
["err_pch_modulecache_mismatch"]={
["err_pch_modulecache_mismatch"]={
[b]="err_pch_modulecache_mismatch",
[d]="err_pch_modulecache_mismatch",
[j]="PCH was compiled with module cache path \'%0\', but the path is currently \'%1\'",
[e]="PCH was compiled with module cache path \'%0\', but the path is currently \'%1\'",
[i]="PCH was compiled with module cache path \'A\', but the path is currently \'B\'",
[f]="PCH was compiled with module cache path \'A\', but the path is currently \'B\'",
[h]=k,
[g]=k,
[c]="PCH was compiled with module cache path \'(.*?)\', but the path is currently \'(.*?)\'",
[h]="PCH was compiled with module cache path \'(.*?)\', but the path is currently \'(.*?)\'",
[f]=a,
[b]=a,
[e]=V,
[c]=X,
[g]={"bd0b651bd249",1424376740,"[PCH/Modules] Check that the specific module cache path the PCH was built with, is the same as","[PCH/Modules] Check that the specific module cache path the PCH was built with, is the same as\nthe one in the current compiler invocation. If they differ reject the PCH.\n\nThis protects against the badness occurring from getting modules loaded from different module caches (see crashes).\n\nrdar://19889860\n\nllvm-svn: 229909"},
[j]={"bd0b651bd249",1424376740,"[PCH/Modules] Check that the specific module cache path the PCH was built with, is the same as","[PCH/Modules] Check that the specific module cache path the PCH was built with, is the same as\nthe one in the current compiler invocation. If they differ reject the PCH.\n\nThis protects against the badness occurring from getting modules loaded from different module caches (see crashes).\n\nrdar://19889860\n\nllvm-svn: 229909"},
[d]={{G,833,"/// Check the header search options deserialized from the control block\n/// against the header search options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\nstatic bool checkHeaderSearchOptions(const HeaderSearchOptions &HSOpts, StringRef SpecificModuleCachePath, StringRef ExistingModuleCachePath, DiagnosticsEngine *Diags, const LangOptions &LangOpts, const PreprocessorOptions &PPOpts) {\n  if (LangOpts.Modules) {\n    if (SpecificModuleCachePath != ExistingModuleCachePath && !PPOpts.AllowPCHWithDifferentModulesCachePath) {\n      if (Diags)\n        Diags->Report(diag::err_pch_modulecache_mismatch) << SpecificModuleCachePath << ExistingModuleCachePath;"}}
[i]={{G,833,"/// Check the header search options deserialized from the control block\n/// against the header search options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\nstatic bool checkHeaderSearchOptions(const HeaderSearchOptions &HSOpts, StringRef SpecificModuleCachePath, StringRef ExistingModuleCachePath, DiagnosticsEngine *Diags, const LangOptions &LangOpts, const PreprocessorOptions &PPOpts) {\n  if (LangOpts.Modules) {\n    if (SpecificModuleCachePath != ExistingModuleCachePath && !PPOpts.AllowPCHWithDifferentModulesCachePath) {\n      if (Diags)\n        Diags->Report(diag::err_pch_modulecache_mismatch) << SpecificModuleCachePath << ExistingModuleCachePath;"}}
},
},
["err_pch_pp_detailed_record"]={
["err_pch_pp_detailed_record"]={
[b]="err_pch_pp_detailed_record",
[d]="err_pch_pp_detailed_record",
[j]="%select{command line contains|precompiled header was built with}0 \'-detailed-preprocessing-record\' but %select{precompiled header was not built with it|it is not present on the command line}0",
[e]="%select{command line contains|precompiled header was built with}0 \'-detailed-preprocessing-record\' but %select{precompiled header was not built with it|it is not present on the command line}0",
[i]={{nil,nil,{{"command line contains","precompiled header was built with"}," \'-detailed-preprocessing-record\' but ",{"precompiled header was not built with it","it is not present on the command line"}}}},
[f]={{nil,nil,{{"command line contains","precompiled header was built with"}," \'-detailed-preprocessing-record\' but ",{"precompiled header was not built with it","it is not present on the command line"}}}},
[h]=k,
[g]=k,
[c]="(?:command line contains|precompiled header was built with) \'\\-detailed\\-preprocessing\\-record\' but (?:precompiled header was not built with it|it is not present on the command line)",
[h]="(?:command line contains|precompiled header was built with) \'\\-detailed\\-preprocessing\\-record\' but (?:precompiled header was not built with it|it is not present on the command line)",
[f]=a,
[b]=a,
[e]=V,
[c]=X,
[g]={"d3afa0c7fbac",1367012020,"[PCH/modules] Require the preprocessing record option to match the used PCH, if modules are enabled.","[PCH/modules] Require the preprocessing record option to match the used PCH, if modules are enabled.\n\nThe preprocessing record becomes important when modules are enabled, since it is used to calculate the\nmodule cache hash.\n\nllvm-svn: 180635"},
[j]={"d3afa0c7fbac",1367012020,"[PCH/modules] Require the preprocessing record option to match the used PCH, if modules are enabled.","[PCH/modules] Require the preprocessing record option to match the used PCH, if modules are enabled.\n\nThe preprocessing record becomes important when modules are enabled, since it is used to calculate the\nmodule cache hash.\n\nllvm-svn: 180635"},
[d]={{G,755,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///        preprocessor options. If set to OptionValidateContradictions,\n///        require that options passed both in the AST file and on the command\n///        line (-D or -U) match, but tolerate options missing in one or the\n///        other. If set to OptionValidateContradictions, require that there\n///        are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n  // ...\n  // Detailed record is important since it is used for the module cache hash.\n  if (LangOpts.Modules && PPOpts.DetailedRecord != ExistingPPOpts.DetailedRecord && Validation != OptionValidateNone) {\n    if (Diags) {\n      Diags->Report(diag::err_pch_pp_detailed_record) << PPOpts.DetailedRecord;"}}
[i]={{G,755,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///        preprocessor options. If set to OptionValidateContradictions,\n///        require that options passed both in the AST file and on the command\n///        line (-D or -U) match, but tolerate options missing in one or the\n///        other. If set to OptionValidateContradictions, require that there\n///        are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n  // ...\n  // Detailed record is important since it is used for the module cache hash.\n  if (LangOpts.Modules && PPOpts.DetailedRecord != ExistingPPOpts.DetailedRecord && Validation != OptionValidateNone) {\n    if (Diags) {\n      Diags->Report(diag::err_pch_pp_detailed_record) << PPOpts.DetailedRecord;"}}
},
},
["err_pch_targetopt_feature_mismatch"]={
["err_pch_targetopt_feature_mismatch"]={
[b]="err_pch_targetopt_feature_mismatch",
[d]="err_pch_targetopt_feature_mismatch",
[j]={{nil,K,"%select{AST file was|current translation unit is}0 compiled with the target feature \'%1\' but the %select{current translation unit is|AST file was}0 not"},{B,nil,"%select{AST file|current translation unit}0 was compiled with the target feature\'%1\' but the %select{current translation unit is|AST file was}0 not"}},
[e]={{nil,K,"%select{AST file was|current translation unit is}0 compiled with the target feature \'%1\' but the %select{current translation unit is|AST file was}0 not"},{B,nil,"%select{AST file|current translation unit}0 was compiled with the target feature\'%1\' but the %select{current translation unit is|AST file was}0 not"}},
[i]={{nil,K,{{"AST file was","current translation unit is"}," compiled with the target feature \'B\' but the ",{"current translation unit is","AST file was"}," not"}},{B,nil,{{"AST file","current translation unit"}," was compiled with the target feature\'B\' but the ",{"current translation unit is","AST file was"}," not"}}},
[f]={{nil,K,{{"AST file was","current translation unit is"}," compiled with the target feature \'B\' but the ",{"current translation unit is","AST file was"}," not"}},{B,nil,{{"AST file","current translation unit"}," was compiled with the target feature\'B\' but the ",{"current translation unit is","AST file was"}," not"}}},
[h]=k,
[g]=k,
[c]="(?:AST file was|current translation unit is) compiled with the target feature \'(.*?)\' but the (?:current translation unit is|AST file was) not",
[h]="(?:AST file was|current translation unit is) compiled with the target feature \'(.*?)\' but the (?:current translation unit is|AST file was) not",
[f]=a,
[b]=a,
[e]=V,
[c]=X,
[g]={"cb177f15e788",1350430858,"Serialize TargetOptions into an AST file, and make sure that we keep","Serialize TargetOptions into an AST file, and make sure that we keep\ntarget options around so they can be accessed at any point (rather\nthan keeping them transient).\n\nllvm-svn: 166072"},
[j]={"cb177f15e788",1350430858,"Serialize TargetOptions into an AST file, and make sure that we keep","Serialize TargetOptions into an AST file, and make sure that we keep\ntarget options around so they can be accessed at any point (rather\nthan keeping them transient).\n\nllvm-svn: 166072"},
[d]={{G,366,"#define SANITIZER(NAME, ID) \\\n  { \\\n    bool InExistingModule = ExistingSanitizers.has(SanitizerKind::ID); \\\n    bool InImportedModule = ImportedSanitizers.has(SanitizerKind::ID); \\\n    if (InExistingModule != InImportedModule) \\\n      Diags->Report(diag::err_pch_targetopt_feature_mismatch) << InExistingModule << (Flag + NAME); \\"},{G,436,"/// Compare the given set of target options against an existing set of\n/// target options.\n///\n/// \\param Diags If non-NULL, diagnostics will be emitted via this engine.\n///\n/// \\returns true if the target options mis-match, false otherwise.\nstatic bool checkTargetOptions(const TargetOptions &TargetOpts, const TargetOptions &ExistingTargetOpts, DiagnosticsEngine *Diags, bool AllowCompatibleDifferences = true) {\n  // ...\n  if (Diags) {\n    for (StringRef Feature : UnmatchedReadFeatures)\n      Diags->Report(diag::err_pch_targetopt_feature_mismatch) << /* is-existing-feature */ false << Feature;"},{G,439,"/// Compare the given set of target options against an existing set of\n/// target options.\n///\n/// \\param Diags If non-NULL, diagnostics will be emitted via this engine.\n///\n/// \\returns true if the target options mis-match, false otherwise.\nstatic bool checkTargetOptions(const TargetOptions &TargetOpts, const TargetOptions &ExistingTargetOpts, DiagnosticsEngine *Diags, bool AllowCompatibleDifferences = true) {\n  // ...\n  if (Diags) {\n    // ...\n    for (StringRef Feature : UnmatchedExistingFeatures)\n      Diags->Report(diag::err_pch_targetopt_feature_mismatch) << /* is-existing-feature */ true << Feature;"}}
[i]={{G,366,"#define SANITIZER(NAME, ID) \\\n  { \\\n    bool InExistingModule = ExistingSanitizers.has(SanitizerKind::ID); \\\n    bool InImportedModule = ImportedSanitizers.has(SanitizerKind::ID); \\\n    if (InExistingModule != InImportedModule) \\\n      Diags->Report(diag::err_pch_targetopt_feature_mismatch) << InExistingModule << (Flag + NAME); \\"},{G,436,"/// Compare the given set of target options against an existing set of\n/// target options.\n///\n/// \\param Diags If non-NULL, diagnostics will be emitted via this engine.\n///\n/// \\returns true if the target options mis-match, false otherwise.\nstatic bool checkTargetOptions(const TargetOptions &TargetOpts, const TargetOptions &ExistingTargetOpts, DiagnosticsEngine *Diags, bool AllowCompatibleDifferences = true) {\n  // ...\n  if (Diags) {\n    for (StringRef Feature : UnmatchedReadFeatures)\n      Diags->Report(diag::err_pch_targetopt_feature_mismatch) << /* is-existing-feature */ false << Feature;"},{G,439,"/// Compare the given set of target options against an existing set of\n/// target options.\n///\n/// \\param Diags If non-NULL, diagnostics will be emitted via this engine.\n///\n/// \\returns true if the target options mis-match, false otherwise.\nstatic bool checkTargetOptions(const TargetOptions &TargetOpts, const TargetOptions &ExistingTargetOpts, DiagnosticsEngine *Diags, bool AllowCompatibleDifferences = true) {\n  // ...\n  if (Diags) {\n    // ...\n    for (StringRef Feature : UnmatchedExistingFeatures)\n      Diags->Report(diag::err_pch_targetopt_feature_mismatch) << /* is-existing-feature */ true << Feature;"}}
},
},
["err_pch_targetopt_mismatch"]={
["err_pch_targetopt_mismatch"]={
[b]="err_pch_targetopt_mismatch",
[d]="err_pch_targetopt_mismatch",
[j]="PCH file was compiled for the %0 \'%1\' but the current translation unit is being compiled for target \'%2\'",
[e]="PCH file was compiled for the %0 \'%1\' but the current translation unit is being compiled for target \'%2\'",
[i]="PCH file was compiled for the A \'B\' but the current translation unit is being compiled for target \'C\'",
[f]="PCH file was compiled for the A \'B\' but the current translation unit is being compiled for target \'C\'",
[h]=k,
[g]=k,
[c]="PCH file was compiled for the (.*?) \'(.*?)\' but the current translation unit is being compiled for target \'(.*?)\'",
[h]="PCH file was compiled for the (.*?) \'(.*?)\' but the current translation unit is being compiled for target \'(.*?)\'",
[f]=a,
[b]=a,
[e]=V,
[c]=X,
[g]={"cb177f15e788",1350430858,"Serialize TargetOptions into an AST file, and make sure that we keep","Serialize TargetOptions into an AST file, and make sure that we keep\ntarget options around so they can be accessed at any point (rather\nthan keeping them transient).\n\nllvm-svn: 166072"},
[j]={"cb177f15e788",1350430858,"Serialize TargetOptions into an AST file, and make sure that we keep","Serialize TargetOptions into an AST file, and make sure that we keep\ntarget options around so they can be accessed at any point (rather\nthan keeping them transient).\n\nllvm-svn: 166072"},
[d]={{G,391,"#define CHECK_TARGET_OPT(Field, Name) \\\n  if (TargetOpts.Field != ExistingTargetOpts.Field) { \\\n    if (Diags) \\\n      Diags->Report(diag::err_pch_targetopt_mismatch) << Name << TargetOpts.Field << ExistingTargetOpts.Field; \\"}}
[i]={{G,391,"#define CHECK_TARGET_OPT(Field, Name) \\\n  if (TargetOpts.Field != ExistingTargetOpts.Field) { \\\n    if (Diags) \\\n      Diags->Report(diag::err_pch_targetopt_mismatch) << Name << TargetOpts.Field << ExistingTargetOpts.Field; \\"}}
},
},
["err_pch_undef"]={
["err_pch_undef"]={
[b]="err_pch_undef",
[d]="err_pch_undef",
[j]="%select{command line contains|precompiled header was built with}0 \'-undef\' but %select{precompiled header was not built with it|it is not present on the command line}0",
[e]="%select{command line contains|precompiled header was built with}0 \'-undef\' but %select{precompiled header was not built with it|it is not present on the command line}0",
[i]={{nil,nil,{{"command line contains","precompiled header was built with"}," \'-undef\' but ",{"precompiled header was not built with it","it is not present on the command line"}}}},
[f]={{nil,nil,{{"command line contains","precompiled header was built with"}," \'-undef\' but ",{"precompiled header was not built with it","it is not present on the command line"}}}},
[h]=k,
[g]=k,
[c]="(?:command line contains|precompiled header was built with) \'\\-undef\' but (?:precompiled header was not built with it|it is not present on the command line)",
[h]="(?:command line contains|precompiled header was built with) \'\\-undef\' but (?:precompiled header was not built with it|it is not present on the command line)",
[f]=a,
[b]=a,
[e]=V,
[c]=X,
[g]={"b63687519610",1351122110,"Teach the PCH validator to check the preprocessor options, especially","Teach the PCH validator to check the preprocessor options, especially\nthe macros that are #define\'d or #undef\'d on the command line. This\nchecking happens much earlier than the current macro-definition\nchecking and is far cleaner, because it does a direct comparison\nrather than a diff of the predefines buffers. Moreover, it allows us\nto use the result of this check to skip over PCH files within a\ndirectory that have non-matching -D\'s or -U\'s on the command\nline. Finally, it improves the diagnostics a bit for mismatches,\nfixing <rdar://problem/8612222>.\n\nThe old predefines-buffer diff\'ing will go away in a subsequent commit.\n\nllvm-svn: 166641"},
[j]={"b63687519610",1351122110,"Teach the PCH validator to check the preprocessor options, especially","Teach the PCH validator to check the preprocessor options, especially\nthe macros that are #define\'d or #undef\'d on the command line. This\nchecking happens much earlier than the current macro-definition\nchecking and is far cleaner, because it does a direct comparison\nrather than a diff of the predefines buffers. Moreover, it allows us\nto use the result of this check to skip over PCH files within a\ndirectory that have non-matching -D\'s or -U\'s on the command\nline. Finally, it improves the diagnostics a bit for mismatches,\nfixing <rdar://problem/8612222>.\n\nThe old predefines-buffer diff\'ing will go away in a subsequent commit.\n\nllvm-svn: 166641"},
[d]={{G,745,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///        preprocessor options. If set to OptionValidateContradictions,\n///        require that options passed both in the AST file and on the command\n///        line (-D or -U) match, but tolerate options missing in one or the\n///        other. If set to OptionValidateContradictions, require that there\n///        are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n  // ...\n  // Check whether we\'re using predefines.\n  if (PPOpts.UsePredefines != ExistingPPOpts.UsePredefines && Validation != OptionValidateNone) {\n    if (Diags) {\n      Diags->Report(diag::err_pch_undef) << ExistingPPOpts.UsePredefines;"}}
[i]={{G,745,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///        preprocessor options. If set to OptionValidateContradictions,\n///        require that options passed both in the AST file and on the command\n///        line (-D or -U) match, but tolerate options missing in one or the\n///        other. If set to OptionValidateContradictions, require that there\n///        are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n  // ...\n  // Check whether we\'re using predefines.\n  if (PPOpts.UsePredefines != ExistingPPOpts.UsePredefines && Validation != OptionValidateNone) {\n    if (Diags) {\n      Diags->Report(diag::err_pch_undef) << ExistingPPOpts.UsePredefines;"}}
},
},
["err_pch_version_too_new"]={
["err_pch_version_too_new"]={
[b]="err_pch_version_too_new",
[d]="err_pch_version_too_new",
[j]="PCH file uses a newer PCH format that cannot be read",
[e]="PCH file uses a newer PCH format that cannot be read",
[i]="PCH file uses a newer PCH format that cannot be read",
[f]="PCH file uses a newer PCH format that cannot be read",
[h]=k,
[g]=k,
[c]="PCH file uses a newer PCH format that cannot be read",
[h]="PCH file uses a newer PCH format that cannot be read",
[f]=a,
[b]=a,
[e]=V,
[c]=X,
[g]={"2228cd3f070d",1392133209,"Rename some PCH-related errors to have \'err_\' as their prefix","Rename some PCH-related errors to have \'err_\' as their prefix\n\nllvm-svn: 201157"},
[j]={"2228cd3f070d",1392133209,"Rename some PCH-related errors to have \'err_\' as their prefix","Rename some PCH-related errors to have \'err_\' as their prefix\n\nllvm-svn: 201157"},
[d]={{G,2833,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case METADATA: {\n      if (Record[0] != VERSION_MAJOR && !DisableValidation) {\n        if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)\n          Diag(Record[0] < VERSION_MAJOR ? diag::err_pch_version_too_old : diag::err_pch_version_too_new);"}}
[i]={{G,2833,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case METADATA: {\n      if (Record[0] != VERSION_MAJOR && !DisableValidation) {\n        if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)\n          Diag(Record[0] < VERSION_MAJOR ? diag::err_pch_version_too_old : diag::err_pch_version_too_new);"}}
},
},
["err_pch_version_too_old"]={
["err_pch_version_too_old"]={
[b]="err_pch_version_too_old",
[d]="err_pch_version_too_old",
[j]="PCH file uses an older PCH format that is no longer supported",
[e]="PCH file uses an older PCH format that is no longer supported",
[i]="PCH file uses an older PCH format that is no longer supported",
[f]="PCH file uses an older PCH format that is no longer supported",
[h]=k,
[g]=k,
[c]="PCH file uses an older PCH format that is no longer supported",
[h]="PCH file uses an older PCH format that is no longer supported",
[f]=a,
[b]=a,
[e]=V,
[c]=X,
[g]={"2228cd3f070d",1392133209,"Rename some PCH-related errors to have \'err_\' as their prefix","Rename some PCH-related errors to have \'err_\' as their prefix\n\nllvm-svn: 201157"},
[j]={"2228cd3f070d",1392133209,"Rename some PCH-related errors to have \'err_\' as their prefix","Rename some PCH-related errors to have \'err_\' as their prefix\n\nllvm-svn: 201157"},
[d]={{G,2832,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case METADATA: {\n      if (Record[0] != VERSION_MAJOR && !DisableValidation) {\n        if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)\n          Diag(Record[0] < VERSION_MAJOR ? diag::err_pch_version_too_old : diag::err_pch_version_too_new);"},{G,4701,"ASTReader::ASTReadResult ASTReader::ReadASTCore(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, ModuleFile *ImportedBy, SmallVectorImpl<ImportedModule> &Loaded, off_t ExpectedSize, time_t ExpectedModTime, ASTFileSignature ExpectedSignature, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case AST_BLOCK_ID:\n      if (!HaveReadControlBlock) {\n        if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)\n          Diag(diag::err_pch_version_too_old);"}}
[i]={{G,2832,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case METADATA: {\n      if (Record[0] != VERSION_MAJOR && !DisableValidation) {\n        if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)\n          Diag(Record[0] < VERSION_MAJOR ? diag::err_pch_version_too_old : diag::err_pch_version_too_new);"},{G,4701,"ASTReader::ASTReadResult ASTReader::ReadASTCore(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, ModuleFile *ImportedBy, SmallVectorImpl<ImportedModule> &Loaded, off_t ExpectedSize, time_t ExpectedModTime, ASTFileSignature ExpectedSignature, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case AST_BLOCK_ID:\n      if (!HaveReadControlBlock) {\n        if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)\n          Diag(diag::err_pch_version_too_old);"}}
},
},
["err_pch_with_compiler_errors"]={
["err_pch_with_compiler_errors"]={
[b]="err_pch_with_compiler_errors",
[d]="err_pch_with_compiler_errors",
[j]="PCH file contains compiler errors",
[e]="PCH file contains compiler errors",
[i]="PCH file contains compiler errors",
[f]="PCH file contains compiler errors",
[h]=k,
[g]=k,
[c]="PCH file contains compiler errors",
[h]="PCH file contains compiler errors",
[f]=a,
[b]=a,
[e]=V,
[c]=X,
[g]={"4a280ff48fd6",1331085077,"[PCH] Mark a PCH file with a flag to indicate if the serialized AST had","[PCH] Mark a PCH file with a flag to indicate if the serialized AST had\ncompiler errors or not.\n\n-Control whether ASTReader should reject such a PCH by a boolean flag at ASTReader\'s creation time.\nBy default, such a PCH file will be rejected with an error when trying to load it.\n\n[libclang] Allow clang_saveTranslationUnit to create a PCH file even if compiler errors\noccurred.\n-Have libclang API calls accept a PCH that had compiler errors.\n\nThe general idea is that we want libclang to stay functional even if a PCH had a compiler error.\nrdar://10976363.\n\nllvm-svn: 152192"},
[j]={"4a280ff48fd6",1331085077,"[PCH] Mark a PCH file with a flag to indicate if the serialized AST had","[PCH] Mark a PCH file with a flag to indicate if the serialized AST had\ncompiler errors or not.\n\n-Control whether ASTReader should reject such a PCH by a boolean flag at ASTReader\'s creation time.\nBy default, such a PCH file will be rejected with an error when trying to load it.\n\n[libclang] Allow clang_saveTranslationUnit to create a PCH file even if compiler errors\noccurred.\n-Have libclang API calls accept a PCH that had compiler errors.\n\nThe general idea is that we want libclang to stay functional even if a PCH had a compiler error.\nrdar://10976363.\n\nllvm-svn: 152192"},
[d]={{G,2846,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case METADATA: {\n      // ...\n      if (hasErrors && !DisableValidation) {\n        // ...\n        if (!AllowASTWithCompilerErrors) {\n          Diag(diag::err_pch_with_compiler_errors);"}},
[i]={{G,2846,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case METADATA: {\n      // ...\n      if (hasErrors && !DisableValidation) {\n        // ...\n        if (!AllowASTWithCompilerErrors) {\n          Diag(diag::err_pch_with_compiler_errors);"}},
[l]={
[l]={
["clang/test/Modules/load-module-with-errors.m"]={"clang/test/Modules/load-module-with-errors.m:5:2: error: PCH file contains compiler errors"}
["clang/test/Modules/load-module-with-errors.m"]={"clang/test/Modules/load-module-with-errors.m:5:2: error: PCH file contains compiler errors"}
Line 1,621: Line 1,622:
},
},
["err_placeholder_constraints_not_satisfied"]={
["err_placeholder_constraints_not_satisfied"]={
[b]={{nil,o,"err_placeholder_constraints_not_satisfied"}},
[d]={{nil,o,"err_placeholder_constraints_not_satisfied"}},
[j]={{nil,o,"deduced type %0 does not satisfy %1"}},
[e]={{nil,o,"deduced type %0 does not satisfy %1"}},
[i]={{nil,o,"deduced type A does not satisfy B"}},
[f]={{nil,o,"deduced type A does not satisfy B"}},
[h]=k,
[g]=k,
[c]="deduced type (.*?) does not satisfy (.*?)",
[h]="deduced type (.*?) does not satisfy (.*?)",
[f]=a,
[b]=a,
[e]={{nil,o,m}},
[c]={{nil,o,m}},
[g]={"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"},
[j]={"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"},
[d]={{"clang/lib/Sema/SemaTemplateDeduction.cpp",4733,"static bool CheckDeducedPlaceholderConstraints(Sema &S, const AutoType &Type, AutoTypeLoc TypeLoc, QualType Deduced) {\n  // ...\n  if (!Satisfaction.IsSatisfied) {\n    // ...\n    S.Diag(TypeLoc.getConceptNameLoc(), diag::err_placeholder_constraints_not_satisfied) << Deduced << Buf << TypeLoc.getLocalSourceRange();"}},
[i]={{"clang/lib/Sema/SemaTemplateDeduction.cpp",4733,"static bool CheckDeducedPlaceholderConstraints(Sema &S, const AutoType &Type, AutoTypeLoc TypeLoc, QualType Deduced) {\n  // ...\n  if (!Satisfaction.IsSatisfied) {\n    // ...\n    S.Diag(TypeLoc.getConceptNameLoc(), diag::err_placeholder_constraints_not_satisfied) << Deduced << Buf << TypeLoc.getLocalSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp"]={"clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:23:3: error: deduced type \'char\' does not satisfy \'Large\'","clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:29:3: error: deduced type \'int\' does not satisfy \'LargerThan<10>\'","clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:22:1: error: deduced type \'char\' does not satisfy \'Large\'","clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:37:1: error: deduced type \'int\' does not satisfy \'LargerThan<4>\'"}
["clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp"]={"clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:23:3: error: deduced type \'char\' does not satisfy \'Large\'","clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:29:3: error: deduced type \'int\' does not satisfy \'LargerThan<10>\'","clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:22:1: error: deduced type \'char\' does not satisfy \'Large\'","clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:37:1: error: deduced type \'int\' does not satisfy \'LargerThan<4>\'"}
Line 1,635: Line 1,636:
},
},
["err_placeholder_expected_auto_or_decltype_auto"]={
["err_placeholder_expected_auto_or_decltype_auto"]={
[b]={{nil,o,"err_placeholder_expected_auto_or_decltype_auto"}},
[d]={{nil,o,"err_placeholder_expected_auto_or_decltype_auto"}},
[j]={{nil,o,"expected \'auto\' or \'decltype(auto)\' after concept name"}},
[e]={{nil,o,"expected \'auto\' or \'decltype(auto)\' after concept name"}},
[i]={{nil,o,"expected \'auto\' or \'decltype(auto)\' after concept name"}},
[f]={{nil,o,"expected \'auto\' or \'decltype(auto)\' after concept name"}},
[h]=k,
[g]=k,
[c]="expected \'auto\' or \'decltype\\(auto\\)\' after concept name",
[h]="expected \'auto\' or \'decltype\\(auto\\)\' after concept name",
[f]=a,
[b]=a,
[e]={{nil,o,"Concepts Issue"}},
[c]={{nil,o,"Concepts Issue"}},
[g]={gb,1570627358,hb,db},
[j]={lb,1570627358,kb,db},
[d]={{Kb,3800,"/// 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::annot_template_id: {\n      // ...\n      if (TemplateId->Kind == TNK_Concept_template) {\n        // ...\n        // Any of the following tokens are likely the start of the user\n        // forgetting \'auto\' or \'decltype(auto)\', so diagnose.\n        // Note: if updating this list, please make sure we update\n        // isCXXDeclarationSpecifier\'s check for IsPlaceholderSpecifier to have\n        // a matching list.\n        if (NextToken().isOneOf(tok::identifier, tok::kw_const, tok::kw_volatile, tok::kw_restrict, tok::amp, tok::ampamp)) {\n          Diag(Loc, diag::err_placeholder_expected_auto_or_decltype_auto) << FixItHint::CreateInsertion(NextToken().getLocation(), \"auto\");"},{Kb,3824,"/// 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::annot_template_id: {\n      // ...\n      if (TemplateId->Kind == TNK_Concept_template) {\n        // ...\n        if (TryConsumeToken(tok::kw_decltype)) {\n          // ...\n          if (Tracker.consumeOpen()) {\n          // ...\n          } else {\n            if (!TryConsumeToken(tok::kw_auto)) {\n              // ...\n              Diag(Tok, diag::err_placeholder_expected_auto_or_decltype_auto) << FixItHint::CreateReplacement(SourceRange(AutoLoc, Tok.getLocation()), \"auto\");"}},
[i]={{yb,3800,"/// 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::annot_template_id: {\n      // ...\n      if (TemplateId->Kind == TNK_Concept_template) {\n        // ...\n        // Any of the following tokens are likely the start of the user\n        // forgetting \'auto\' or \'decltype(auto)\', so diagnose.\n        // Note: if updating this list, please make sure we update\n        // isCXXDeclarationSpecifier\'s check for IsPlaceholderSpecifier to have\n        // a matching list.\n        if (NextToken().isOneOf(tok::identifier, tok::kw_const, tok::kw_volatile, tok::kw_restrict, tok::amp, tok::ampamp)) {\n          Diag(Loc, diag::err_placeholder_expected_auto_or_decltype_auto) << FixItHint::CreateInsertion(NextToken().getLocation(), \"auto\");"},{yb,3824,"/// 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::annot_template_id: {\n      // ...\n      if (TemplateId->Kind == TNK_Concept_template) {\n        // ...\n        if (TryConsumeToken(tok::kw_decltype)) {\n          // ...\n          if (Tracker.consumeOpen()) {\n          // ...\n          } else {\n            if (!TryConsumeToken(tok::kw_auto)) {\n              // ...\n              Diag(Tok, diag::err_placeholder_expected_auto_or_decltype_auto) << FixItHint::CreateReplacement(SourceRange(AutoLoc, Tok.getLocation()), \"auto\");"}},
[l]={
[l]={
["clang/test/Parser/cxx2a-placeholder-type-constraint.cpp"]={"clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:30:4: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:32:4: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:34:4: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:36:4: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:40:18: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:45:11: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:48:17: error: expected \'auto\' or \'decltype(auto)\' after concept name"}
["clang/test/Parser/cxx2a-placeholder-type-constraint.cpp"]={"clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:30:4: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:32:4: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:34:4: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:36:4: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:40:18: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:45:11: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:48:17: error: expected \'auto\' or \'decltype(auto)\' after concept name"}
Line 1,649: Line 1,650:
},
},
["err_placeholder_in_source"]={
["err_placeholder_in_source"]={
[b]={{nil,n,"err_placeholder_in_source"}},
[d]={{nil,n,"err_placeholder_in_source"}},
[j]={{nil,n,"editor placeholder in source file"}},
[e]={{nil,n,"editor placeholder in source file"}},
[i]={{nil,n,"editor placeholder in source file"}},
[f]={{nil,n,"editor placeholder in source file"}},
[h]=k,
[g]=k,
[c]="editor placeholder in source file",
[h]="editor placeholder in source file",
[f]=a,
[b]=a,
[e]={{nil,n,p}},
[c]={{nil,n,p}},
[g]={"1be800c511c8",1492592336,"Add support for editor placeholders to Clang","Add support for editor placeholders to Clang\n\nThis commit teaches Clang to recognize editor placeholders that are produced\nwhen an IDE like Xcode inserts a code-completion result that includes a\nplaceholder. Now when the lexer sees a placeholder token, it emits an\n\'editor placeholder in source file\' error and creates an identifier token\nthat represents the placeholder. The parser/sema can now recognize the\nplaceholders and can suppress the diagnostics related to the placeholders. This\nensures that live issues in an IDE like Xcode won\'t get spurious diagnostics\nrelated to placeholders.\n\nThis commit also adds a new compiler option named \'-fallow-editor-placeholders\'\nthat silences the \'editor placeholder in source file\' error. This is useful\nfor an IDE like Xcode as we don\'t want to display those errors in live issues.\n\nrdar://31581400\n\nDifferential Revision: https://reviews.llvm.org/D32081\n\nllvm-svn: 300667"},
[j]={"1be800c511c8",1492592336,"Add support for editor placeholders to Clang","Add support for editor placeholders to Clang\n\nThis commit teaches Clang to recognize editor placeholders that are produced\nwhen an IDE like Xcode inserts a code-completion result that includes a\nplaceholder. Now when the lexer sees a placeholder token, it emits an\n\'editor placeholder in source file\' error and creates an identifier token\nthat represents the placeholder. The parser/sema can now recognize the\nplaceholders and can suppress the diagnostics related to the placeholders. This\nensures that live issues in an IDE like Xcode won\'t get spurious diagnostics\nrelated to placeholders.\n\nThis commit also adds a new compiler option named \'-fallow-editor-placeholders\'\nthat silences the \'editor placeholder in source file\' error. This is useful\nfor an IDE like Xcode as we don\'t want to display those errors in live issues.\n\nrdar://31581400\n\nDifferential Revision: https://reviews.llvm.org/D32081\n\nllvm-svn: 300667"},
[d]={{"clang/lib/Lex/Lexer.cpp",3241,"bool Lexer::lexEditorPlaceholder(Token &Result, const char *CurPtr) {\n  // ...\n  if (!LangOpts.AllowEditorPlaceholders)\n    Diag(Start, diag::err_placeholder_in_source);"}},
[i]={{"clang/lib/Lex/Lexer.cpp",3241,"bool Lexer::lexEditorPlaceholder(Token &Result, const char *CurPtr) {\n  // ...\n  if (!LangOpts.AllowEditorPlaceholders)\n    Diag(Start, diag::err_placeholder_in_source);"}},
[l]={
[l]={
["clang/test/Frontend/pp-only-no-editor-placeholders.c"]={"clang/test/Frontend/pp-only-no-editor-placeholders.c:4:1: error: editor placeholder in source file"}
["clang/test/Frontend/pp-only-no-editor-placeholders.c"]={"clang/test/Frontend/pp-only-no-editor-placeholders.c:4:1: error: editor placeholder in source file"}
Line 1,663: Line 1,664:
},
},
["err_placement_new_non_placement_delete"]={
["err_placement_new_non_placement_delete"]={
[b]="err_placement_new_non_placement_delete",
[d]="err_placement_new_non_placement_delete",
[j]="\'new\' expression with placement arguments refers to non-placement \'operator delete\'",
[e]="\'new\' expression with placement arguments refers to non-placement \'operator delete\'",
[i]="\'new\' expression with placement arguments refers to non-placement \'operator delete\'",
[f]="\'new\' expression with placement arguments refers to non-placement \'operator delete\'",
[h]=k,
[g]=k,
[c]="\'new\' expression with placement arguments refers to non\\-placement \'operator delete\'",
[h]="\'new\' expression with placement arguments refers to non\\-placement \'operator delete\'",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"6642ca217e73",1267160778,"Implement semantic analysis for C++ [expr.new]p18-20, which describe","Implement semantic analysis for C++ [expr.new]p18-20, which describe\nhow we find the operator delete that matches withe operator new we\nfound in a C++ new-expression.\n\nThis will also need CodeGen support. On a happy note, we\'re now a\n\"nans\" away from building tramp3d-v4.\n\nllvm-svn: 97209"},
[j]={"6642ca217e73",1267160778,"Implement semantic analysis for C++ [expr.new]p18-20, which describe","Implement semantic analysis for C++ [expr.new]p18-20, which describe\nhow we find the operator delete that matches withe operator new we\nfound in a C++ new-expression.\n\nThis will also need CodeGen support. On a happy note, we\'re now a\n\"nans\" away from building tramp3d-v4.\n\nllvm-svn: 97209"},
[d]={{Q,2926,"bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range, AllocationFunctionScope NewScope, AllocationFunctionScope DeleteScope, QualType AllocType, bool IsArray, bool &PassAlignment, MultiExprArg PlaceArgs, FunctionDecl *&OperatorNew, FunctionDecl *&OperatorDelete, bool Diagnose) {\n  // ...\n  // C++ [expr.new]p20:\n  //  [...] If the lookup finds a single matching deallocation\n  //  function, that function will be called; otherwise, no\n  //  deallocation function will be called.\n  if (Matches.size() == 1) {\n    // ...\n    // C++1z [expr.new]p23:\n    //  If the lookup finds a usual deallocation function (3.7.4.2)\n    //  with a parameter of type std::size_t and that function, considered\n    //  as a placement deallocation function, would have been\n    //  selected as a match for the allocation function, the program\n    //  is ill-formed.\n    if (getLangOpts().CPlusPlus11 && isPlacementNew && isNonPlacementDeallocationFunction(*this, OperatorDelete)) {\n      // ...\n      if (IsSizedDelete) {\n        // ...\n        Diag(StartLoc, diag::err_placement_new_non_placement_delete) << R;"}},
[i]={{Q,2926,"bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range, AllocationFunctionScope NewScope, AllocationFunctionScope DeleteScope, QualType AllocType, bool IsArray, bool &PassAlignment, MultiExprArg PlaceArgs, FunctionDecl *&OperatorNew, FunctionDecl *&OperatorDelete, bool Diagnose) {\n  // ...\n  // C++ [expr.new]p20:\n  //  [...] If the lookup finds a single matching deallocation\n  //  function, that function will be called; otherwise, no\n  //  deallocation function will be called.\n  if (Matches.size() == 1) {\n    // ...\n    // C++1z [expr.new]p23:\n    //  If the lookup finds a usual deallocation function (3.7.4.2)\n    //  with a parameter of type std::size_t and that function, considered\n    //  as a placement deallocation function, would have been\n    //  selected as a match for the allocation function, the program\n    //  is ill-formed.\n    if (getLangOpts().CPlusPlus11 && isPlacementNew && isNonPlacementDeallocationFunction(*this, OperatorDelete)) {\n      // ...\n      if (IsSizedDelete) {\n        // ...\n        Diag(StartLoc, diag::err_placement_new_non_placement_delete) << R;"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx1y-sized-deallocation.cpp"]={"clang/test/SemaCXX/cxx1y-sized-deallocation.cpp:18:3: error: \'new\' expression with placement arguments refers to non-placement \'operator delete\'"}
["clang/test/SemaCXX/cxx1y-sized-deallocation.cpp"]={"clang/test/SemaCXX/cxx1y-sized-deallocation.cpp:18:3: error: \'new\' expression with placement arguments refers to non-placement \'operator delete\'"}
Line 1,677: Line 1,678:
},
},
["err_pointer_to_member_call_drops_quals"]={
["err_pointer_to_member_call_drops_quals"]={
[b]="err_pointer_to_member_call_drops_quals",
[d]="err_pointer_to_member_call_drops_quals",
[j]="call to pointer to member function of type %0 drops \'%1\' qualifier%s2",
[e]="call to pointer to member function of type %0 drops \'%1\' qualifier%s2",
[i]="call to pointer to member function of type A drops \'B\' qualifierC",
[f]="call to pointer to member function of type A drops \'B\' qualifierC",
[h]=k,
[g]=k,
[c]="call to pointer to member function of type (.*?) drops \'(.*?)\' qualifier(.*?)",
[h]="call to pointer to member function of type (.*?) drops \'(.*?)\' qualifier(.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"125fa40c34a4",1296824269,"When calling a bound pointer to member function, check the","When calling a bound pointer to member function, check the\ncv-qualifiers on the object against the cv-qualifiers on the member\nfunction. Fixes PR8315.\n\nllvm-svn: 124865"},
[j]={"125fa40c34a4",1296824269,"When calling a bound pointer to member function, check the","When calling a bound pointer to member function, check the\ncv-qualifiers on the object against the cv-qualifiers on the member\nfunction. Fixes PR8315.\n\nllvm-svn: 124865"},
[d]={{E,14691,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  // Determine whether this is a call to a pointer-to-member function.\n  if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) {\n    // ...\n    if (difference) {\n      // ...\n      Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals) << fnType.getUnqualifiedType() << qualsString << (qualsString.find(\' \') == std::string::npos ? 1 : 2);"}},
[i]={{E,14691,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  // Determine whether this is a call to a pointer-to-member function.\n  if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) {\n    // ...\n    if (difference) {\n      // ...\n      Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals) << fnType.getUnqualifiedType() << qualsString << (qualsString.find(\' \') == std::string::npos ? 1 : 2);"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.mptr.oper/p5.cpp"]={"clang/test/CXX/expr/expr.mptr.oper/p5.cpp:27:12: error: call to pointer to member function of type \'void ()\' drops \'const\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:29:13: error: call to pointer to member function of type \'void () volatile\' drops \'const\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:32:12: error: call to pointer to member function of type \'void ()\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:33:13: error: call to pointer to member function of type \'void () const\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:37:13: error: call to pointer to member function of type \'void ()\' drops \'const volatile\' qualifiers","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:38:14: error: call to pointer to member function of type \'void () const\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:39:14: error: call to pointer to member function of type \'void () volatile\' drops \'const\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:47:11: error: call to pointer to member function of type \'void ()\' drops \'const\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:49:12: error: call to pointer to member function of type \'void () volatile\' drops \'const\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:52:11: error: call to pointer to member function of type \'void ()\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:53:12: error: call to pointer to member function of type \'void () const\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:57:12: error: call to pointer to member function of type \'void ()\' drops \'const volatile\' qualifiers","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:58:13: error: call to pointer to member function of type \'void () const\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:59:13: error: call to pointer to member function of type \'void () volatile\' drops \'const\' qualifier"}
["clang/test/CXX/expr/expr.mptr.oper/p5.cpp"]={"clang/test/CXX/expr/expr.mptr.oper/p5.cpp:27:12: error: call to pointer to member function of type \'void ()\' drops \'const\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:29:13: error: call to pointer to member function of type \'void () volatile\' drops \'const\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:32:12: error: call to pointer to member function of type \'void ()\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:33:13: error: call to pointer to member function of type \'void () const\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:37:13: error: call to pointer to member function of type \'void ()\' drops \'const volatile\' qualifiers","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:38:14: error: call to pointer to member function of type \'void () const\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:39:14: error: call to pointer to member function of type \'void () volatile\' drops \'const\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:47:11: error: call to pointer to member function of type \'void ()\' drops \'const\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:49:12: error: call to pointer to member function of type \'void () volatile\' drops \'const\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:52:11: error: call to pointer to member function of type \'void ()\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:53:12: error: call to pointer to member function of type \'void () const\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:57:12: error: call to pointer to member function of type \'void ()\' drops \'const volatile\' qualifiers","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:58:13: error: call to pointer to member function of type \'void () const\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:59:13: error: call to pointer to member function of type \'void () volatile\' drops \'const\' qualifier"}
Line 1,691: Line 1,692:
},
},
["err_pointer_to_member_oper_value_classify"]={
["err_pointer_to_member_oper_value_classify"]={
[b]="err_pointer_to_member_oper_value_classify",
[d]="err_pointer_to_member_oper_value_classify",
[j]="pointer-to-member function type %0 can only be called on an %select{rvalue|lvalue}1",
[e]="pointer-to-member function type %0 can only be called on an %select{rvalue|lvalue}1",
[i]={{nil,nil,{"pointer-to-member function type A can only be called on an ",{cc,bc}}}},
[f]={{nil,nil,{"pointer-to-member function type A can only be called on an ",{cc,bc}}}},
[h]=k,
[g]=k,
[c]="pointer\\-to\\-member function type (.*?) can only be called on an (?:rvalue|lvalue)",
[h]="pointer\\-to\\-member function type (.*?) can only be called on an (?:rvalue|lvalue)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"1d042091d39c",1296060018,"Reference qualifiers for *this: implement C++0x [expr.mptr.oper]p6,","Reference qualifiers for *this: implement C++0x [expr.mptr.oper]p6,\nthe restrictions on .* and ->* for ref-qualified pointer-to-member\nfunctions.\n\nllvm-svn: 124294"},
[j]={"1d042091d39c",1296060018,"Reference qualifiers for *this: implement C++0x [expr.mptr.oper]p6,","Reference qualifiers for *this: implement C++0x [expr.mptr.oper]p6,\nthe restrictions on .* and ->* for ref-qualified pointer-to-member\nfunctions.\n\nllvm-svn: 124294"},
[d]={{Q,6094,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  // C++0x [expr.mptr.oper]p6:\n  //  In a .* expression whose object expression is an rvalue, the program is\n  //  ill-formed if the second operand is a pointer to member function with\n  //  ref-qualifier &. In a ->* expression or in a .* expression whose object\n  //  expression is an lvalue, the program is ill-formed if the second operand\n  //  is a pointer to member function with ref-qualifier &&.\n  if (const FunctionProtoType *Proto = Result->getAs<FunctionProtoType>()) {\n    // ...\n    case RQ_LValue:\n      if (!isIndirect && !LHS.get()->Classify(Context).isLValue()) {\n        // C++2a allows functions with ref-qualifier & if their cv-qualifier-seq\n        // is (exactly) \'const\'.\n        if (Proto->isConst() && !Proto->isVolatile())\n        // ...\n        else\n          Diag(Loc, diag::err_pointer_to_member_oper_value_classify) << RHSType << 1 << LHS.get()->getSourceRange();"},{Q,6101,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  // C++0x [expr.mptr.oper]p6:\n  //  In a .* expression whose object expression is an rvalue, the program is\n  //  ill-formed if the second operand is a pointer to member function with\n  //  ref-qualifier &. In a ->* expression or in a .* expression whose object\n  //  expression is an lvalue, the program is ill-formed if the second operand\n  //  is a pointer to member function with ref-qualifier &&.\n  if (const FunctionProtoType *Proto = Result->getAs<FunctionProtoType>()) {\n    // ...\n    case RQ_RValue:\n      if (isIndirect || !LHS.get()->Classify(Context).isRValue())\n        Diag(Loc, diag::err_pointer_to_member_oper_value_classify) << RHSType << 0 << LHS.get()->getSourceRange();"}},
[i]={{Q,6094,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  // C++0x [expr.mptr.oper]p6:\n  //  In a .* expression whose object expression is an rvalue, the program is\n  //  ill-formed if the second operand is a pointer to member function with\n  //  ref-qualifier &. In a ->* expression or in a .* expression whose object\n  //  expression is an lvalue, the program is ill-formed if the second operand\n  //  is a pointer to member function with ref-qualifier &&.\n  if (const FunctionProtoType *Proto = Result->getAs<FunctionProtoType>()) {\n    // ...\n    case RQ_LValue:\n      if (!isIndirect && !LHS.get()->Classify(Context).isLValue()) {\n        // C++2a allows functions with ref-qualifier & if their cv-qualifier-seq\n        // is (exactly) \'const\'.\n        if (Proto->isConst() && !Proto->isVolatile())\n        // ...\n        else\n          Diag(Loc, diag::err_pointer_to_member_oper_value_classify) << RHSType << 1 << LHS.get()->getSourceRange();"},{Q,6101,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  // C++0x [expr.mptr.oper]p6:\n  //  In a .* expression whose object expression is an rvalue, the program is\n  //  ill-formed if the second operand is a pointer to member function with\n  //  ref-qualifier &. In a ->* expression or in a .* expression whose object\n  //  expression is an lvalue, the program is ill-formed if the second operand\n  //  is a pointer to member function with ref-qualifier &&.\n  if (const FunctionProtoType *Proto = Result->getAs<FunctionProtoType>()) {\n    // ...\n    case RQ_RValue:\n      if (isIndirect || !LHS.get()->Classify(Context).isRValue())\n        Diag(Loc, diag::err_pointer_to_member_oper_value_classify) << RHSType << 0 << LHS.get()->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp"]={"clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp:14:7: error: pointer-to-member function type \'void (X::*)() &\' can only be called on an lvalue","clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp:16:7: error: pointer-to-member function type \'void (X::*)() const volatile &\' can only be called on an lvalue"}
["clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp"]={"clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp:14:7: error: pointer-to-member function type \'void (X::*)() &\' can only be called on an lvalue","clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp:16:7: error: pointer-to-member function type \'void (X::*)() const volatile &\' can only be called on an lvalue"}
Line 1,705: Line 1,706:
},
},
["err_pointer_to_member_type"]={
["err_pointer_to_member_type"]={
[b]="err_pointer_to_member_type",
[d]="err_pointer_to_member_type",
[j]="invalid use of pointer to member type after %select{.*|->*}0",
[e]="invalid use of pointer to member type after %select{.*|->*}0",
[i]={{nil,nil,{"invalid use of pointer to member type after ",{".*","->*"}}}},
[f]={{nil,nil,{"invalid use of pointer to member type after ",{".*","->*"}}}},
[h]=k,
[g]=k,
[c]="invalid use of pointer to member type after (?:\\.\\*|\\-\\>\\*)",
[h]="invalid use of pointer to member type after (?:\\.\\*|\\-\\>\\*)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"9a14b84ac559",1256331699,"Diagnose misuse of \'.*\' and \'->*\' operators during parse","Diagnose misuse of \'.*\' and \'->*\' operators during parse\ninstead of crashing in code gen.\n\nllvm-svn: 84968"},
[j]={"9a14b84ac559",1256331699,"Diagnose misuse of \'.*\' and \'->*\' operators during parse","Diagnose misuse of \'.*\' and \'->*\' operators during parse\ninstead of crashing in code gen.\n\nllvm-svn: 84968"},
[d]={{Q,6061,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  if (isa<CXXScalarValueInitExpr>(RHS.get()->IgnoreParens())) {\n    // ...\n    Diag(Loc, diag::err_pointer_to_member_type) << isIndirect;"}},
[i]={{Q,6061,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  if (isa<CXXScalarValueInitExpr>(RHS.get()->IgnoreParens())) {\n    // ...\n    Diag(Loc, diag::err_pointer_to_member_type) << isIndirect;"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx-member-pointer-op.cpp"]={"clang/test/SemaCXX/cxx-member-pointer-op.cpp:11:4: error: invalid use of pointer to member type after ->*","clang/test/SemaCXX/cxx-member-pointer-op.cpp:13:5: error: invalid use of pointer to member type after .*","clang/test/SemaCXX/cxx-member-pointer-op.cpp:14:4: error: invalid use of pointer to member type after ->*","clang/test/SemaCXX/cxx-member-pointer-op.cpp:15:5: error: invalid use of pointer to member type after .*"}
["clang/test/SemaCXX/cxx-member-pointer-op.cpp"]={"clang/test/SemaCXX/cxx-member-pointer-op.cpp:11:4: error: invalid use of pointer to member type after ->*","clang/test/SemaCXX/cxx-member-pointer-op.cpp:13:5: error: invalid use of pointer to member type after .*","clang/test/SemaCXX/cxx-member-pointer-op.cpp:14:4: error: invalid use of pointer to member type after ->*","clang/test/SemaCXX/cxx-member-pointer-op.cpp:15:5: error: invalid use of pointer to member type after .*"}
Line 1,719: Line 1,720:
},
},
["err_postfix_after_unary_requires_parens"]={
["err_postfix_after_unary_requires_parens"]={
[b]={{nil,t,"err_postfix_after_unary_requires_parens"}},
[d]={{nil,t,"err_postfix_after_unary_requires_parens"}},
[j]={{nil,t,"expression cannot be followed by a postfix %0 operator; add parentheses"}},
[e]={{nil,t,"expression cannot be followed by a postfix %0 operator; add parentheses"}},
[i]={{nil,t,"expression cannot be followed by a postfix A operator; add parentheses"}},
[f]={{nil,t,"expression cannot be followed by a postfix A operator; add parentheses"}},
[h]=k,
[g]=k,
[c]="expression cannot be followed by a postfix (.*?) operator; add parentheses",
[h]="expression cannot be followed by a postfix (.*?) operator; add parentheses",
[f]=a,
[b]=a,
[e]={{nil,t,y}},
[c]={{nil,t,y}},
[g]={"4d1b7e9820ee",1593465134,"Fix a few cases that were incorrectly parsed as unary-expressions","Fix a few cases that were incorrectly parsed as unary-expressions\ninstead of postfix-expressions, and improve error recovery for postfix\noperators after unary-expressions.\n\nThis covers nullptr, __null, and some calls to type traits with special\nparsing rules. We would previously not parse a postfix-expression suffix\nfor these expressions, so would reject expressions such as\n__is_trivial(int)[\"foo\"].\n\nFor the case where a postfix-expression suffix is *not* permitted after\na unary-expression (for example, after a new-expression or sizeof\nexpression), produce a diagnostic if one appears there anyway. That\'s\nalways ill-formed, but previously produced very bad diagnostics."},
[j]={"4d1b7e9820ee",1593465134,"Fix a few cases that were incorrectly parsed as unary-expressions","Fix a few cases that were incorrectly parsed as unary-expressions\ninstead of postfix-expressions, and improve error recovery for postfix\noperators after unary-expressions.\n\nThis covers nullptr, __null, and some calls to type traits with special\nparsing rules. We would previously not parse a postfix-expression suffix\nfor these expressions, so would reject expressions such as\n__is_trivial(int)[\"foo\"].\n\nFor the case where a postfix-expression suffix is *not* permitted after\na unary-expression (for example, after a new-expression or sizeof\nexpression), produce a diagnostic if one appears there anyway. That\'s\nalways ill-formed, but previously produced very bad diagnostics."},
[d]={{"clang/lib/Parse/ParseExpr.cpp",1844,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  if (!AllowSuffix) {\n    // ...\n    Diag(Tok.getLocation(), diag::err_postfix_after_unary_requires_parens) << Tok.getKind() << Res.get()->getSourceRange() << FixItHint::CreateInsertion(Res.get()->getBeginLoc(), \"(\") << FixItHint::CreateInsertion(PP.getLocForEndOfToken(PrevTokLocation), \")\");"}},
[i]={{"clang/lib/Parse/ParseExpr.cpp",1844,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  if (!AllowSuffix) {\n    // ...\n    Diag(Tok.getLocation(), diag::err_postfix_after_unary_requires_parens) << Tok.getKind() << Res.get()->getSourceRange() << FixItHint::CreateInsertion(Res.get()->getBeginLoc(), \"(\") << FixItHint::CreateInsertion(PP.getLocForEndOfToken(PrevTokLocation), \")\");"}},
[l]={
[l]={
["clang/test/Parser/expressions.cpp"]={"clang/test/Parser/expressions.cpp:9:17: error: expression cannot be followed by a postfix \'->\' operator; add parentheses","clang/test/Parser/expressions.cpp:12:31: error: expression cannot be followed by a postfix \'(\' operator; add parentheses","clang/test/Parser/expressions.cpp:14:23: error: expression cannot be followed by a postfix \'[\' operator; add parentheses","clang/test/Parser/expressions.cpp:15:24: error: expression cannot be followed by a postfix \'[\' operator; add parentheses","clang/test/Parser/expressions.cpp:16:23: error: expression cannot be followed by a postfix \'[\' operator; add parentheses","clang/test/Parser/expressions.cpp:17:32: error: expression cannot be followed by a postfix \'[\' operator; add parentheses","clang/test/Parser/expressions.cpp:21:19: error: expression cannot be followed by a postfix \'->\' operator; add parentheses"}
["clang/test/Parser/expressions.cpp"]={"clang/test/Parser/expressions.cpp:9:17: error: expression cannot be followed by a postfix \'->\' operator; add parentheses","clang/test/Parser/expressions.cpp:12:31: error: expression cannot be followed by a postfix \'(\' operator; add parentheses","clang/test/Parser/expressions.cpp:14:23: error: expression cannot be followed by a postfix \'[\' operator; add parentheses","clang/test/Parser/expressions.cpp:15:24: error: expression cannot be followed by a postfix \'[\' operator; add parentheses","clang/test/Parser/expressions.cpp:16:23: error: expression cannot be followed by a postfix \'[\' operator; add parentheses","clang/test/Parser/expressions.cpp:17:32: error: expression cannot be followed by a postfix \'[\' operator; add parentheses","clang/test/Parser/expressions.cpp:21:19: error: expression cannot be followed by a postfix \'->\' operator; add parentheses"}
Line 1,733: Line 1,734:
},
},
["err_pp_arc_cf_code_audited_syntax"]={
["err_pp_arc_cf_code_audited_syntax"]={
[b]="err_pp_arc_cf_code_audited_syntax",
[d]="err_pp_arc_cf_code_audited_syntax",
[j]=Cb,
[e]=zb,
[i]=Cb,
[f]=zb,
[h]=k,
[g]=k,
[c]=Cb,
[h]=zb,
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={Yb,1317359532,Xb,Wb},
[j]={Yb,1317359532,Xb,Wb},
[d]={{H,1881,"/// PragmaARCCFCodeAuditedHandler -\n///  \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    // ...\n    if (BeginEnd && BeginEnd->isStr(\"begin\")) {\n    // ...\n    } else if (BeginEnd && BeginEnd->isStr(\"end\")) {\n    // ...\n    } else {\n      PP.Diag(Tok.getLocation(), diag::err_pp_arc_cf_code_audited_syntax);"}}
[i]={{H,1881,"/// PragmaARCCFCodeAuditedHandler -\n///  \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    // ...\n    if (BeginEnd && BeginEnd->isStr(\"begin\")) {\n    // ...\n    } else if (BeginEnd && BeginEnd->isStr(\"end\")) {\n    // ...\n    } else {\n      PP.Diag(Tok.getLocation(), diag::err_pp_arc_cf_code_audited_syntax);"}}
},
},
["err_pp_assume_nonnull_syntax"]={
["err_pp_assume_nonnull_syntax"]={
[b]="err_pp_assume_nonnull_syntax",
[d]="err_pp_assume_nonnull_syntax",
[j]=Cb,
[e]=zb,
[i]=Cb,
[f]=zb,
[h]=k,
[g]=k,
[c]=Cb,
[h]=zb,
[f]=a,
[b]=a,
[e]=lc,
[c]=mc,
[g]={qc,1434738357,sc,uc},
[j]={nc,1434738357,oc,pc},
[d]={{H,1936,"/// PragmaAssumeNonNullHandler -\n///  \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    // ...\n    if (BeginEnd && BeginEnd->isStr(\"begin\")) {\n    // ...\n    } else if (BeginEnd && BeginEnd->isStr(\"end\")) {\n    // ...\n    } else {\n      PP.Diag(Tok.getLocation(), diag::err_pp_assume_nonnull_syntax);"}},
[i]={{H,1936,"/// PragmaAssumeNonNullHandler -\n///  \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    // ...\n    if (BeginEnd && BeginEnd->isStr(\"begin\")) {\n    // ...\n    } else if (BeginEnd && BeginEnd->isStr(\"end\")) {\n    // ...\n    } else {\n      PP.Diag(Tok.getLocation(), diag::err_pp_assume_nonnull_syntax);"}},
[l]={
[l]={
[tc]={"clang/test/Sema/pragma-arc-cf-code-audited.c:3:35: error: expected \'begin\' or \'end\'"}
[sc]={"clang/test/Sema/pragma-arc-cf-code-audited.c:3:35: error: expected \'begin\' or \'end\'"}
}
}
},
},
["err_pp_bad_paste"]={
["err_pp_bad_paste"]={
[b]="err_pp_bad_paste",
[d]="err_pp_bad_paste",
[j]="pasting formed \'%0\', an invalid preprocessing token",
[e]="pasting formed \'%0\', an invalid preprocessing token",
[i]="pasting formed \'A\', an invalid preprocessing token",
[f]="pasting formed \'A\', an invalid preprocessing token",
[h]=k,
[g]=k,
[c]="pasting formed \'(.*?)\', an invalid preprocessing token",
[h]="pasting formed \'(.*?)\', an invalid preprocessing token",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{"clang/lib/Lex/TokenLexer.cpp",870,"/// LHSTok is the LHS of a ## operator, and CurTokenIdx is the ##\n/// operator.  Read the ## and RHS, and paste the LHS/RHS together.  If there\n/// are more ## after it, chomp them iteratively.  Return the result as LHSTok.\n/// If this returns true, the caller should immediately return the token.\nbool TokenLexer::pasteTokens(Token &LHSTok, ArrayRef<Token> TokenStream, unsigned int &CurIdx) {\n  // ...\n  do {\n    // ...\n    if (LHSTok.isAnyIdentifier() && RHS.isAnyIdentifier()) {\n    // ...\n    } else {\n      // ...\n      // If pasting the two tokens didn\'t form a full new token, this is an\n      // error.  This occurs with \"x ## +\"  and other stuff.  Return with LHSTok\n      // unmodified and with RHS as the next token to lex.\n      if (isInvalid) {\n        // ...\n        // Do not emit the error when preprocessing assembler code.\n        if (!PP.getLangOpts().AsmPreprocessor) {\n          // ...\n          PP.Diag(Loc, PP.getLangOpts().MicrosoftExt ? diag::ext_pp_bad_paste_ms : diag::err_pp_bad_paste) << Buffer;"}},
[i]={{"clang/lib/Lex/TokenLexer.cpp",870,"/// LHSTok is the LHS of a ## operator, and CurTokenIdx is the ##\n/// operator.  Read the ## and RHS, and paste the LHS/RHS together.  If there\n/// are more ## after it, chomp them iteratively.  Return the result as LHSTok.\n/// If this returns true, the caller should immediately return the token.\nbool TokenLexer::pasteTokens(Token &LHSTok, ArrayRef<Token> TokenStream, unsigned int &CurIdx) {\n  // ...\n  do {\n    // ...\n    if (LHSTok.isAnyIdentifier() && RHS.isAnyIdentifier()) {\n    // ...\n    } else {\n      // ...\n      // If pasting the two tokens didn\'t form a full new token, this is an\n      // error.  This occurs with \"x ## +\"  and other stuff.  Return with LHSTok\n      // unmodified and with RHS as the next token to lex.\n      if (isInvalid) {\n        // ...\n        // Do not emit the error when preprocessing assembler code.\n        if (!PP.getLangOpts().AsmPreprocessor) {\n          // ...\n          PP.Diag(Loc, PP.getLangOpts().MicrosoftExt ? diag::ext_pp_bad_paste_ms : diag::err_pp_bad_paste) << Buffer;"}},
[l]={
[l]={
["clang/test/CXX/lex/lex.pptoken/p3-0x.cpp"]={"clang/test/CXX/lex/lex.pptoken/p3-0x.cpp:11:9: error: pasting formed \':::\', an invalid preprocessing token"}
["clang/test/CXX/lex/lex.pptoken/p3-0x.cpp"]={"clang/test/CXX/lex/lex.pptoken/p3-0x.cpp:11:9: error: pasting formed \':::\', an invalid preprocessing token"}
Line 1,772: Line 1,773:
},
},
["err_pp_colon_without_question"]={
["err_pp_colon_without_question"]={
[b]="err_pp_colon_without_question",
[d]="err_pp_colon_without_question",
[j]="\':\' without preceding \'?\'",
[e]="\':\' without preceding \'?\'",
[i]="\':\' without preceding \'?\'",
[f]="\':\' without preceding \'?\'",
[h]=k,
[g]=k,
[c]="\'\\:\' without preceding \'\\?\'",
[h]="\'\\:\' without preceding \'\\?\'",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{Y,851,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec.  This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n  // ...\n  while (true) {\n    // ...\n    case tok::colon:\n      // ...\n      PP.Diag(OpLoc, diag::err_pp_colon_without_question) << LHS.getRange() << RHS.getRange();"}}
[i]={{Z,851,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec.  This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n  // ...\n  while (true) {\n    // ...\n    case tok::colon:\n      // ...\n      PP.Diag(OpLoc, diag::err_pp_colon_without_question) << LHS.getRange() << RHS.getRange();"}}
},
},
["err_pp_directive_required"]={
["err_pp_directive_required"]={
[b]="err_pp_directive_required",
[d]="err_pp_directive_required",
[j]="%0 must be used within a preprocessing directive",
[e]="%0 must be used within a preprocessing directive",
[i]="A must be used within a preprocessing directive",
[f]="A must be used within a preprocessing directive",
[h]=k,
[g]=k,
[c]="(.*?) must be used within a preprocessing directive",
[h]="(.*?) must be used within a preprocessing directive",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={"6ce0000dd528",1358364741,"No longer crashing with an assert when __has_include or __has_include_next is used outside of a prep...","No longer crashing with an assert when __has_include or __has_include_next is used outside of a preprocessor directive.  This fixes PR14837.\n\nllvm-svn: 172639"},
[j]={"6ce0000dd528",1358364741,"No longer crashing with an assert when __has_include or __has_include_next is used outside of a prep...","No longer crashing with an assert when __has_include or __has_include_next is used outside of a preprocessor directive.  This fixes PR14837.\n\nllvm-svn: 172639"},
[d]={{ab,1192,"/// EvaluateHasIncludeCommon - Process a \'__has_include(\"path\")\'\n/// or \'__has_include_next(\"path\")\' expression.\n/// Returns true if successful.\nstatic bool EvaluateHasIncludeCommon(Token &Tok, IdentifierInfo *II, Preprocessor &PP, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  // These expressions are only allowed within a preprocessor directive.\n  if (!PP.isParsingIfOrElifDirective()) {\n    PP.Diag(LParenLoc, diag::err_pp_directive_required) << II;"}},
[i]={{ab,1192,"/// EvaluateHasIncludeCommon - Process a \'__has_include(\"path\")\'\n/// or \'__has_include_next(\"path\")\' expression.\n/// Returns true if successful.\nstatic bool EvaluateHasIncludeCommon(Token &Tok, IdentifierInfo *II, Preprocessor &PP, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  // These expressions are only allowed within a preprocessor directive.\n  if (!PP.isParsingIfOrElifDirective()) {\n    PP.Diag(LParenLoc, diag::err_pp_directive_required) << II;"}},
[l]={
[l]={
["clang/test/Preprocessor/has_include.c"]={"clang/test/Preprocessor/has_include.c:96:3: error: \'__has_include_next\' must be used within a preprocessing directive","clang/test/Preprocessor/has_include.c:97:3: error: \'__has_include\' must be used within a preprocessing directive","clang/test/Preprocessor/has_include.c:100:1: error: \'__has_include\' must be used within a preprocessing directive","clang/test/Preprocessor/has_include.c:103:1: error: \'__has_include\' must be used within a preprocessing directive","clang/test/Preprocessor/has_include.c:108:1: error: \'__has_include\' must be used within a preprocessing directive","clang/test/Preprocessor/has_include.c:152:1: error: \'__has_include\' must be used within a preprocessing directive"}
["clang/test/Preprocessor/has_include.c"]={"clang/test/Preprocessor/has_include.c:96:3: error: \'__has_include_next\' must be used within a preprocessing directive","clang/test/Preprocessor/has_include.c:97:3: error: \'__has_include\' must be used within a preprocessing directive","clang/test/Preprocessor/has_include.c:100:1: error: \'__has_include\' must be used within a preprocessing directive","clang/test/Preprocessor/has_include.c:103:1: error: \'__has_include\' must be used within a preprocessing directive","clang/test/Preprocessor/has_include.c:108:1: error: \'__has_include\' must be used within a preprocessing directive","clang/test/Preprocessor/has_include.c:152:1: error: \'__has_include\' must be used within a preprocessing directive"}
Line 1,797: Line 1,798:
},
},
["err_pp_division_by_zero"]={
["err_pp_division_by_zero"]={
[b]="err_pp_division_by_zero",
[d]="err_pp_division_by_zero",
[j]="division by zero in preprocessor expression",
[e]="division by zero in preprocessor expression",
[i]="division by zero in preprocessor expression",
[f]="division by zero in preprocessor expression",
[h]=k,
[g]=k,
[c]="division by zero in preprocessor expression",
[h]="division by zero in preprocessor expression",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{Y,721,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec.  This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n  // ...\n  while (true) {\n    // ...\n    case tok::slash:\n      if (RHS.Val != 0) {\n      // ...\n      } else if (ValueLive) {\n        PP.Diag(OpLoc, diag::err_pp_division_by_zero) << LHS.getRange() << RHS.getRange();"}},
[i]={{Z,721,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec.  This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n  // ...\n  while (true) {\n    // ...\n    case tok::slash:\n      if (RHS.Val != 0) {\n      // ...\n      } else if (ValueLive) {\n        PP.Diag(OpLoc, diag::err_pp_division_by_zero) << LHS.getRange() << RHS.getRange();"}},
[l]={
[l]={
["clang/test/Preprocessor/ucn-pp-identifier.c"]={"clang/test/Preprocessor/ucn-pp-identifier.c:52:5: error: division by zero in preprocessor expression"}
["clang/test/Preprocessor/ucn-pp-identifier.c"]={"clang/test/Preprocessor/ucn-pp-identifier.c:52:5: error: division by zero in preprocessor expression"}
Line 1,811: Line 1,812:
},
},
["err_pp_double_begin_of_arc_cf_code_audited"]={
["err_pp_double_begin_of_arc_cf_code_audited"]={
[b]="err_pp_double_begin_of_arc_cf_code_audited",
[d]="err_pp_double_begin_of_arc_cf_code_audited",
[j]="already inside \'#pragma clang arc_cf_code_audited\'",
[e]="already inside \'#pragma clang arc_cf_code_audited\'",
[i]="already inside \'#pragma clang arc_cf_code_audited\'",
[f]="already inside \'#pragma clang arc_cf_code_audited\'",
[h]=k,
[g]=k,
[c]="already inside \'\\#pragma clang arc_cf_code_audited\'",
[h]="already inside \'\\#pragma clang arc_cf_code_audited\'",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={Yb,1317359532,Xb,Wb},
[j]={Yb,1317359532,Xb,Wb},
[d]={{H,1899,"/// PragmaARCCFCodeAuditedHandler -\n///  \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    // ...\n    if (IsBegin) {\n      // Complain about attempts to re-enter an audit.\n      if (BeginLoc.isValid()) {\n        PP.Diag(Loc, diag::err_pp_double_begin_of_arc_cf_code_audited);"}},
[i]={{H,1899,"/// PragmaARCCFCodeAuditedHandler -\n///  \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    // ...\n    if (IsBegin) {\n      // Complain about attempts to re-enter an audit.\n      if (BeginLoc.isValid()) {\n        PP.Diag(Loc, diag::err_pp_double_begin_of_arc_cf_code_audited);"}},
[l]={
[l]={
[tc]={"clang/test/Sema/pragma-arc-cf-code-audited.c:11:15: error: already inside \'#pragma clang arc_cf_code_audited\'"}
[sc]={"clang/test/Sema/pragma-arc-cf-code-audited.c:11:15: error: already inside \'#pragma clang arc_cf_code_audited\'"}
}
}
},
},
["err_pp_double_begin_of_assume_nonnull"]={
["err_pp_double_begin_of_assume_nonnull"]={
[b]="err_pp_double_begin_of_assume_nonnull",
[d]="err_pp_double_begin_of_assume_nonnull",
[j]="already inside \'#pragma clang assume_nonnull\'",
[e]="already inside \'#pragma clang assume_nonnull\'",
[i]="already inside \'#pragma clang assume_nonnull\'",
[f]="already inside \'#pragma clang assume_nonnull\'",
[h]=k,
[g]=k,
[c]="already inside \'\\#pragma clang assume_nonnull\'",
[h]="already inside \'\\#pragma clang assume_nonnull\'",
[f]=a,
[b]=a,
[e]=lc,
[c]=mc,
[g]={qc,1434738357,sc,uc},
[j]={nc,1434738357,oc,pc},
[d]={{H,1955,"/// PragmaAssumeNonNullHandler -\n///  \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    // ...\n    if (IsBegin) {\n      // Complain about attempts to re-enter an audit.\n      if (BeginLoc.isValid()) {\n        PP.Diag(Loc, diag::err_pp_double_begin_of_assume_nonnull);"}},
[i]={{H,1955,"/// PragmaAssumeNonNullHandler -\n///  \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    // ...\n    if (IsBegin) {\n      // Complain about attempts to re-enter an audit.\n      if (BeginLoc.isValid()) {\n        PP.Diag(Loc, diag::err_pp_double_begin_of_assume_nonnull);"}},
[l]={
[l]={
["clang/test/SemaObjCXX/nullability-pragmas.mm"]={"clang/test/SemaObjCXX/Inputs/nullability-pragmas-2.h:8:15: error: already inside \'#pragma clang assume_nonnull\'"}
["clang/test/SemaObjCXX/nullability-pragmas.mm"]={"clang/test/SemaObjCXX/Inputs/nullability-pragmas-2.h:8:15: error: already inside \'#pragma clang assume_nonnull\'"}
Line 1,839: Line 1,840:
},
},
["err_pp_double_begin_pragma_unsafe_buffer_usage"]={
["err_pp_double_begin_pragma_unsafe_buffer_usage"]={
[b]="err_pp_double_begin_pragma_unsafe_buffer_usage",
[d]="err_pp_double_begin_pragma_unsafe_buffer_usage",
[j]="already inside \'#pragma unsafe_buffer_usage\'",
[e]="already inside \'#pragma unsafe_buffer_usage\'",
[i]="already inside \'#pragma unsafe_buffer_usage\'",
[f]="already inside \'#pragma unsafe_buffer_usage\'",
[h]=k,
[g]=k,
[c]="already inside \'\\#pragma unsafe_buffer_usage\'",
[h]="already inside \'\\#pragma unsafe_buffer_usage\'",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={ib,1625925174,kb,jb},
[j]={gb,1625925174,ib,jb},
[d]={{H,1266,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    // ...\n    if (II->isStr(\"begin\")) {\n      if (PP.enterOrExitSafeBufferOptOutRegion(true, Loc))\n        PP.Diag(Loc, diag::err_pp_double_begin_pragma_unsafe_buffer_usage);"}},
[i]={{H,1266,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    // ...\n    if (II->isStr(\"begin\")) {\n      if (PP.enterOrExitSafeBufferOptOutRegion(true, Loc))\n        PP.Diag(Loc, diag::err_pp_double_begin_pragma_unsafe_buffer_usage);"}},
[l]={
[l]={
["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:7:35: error: already inside \'#pragma unsafe_buffer_usage\'"}
["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:7:35: error: already inside \'#pragma unsafe_buffer_usage\'"}
Line 1,853: Line 1,854:
},
},
["err_pp_duplicate_name_in_arg_list"]={
["err_pp_duplicate_name_in_arg_list"]={
[b]="err_pp_duplicate_name_in_arg_list",
[d]="err_pp_duplicate_name_in_arg_list",
[j]="duplicate macro parameter name %0",
[e]="duplicate macro parameter name %0",
[i]="duplicate macro parameter name A",
[f]="duplicate macro parameter name A",
[h]=k,
[g]=k,
[c]="duplicate macro parameter name (.*?)",
[h]="duplicate macro parameter name (.*?)",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,2714,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    default:\n      // ...\n      // If this is already used as a parameter, it is used multiple times (e.g.\n      // #define X(A,A.\n      if (llvm::is_contained(Parameters, II)) { // C99 6.10.3p6\n        Diag(Tok, diag::err_pp_duplicate_name_in_arg_list) << II;"}}
[i]={{z,2714,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    default:\n      // ...\n      // If this is already used as a parameter, it is used multiple times (e.g.\n      // #define X(A,A.\n      if (llvm::is_contained(Parameters, II)) { // C99 6.10.3p6\n        Diag(Tok, diag::err_pp_duplicate_name_in_arg_list) << II;"}}
},
},
["err_pp_empty_filename"]={
["err_pp_empty_filename"]={
[b]="err_pp_empty_filename",
[d]="err_pp_empty_filename",
[j]="empty filename",
[e]="empty filename",
[i]="empty filename",
[f]="empty filename",
[h]=k,
[g]=k,
[c]="empty filename",
[h]="empty filename",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,1798,"/// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully\n/// checked and spelled filename, e.g. as an operand of \\#include. This returns\n/// true if the input filename was in <>\'s or false if it were in \"\"\'s.  The\n/// caller is expected to provide a buffer that is large enough to hold the\n/// spelling of the filename, but is also expected to handle the case when\n/// this method decides to use a different buffer.\nbool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, StringRef &Buffer) {\n  // ...\n  // Diagnose #include \"\" as invalid.\n  if (Buffer.size() <= 2) {\n    Diag(Loc, diag::err_pp_empty_filename);"}},
[i]={{z,1798,"/// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully\n/// checked and spelled filename, e.g. as an operand of \\#include. This returns\n/// true if the input filename was in <>\'s or false if it were in \"\"\'s.  The\n/// caller is expected to provide a buffer that is large enough to hold the\n/// spelling of the filename, but is also expected to handle the case when\n/// this method decides to use a different buffer.\nbool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, StringRef &Buffer) {\n  // ...\n  // Diagnose #include \"\" as invalid.\n  if (Buffer.size() <= 2) {\n    Diag(Loc, diag::err_pp_empty_filename);"}},
[l]={
[l]={
["clang/test/Preprocessor/include-directive2.c"]={"clang/test/Preprocessor/include-directive2.c:17:10: error: empty filename"}
["clang/test/Preprocessor/include-directive2.c"]={"clang/test/Preprocessor/include-directive2.c:17:10: error: empty filename"}
Line 1,878: Line 1,879:
},
},
["err_pp_endif_without_if"]={
["err_pp_endif_without_if"]={
[b]="err_pp_endif_without_if",
[d]="err_pp_endif_without_if",
[j]="#endif without #if",
[e]="#endif without #if",
[i]="#endif without #if",
[f]="#endif without #if",
[h]=k,
[g]=k,
[c]="\\#endif without \\#if",
[h]="\\#endif without \\#if",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,3383,"/// HandleEndifDirective - Implements the \\#endif directive.\n///\nvoid Preprocessor::HandleEndifDirective(Token &EndifToken) {\n  // ...\n  if (CurPPLexer->popConditionalLevel(CondInfo)) {\n    // ...\n    Diag(EndifToken, diag::err_pp_endif_without_if);"}},
[i]={{z,3383,"/// HandleEndifDirective - Implements the \\#endif directive.\n///\nvoid Preprocessor::HandleEndifDirective(Token &EndifToken) {\n  // ...\n  if (CurPPLexer->popConditionalLevel(CondInfo)) {\n    // ...\n    Diag(EndifToken, diag::err_pp_endif_without_if);"}},
[l]={
[l]={
["clang/test/Parser/diag-crash.c"]={"clang/test/Parser/diag-crash.c:6:2: error: #endif without #if"}
["clang/test/Parser/diag-crash.c"]={"clang/test/Parser/diag-crash.c:6:2: error: #endif without #if"}
Line 1,892: Line 1,893:
},
},
["err_pp_eof_in_arc_cf_code_audited"]={
["err_pp_eof_in_arc_cf_code_audited"]={
[b]="err_pp_eof_in_arc_cf_code_audited",
[d]="err_pp_eof_in_arc_cf_code_audited",
[j]="\'#pragma clang arc_cf_code_audited\' was not ended within this file",
[e]="\'#pragma clang arc_cf_code_audited\' was not ended within this file",
[i]="\'#pragma clang arc_cf_code_audited\' was not ended within this file",
[f]="\'#pragma clang arc_cf_code_audited\' was not ended within this file",
[h]=k,
[g]=k,
[c]="\'\\#pragma clang arc_cf_code_audited\' was not ended within this file",
[h]="\'\\#pragma clang arc_cf_code_audited\' was not ended within this file",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={Yb,1317359532,Xb,Wb},
[j]={Yb,1317359532,Xb,Wb},
[d]={{Hb,418,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // ...\n  // Complain about reaching a true EOF within arc_cf_code_audited.\n  // We don\'t want to complain about reaching the end of a macro\n  // instantiation or a _Pragma.\n  if (PragmaARCCFCodeAuditedInfo.second.isValid() && !isEndOfMacro && !(CurLexer && CurLexer->Is_PragmaLexer)) {\n    Diag(PragmaARCCFCodeAuditedInfo.second, diag::err_pp_eof_in_arc_cf_code_audited);"}},
[i]={{Db,418,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // ...\n  // Complain about reaching a true EOF within arc_cf_code_audited.\n  // We don\'t want to complain about reaching the end of a macro\n  // instantiation or a _Pragma.\n  if (PragmaARCCFCodeAuditedInfo.second.isValid() && !isEndOfMacro && !(CurLexer && CurLexer->Is_PragmaLexer)) {\n    Diag(PragmaARCCFCodeAuditedInfo.second, diag::err_pp_eof_in_arc_cf_code_audited);"}},
[l]={
[l]={
[tc]={"clang/test/Sema/Inputs/pragma-arc-cf-code-audited.h:16:15: error: \'#pragma clang arc_cf_code_audited\' was not ended within this file","clang/test/Sema/pragma-arc-cf-code-audited.c:18:15: error: \'#pragma clang arc_cf_code_audited\' was not ended within this file"}
[sc]={"clang/test/Sema/Inputs/pragma-arc-cf-code-audited.h:16:15: error: \'#pragma clang arc_cf_code_audited\' was not ended within this file","clang/test/Sema/pragma-arc-cf-code-audited.c:18:15: error: \'#pragma clang arc_cf_code_audited\' was not ended within this file"}
}
}
},
},
["err_pp_eof_in_assume_nonnull"]={
["err_pp_eof_in_assume_nonnull"]={
[b]="err_pp_eof_in_assume_nonnull",
[d]="err_pp_eof_in_assume_nonnull",
[j]="\'#pragma clang assume_nonnull\' was not ended within this file",
[e]="\'#pragma clang assume_nonnull\' was not ended within this file",
[i]="\'#pragma clang assume_nonnull\' was not ended within this file",
[f]="\'#pragma clang assume_nonnull\' was not ended within this file",
[h]=k,
[g]=k,
[c]="\'\\#pragma clang assume_nonnull\' was not ended within this file",
[h]="\'\\#pragma clang assume_nonnull\' was not ended within this file",
[f]=a,
[b]=a,
[e]=lc,
[c]=mc,
[g]={qc,1434738357,sc,uc},
[j]={nc,1434738357,oc,pc},
[d]={{Hb,435,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // ...\n  // Complain about reaching a true EOF within assume_nonnull.\n  // We don\'t want to complain about reaching the end of a macro\n  // instantiation or a _Pragma.\n  if (PragmaAssumeNonNullLoc.isValid() && !isEndOfMacro && !(CurLexer && CurLexer->Is_PragmaLexer)) {\n    // If we\'re at the end of generating a preamble, we should record the\n    // unterminated \\#pragma clang assume_nonnull so we can restore it later\n    // when the preamble is loaded into the main file.\n    if (isRecordingPreamble() && isInPrimaryFile())\n    // ...\n    else\n      Diag(PragmaAssumeNonNullLoc, diag::err_pp_eof_in_assume_nonnull);"}},
[i]={{Db,435,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // ...\n  // Complain about reaching a true EOF within assume_nonnull.\n  // We don\'t want to complain about reaching the end of a macro\n  // instantiation or a _Pragma.\n  if (PragmaAssumeNonNullLoc.isValid() && !isEndOfMacro && !(CurLexer && CurLexer->Is_PragmaLexer)) {\n    // If we\'re at the end of generating a preamble, we should record the\n    // unterminated \\#pragma clang assume_nonnull so we can restore it later\n    // when the preamble is loaded into the main file.\n    if (isRecordingPreamble() && isInPrimaryFile())\n    // ...\n    else\n      Diag(PragmaAssumeNonNullLoc, diag::err_pp_eof_in_assume_nonnull);"}},
[l]={
[l]={
["clang/test/SemaObjCXX/nullability-pragmas.mm"]={"clang/test/SemaObjCXX/Inputs/nullability-pragmas-2.h:11:15: error: \'#pragma clang assume_nonnull\' was not ended within this file"}
["clang/test/SemaObjCXX/nullability-pragmas.mm"]={"clang/test/SemaObjCXX/Inputs/nullability-pragmas-2.h:11:15: error: \'#pragma clang assume_nonnull\' was not ended within this file"}
Line 1,920: Line 1,921:
},
},
["err_pp_error_opening_file"]={
["err_pp_error_opening_file"]={
[b]="err_pp_error_opening_file",
[d]="err_pp_error_opening_file",
[j]="error opening file \'%0\': %1",
[e]="error opening file \'%0\': %1",
[i]="error opening file \'A\': B",
[f]="error opening file \'A\': B",
[h]=mc,
[g]=rc,
[c]="error opening file \'(.*?)\'\\: (.*?)",
[h]="error opening file \'(.*?)\'\\: (.*?)",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={"710bb871478f",1259554724,"Fix PR5633 by making the preprocessor handle the case where we can","Fix PR5633 by making the preprocessor handle the case where we can\nstat a file but where mmaping it fails.  In this case, we emit an\nerror like:\nt.c:1:10: fatal error: error opening file \'../../foo.h\'\n\ninstead of \"cannot find file\".\n\nllvm-svn: 90110"},
[j]={"710bb871478f",1259554724,"Fix PR5633 by making the preprocessor handle the case where we can","Fix PR5633 by making the preprocessor handle the case where we can\nstat a file but where mmaping it fails.  In this case, we emit an\nerror like:\nt.c:1:10: fatal error: error opening file \'../../foo.h\'\n\ninstead of \"cannot find file\".\n\nllvm-svn: 90110"},
[d]={{Hb,84,"/// EnterSourceFile - Add a source file to the top of the include stack and\n/// start lexing tokens from it instead of the current buffer.\nbool Preprocessor::EnterSourceFile(FileID FID, ConstSearchDirIterator CurDir, SourceLocation Loc, bool IsFirstIncludeOfFile) {\n  // ...\n  if (!InputFile) {\n    // ...\n    Diag(Loc, diag::err_pp_error_opening_file) << std::string(SourceMgr.getBufferName(FileStart)) << \"\";"}}
[i]={{Db,84,"/// EnterSourceFile - Add a source file to the top of the include stack and\n/// start lexing tokens from it instead of the current buffer.\nbool Preprocessor::EnterSourceFile(FileID FID, ConstSearchDirIterator CurDir, SourceLocation Loc, bool IsFirstIncludeOfFile) {\n  // ...\n  if (!InputFile) {\n    // ...\n    Diag(Loc, diag::err_pp_error_opening_file) << std::string(SourceMgr.getBufferName(FileStart)) << \"\";"}}
},
},
["err_pp_expected_after"]={
["err_pp_expected_after"]={
[b]="err_pp_expected_after",
[d]="err_pp_expected_after",
[j]="missing %1 after %0",
[e]="missing %1 after %0",
[i]="missing B after A",
[f]="missing B after A",
[h]=k,
[g]=k,
[c]="missing (.*?) after (.*?)",
[h]="missing (.*?) after (.*?)",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={"751d635a2adc",1388368769,"Cleanup: Switch the preprocessor to err_pp_expected_after","Cleanup: Switch the preprocessor to err_pp_expected_after\n\nThis is approaching consistency but the PP and Parse categories they still have\nslightly different wording:\n\ndef err_pp_expected_after : Error<\"missing %1 after %0\">;\ndef err_expected_after  : Error<\"expected %1 after %0\">;\n\nllvm-svn: 198189"},
[j]={"751d635a2adc",1388368769,"Cleanup: Switch the preprocessor to err_pp_expected_after","Cleanup: Switch the preprocessor to err_pp_expected_after\n\nThis is approaching consistency but the PP and Parse categories they still have\nslightly different wording:\n\ndef err_pp_expected_after : Error<\"missing %1 after %0\">;\ndef err_expected_after  : Error<\"expected %1 after %0\">;\n\nllvm-svn: 198189"},
[d]={{z,3021,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  // ...\n  } else {\n    // ...\n    if (VAOCtx.isInVAOpt()) {\n      // ...\n      Diag(Tok, diag::err_pp_expected_after) << LastTok.getKind() << tok::r_paren;"},{Y,153,"/// EvaluateDefined - Process a \'defined(sym)\' expression.\nstatic bool EvaluateDefined(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  // If we are in parens, ensure we have a trailing ).\n  if (LParenLoc.isValid()) {\n    // ...\n    if (PeekTok.isNot(tok::r_paren)) {\n      PP.Diag(PeekTok.getLocation(), diag::err_pp_expected_after) << \"\'defined\'\" << tok::r_paren;"},{ab,1209,"/// EvaluateHasIncludeCommon - Process a \'__has_include(\"path\")\'\n/// or \'__has_include_next(\"path\")\' expression.\n/// Returns true if successful.\nstatic bool EvaluateHasIncludeCommon(Token &Tok, IdentifierInfo *II, Preprocessor &PP, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  // Ensure we have a \'(\'.\n  if (Tok.isNot(tok::l_paren)) {\n    // ...\n    PP.Diag(LParenLoc, diag::err_pp_expected_after) << II << tok::l_paren;"},{ab,1240,"/// EvaluateHasIncludeCommon - Process a \'__has_include(\"path\")\'\n/// or \'__has_include_next(\"path\")\' expression.\n/// Returns true if successful.\nstatic bool EvaluateHasIncludeCommon(Token &Tok, IdentifierInfo *II, Preprocessor &PP, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  // Ensure we have a trailing ).\n  if (Tok.isNot(tok::r_paren)) {\n    PP.Diag(PP.getLocForEndOfToken(FilenameLoc), diag::err_pp_expected_after) << II << tok::r_paren;"},{ab,1292,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  // ...\n  if (Tok.isNot(tok::l_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pp_expected_after) << II << tok::l_paren;"},{ab,1378,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  // ...\n  already_lexed:\n    // ...\n    // Diagnose missing \')\'.\n    if (!SuppressDiagnostic) {\n      if (auto Diag = PP.Diag(Tok.getLocation(), diag::err_pp_expected_after)) {"},{ab,1859,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  } else if (II == Ident__has_constexpr_builtin) {\n  // ...\n  } else if (II == Ident__is_identifier) {\n  // ...\n  } else if (II == Ident__has_attribute) {\n  // ...\n  } else if (II == Ident__has_declspec) {\n  // ...\n  } else if (II == Ident__has_cpp_attribute || II == Ident__has_c_attribute) {\n  // ...\n  } else if (II == Ident__has_include || II == Ident__has_include_next) {\n  // ...\n  } else if (II == Ident__has_warning) {\n  // ...\n  } else if (II == Ident__building_module) {\n  // ...\n  } else if (II == Ident__MODULE__) {\n  // ...\n  } else if (II == Ident__identifier) {\n    // ...\n    if (Tok.isNot(tok::l_paren)) {\n      // ...\n      Diag(getLocForEndOfToken(Loc), diag::err_pp_expected_after) << II << tok::l_paren;"},{ab,1892,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  } else if (II == Ident__has_constexpr_builtin) {\n  // ...\n  } else if (II == Ident__is_identifier) {\n  // ...\n  } else if (II == Ident__has_attribute) {\n  // ...\n  } else if (II == Ident__has_declspec) {\n  // ...\n  } else if (II == Ident__has_cpp_attribute || II == Ident__has_c_attribute) {\n  // ...\n  } else if (II == Ident__has_include || II == Ident__has_include_next) {\n  // ...\n  } else if (II == Ident__has_warning) {\n  // ...\n  } else if (II == Ident__building_module) {\n  // ...\n  } else if (II == Ident__MODULE__) {\n  // ...\n  } else if (II == Ident__identifier) {\n    // ...\n    if (RParen.isNot(tok::r_paren)) {\n      Diag(getLocForEndOfToken(Tok.getLocation()), diag::err_pp_expected_after) << Tok.getKind() << tok::r_paren;"}},
[i]={{z,3021,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  // ...\n  } else {\n    // ...\n    if (VAOCtx.isInVAOpt()) {\n      // ...\n      Diag(Tok, diag::err_pp_expected_after) << LastTok.getKind() << tok::r_paren;"},{Z,153,"/// EvaluateDefined - Process a \'defined(sym)\' expression.\nstatic bool EvaluateDefined(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  // If we are in parens, ensure we have a trailing ).\n  if (LParenLoc.isValid()) {\n    // ...\n    if (PeekTok.isNot(tok::r_paren)) {\n      PP.Diag(PeekTok.getLocation(), diag::err_pp_expected_after) << \"\'defined\'\" << tok::r_paren;"},{ab,1209,"/// EvaluateHasIncludeCommon - Process a \'__has_include(\"path\")\'\n/// or \'__has_include_next(\"path\")\' expression.\n/// Returns true if successful.\nstatic bool EvaluateHasIncludeCommon(Token &Tok, IdentifierInfo *II, Preprocessor &PP, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  // Ensure we have a \'(\'.\n  if (Tok.isNot(tok::l_paren)) {\n    // ...\n    PP.Diag(LParenLoc, diag::err_pp_expected_after) << II << tok::l_paren;"},{ab,1240,"/// EvaluateHasIncludeCommon - Process a \'__has_include(\"path\")\'\n/// or \'__has_include_next(\"path\")\' expression.\n/// Returns true if successful.\nstatic bool EvaluateHasIncludeCommon(Token &Tok, IdentifierInfo *II, Preprocessor &PP, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  // Ensure we have a trailing ).\n  if (Tok.isNot(tok::r_paren)) {\n    PP.Diag(PP.getLocForEndOfToken(FilenameLoc), diag::err_pp_expected_after) << II << tok::r_paren;"},{ab,1292,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  // ...\n  if (Tok.isNot(tok::l_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pp_expected_after) << II << tok::l_paren;"},{ab,1378,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  // ...\n  already_lexed:\n    // ...\n    // Diagnose missing \')\'.\n    if (!SuppressDiagnostic) {\n      if (auto Diag = PP.Diag(Tok.getLocation(), diag::err_pp_expected_after)) {"},{ab,1859,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  } else if (II == Ident__has_constexpr_builtin) {\n  // ...\n  } else if (II == Ident__is_identifier) {\n  // ...\n  } else if (II == Ident__has_attribute) {\n  // ...\n  } else if (II == Ident__has_declspec) {\n  // ...\n  } else if (II == Ident__has_cpp_attribute || II == Ident__has_c_attribute) {\n  // ...\n  } else if (II == Ident__has_include || II == Ident__has_include_next) {\n  // ...\n  } else if (II == Ident__has_warning) {\n  // ...\n  } else if (II == Ident__building_module) {\n  // ...\n  } else if (II == Ident__MODULE__) {\n  // ...\n  } else if (II == Ident__identifier) {\n    // ...\n    if (Tok.isNot(tok::l_paren)) {\n      // ...\n      Diag(getLocForEndOfToken(Loc), diag::err_pp_expected_after) << II << tok::l_paren;"},{ab,1892,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  } else if (II == Ident__has_constexpr_builtin) {\n  // ...\n  } else if (II == Ident__is_identifier) {\n  // ...\n  } else if (II == Ident__has_attribute) {\n  // ...\n  } else if (II == Ident__has_declspec) {\n  // ...\n  } else if (II == Ident__has_cpp_attribute || II == Ident__has_c_attribute) {\n  // ...\n  } else if (II == Ident__has_include || II == Ident__has_include_next) {\n  // ...\n  } else if (II == Ident__has_warning) {\n  // ...\n  } else if (II == Ident__building_module) {\n  // ...\n  } else if (II == Ident__MODULE__) {\n  // ...\n  } else if (II == Ident__identifier) {\n    // ...\n    if (RParen.isNot(tok::r_paren)) {\n      Diag(getLocForEndOfToken(Tok.getLocation()), diag::err_pp_expected_after) << Tok.getKind() << tok::r_paren;"}},
[l]={
[l]={
["clang/test/Preprocessor/has_attribute_errors.cpp"]={"clang/test/Preprocessor/has_attribute_errors.cpp:13:30: error: missing \')\' after <numeric_constant>"}
["clang/test/Preprocessor/has_attribute_errors.cpp"]={"clang/test/Preprocessor/has_attribute_errors.cpp:13:30: error: missing \')\' after <numeric_constant>"}
Line 1,945: Line 1,946:
},
},
["err_pp_expected_comma_in_arg_list"]={
["err_pp_expected_comma_in_arg_list"]={
[b]="err_pp_expected_comma_in_arg_list",
[d]="err_pp_expected_comma_in_arg_list",
[j]="expected comma in macro parameter list",
[e]="expected comma in macro parameter list",
[i]="expected comma in macro parameter list",
[f]="expected comma in macro parameter list",
[h]=k,
[g]=k,
[c]="expected comma in macro parameter list",
[h]="expected comma in macro parameter list",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,2726,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    default:\n      // ...\n      default: // #define X(A B\n        Diag(Tok, diag::err_pp_expected_comma_in_arg_list);"}}
[i]={{z,2726,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    default:\n      // ...\n      default: // #define X(A B\n        Diag(Tok, diag::err_pp_expected_comma_in_arg_list);"}}
},
},
["err_pp_expected_eol"]={
["err_pp_expected_eol"]={
[b]="err_pp_expected_eol",
[d]="err_pp_expected_eol",
[j]="expected end of line in preprocessor expression",
[e]="expected end of line in preprocessor expression",
[i]="expected end of line in preprocessor expression",
[f]="expected end of line in preprocessor expression",
[h]=k,
[g]=k,
[c]="expected end of line in preprocessor expression",
[h]="expected end of line in preprocessor expression",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{Y,940,"/// EvaluateDirectiveExpression - Evaluate an integer constant expression that\n/// may occur after a #if or #elif directive.  If the expression is equivalent\n/// to \"!defined(X)\" return X in IfNDefMacro.\nPreprocessor::DirectiveEvalResult Preprocessor::EvaluateDirectiveExpression(IdentifierInfo *&IfNDefMacro) {\n  // ...\n  // If we aren\'t at the tok::eod token, something bad happened, like an extra\n  // \')\' token.\n  if (Tok.isNot(tok::eod)) {\n    Diag(Tok, diag::err_pp_expected_eol);"}},
[i]={{Z,940,"/// EvaluateDirectiveExpression - Evaluate an integer constant expression that\n/// may occur after a #if or #elif directive.  If the expression is equivalent\n/// to \"!defined(X)\" return X in IfNDefMacro.\nPreprocessor::DirectiveEvalResult Preprocessor::EvaluateDirectiveExpression(IdentifierInfo *&IfNDefMacro) {\n  // ...\n  // If we aren\'t at the tok::eod token, something bad happened, like an extra\n  // \')\' token.\n  if (Tok.isNot(tok::eod)) {\n    Diag(Tok, diag::err_pp_expected_eol);"}},
[l]={
[l]={
["clang/test/Preprocessor/has_include.c"]={"clang/test/Preprocessor/has_include.c:175:22: error: expected end of line in preprocessor expression"}
["clang/test/Preprocessor/has_include.c"]={"clang/test/Preprocessor/has_include.c:175:22: error: expected end of line in preprocessor expression"}
Line 1,970: Line 1,971:
},
},
["err_pp_expected_ident_in_arg_list"]={
["err_pp_expected_ident_in_arg_list"]={
[b]="err_pp_expected_ident_in_arg_list",
[d]="err_pp_expected_ident_in_arg_list",
[j]="expected identifier in macro parameter list",
[e]="expected identifier in macro parameter list",
[i]="expected identifier in macro parameter list",
[f]="expected identifier in macro parameter list",
[h]=k,
[g]=k,
[c]="expected identifier in macro parameter list",
[h]="expected identifier in macro parameter list",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,2674,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    case tok::r_paren:\n      // ...\n      Diag(Tok, diag::err_pp_expected_ident_in_arg_list);"}}
[i]={{z,2674,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    case tok::r_paren:\n      // ...\n      Diag(Tok, diag::err_pp_expected_ident_in_arg_list);"}}
},
},
["err_pp_expected_module_name"]={
["err_pp_expected_module_name"]={
[b]="err_pp_expected_module_name",
[d]={{nil,n,"err_pp_expected_module_name"}},
[j]={{nil,n,"expected %select{identifier after \'.\' in |}0module name"}},
[e]={{nil,n,"expected %select{identifier after \'.\' in |}0module name"}},
[i]={{nil,n,{"expected ",{"identifier after \'.\' in ",a},"module name"}}},
[f]={{nil,n,{"expected ",{"identifier after \'.\' in ",a},"module name"}}},
[h]=k,
[g]=k,
[c]="expected (?:identifier after \'\\.\' in |)module name",
[h]="expected (?:identifier after \'\\.\' in |)module name",
[f]=a,
[b]=a,
[e]={{nil,n,p}},
[c]={{nil,n,p}},
[g]={Ib,1493857794,Jb,yb},
[j]={Fb,1493857794,Gb,Hb},
[d]={{H,786,"// Lex a component of a module name: either an identifier or a string literal;\n// for components that can be expressed both ways, the two forms are equivalent.\nstatic bool LexModuleNameComponent(Preprocessor &PP, Token &Tok, std::pair<IdentifierInfo *, SourceLocation> &ModuleNameComponent, bool First) {\n  // ...\n  if (Tok.is(tok::string_literal) && !Tok.hasUDSuffix()) {\n  // ...\n  } else if (!Tok.isAnnotation() && Tok.getIdentifierInfo()) {\n  // ...\n  } else {\n    PP.Diag(Tok.getLocation(), diag::err_pp_expected_module_name) << First;"}},
[i]={{H,786,"// Lex a component of a module name: either an identifier or a string literal;\n// for components that can be expressed both ways, the two forms are equivalent.\nstatic bool LexModuleNameComponent(Preprocessor &PP, Token &Tok, std::pair<IdentifierInfo *, SourceLocation> &ModuleNameComponent, bool First) {\n  // ...\n  if (Tok.is(tok::string_literal) && !Tok.hasUDSuffix()) {\n  // ...\n  } else if (!Tok.isAnnotation() && Tok.getIdentifierInfo()) {\n  // ...\n  } else {\n    PP.Diag(Tok.getLocation(), diag::err_pp_expected_module_name) << First;"}},
[l]={
[l]={
["clang/test/Preprocessor/pragma_module.c"]={"clang/test/Preprocessor/pragma_module.c:13:100: error: expected identifier after \'.\' in module name"}
["clang/test/Preprocessor/pragma_module.c"]={"clang/test/Preprocessor/pragma_module.c:13:100: error: expected identifier after \'.\' in module name"}
Line 1,995: Line 1,996:
},
},
["err_pp_expected_rparen"]={
["err_pp_expected_rparen"]={
[b]="err_pp_expected_rparen",
[d]="err_pp_expected_rparen",
[j]="expected \')\' in preprocessor expression",
[e]="expected \')\' in preprocessor expression",
[i]="expected \')\' in preprocessor expression",
[f]="expected \')\' in preprocessor expression",
[h]=k,
[g]=k,
[c]="expected \'\\)\' in preprocessor expression",
[h]="expected \'\\)\' in preprocessor expression",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{Y,457,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  case tok::l_paren: {\n    // ...\n    // If this is a silly value like (X), which doesn\'t need parens, check for\n    // !(defined X).\n    if (PeekTok.is(tok::r_paren)) {\n    // ...\n    } else {\n      // ...\n      if (PeekTok.isNot(tok::r_paren)) {\n        PP.Diag(PeekTok.getLocation(), diag::err_pp_expected_rparen) << Result.getRange();"}}
[i]={{Z,457,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  case tok::l_paren: {\n    // ...\n    // If this is a silly value like (X), which doesn\'t need parens, check for\n    // !(defined X).\n    if (PeekTok.is(tok::r_paren)) {\n    // ...\n    } else {\n      // ...\n      if (PeekTok.isNot(tok::r_paren)) {\n        PP.Diag(PeekTok.getLocation(), diag::err_pp_expected_rparen) << Result.getRange();"}}
},
},
["err_pp_expected_value_in_expr"]={
["err_pp_expected_value_in_expr"]={
[b]="err_pp_expected_value_in_expr",
[d]="err_pp_expected_value_in_expr",
[j]="expected value in expression",
[e]="expected value in expression",
[i]="expected value in expression",
[f]="expected value in expression",
[h]=k,
[g]=k,
[c]="expected value in expression",
[h]="expected value in expression",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{Y,291,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  case tok::eod:\n  case tok::r_paren:\n    // ...\n    PP.Diag(PeekTok, diag::err_pp_expected_value_in_expr);"}},
[i]={{Z,291,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  case tok::eod:\n  case tok::r_paren:\n    // ...\n    PP.Diag(PeekTok, diag::err_pp_expected_value_in_expr);"}},
[l]={
[l]={
["clang/test/Preprocessor/ifdef-recover.c"]={"clang/test/Preprocessor/ifdef-recover.c:19:8: error: expected value in expression"}
["clang/test/Preprocessor/ifdef-recover.c"]={"clang/test/Preprocessor/ifdef-recover.c:19:8: error: expected value in expression"}
Line 2,020: Line 2,021:
},
},
["err_pp_expects_filename"]={
["err_pp_expects_filename"]={
[b]="err_pp_expects_filename",
[d]="err_pp_expects_filename",
[j]="expected \"FILENAME\" or <FILENAME>",
[e]="expected \"FILENAME\" or <FILENAME>",
[i]="expected \"FILENAME\" or <FILENAME>",
[f]="expected \"FILENAME\" or <FILENAME>",
[h]=k,
[g]=k,
[c]="expected \"FILENAME\" or \\<FILENAME\\>",
[h]="expected \"FILENAME\" or \\<FILENAME\\>",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,1778,"/// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully\n/// checked and spelled filename, e.g. as an operand of \\#include. This returns\n/// true if the input filename was in <>\'s or false if it were in \"\"\'s.  The\n/// caller is expected to provide a buffer that is large enough to hold the\n/// spelling of the filename, but is also expected to handle the case when\n/// this method decides to use a different buffer.\nbool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, StringRef &Buffer) {\n  // ...\n  if (Buffer[0] == \'<\') {\n    if (Buffer.back() != \'>\') {\n      Diag(Loc, diag::err_pp_expects_filename);"},{z,1785,"/// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully\n/// checked and spelled filename, e.g. as an operand of \\#include. This returns\n/// true if the input filename was in <>\'s or false if it were in \"\"\'s.  The\n/// caller is expected to provide a buffer that is large enough to hold the\n/// spelling of the filename, but is also expected to handle the case when\n/// this method decides to use a different buffer.\nbool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, StringRef &Buffer) {\n  // ...\n  if (Buffer[0] == \'<\') {\n  // ...\n  } else if (Buffer[0] == \'\"\') {\n    if (Buffer.back() != \'\"\') {\n      Diag(Loc, diag::err_pp_expects_filename);"},{z,1791,"/// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully\n/// checked and spelled filename, e.g. as an operand of \\#include. This returns\n/// true if the input filename was in <>\'s or false if it were in \"\"\'s.  The\n/// caller is expected to provide a buffer that is large enough to hold the\n/// spelling of the filename, but is also expected to handle the case when\n/// this method decides to use a different buffer.\nbool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, StringRef &Buffer) {\n  // ...\n  if (Buffer[0] == \'<\') {\n  // ...\n  } else if (Buffer[0] == \'\"\') {\n  // ...\n  } else {\n    Diag(Loc, diag::err_pp_expects_filename);"},{z,1971,"/// HandleIncludeDirective - The \"\\#include\" tokens have just been read, read\n/// the file to be included from the lexer, then include it!  This is a common\n/// routine with functionality shared between \\#include, \\#include_next and\n/// \\#import.  LookupFrom is set when this is a \\#include_next directive, it\n/// specifies the file to start searching from.\nvoid Preprocessor::HandleIncludeDirective(SourceLocation HashLoc, Token &IncludeTok, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  if (FilenameTok.isNot(tok::header_name)) {\n    Diag(FilenameTok.getLocation(), diag::err_pp_expects_filename);"},{ab,1222,"/// EvaluateHasIncludeCommon - Process a \'__has_include(\"path\")\'\n/// or \'__has_include_next(\"path\")\' expression.\n/// Returns true if successful.\nstatic bool EvaluateHasIncludeCommon(Token &Tok, IdentifierInfo *II, Preprocessor &PP, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  if (Tok.isNot(tok::header_name)) {\n    PP.Diag(Tok.getLocation(), diag::err_pp_expects_filename);"},{H,524,"/// HandlePragmaDependency - Handle \\#pragma GCC dependency \"foo\" blah.\nvoid Preprocessor::HandlePragmaDependency(Token &DependencyTok) {\n  // ...\n  // If the next token wasn\'t a header-name, diagnose the error.\n  if (FilenameTok.isNot(tok::header_name)) {\n    Diag(FilenameTok.getLocation(), diag::err_pp_expects_filename);"}},
[i]={{z,1778,"/// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully\n/// checked and spelled filename, e.g. as an operand of \\#include. This returns\n/// true if the input filename was in <>\'s or false if it were in \"\"\'s.  The\n/// caller is expected to provide a buffer that is large enough to hold the\n/// spelling of the filename, but is also expected to handle the case when\n/// this method decides to use a different buffer.\nbool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, StringRef &Buffer) {\n  // ...\n  if (Buffer[0] == \'<\') {\n    if (Buffer.back() != \'>\') {\n      Diag(Loc, diag::err_pp_expects_filename);"},{z,1785,"/// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully\n/// checked and spelled filename, e.g. as an operand of \\#include. This returns\n/// true if the input filename was in <>\'s or false if it were in \"\"\'s.  The\n/// caller is expected to provide a buffer that is large enough to hold the\n/// spelling of the filename, but is also expected to handle the case when\n/// this method decides to use a different buffer.\nbool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, StringRef &Buffer) {\n  // ...\n  if (Buffer[0] == \'<\') {\n  // ...\n  } else if (Buffer[0] == \'\"\') {\n    if (Buffer.back() != \'\"\') {\n      Diag(Loc, diag::err_pp_expects_filename);"},{z,1791,"/// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully\n/// checked and spelled filename, e.g. as an operand of \\#include. This returns\n/// true if the input filename was in <>\'s or false if it were in \"\"\'s.  The\n/// caller is expected to provide a buffer that is large enough to hold the\n/// spelling of the filename, but is also expected to handle the case when\n/// this method decides to use a different buffer.\nbool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, StringRef &Buffer) {\n  // ...\n  if (Buffer[0] == \'<\') {\n  // ...\n  } else if (Buffer[0] == \'\"\') {\n  // ...\n  } else {\n    Diag(Loc, diag::err_pp_expects_filename);"},{z,1971,"/// HandleIncludeDirective - The \"\\#include\" tokens have just been read, read\n/// the file to be included from the lexer, then include it!  This is a common\n/// routine with functionality shared between \\#include, \\#include_next and\n/// \\#import.  LookupFrom is set when this is a \\#include_next directive, it\n/// specifies the file to start searching from.\nvoid Preprocessor::HandleIncludeDirective(SourceLocation HashLoc, Token &IncludeTok, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  if (FilenameTok.isNot(tok::header_name)) {\n    Diag(FilenameTok.getLocation(), diag::err_pp_expects_filename);"},{ab,1222,"/// EvaluateHasIncludeCommon - Process a \'__has_include(\"path\")\'\n/// or \'__has_include_next(\"path\")\' expression.\n/// Returns true if successful.\nstatic bool EvaluateHasIncludeCommon(Token &Tok, IdentifierInfo *II, Preprocessor &PP, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  if (Tok.isNot(tok::header_name)) {\n    PP.Diag(Tok.getLocation(), diag::err_pp_expects_filename);"},{H,524,"/// HandlePragmaDependency - Handle \\#pragma GCC dependency \"foo\" blah.\nvoid Preprocessor::HandlePragmaDependency(Token &DependencyTok) {\n  // ...\n  // If the next token wasn\'t a header-name, diagnose the error.\n  if (FilenameTok.isNot(tok::header_name)) {\n    Diag(FilenameTok.getLocation(), diag::err_pp_expects_filename);"}},
[l]={
[l]={
["clang/test/Preprocessor/_Pragma-dependency.c"]={"clang/test/Preprocessor/_Pragma-dependency.c:7:24: error: expected \"FILENAME\" or <FILENAME>"}
["clang/test/Preprocessor/_Pragma-dependency.c"]={"clang/test/Preprocessor/_Pragma-dependency.c:7:24: error: expected \"FILENAME\" or <FILENAME>"}
Line 2,034: Line 2,035:
},
},
["err_pp_expr_bad_token_binop"]={
["err_pp_expr_bad_token_binop"]={
[b]="err_pp_expr_bad_token_binop",
[d]="err_pp_expr_bad_token_binop",
[j]="token is not a valid binary operator in a preprocessor subexpression",
[e]="token is not a valid binary operator in a preprocessor subexpression",
[i]="token is not a valid binary operator in a preprocessor subexpression",
[f]="token is not a valid binary operator in a preprocessor subexpression",
[h]=k,
[g]=k,
[c]="token is not a valid binary operator in a preprocessor subexpression",
[h]="token is not a valid binary operator in a preprocessor subexpression",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{Y,581,"static void diagnoseUnexpectedOperator(Preprocessor &PP, PPValue &LHS, Token &Tok) {\n  if (Tok.is(tok::l_paren) && LHS.getIdentifier())\n  // ...\n  else\n    PP.Diag(Tok.getLocation(), diag::err_pp_expr_bad_token_binop) << LHS.getRange();"}},
[i]={{Z,581,"static void diagnoseUnexpectedOperator(Preprocessor &PP, PPValue &LHS, Token &Tok) {\n  if (Tok.is(tok::l_paren) && LHS.getIdentifier())\n  // ...\n  else\n    PP.Diag(Tok.getLocation(), diag::err_pp_expr_bad_token_binop) << LHS.getRange();"}},
[l]={
[l]={
["clang/test/Preprocessor/disabled-cond-diags2.c"]={"clang/test/Preprocessor/disabled-cond-diags2.c:11:7: error: token is not a valid binary operator in a preprocessor subexpression"}
["clang/test/Preprocessor/disabled-cond-diags2.c"]={"clang/test/Preprocessor/disabled-cond-diags2.c:11:7: error: token is not a valid binary operator in a preprocessor subexpression"}
Line 2,048: Line 2,049:
},
},
["err_pp_expr_bad_token_lparen"]={
["err_pp_expr_bad_token_lparen"]={
[b]="err_pp_expr_bad_token_lparen",
[d]="err_pp_expr_bad_token_lparen",
[j]="function-like macro %0 is not defined",
[e]="function-like macro %0 is not defined",
[i]="function-like macro A is not defined",
[f]="function-like macro A is not defined",
[h]=k,
[g]=k,
[c]="function\\-like macro (.*?) is not defined",
[h]="function\\-like macro (.*?) is not defined",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={"4d247e7012ae",1460765229,"Improve diagnostic for the case when a non-defined function-like macro is used","Improve diagnostic for the case when a non-defined function-like macro is used\nin a preprocessor constant expression.\n\nllvm-svn: 266495"},
[j]={"4d247e7012ae",1460765229,"Improve diagnostic for the case when a non-defined function-like macro is used","Improve diagnostic for the case when a non-defined function-like macro is used\nin a preprocessor constant expression.\n\nllvm-svn: 266495"},
[d]={{Y,578,"static void diagnoseUnexpectedOperator(Preprocessor &PP, PPValue &LHS, Token &Tok) {\n  if (Tok.is(tok::l_paren) && LHS.getIdentifier())\n    PP.Diag(LHS.getRange().getBegin(), diag::err_pp_expr_bad_token_lparen) << LHS.getIdentifier();"}},
[i]={{Z,578,"static void diagnoseUnexpectedOperator(Preprocessor &PP, PPValue &LHS, Token &Tok) {\n  if (Tok.is(tok::l_paren) && LHS.getIdentifier())\n    PP.Diag(LHS.getRange().getBegin(), diag::err_pp_expr_bad_token_lparen) << LHS.getIdentifier();"}},
[l]={
[l]={
["clang/test/Preprocessor/has_attribute.c"]={"clang/test/Preprocessor/has_attribute.c:57:5: error: function-like macro \'__has_cpp_attribute\' is not defined"}
["clang/test/Preprocessor/has_attribute.c"]={"clang/test/Preprocessor/has_attribute.c:57:5: error: function-like macro \'__has_cpp_attribute\' is not defined"}
Line 2,062: Line 2,063:
},
},
["err_pp_expr_bad_token_start_expr"]={
["err_pp_expr_bad_token_start_expr"]={
[b]="err_pp_expr_bad_token_start_expr",
[d]="err_pp_expr_bad_token_start_expr",
[j]="invalid token at start of a preprocessor expression",
[e]="invalid token at start of a preprocessor expression",
[i]="invalid token at start of a preprocessor expression",
[f]="invalid token at start of a preprocessor expression",
[h]=k,
[g]=k,
[c]="invalid token at start of a preprocessor expression",
[h]="invalid token at start of a preprocessor expression",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{Y,286,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  default:\n    // ...\n    PP.Diag(PeekTok, diag::err_pp_expr_bad_token_start_expr);"}},
[i]={{Z,286,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  default:\n    // ...\n    PP.Diag(PeekTok, diag::err_pp_expr_bad_token_start_expr);"}},
[l]={
[l]={
["clang/test/Preprocessor/has_include.c"]={"clang/test/Preprocessor/has_include.c:140:19: error: invalid token at start of a preprocessor expression"}
["clang/test/Preprocessor/has_include.c"]={"clang/test/Preprocessor/has_include.c:140:19: error: invalid token at start of a preprocessor expression"}
Line 2,076: Line 2,077:
},
},
["err_pp_file_not_found"]={
["err_pp_file_not_found"]={
[b]="err_pp_file_not_found",
[d]="err_pp_file_not_found",
[j]="\'%0\' file not found",
[e]="\'%0\' file not found",
[i]="\'A\' file not found",
[f]="\'A\' file not found",
[h]=mc,
[g]=rc,
[c]="\'(.*?)\' file not found",
[h]="\'(.*?)\' file not found",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,2091,"OptionalFileEntryRef Preprocessor::LookupHeaderIncludeOrImport(ConstSearchDirIterator *CurDir, StringRef &Filename, SourceLocation FilenameLoc, CharSourceRange FilenameRange, const Token &FilenameTok, bool &IsFrameworkFound, bool IsImportDecl, bool &IsMapped, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile, StringRef &LookupFilename, SmallVectorImpl<char> &RelativePath, SmallVectorImpl<char> &SearchPath, ModuleMap::KnownHeader &SuggestedModule, bool isAngled) {\n  // ...\n  Diag(FilenameTok, diag::err_pp_file_not_found) << OriginalFilename << FilenameRange;"},{H,548,"/// HandlePragmaDependency - Handle \\#pragma GCC dependency \"foo\" blah.\nvoid Preprocessor::HandlePragmaDependency(Token &DependencyTok) {\n  // ...\n  if (!File) {\n    if (!SuppressIncludeNotFoundError)\n      Diag(FilenameTok, diag::err_pp_file_not_found) << Filename;"}},
[i]={{z,2091,"OptionalFileEntryRef Preprocessor::LookupHeaderIncludeOrImport(ConstSearchDirIterator *CurDir, StringRef &Filename, SourceLocation FilenameLoc, CharSourceRange FilenameRange, const Token &FilenameTok, bool &IsFrameworkFound, bool IsImportDecl, bool &IsMapped, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile, StringRef &LookupFilename, SmallVectorImpl<char> &RelativePath, SmallVectorImpl<char> &SearchPath, ModuleMap::KnownHeader &SuggestedModule, bool isAngled) {\n  // ...\n  Diag(FilenameTok, diag::err_pp_file_not_found) << OriginalFilename << FilenameRange;"},{H,548,"/// HandlePragmaDependency - Handle \\#pragma GCC dependency \"foo\" blah.\nvoid Preprocessor::HandlePragmaDependency(Token &DependencyTok) {\n  // ...\n  if (!File) {\n    if (!SuppressIncludeNotFoundError)\n      Diag(FilenameTok, diag::err_pp_file_not_found) << Filename;"}},
[l]={
[l]={
["clang/test/SemaCXX/template-specialization-fatal.cpp"]={"clang/test/SemaCXX/template-specialization-fatal.cpp:5:10: fatal error: \'not_found.h\' file not found"}
["clang/test/SemaCXX/template-specialization-fatal.cpp"]={"clang/test/SemaCXX/template-specialization-fatal.cpp:5:10: fatal error: \'not_found.h\' file not found"}
Line 2,090: Line 2,091:
},
},
["err_pp_file_not_found_angled_include_not_fatal"]={
["err_pp_file_not_found_angled_include_not_fatal"]={
[b]={{nil,u,"err_pp_file_not_found_angled_include_not_fatal"}},
[d]={{nil,u,"err_pp_file_not_found_angled_include_not_fatal"}},
[j]={{nil,x,"\'%0\' file not found with <angled> %select{include|import}1; use \"quotes\" instead"},{u,u,"\'%0\' file not found with <angled> include; use \"quotes\" instead"}},
[e]={{nil,x,"\'%0\' file not found with <angled> %select{include|import}1; use \"quotes\" instead"},{u,u,"\'%0\' file not found with <angled> include; use \"quotes\" instead"}},
[i]={{nil,x,{"\'A\' file not found with <angled> ",{"include","import"},"; use \"quotes\" instead"}},{u,u,"\'A\' file not found with <angled> include; use \"quotes\" instead"}},
[f]={{nil,x,{"\'A\' file not found with <angled> ",{"include","import"},"; use \"quotes\" instead"}},{u,u,"\'A\' file not found with <angled> include; use \"quotes\" instead"}},
[h]=k,
[g]=k,
[c]="\'(.*?)\' file not found with \\<angled\\> (?:include|import); use \"quotes\" instead",
[h]="\'(.*?)\' file not found with \\<angled\\> (?:include|import); use \"quotes\" instead",
[f]=a,
[b]=a,
[e]={{nil,u,p}},
[c]={{nil,u,p}},
[g]={"2ce63b424632",1536873008,"Diagnose likely typos in #include directives.","Diagnose likely typos in #include directives.\n\nSummary:\nWhen someone writes\n\n  #include \"<some_file>\"\n\nor\n\n  #include \" some_file \"\n\nthe compiler returns \"file not fuond...\" with fonts and quotes that may\nmake it hard to see there are excess quotes or surprising bytes in the\nfilename.  Assuming that files are usually logically named and start and\nend with an alphanumeric character, we can check for the file\'s\nexistence by stripping the non-alphanumeric leading or trailing\ncharacters.  If the file is found, emit a non-fatal error with a\nFixItHint.\n\nPatch by Christy Lee!\n\nReviewers: aaron.ballman, erikjv, rsmith\n\nReviewed By: rsmith\n\nSubscribers: lebedev.ri, xbolva00, sammccall, modocache, erikjv, aaron.ballman, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D51333\n\nllvm-svn: 342177"},
[j]={"2ce63b424632",1536873008,"Diagnose likely typos in #include directives.","Diagnose likely typos in #include directives.\n\nSummary:\nWhen someone writes\n\n  #include \"<some_file>\"\n\nor\n\n  #include \" some_file \"\n\nthe compiler returns \"file not fuond...\" with fonts and quotes that may\nmake it hard to see there are excess quotes or surprising bytes in the\nfilename.  Assuming that files are usually logically named and start and\nend with an alphanumeric character, we can check for the file\'s\nexistence by stripping the non-alphanumeric leading or trailing\ncharacters.  If the file is found, emit a non-fatal error with a\nFixItHint.\n\nPatch by Christy Lee!\n\nReviewers: aaron.ballman, erikjv, rsmith\n\nReviewed By: rsmith\n\nSubscribers: lebedev.ri, xbolva00, sammccall, modocache, erikjv, aaron.ballman, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D51333\n\nllvm-svn: 342177"},
[d]={{z,2044,"OptionalFileEntryRef Preprocessor::LookupHeaderIncludeOrImport(ConstSearchDirIterator *CurDir, StringRef &Filename, SourceLocation FilenameLoc, CharSourceRange FilenameRange, const Token &FilenameTok, bool &IsFrameworkFound, bool IsImportDecl, bool &IsMapped, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile, StringRef &LookupFilename, SmallVectorImpl<char> &RelativePath, SmallVectorImpl<char> &SearchPath, ModuleMap::KnownHeader &SuggestedModule, bool isAngled) {\n  // ...\n  // If the file could not be located and it was included via angle\n  // brackets, we can attempt a lookup as though it were a quoted path to\n  // provide the user with a possible fixit.\n  if (isAngled) {\n    // ...\n    if (File) {\n      Diag(FilenameTok, diag::err_pp_file_not_found_angled_include_not_fatal) << Filename << IsImportDecl << FixItHint::CreateReplacement(FilenameRange, \"\\\"\" + Filename.str() + \"\\\"\");"}},
[i]={{z,2044,"OptionalFileEntryRef Preprocessor::LookupHeaderIncludeOrImport(ConstSearchDirIterator *CurDir, StringRef &Filename, SourceLocation FilenameLoc, CharSourceRange FilenameRange, const Token &FilenameTok, bool &IsFrameworkFound, bool IsImportDecl, bool &IsMapped, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile, StringRef &LookupFilename, SmallVectorImpl<char> &RelativePath, SmallVectorImpl<char> &SearchPath, ModuleMap::KnownHeader &SuggestedModule, bool isAngled) {\n  // ...\n  // If the file could not be located and it was included via angle\n  // brackets, we can attempt a lookup as though it were a quoted path to\n  // provide the user with a possible fixit.\n  if (isAngled) {\n    // ...\n    if (File) {\n      Diag(FilenameTok, diag::err_pp_file_not_found_angled_include_not_fatal) << Filename << IsImportDecl << FixItHint::CreateReplacement(FilenameRange, \"\\\"\" + Filename.str() + \"\\\"\");"}},
[l]={
[l]={
["clang/test/FixIt/fixit-include.c"]={"clang/test/FixIt/fixit-include.c:9:10: error: \'fixit-include.h\' file not found with <angled> include; use \"quotes\" instead"}
["clang/test/FixIt/fixit-include.c"]={"clang/test/FixIt/fixit-include.c:9:10: error: \'fixit-include.h\' file not found with <angled> include; use \"quotes\" instead"}
Line 2,104: Line 2,105:
},
},
["err_pp_file_not_found_typo_not_fatal"]={
["err_pp_file_not_found_typo_not_fatal"]={
[b]={{nil,u,"err_pp_file_not_found_typo_not_fatal"}},
[d]={{nil,u,"err_pp_file_not_found_typo_not_fatal"}},
[j]={{nil,u,"\'%0\' file not found, did you mean \'%1\'?"}},
[e]={{nil,u,"\'%0\' file not found, did you mean \'%1\'?"}},
[i]={{nil,u,"\'A\' file not found, did you mean \'B\'?"}},
[f]={{nil,u,"\'A\' file not found, did you mean \'B\'?"}},
[h]=k,
[g]=k,
[c]="\'(.*?)\' file not found, did you mean \'(.*?)\'\\?",
[h]="\'(.*?)\' file not found, did you mean \'(.*?)\'\\?",
[f]=a,
[b]=a,
[e]={{nil,u,p}},
[c]={{nil,u,p}},
[g]={"2ce63b424632",1536873008,"Diagnose likely typos in #include directives.","Diagnose likely typos in #include directives.\n\nSummary:\nWhen someone writes\n\n  #include \"<some_file>\"\n\nor\n\n  #include \" some_file \"\n\nthe compiler returns \"file not fuond...\" with fonts and quotes that may\nmake it hard to see there are excess quotes or surprising bytes in the\nfilename.  Assuming that files are usually logically named and start and\nend with an alphanumeric character, we can check for the file\'s\nexistence by stripping the non-alphanumeric leading or trailing\ncharacters.  If the file is found, emit a non-fatal error with a\nFixItHint.\n\nPatch by Christy Lee!\n\nReviewers: aaron.ballman, erikjv, rsmith\n\nReviewed By: rsmith\n\nSubscribers: lebedev.ri, xbolva00, sammccall, modocache, erikjv, aaron.ballman, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D51333\n\nllvm-svn: 342177"},
[j]={"2ce63b424632",1536873008,"Diagnose likely typos in #include directives.","Diagnose likely typos in #include directives.\n\nSummary:\nWhen someone writes\n\n  #include \"<some_file>\"\n\nor\n\n  #include \" some_file \"\n\nthe compiler returns \"file not fuond...\" with fonts and quotes that may\nmake it hard to see there are excess quotes or surprising bytes in the\nfilename.  Assuming that files are usually logically named and start and\nend with an alphanumeric character, we can check for the file\'s\nexistence by stripping the non-alphanumeric leading or trailing\ncharacters.  If the file is found, emit a non-fatal error with a\nFixItHint.\n\nPatch by Christy Lee!\n\nReviewers: aaron.ballman, erikjv, rsmith\n\nReviewed By: rsmith\n\nSubscribers: lebedev.ri, xbolva00, sammccall, modocache, erikjv, aaron.ballman, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D51333\n\nllvm-svn: 342177"},
[d]={{z,2079,"OptionalFileEntryRef Preprocessor::LookupHeaderIncludeOrImport(ConstSearchDirIterator *CurDir, StringRef &Filename, SourceLocation FilenameLoc, CharSourceRange FilenameRange, const Token &FilenameTok, bool &IsFrameworkFound, bool IsImportDecl, bool &IsMapped, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile, StringRef &LookupFilename, SmallVectorImpl<char> &RelativePath, SmallVectorImpl<char> &SearchPath, ModuleMap::KnownHeader &SuggestedModule, bool isAngled) {\n  // ...\n  if (LangOpts.SpellChecking) {\n    // ...\n    if (File) {\n      // ...\n      Diag(FilenameTok, diag::err_pp_file_not_found_typo_not_fatal) << OriginalFilename << TypoCorrectionName << Hint;"}},
[i]={{z,2079,"OptionalFileEntryRef Preprocessor::LookupHeaderIncludeOrImport(ConstSearchDirIterator *CurDir, StringRef &Filename, SourceLocation FilenameLoc, CharSourceRange FilenameRange, const Token &FilenameTok, bool &IsFrameworkFound, bool IsImportDecl, bool &IsMapped, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile, StringRef &LookupFilename, SmallVectorImpl<char> &RelativePath, SmallVectorImpl<char> &SearchPath, ModuleMap::KnownHeader &SuggestedModule, bool isAngled) {\n  // ...\n  if (LangOpts.SpellChecking) {\n    // ...\n    if (File) {\n      // ...\n      Diag(FilenameTok, diag::err_pp_file_not_found_typo_not_fatal) << OriginalFilename << TypoCorrectionName << Hint;"}},
[l]={
[l]={
["clang/test/Preprocessor/include-likely-typo.c"]={"clang/test/Preprocessor/include-likely-typo.c:4:10: error: \'<empty_file_to_include.h>\' file not found, did you mean \'empty_file_to_include.h\'?"}
["clang/test/Preprocessor/include-likely-typo.c"]={"clang/test/Preprocessor/include-likely-typo.c:4:10: error: \'<empty_file_to_include.h>\' file not found, did you mean \'empty_file_to_include.h\'?"}
Line 2,118: Line 2,119:
},
},
["err_pp_identifier_arg_not_identifier"]={
["err_pp_identifier_arg_not_identifier"]={
[b]="err_pp_identifier_arg_not_identifier",
[d]="err_pp_identifier_arg_not_identifier",
[j]="cannot convert %0 token to an identifier",
[e]="cannot convert %0 token to an identifier",
[i]="cannot convert A token to an identifier",
[f]="cannot convert A token to an identifier",
[h]=k,
[g]=k,
[c]="cannot convert (.*?) token to an identifier",
[h]="cannot convert (.*?) token to an identifier",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={"ae385084c517",1394841968,"Implement the MS extension __identifier properly: take a token and strip it of","Implement the MS extension __identifier properly: take a token and strip it of\nits keywordliness.\n\nllvm-svn: 203987"},
[j]={"ae385084c517",1394841968,"Implement the MS extension __identifier properly: take a token and strip it of","Implement the MS extension __identifier properly: take a token and strip it of\nits keywordliness.\n\nllvm-svn: 203987"},
[d]={{ab,1881,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  } else if (II == Ident__has_constexpr_builtin) {\n  // ...\n  } else if (II == Ident__is_identifier) {\n  // ...\n  } else if (II == Ident__has_attribute) {\n  // ...\n  } else if (II == Ident__has_declspec) {\n  // ...\n  } else if (II == Ident__has_cpp_attribute || II == Ident__has_c_attribute) {\n  // ...\n  } else if (II == Ident__has_include || II == Ident__has_include_next) {\n  // ...\n  } else if (II == Ident__has_warning) {\n  // ...\n  } else if (II == Ident__building_module) {\n  // ...\n  } else if (II == Ident__MODULE__) {\n  // ...\n  } else if (II == Ident__identifier) {\n    // ...\n    if (!Tok.isAnnotation() && Tok.getIdentifierInfo())\n    // ...\n    else if (Tok.is(tok::string_literal) && !Tok.hasUDSuffix()) {\n    // ...\n    } else {\n      Diag(Tok.getLocation(), diag::err_pp_identifier_arg_not_identifier) << Tok.getKind();"}},
[i]={{ab,1881,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  } else if (II == Ident__has_constexpr_builtin) {\n  // ...\n  } else if (II == Ident__is_identifier) {\n  // ...\n  } else if (II == Ident__has_attribute) {\n  // ...\n  } else if (II == Ident__has_declspec) {\n  // ...\n  } else if (II == Ident__has_cpp_attribute || II == Ident__has_c_attribute) {\n  // ...\n  } else if (II == Ident__has_include || II == Ident__has_include_next) {\n  // ...\n  } else if (II == Ident__has_warning) {\n  // ...\n  } else if (II == Ident__building_module) {\n  // ...\n  } else if (II == Ident__MODULE__) {\n  // ...\n  } else if (II == Ident__identifier) {\n    // ...\n    if (!Tok.isAnnotation() && Tok.getIdentifierInfo())\n    // ...\n    else if (Tok.is(tok::string_literal) && !Tok.hasUDSuffix()) {\n    // ...\n    } else {\n      Diag(Tok.getLocation(), diag::err_pp_identifier_arg_not_identifier) << Tok.getKind();"}},
[l]={
[l]={
["clang/test/Parser/MicrosoftExtensions.cpp"]={"clang/test/Parser/MicrosoftExtensions.cpp:281:16: error: cannot convert \'(\' token to an identifier","clang/test/Parser/MicrosoftExtensions.cpp:283:16: error: cannot convert \')\' token to an identifier","clang/test/Parser/MicrosoftExtensions.cpp:285:16: error: cannot convert <numeric_constant> token to an identifier","clang/test/Parser/MicrosoftExtensions.cpp:286:16: error: cannot convert \'+\' token to an identifier","clang/test/Parser/MicrosoftExtensions.cpp:287:16: error: cannot convert \';\' token to an identifier"}
["clang/test/Parser/MicrosoftExtensions.cpp"]={"clang/test/Parser/MicrosoftExtensions.cpp:281:16: error: cannot convert \'(\' token to an identifier","clang/test/Parser/MicrosoftExtensions.cpp:283:16: error: cannot convert \')\' token to an identifier","clang/test/Parser/MicrosoftExtensions.cpp:285:16: error: cannot convert <numeric_constant> token to an identifier","clang/test/Parser/MicrosoftExtensions.cpp:286:16: error: cannot convert \'+\' token to an identifier","clang/test/Parser/MicrosoftExtensions.cpp:287:16: error: cannot convert \';\' token to an identifier"}
Line 2,132: Line 2,133:
},
},
["err_pp_illegal_floating_literal"]={
["err_pp_illegal_floating_literal"]={
[b]="err_pp_illegal_floating_literal",
[d]="err_pp_illegal_floating_literal",
[j]="floating point literal in preprocessor expression",
[e]="floating point literal in preprocessor expression",
[i]="floating point literal in preprocessor expression",
[f]="floating point literal in preprocessor expression",
[h]=k,
[g]=k,
[c]="floating point literal in preprocessor expression",
[h]="floating point literal in preprocessor expression",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{Y,308,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  case tok::numeric_constant: {\n    // ...\n    if (Literal.isFloatingLiteral() || Literal.isImaginary) {\n      PP.Diag(PeekTok, diag::err_pp_illegal_floating_literal);"}}
[i]={{Z,308,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  case tok::numeric_constant: {\n    // ...\n    if (Literal.isFloatingLiteral() || Literal.isImaginary) {\n      PP.Diag(PeekTok, diag::err_pp_illegal_floating_literal);"}}
},
},
["err_pp_import_directive_ms"]={
["err_pp_import_directive_ms"]={
[b]="err_pp_import_directive_ms",
[d]="err_pp_import_directive_ms",
[j]="#import of type library is an unsupported Microsoft feature",
[e]="#import of type library is an unsupported Microsoft feature",
[i]="#import of type library is an unsupported Microsoft feature",
[f]="#import of type library is an unsupported Microsoft feature",
[h]=k,
[g]=k,
[c]="\\#import of type library is an unsupported Microsoft feature",
[h]="\\#import of type library is an unsupported Microsoft feature",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={"0467f55d6283",1332040237,"Turns #import in MS Mode into an error.","Turns #import in MS Mode into an error.\n\nllvm-svn: 153009"},
[j]={"0467f55d6283",1332040237,"Turns #import in MS Mode into an error.","Turns #import in MS Mode into an error.\n\nllvm-svn: 153009"},
[d]={{z,2609,"/// HandleMicrosoftImportDirective - Implements \\#import for Microsoft Mode\nvoid Preprocessor::HandleMicrosoftImportDirective(Token &Tok) {\n  // ...\n  Diag(Tok, diag::err_pp_import_directive_ms);"}},
[i]={{z,2609,"/// HandleMicrosoftImportDirective - Implements \\#import for Microsoft Mode\nvoid Preprocessor::HandleMicrosoftImportDirective(Token &Tok) {\n  // ...\n  Diag(Tok, diag::err_pp_import_directive_ms);"}},
[l]={
[l]={
["clang/test/Preprocessor/microsoft-import.c"]={"clang/test/Preprocessor/microsoft-import.c:3:2: error: #import of type library is an unsupported Microsoft feature","clang/test/Preprocessor/microsoft-import.c:6:2: error: #import of type library is an unsupported Microsoft feature","clang/test/Preprocessor/microsoft-import.c:8:2: error: #import of type library is an unsupported Microsoft feature"}
["clang/test/Preprocessor/microsoft-import.c"]={"clang/test/Preprocessor/microsoft-import.c:3:2: error: #import of type library is an unsupported Microsoft feature","clang/test/Preprocessor/microsoft-import.c:6:2: error: #import of type library is an unsupported Microsoft feature","clang/test/Preprocessor/microsoft-import.c:8:2: error: #import of type library is an unsupported Microsoft feature"}
Line 2,157: Line 2,158:
},
},
["err_pp_include_in_arc_cf_code_audited"]={
["err_pp_include_in_arc_cf_code_audited"]={
[b]="err_pp_include_in_arc_cf_code_audited",
[d]="err_pp_include_in_arc_cf_code_audited",
[j]={{nil,x,"cannot %select{#include files|import headers}0 inside \'#pragma clang arc_cf_code_audited\'"},{u,nil,"cannot #include files inside \'#pragma clang arc_cf_code_audited\'"}},
[e]={{nil,x,"cannot %select{#include files|import headers}0 inside \'#pragma clang arc_cf_code_audited\'"},{u,nil,"cannot #include files inside \'#pragma clang arc_cf_code_audited\'"}},
[i]={{nil,x,{"cannot ",{"#include files","import headers"}," inside \'#pragma clang arc_cf_code_audited\'"}},{u,nil,"cannot #include files inside \'#pragma clang arc_cf_code_audited\'"}},
[f]={{nil,x,{"cannot ",{"#include files","import headers"}," inside \'#pragma clang arc_cf_code_audited\'"}},{u,nil,"cannot #include files inside \'#pragma clang arc_cf_code_audited\'"}},
[h]=k,
[g]=k,
[c]="cannot (?:\\#include files|import headers) inside \'\\#pragma clang arc_cf_code_audited\'",
[h]="cannot (?:\\#include files|import headers) inside \'\\#pragma clang arc_cf_code_audited\'",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={Yb,1317359532,Xb,Wb},
[j]={Yb,1317359532,Xb,Wb},
[d]={{z,2145,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  // Complain about attempts to #include files in an audit pragma.\n  if (PragmaARCCFCodeAuditedInfo.second.isValid()) {\n    Diag(StartLoc, diag::err_pp_include_in_arc_cf_code_audited) << IsImportDecl;"}},
[i]={{z,2145,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  // Complain about attempts to #include files in an audit pragma.\n  if (PragmaARCCFCodeAuditedInfo.second.isValid()) {\n    Diag(StartLoc, diag::err_pp_include_in_arc_cf_code_audited) << IsImportDecl;"}},
[l]={
[l]={
[tc]={"clang/test/Sema/pragma-arc-cf-code-audited.c:13:1: error: cannot #include files inside \'#pragma clang arc_cf_code_audited\'"}
[sc]={"clang/test/Sema/pragma-arc-cf-code-audited.c:13:1: error: cannot #include files inside \'#pragma clang arc_cf_code_audited\'"}
}
}
},
},
["err_pp_include_in_assume_nonnull"]={
["err_pp_include_in_assume_nonnull"]={
[b]="err_pp_include_in_assume_nonnull",
[d]="err_pp_include_in_assume_nonnull",
[j]={{nil,x,"cannot %select{#include files|import headers}0 inside \'#pragma clang assume_nonnull\'"},{u,nil,"cannot #include files inside \'#pragma clang assume_nonnull\'"}},
[e]={{nil,x,"cannot %select{#include files|import headers}0 inside \'#pragma clang assume_nonnull\'"},{u,nil,"cannot #include files inside \'#pragma clang assume_nonnull\'"}},
[i]={{nil,x,{"cannot ",{"#include files","import headers"}," inside \'#pragma clang assume_nonnull\'"}},{u,nil,"cannot #include files inside \'#pragma clang assume_nonnull\'"}},
[f]={{nil,x,{"cannot ",{"#include files","import headers"}," inside \'#pragma clang assume_nonnull\'"}},{u,nil,"cannot #include files inside \'#pragma clang assume_nonnull\'"}},
[h]=k,
[g]=k,
[c]="cannot (?:\\#include files|import headers) inside \'\\#pragma clang assume_nonnull\'",
[h]="cannot (?:\\#include files|import headers) inside \'\\#pragma clang assume_nonnull\'",
[f]=a,
[b]=a,
[e]=lc,
[c]=mc,
[g]={qc,1434738357,sc,uc},
[j]={nc,1434738357,oc,pc},
[d]={{z,2154,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  // Complain about attempts to #include files in an assume-nonnull pragma.\n  if (PragmaAssumeNonNullLoc.isValid()) {\n    Diag(StartLoc, diag::err_pp_include_in_assume_nonnull) << IsImportDecl;"}},
[i]={{z,2154,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  // Complain about attempts to #include files in an assume-nonnull pragma.\n  if (PragmaAssumeNonNullLoc.isValid()) {\n    Diag(StartLoc, diag::err_pp_include_in_assume_nonnull) << IsImportDecl;"}},
[l]={
[l]={
["clang/test/SemaObjCXX/nullability-pragmas.mm"]={"clang/test/SemaObjCXX/Inputs/nullability-pragmas-2.h:5:1: error: cannot #include files inside \'#pragma clang assume_nonnull\'"}
["clang/test/SemaObjCXX/nullability-pragmas.mm"]={"clang/test/SemaObjCXX/Inputs/nullability-pragmas-2.h:5:1: error: cannot #include files inside \'#pragma clang assume_nonnull\'"}
Line 2,185: Line 2,186:
},
},
["err_pp_include_too_deep"]={
["err_pp_include_too_deep"]={
[b]="err_pp_include_too_deep",
[d]="err_pp_include_too_deep",
[j]="#include nested too deeply",
[e]="#include nested too deeply",
[i]="#include nested too deeply",
[f]="#include nested too deeply",
[h]=k,
[g]=k,
[c]="\\#include nested too deeply",
[h]="\\#include nested too deeply",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,2525,"#endif\n  // ...\n  // Check that we don\'t have infinite #include recursion.\n  if (IncludeMacroStack.size() == MaxAllowedIncludeStackDepth - 1) {\n    Diag(FilenameTok, diag::err_pp_include_too_deep);"}}
[i]={{z,2525,"#endif\n  // ...\n  // Check that we don\'t have infinite #include recursion.\n  if (IncludeMacroStack.size() == MaxAllowedIncludeStackDepth - 1) {\n    Diag(FilenameTok, diag::err_pp_include_too_deep);"}}
},
},
["err_pp_including_mainfile_in_preamble"]={
["err_pp_including_mainfile_in_preamble"]={
[b]={{nil,x,"err_pp_including_mainfile_in_preamble"}},
[d]={{nil,x,"err_pp_including_mainfile_in_preamble"}},
[j]={{nil,x,"main file cannot be included recursively when building a preamble"}},
[e]={{nil,x,"main file cannot be included recursively when building a preamble"}},
[i]={{nil,x,"main file cannot be included recursively when building a preamble"}},
[f]={{nil,x,"main file cannot be included recursively when building a preamble"}},
[h]=k,
[g]=k,
[c]="main file cannot be included recursively when building a preamble",
[h]="main file cannot be included recursively when building a preamble",
[f]=a,
[b]=a,
[e]={{nil,x,p}},
[c]={{nil,x,p}},
[g]={"3c28a2dc6bdc",1557483935,"[Preamble] Stop circular inclusion of main file when building preamble","[Preamble] Stop circular inclusion of main file when building preamble\n\nIf a header file was processed for the second time, we could end up with a\nwrong conditional stack and skipped ranges:\n\nIn the particular example, if the header guard is evaluated the second time and\nit is decided to skip the conditional block, the corresponding \"#endif\" is\nnever seen since the preamble does not include it and we end up in the\nTok.is(tok::eof) case with a wrong conditional stack.\n\nDetect the circular inclusion, emit a diagnostic and stop processing the\ninclusion.\n\nllvm-svn: 360418"},
[j]={"3c28a2dc6bdc",1557483935,"[Preamble] Stop circular inclusion of main file when building preamble","[Preamble] Stop circular inclusion of main file when building preamble\n\nIf a header file was processed for the second time, we could end up with a\nwrong conditional stack and skipped ranges:\n\nIn the particular example, if the header guard is evaluated the second time and\nit is decided to skip the conditional block, the corresponding \"#endif\" is\nnever seen since the preamble does not include it and we end up in the\nTok.is(tok::eof) case with a wrong conditional stack.\n\nDetect the circular inclusion, emit a diagnostic and stop processing the\ninclusion.\n\nllvm-svn: 360418"},
[d]={{z,2371,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  // Check for circular inclusion of the main file.\n  // We can\'t generate a consistent preamble with regard to the conditional\n  // stack if the main file is included again as due to the preamble bounds\n  // some directives (e.g. #endif of a header guard) will never be seen.\n  // Since this will lead to confusing errors, avoid the inclusion.\n  if (Action == Enter && File && PreambleConditionalStack.isRecording() && SourceMgr.isMainFile(File->getFileEntry())) {\n    Diag(FilenameTok.getLocation(), diag::err_pp_including_mainfile_in_preamble);"}}
[i]={{z,2371,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  // Check for circular inclusion of the main file.\n  // We can\'t generate a consistent preamble with regard to the conditional\n  // stack if the main file is included again as due to the preamble bounds\n  // some directives (e.g. #endif of a header guard) will never be seen.\n  // Since this will lead to confusing errors, avoid the inclusion.\n  if (Action == Enter && File && PreambleConditionalStack.isRecording() && SourceMgr.isMainFile(File->getFileEntry())) {\n    Diag(FilenameTok.getLocation(), diag::err_pp_including_mainfile_in_preamble);"}}
},
},
["err_pp_invalid_directive"]={
["err_pp_invalid_directive"]={
[b]="err_pp_invalid_directive",
[d]="err_pp_invalid_directive",
[j]={{nil,C,"invalid preprocessing directive%select{|, did you mean \'#%1\'?}0"},{F,nil,"invalid preprocessing directive"}},
[e]={{nil,C,"invalid preprocessing directive%select{|, did you mean \'#%1\'?}0"},{F,nil,"invalid preprocessing directive"}},
[i]={{nil,C,{"invalid preprocessing directive",{a,", did you mean \'#B\'?"}}},{F,nil,"invalid preprocessing directive"}},
[f]={{nil,C,{"invalid preprocessing directive",{a,", did you mean \'#B\'?"}}},{F,nil,"invalid preprocessing directive"}},
[h]=k,
[g]=k,
[c]="invalid preprocessing directive(?:|, did you mean \'\\#(.*?)\'\\?)",
[h]="invalid preprocessing directive(?:|, did you mean \'\\#(.*?)\'\\?)",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,1334,"/// HandleDirective - This callback is invoked when the lexer sees a # token\n/// at the start of a line.  This consumes the directive, modifies the\n/// lexer/preprocessor state, and advances the lexer(s) so that the next token\n/// read is the correct one.\nvoid Preprocessor::HandleDirective(Token &Result) {\n  // ...\n  Diag(Result, diag::err_pp_invalid_directive) << 0;"}},
[i]={{z,1334,"/// HandleDirective - This callback is invoked when the lexer sees a # token\n/// at the start of a line.  This consumes the directive, modifies the\n/// lexer/preprocessor state, and advances the lexer(s) so that the next token\n/// read is the correct one.\nvoid Preprocessor::HandleDirective(Token &Result) {\n  // ...\n  Diag(Result, diag::err_pp_invalid_directive) << 0;"}},
[l]={
[l]={
["clang/test/Preprocessor/disabled-cond-diags2.c"]={"clang/test/Preprocessor/disabled-cond-diags2.c:14:2: error: invalid preprocessing directive"}
["clang/test/Preprocessor/disabled-cond-diags2.c"]={"clang/test/Preprocessor/disabled-cond-diags2.c:14:2: error: invalid preprocessing directive"}
Line 2,221: Line 2,222:
},
},
["err_pp_invalid_poison"]={
["err_pp_invalid_poison"]={
[b]="err_pp_invalid_poison",
[d]="err_pp_invalid_poison",
[j]="can only poison identifier tokens",
[e]="can only poison identifier tokens",
[i]="can only poison identifier tokens",
[f]="can only poison identifier tokens",
[h]=k,
[g]=k,
[c]="can only poison identifier tokens",
[h]="can only poison identifier tokens",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{H,461,"/// HandlePragmaPoison - Handle \\#pragma GCC poison.  PoisonTok is the \'poison\'.\nvoid Preprocessor::HandlePragmaPoison() {\n  // ...\n  while (true) {\n    // ...\n    // Can only poison identifiers.\n    if (Tok.isNot(tok::raw_identifier)) {\n      Diag(Tok, diag::err_pp_invalid_poison);"}}
[i]={{H,461,"/// HandlePragmaPoison - Handle \\#pragma GCC poison.  PoisonTok is the \'poison\'.\nvoid Preprocessor::HandlePragmaPoison() {\n  // ...\n  while (true) {\n    // ...\n    // Can only poison identifiers.\n    if (Tok.isNot(tok::raw_identifier)) {\n      Diag(Tok, diag::err_pp_invalid_poison);"}}
},
},
["err_pp_invalid_tok_in_arg_list"]={
["err_pp_invalid_tok_in_arg_list"]={
[b]="err_pp_invalid_tok_in_arg_list",
[d]="err_pp_invalid_tok_in_arg_list",
[j]="invalid token in macro parameter list",
[e]="invalid token in macro parameter list",
[i]="invalid token in macro parameter list",
[f]="invalid token in macro parameter list",
[h]=k,
[g]=k,
[c]="invalid token in macro parameter list",
[h]="invalid token in macro parameter list",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,2707,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    default:\n      // ...\n      if (!II) {\n        // ...\n        Diag(Tok, diag::err_pp_invalid_tok_in_arg_list);"}}
[i]={{z,2707,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    default:\n      // ...\n      if (!II) {\n        // ...\n        Diag(Tok, diag::err_pp_invalid_tok_in_arg_list);"}}
},
},
["err_pp_invalid_udl"]={
["err_pp_invalid_udl"]={
[b]="err_pp_invalid_udl",
[d]="err_pp_invalid_udl",
[j]="%select{character|integer}0 literal with user-defined suffix cannot be used in preprocessor constant expression",
[e]="%select{character|integer}0 literal with user-defined suffix cannot be used in preprocessor constant expression",
[i]={{nil,nil,{{"character","integer"}," literal with user-defined suffix cannot be used in preprocessor constant expression"}}},
[f]={{nil,nil,{{"character","integer"}," literal with user-defined suffix cannot be used in preprocessor constant expression"}}},
[h]=k,
[g]=k,
[c]="(?:character|integer) literal with user\\-defined suffix cannot be used in preprocessor constant expression",
[h]="(?:character|integer) literal with user\\-defined suffix cannot be used in preprocessor constant expression",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={"39570d00201c",1331196332,"Add support for cooked forms of user-defined-integer-literal and","Add support for cooked forms of user-defined-integer-literal and\nuser-defined-floating-literal. Support for raw forms of these literals\nto follow.\n\nllvm-svn: 152302"},
[j]={"39570d00201c",1331196332,"Add support for cooked forms of user-defined-integer-literal and","Add support for cooked forms of user-defined-integer-literal and\nuser-defined-floating-literal. Support for raw forms of these literals\nto follow.\n\nllvm-svn: 152302"},
[d]={{Y,315,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  case tok::numeric_constant: {\n    // ...\n    // Complain about, and drop, any ud-suffix.\n    if (Literal.hasUDSuffix())\n      PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*integer*/ 1;"},{Y,380,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  case tok::char_constant:        // \'x\'\n  case tok::wide_char_constant:    // L\'x\'\n  case tok::utf8_char_constant:    // u8\'x\'\n  case tok::utf16_char_constant:  // u\'x\'\n  case tok::utf32_char_constant: { // U\'x\'\n    // Complain about, and drop, any ud-suffix.\n    if (PeekTok.hasUDSuffix())\n      PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*character*/ 0;"}},
[i]={{Z,315,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  case tok::numeric_constant: {\n    // ...\n    // Complain about, and drop, any ud-suffix.\n    if (Literal.hasUDSuffix())\n      PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*integer*/ 1;"},{Z,380,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  case tok::char_constant:        // \'x\'\n  case tok::wide_char_constant:    // L\'x\'\n  case tok::utf8_char_constant:    // u8\'x\'\n  case tok::utf16_char_constant:  // u\'x\'\n  case tok::utf32_char_constant: { // U\'x\'\n    // Complain about, and drop, any ud-suffix.\n    if (PeekTok.hasUDSuffix())\n      PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*character*/ 0;"}},
[l]={
[l]={
["clang/test/Parser/cxx11-user-defined-literals.cpp"]={"clang/test/Parser/cxx11-user-defined-literals.cpp:30:5: error: character literal with user-defined suffix cannot be used in preprocessor constant expression","clang/test/Parser/cxx11-user-defined-literals.cpp:30:13: error: character literal with user-defined suffix cannot be used in preprocessor constant expression","clang/test/Parser/cxx11-user-defined-literals.cpp:36:5: error: integer literal with user-defined suffix cannot be used in preprocessor constant expression"}
["clang/test/Parser/cxx11-user-defined-literals.cpp"]={"clang/test/Parser/cxx11-user-defined-literals.cpp:30:5: error: character literal with user-defined suffix cannot be used in preprocessor constant expression","clang/test/Parser/cxx11-user-defined-literals.cpp:30:13: error: character literal with user-defined suffix cannot be used in preprocessor constant expression","clang/test/Parser/cxx11-user-defined-literals.cpp:36:5: error: integer literal with user-defined suffix cannot be used in preprocessor constant expression"}
Line 2,257: Line 2,258:
},
},
["err_pp_line_digit_sequence"]={
["err_pp_line_digit_sequence"]={
[b]="err_pp_line_digit_sequence",
[d]="err_pp_line_digit_sequence",
[j]="%select{#line|GNU line marker}0 directive requires a simple digit sequence",
[e]="%select{#line|GNU line marker}0 directive requires a simple digit sequence",
[i]={{nil,nil,{{"#line","GNU line marker"}," directive requires a simple digit sequence"}}},
[f]={{nil,nil,{{"#line","GNU line marker"}," directive requires a simple digit sequence"}}},
[h]=k,
[g]=k,
[c]="(?:\\#line|GNU line marker) directive requires a simple digit sequence",
[h]="(?:\\#line|GNU line marker) directive requires a simple digit sequence",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={"d66f172ab1b6",1240079715,"more fun with line markers: the digit string is required to be interpreted","more fun with line markers: the digit string is required to be interpreted\nas decimal, even if it starts with 0.  Also, since things like 0x1 are\ncompletely illegal, don\'t even bother using numericliteralparser for them.\n\nllvm-svn: 69454"},
[j]={"d66f172ab1b6",1240079715,"more fun with line markers: the digit string is required to be interpreted","more fun with line markers: the digit string is required to be interpreted\nas decimal, even if it starts with 0.  Also, since things like 0x1 are\ncompletely illegal, don\'t even bother using numericliteralparser for them.\n\nllvm-svn: 69454"},
[d]={{z,1375,"/// GetLineValue - Convert a numeric token into an unsigned value, emitting\n/// Diagnostic DiagID if it is invalid, and returning the value in Val.\nstatic bool GetLineValue(Token &DigitTok, unsigned &Val, unsigned DiagID, Preprocessor &PP, bool IsGNULineDirective = false) {\n  // ...\n  for (unsigned i = 0; i != ActualLength; ++i) {\n    // ...\n    if (!isDigit(DigitTokBegin[i])) {\n      PP.Diag(PP.AdvanceToTokenCharacter(DigitTok.getLocation(), i), diag::err_pp_line_digit_sequence) << IsGNULineDirective;"}},
[i]={{z,1375,"/// GetLineValue - Convert a numeric token into an unsigned value, emitting\n/// Diagnostic DiagID if it is invalid, and returning the value in Val.\nstatic bool GetLineValue(Token &DigitTok, unsigned &Val, unsigned DiagID, Preprocessor &PP, bool IsGNULineDirective = false) {\n  // ...\n  for (unsigned i = 0; i != ActualLength; ++i) {\n    // ...\n    if (!isDigit(DigitTokBegin[i])) {\n      PP.Diag(PP.AdvanceToTokenCharacter(DigitTok.getLocation(), i), diag::err_pp_line_digit_sequence) << IsGNULineDirective;"}},
[l]={
[l]={
[ec]={"foo:49:5: error: GNU line marker directive requires a simple digit sequence","foo.c:4:8: error: #line directive requires a simple digit sequence","foo.c:5:9: error: #line directive requires a simple digit sequence"}
[jc]={"foo:49:5: error: GNU line marker directive requires a simple digit sequence","foo.c:4:8: error: #line directive requires a simple digit sequence","foo.c:5:9: error: #line directive requires a simple digit sequence"}
}
}
},
},
["err_pp_line_invalid_filename"]={
["err_pp_line_invalid_filename"]={
[b]="err_pp_line_invalid_filename",
[d]="err_pp_line_invalid_filename",
[j]="invalid filename for #line directive",
[e]="invalid filename for #line directive",
[i]="invalid filename for #line directive",
[f]="invalid filename for #line directive",
[h]=k,
[g]=k,
[c]="invalid filename for \\#line directive",
[h]="invalid filename for \\#line directive",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,1436,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///  # line digit-sequence\n///  # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  // ...\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod))\n  // ...\n  else if (StrTok.isNot(tok::string_literal)) {\n    Diag(StrTok, diag::err_pp_line_invalid_filename);"}},
[i]={{z,1436,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///  # line digit-sequence\n///  # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  // ...\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod))\n  // ...\n  else if (StrTok.isNot(tok::string_literal)) {\n    Diag(StrTok, diag::err_pp_line_invalid_filename);"}},
[l]={
[l]={
[ec]={"clang/test/Preprocessor/line-directive.c:42:10: error: invalid filename for #line directive"}
[jc]={"clang/test/Preprocessor/line-directive.c:42:10: error: invalid filename for #line directive"}
}
}
},
},
["err_pp_line_requires_integer"]={
["err_pp_line_requires_integer"]={
[b]="err_pp_line_requires_integer",
[d]="err_pp_line_requires_integer",
[j]="#line directive requires a positive integer argument",
[e]="#line directive requires a positive integer argument",
[i]="#line directive requires a positive integer argument",
[f]="#line directive requires a positive integer argument",
[h]=k,
[g]=k,
[c]="\\#line directive requires a positive integer argument",
[h]="\\#line directive requires a positive integer argument",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,1411,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///  # line digit-sequence\n///  # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  // ...\n  if (GetLineValue(DigitTok, LineNo, diag::err_pp_line_requires_integer, *this))"}},
[i]={{z,1411,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///  # line digit-sequence\n///  # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  // ...\n  if (GetLineValue(DigitTok, LineNo, diag::err_pp_line_requires_integer, *this))"}},
[l]={
[l]={
[ec]={"clang/test/Preprocessor/line-directive.c:14:7: error: #line directive requires a positive integer argument"}
[jc]={"clang/test/Preprocessor/line-directive.c:14:7: error: #line directive requires a positive integer argument"}
}
}
},
},
["err_pp_linemarker_invalid_filename"]={
["err_pp_linemarker_invalid_filename"]={
[b]="err_pp_linemarker_invalid_filename",
[d]="err_pp_linemarker_invalid_filename",
[j]="invalid filename for line marker directive",
[e]="invalid filename for line marker directive",
[i]="invalid filename for line marker directive",
[f]="invalid filename for line marker directive",
[h]=k,
[g]=k,
[c]="invalid filename for line marker directive",
[h]="invalid filename for line marker directive",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,1452,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///  # line digit-sequence\n///  # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  // ...\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod))\n  // ...\n  else if (StrTok.isNot(tok::string_literal)) {\n  // ...\n  } else if (StrTok.hasUDSuffix()) {\n  // ...\n  } else {\n    // ...\n    if (Literal.Pascal) {\n      Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{z,1587,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n///    # 42\n///    # 42 \"file\" (\'1\' | \'2\')?\n///    # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n  // ...\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod)) {\n  // ...\n  } else if (StrTok.isNot(tok::string_literal)) {\n    Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{z,1603,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n///    # 42\n///    # 42 \"file\" (\'1\' | \'2\')?\n///    # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n  // ...\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod)) {\n  // ...\n  } else if (StrTok.isNot(tok::string_literal)) {\n  // ...\n  } else if (StrTok.hasUDSuffix()) {\n  // ...\n  } else {\n    // ...\n    if (Literal.Pascal) {\n      Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"}},
[i]={{z,1452,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///  # line digit-sequence\n///  # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  // ...\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod))\n  // ...\n  else if (StrTok.isNot(tok::string_literal)) {\n  // ...\n  } else if (StrTok.hasUDSuffix()) {\n  // ...\n  } else {\n    // ...\n    if (Literal.Pascal) {\n      Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{z,1587,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n///    # 42\n///    # 42 \"file\" (\'1\' | \'2\')?\n///    # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n  // ...\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod)) {\n  // ...\n  } else if (StrTok.isNot(tok::string_literal)) {\n    Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{z,1603,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n///    # 42\n///    # 42 \"file\" (\'1\' | \'2\')?\n///    # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n  // ...\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod)) {\n  // ...\n  } else if (StrTok.isNot(tok::string_literal)) {\n  // ...\n  } else if (StrTok.hasUDSuffix()) {\n  // ...\n  } else {\n    // ...\n    if (Literal.Pascal) {\n      Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"}},
[l]={
[l]={
[ec]={"foo:44:6: error: invalid filename for line marker directive","foo:45:6: error: invalid filename for line marker directive"}
[jc]={"foo:44:6: error: invalid filename for line marker directive","foo:45:6: error: invalid filename for line marker directive"}
}
}
},
},
["err_pp_linemarker_invalid_flag"]={
["err_pp_linemarker_invalid_flag"]={
[b]="err_pp_linemarker_invalid_flag",
[d]="err_pp_linemarker_invalid_flag",
[j]="invalid flag line marker directive",
[e]="invalid flag line marker directive",
[i]="invalid flag line marker directive",
[f]="invalid flag line marker directive",
[h]=k,
[g]=k,
[c]="invalid flag line marker directive",
[h]="invalid flag line marker directive",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,1488,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{z,1496,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (FlagVal == 1) {\n    // ...\n    if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{z,1522,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (FlagVal == 1) {\n  // ...\n  } else if (FlagVal == 2) {\n    // ...\n    if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{z,1528,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  // We must have 3 if there are still flags.\n  if (FlagVal != 3) {\n    PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{z,1537,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{z,1542,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  // We must have 4 if there is yet another flag.\n  if (FlagVal != 4) {\n    PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{z,1553,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"}},
[i]={{z,1488,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{z,1496,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (FlagVal == 1) {\n    // ...\n    if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{z,1522,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (FlagVal == 1) {\n  // ...\n  } else if (FlagVal == 2) {\n    // ...\n    if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{z,1528,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  // We must have 3 if there are still flags.\n  if (FlagVal != 3) {\n    PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{z,1537,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{z,1542,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  // We must have 4 if there is yet another flag.\n  if (FlagVal != 4) {\n    PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{z,1553,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"}},
[l]={
[l]={
[ec]={"foo:46:14: error: invalid flag line marker directive","foo:47:12: error: invalid flag line marker directive","foo:48:14: error: invalid flag line marker directive"}
[jc]={"foo:46:14: error: invalid flag line marker directive","foo:47:12: error: invalid flag line marker directive","foo:48:14: error: invalid flag line marker directive"}
}
}
},
},
["err_pp_linemarker_invalid_pop"]={
["err_pp_linemarker_invalid_pop"]={
[b]="err_pp_linemarker_invalid_pop",
[d]="err_pp_linemarker_invalid_pop",
[j]="invalid line marker flag \'2\': cannot pop empty include stack",
[e]="invalid line marker flag \'2\': cannot pop empty include stack",
[i]="invalid line marker flag \'2\': cannot pop empty include stack",
[f]="invalid line marker flag \'2\': cannot pop empty include stack",
[h]=k,
[g]=k,
[c]="invalid line marker flag \'2\'\\: cannot pop empty include stack",
[h]="invalid line marker flag \'2\'\\: cannot pop empty include stack",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,1515,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (FlagVal == 1) {\n  // ...\n  } else if (FlagVal == 2) {\n    // ...\n    if (IncLoc.isInvalid() || SM.getDecomposedExpansionLoc(IncLoc).first != CurFileID) {\n      PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_pop);"}},
[i]={{z,1515,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (FlagVal == 1) {\n  // ...\n  } else if (FlagVal == 2) {\n    // ...\n    if (IncLoc.isInvalid() || SM.getDecomposedExpansionLoc(IncLoc).first != CurFileID) {\n      PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_pop);"}},
[l]={
[l]={
["clang/test/Preprocessor/line-directive-system-headers.c"]={"foo:44:12: error: invalid line marker flag \'2\': cannot pop empty include stack","foo:44:12: error: invalid line marker flag \'2\': cannot pop empty include stack"}
["clang/test/Preprocessor/line-directive-system-headers.c"]={"foo:44:12: error: invalid line marker flag \'2\': cannot pop empty include stack","foo:44:12: error: invalid line marker flag \'2\': cannot pop empty include stack"}
Line 2,341: Line 2,342:
},
},
["err_pp_linemarker_requires_integer"]={
["err_pp_linemarker_requires_integer"]={
[b]="err_pp_linemarker_requires_integer",
[d]="err_pp_linemarker_requires_integer",
[j]="line marker directive requires a positive integer argument",
[e]="line marker directive requires a positive integer argument",
[i]="line marker directive requires a positive integer argument",
[f]="line marker directive requires a positive integer argument",
[h]=k,
[g]=k,
[c]="line marker directive requires a positive integer argument",
[h]="line marker directive requires a positive integer argument",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,1569,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n///    # 42\n///    # 42 \"file\" (\'1\' | \'2\')?\n///    # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n  // ...\n  if (GetLineValue(DigitTok, LineNo, diag::err_pp_linemarker_requires_integer, *this, true))"}}
[i]={{z,1569,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n///    # 42\n///    # 42 \"file\" (\'1\' | \'2\')?\n///    # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n  // ...\n  if (GetLineValue(DigitTok, LineNo, diag::err_pp_linemarker_requires_integer, *this, true))"}}
},
},
["err_pp_macro_not_identifier"]={
["err_pp_macro_not_identifier"]={
[b]="err_pp_macro_not_identifier",
[d]="err_pp_macro_not_identifier",
[j]="macro name must be an identifier",
[e]="macro name must be an identifier",
[i]="macro name must be an identifier",
[f]="macro name must be an identifier",
[h]=k,
[g]=k,
[c]="macro name must be an identifier",
[h]="macro name must be an identifier",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,329,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  // ...\n  if (!II)\n    return Diag(MacroNameTok, diag::err_pp_macro_not_identifier);"}},
[i]={{z,329,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  // ...\n  if (!II)\n    return Diag(MacroNameTok, diag::err_pp_macro_not_identifier);"}},
[l]={
[l]={
["clang/test/Preprocessor/ifdef-recover.c"]={"clang/test/Preprocessor/ifdef-recover.c:9:8: error: macro name must be an identifier","clang/test/Preprocessor/ifdef-recover.c:31:10: error: macro name must be an identifier"}
["clang/test/Preprocessor/ifdef-recover.c"]={"clang/test/Preprocessor/ifdef-recover.c:9:8: error: macro name must be an identifier","clang/test/Preprocessor/ifdef-recover.c:31:10: error: macro name must be an identifier"}
Line 2,366: Line 2,367:
},
},
["err_pp_malformed_ident"]={
["err_pp_malformed_ident"]={
[b]="err_pp_malformed_ident",
[d]="err_pp_malformed_ident",
[j]="invalid #ident directive",
[e]="invalid #ident directive",
[i]="invalid #ident directive",
[f]="invalid #ident directive",
[h]=k,
[g]=k,
[c]="invalid \\#ident directive",
[h]="invalid \\#ident directive",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,1674,"/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.\n///\nvoid Preprocessor::HandleIdentSCCSDirective(Token &Tok) {\n  // ...\n  // If the token kind isn\'t a string, it\'s a malformed directive.\n  if (StrTok.isNot(tok::string_literal) && StrTok.isNot(tok::wide_string_literal)) {\n    Diag(StrTok, diag::err_pp_malformed_ident);"}}
[i]={{z,1674,"/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.\n///\nvoid Preprocessor::HandleIdentSCCSDirective(Token &Tok) {\n  // ...\n  // If the token kind isn\'t a string, it\'s a malformed directive.\n  if (StrTok.isNot(tok::string_literal) && StrTok.isNot(tok::wide_string_literal)) {\n    Diag(StrTok, diag::err_pp_malformed_ident);"}}
},
},
["err_pp_missing_lparen_in_vaopt_use"]={
["err_pp_missing_lparen_in_vaopt_use"]={
[b]={{nil,B,"err_pp_missing_lparen_in_vaopt_use"}},
[d]={{nil,B,"err_pp_missing_lparen_in_vaopt_use"}},
[j]={{nil,B,"missing \'(\' following __VA_OPT__"}},
[e]={{nil,B,"missing \'(\' following __VA_OPT__"}},
[i]={{nil,B,"missing \'(\' following __VA_OPT__"}},
[f]={{nil,B,"missing \'(\' following __VA_OPT__"}},
[h]=k,
[g]=k,
[c]="missing \'\\(\' following __VA_OPT__",
[h]="missing \'\\(\' following __VA_OPT__",
[f]=a,
[b]=a,
[e]={{nil,B,p}},
[c]={{nil,B,p}},
[g]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)","[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)\n\nThis patch implements an extension to the preprocessor:\n\n__VA_OPT__(contents) --> which expands into its contents if variadic arguments are supplied to the parent macro, or behaves as an empty token if none.\n\n  - Currently this feature is only enabled for C++2a (this could be enabled, with some careful tweaks, for other dialects with the appropriate extension or compatibility warnings)\n\n  - The patch was reviewed here: https://reviews.llvm.org/D35782 and asides from the above (and moving some of the definition and expansion recognition logic into the corresponding state machines), I believe I incorporated all of Richard\'s suggestions.\n\nA few technicalities (most of which were clarified through private correspondence between rsmith, hubert and thomas) are worth mentioning.  Given:\n\n    #define F(a,...) a #__VA_OPT__(a ## a)  a ## __VA_OPT__(__VA_ARGS__)\n\n    - The call F(,) Does not supply any tokens for the variadic arguments and hence VA_OPT behaves as a placeholder.\n    - When expanding VA_OPT (for e.g. F(,1) token pasting occurs eagerly within its contents if the contents need to be stringified.\n    - A hash or a hashhash prior to VA_OPT does not inhibit expansion of arguments if they are the first token within VA_OPT.\n    - When a variadic argument is supplied, argument substitution occurs within the contents as does stringification - and these resulting tokens are inserted back into the macro expansions token stream just prior to the entire stream being rescanned and concatenated.\n\nSee wg21.link/P0306 for further details on the feature.\n\n\nAcknowledgment: This patch would have been poorer if not for Richard Smith\'s usual thoughtful analysis and feedback.\nllvm-svn: 315840"},
[j]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)","[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)\n\nThis patch implements an extension to the preprocessor:\n\n__VA_OPT__(contents) --> which expands into its contents if variadic arguments are supplied to the parent macro, or behaves as an empty token if none.\n\n  - Currently this feature is only enabled for C++2a (this could be enabled, with some careful tweaks, for other dialects with the appropriate extension or compatibility warnings)\n\n  - The patch was reviewed here: https://reviews.llvm.org/D35782 and asides from the above (and moving some of the definition and expansion recognition logic into the corresponding state machines), I believe I incorporated all of Richard\'s suggestions.\n\nA few technicalities (most of which were clarified through private correspondence between rsmith, hubert and thomas) are worth mentioning.  Given:\n\n    #define F(a,...) a #__VA_OPT__(a ## a)  a ## __VA_OPT__(__VA_ARGS__)\n\n    - The call F(,) Does not supply any tokens for the variadic arguments and hence VA_OPT behaves as a placeholder.\n    - When expanding VA_OPT (for e.g. F(,1) token pasting occurs eagerly within its contents if the contents need to be stringified.\n    - A hash or a hashhash prior to VA_OPT does not inhibit expansion of arguments if they are the first token within VA_OPT.\n    - When a variadic argument is supplied, argument substitution occurs within the contents as does stringification - and these resulting tokens are inserted back into the macro expansions token stream just prior to the entire stream being rescanned and concatenated.\n\nSee wg21.link/P0306 for further details on the feature.\n\n\nAcknowledgment: This patch would have been poorer if not for Richard Smith\'s usual thoughtful analysis and feedback.\nllvm-svn: 315840"},
[d]={{z,2916,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  // ...\n  } else {\n    // ...\n    while (Tok.isNot(tok::eod)) {\n      // ...\n      if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n        // ...\n        if (VAOCtx.isVAOptToken(Tok)) {\n          // ...\n          if (Tok.isNot(tok::l_paren)) {\n            Diag(Tok, diag::err_pp_missing_lparen_in_vaopt_use);"}},
[i]={{z,2916,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  // ...\n  } else {\n    // ...\n    while (Tok.isNot(tok::eod)) {\n      // ...\n      if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n        // ...\n        if (VAOCtx.isVAOptToken(Tok)) {\n          // ...\n          if (Tok.isNot(tok::l_paren)) {\n            Diag(Tok, diag::err_pp_missing_lparen_in_vaopt_use);"}},
[l]={
[l]={
["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:6:29: error: missing \'(\' following __VA_OPT__"}
["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:6:29: error: missing \'(\' following __VA_OPT__"}
Line 2,391: Line 2,392:
},
},
["err_pp_missing_macro_name"]={
["err_pp_missing_macro_name"]={
[b]="err_pp_missing_macro_name",
[d]="err_pp_missing_macro_name",
[j]="macro name missing",
[e]="macro name missing",
[i]="macro name missing",
[f]="macro name missing",
[h]=k,
[g]=k,
[c]="macro name missing",
[h]="macro name missing",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,325,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  // Missing macro name?\n  if (MacroNameTok.is(tok::eod))\n    return Diag(MacroNameTok, diag::err_pp_missing_macro_name);"}},
[i]={{z,325,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  // Missing macro name?\n  if (MacroNameTok.is(tok::eod))\n    return Diag(MacroNameTok, diag::err_pp_missing_macro_name);"}},
[l]={
[l]={
["clang/test/Preprocessor/ifdef-recover.c"]={"clang/test/Preprocessor/ifdef-recover.c:5:7: error: macro name missing","clang/test/Preprocessor/ifdef-recover.c:13:12: error: macro name missing","clang/test/Preprocessor/ifdef-recover.c:25:9: error: macro name missing"}
["clang/test/Preprocessor/ifdef-recover.c"]={"clang/test/Preprocessor/ifdef-recover.c:5:7: error: macro name missing","clang/test/Preprocessor/ifdef-recover.c:13:12: error: macro name missing","clang/test/Preprocessor/ifdef-recover.c:25:9: error: macro name missing"}
Line 2,405: Line 2,406:
},
},
["err_pp_missing_rparen_in_macro_def"]={
["err_pp_missing_rparen_in_macro_def"]={
[b]="err_pp_missing_rparen_in_macro_def",
[d]="err_pp_missing_rparen_in_macro_def",
[j]="missing \')\' in macro parameter list",
[e]="missing \')\' in macro parameter list",
[i]="missing \')\' in macro parameter list",
[f]="missing \')\' in macro parameter list",
[h]=k,
[g]=k,
[c]="missing \'\\)\' in macro parameter list",
[h]="missing \'\\)\' in macro parameter list",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,2690,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    case tok::ellipsis: // #define X(... -> C99 varargs\n      // ...\n      if (Tok.isNot(tok::r_paren)) {\n        Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{z,2699,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    case tok::eod: // #define X(\n      Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{z,2740,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    default:\n      // ...\n      case tok::ellipsis: // #define X(A... -> GCC extension\n        // ...\n        if (Tok.isNot(tok::r_paren)) {\n          Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"}}
[i]={{z,2690,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    case tok::ellipsis: // #define X(... -> C99 varargs\n      // ...\n      if (Tok.isNot(tok::r_paren)) {\n        Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{z,2699,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    case tok::eod: // #define X(\n      Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{z,2740,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    default:\n      // ...\n      case tok::ellipsis: // #define X(A... -> GCC extension\n        // ...\n        if (Tok.isNot(tok::r_paren)) {\n          Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"}}
},
},
["err_pp_module_begin_no_module_map"]={
["err_pp_module_begin_no_module_map"]={
[b]={{nil,n,"err_pp_module_begin_no_module_map"}},
[d]={{nil,n,"err_pp_module_begin_no_module_map"}},
[j]={{nil,n,"no module map available for module %0"}},
[e]={{nil,n,"no module map available for module %0"}},
[i]={{nil,n,"no module map available for module A"}},
[f]={{nil,n,"no module map available for module A"}},
[h]=k,
[g]=k,
[c]="no module map available for module (.*?)",
[h]="no module map available for module (.*?)",
[f]=a,
[b]=a,
[e]={{nil,n,p}},
[c]={{nil,n,p}},
[g]={Ib,1493857794,Jb,yb},
[j]={Fb,1493857794,Gb,Hb},
[d]={{H,1758,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///  #pragma clang module begin some.module.name\n///  ...\n///  #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (!M) {\n      PP.Diag(ModuleName.front().second, diag::err_pp_module_begin_no_module_map) << Current;"}}
[i]={{H,1758,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///  #pragma clang module begin some.module.name\n///  ...\n///  #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (!M) {\n      PP.Diag(ModuleName.front().second, diag::err_pp_module_begin_no_module_map) << Current;"}}
},
},
["err_pp_module_begin_no_submodule"]={
["err_pp_module_begin_no_submodule"]={
[b]={{nil,n,"err_pp_module_begin_no_submodule"}},
[d]={{nil,n,"err_pp_module_begin_no_submodule"}},
[j]={{nil,n,"submodule %0.%1 not declared in module map"}},
[e]={{nil,n,"submodule %0.%1 not declared in module map"}},
[i]={{nil,n,"submodule A.B not declared in module map"}},
[f]={{nil,n,"submodule A.B not declared in module map"}},
[h]=k,
[g]=k,
[c]="submodule (.*?)\\.(.*?) not declared in module map",
[h]="submodule (.*?)\\.(.*?) not declared in module map",
[f]=a,
[b]=a,
[e]={{nil,n,p}},
[c]={{nil,n,p}},
[g]={Ib,1493857794,Jb,yb},
[j]={Fb,1493857794,Gb,Hb},
[d]={{H,1764,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///  #pragma clang module begin some.module.name\n///  ...\n///  #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    for (unsigned I = 1; I != ModuleName.size(); ++I) {\n      // ...\n      if (!NewM) {\n        PP.Diag(ModuleName[I].second, diag::err_pp_module_begin_no_submodule) << M->getFullModuleName() << ModuleName[I].first;"}}
[i]={{H,1764,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///  #pragma clang module begin some.module.name\n///  ...\n///  #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    for (unsigned I = 1; I != ModuleName.size(); ++I) {\n      // ...\n      if (!NewM) {\n        PP.Diag(ModuleName[I].second, diag::err_pp_module_begin_no_submodule) << M->getFullModuleName() << ModuleName[I].first;"}}
},
},
["err_pp_module_begin_without_module_end"]={
["err_pp_module_begin_without_module_end"]={
[b]={{nil,n,"err_pp_module_begin_without_module_end"}},
[d]={{nil,n,"err_pp_module_begin_without_module_end"}},
[j]={{nil,n,"no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"}},
[e]={{nil,n,"no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"}},
[i]={{nil,n,"no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"}},
[f]={{nil,n,"no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"}},
[h]=k,
[g]=k,
[c]="no matching \'\\#pragma clang module end\' for this \'\\#pragma clang module begin\'",
[h]="no matching \'\\#pragma clang module end\' for this \'\\#pragma clang module begin\'",
[f]=a,
[b]=a,
[e]={{nil,n,p}},
[c]={{nil,n,p}},
[g]={Ib,1493857794,Jb,yb},
[j]={Fb,1493857794,Gb,Hb},
[d]={{Hb,353,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // ...\n  if ((LeavingSubmodule || IncludeMacroStack.empty()) && !BuildingSubmoduleStack.empty() && BuildingSubmoduleStack.back().IsPragma) {\n    Diag(BuildingSubmoduleStack.back().ImportLoc, diag::err_pp_module_begin_without_module_end);"}},
[i]={{Db,353,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // ...\n  if ((LeavingSubmodule || IncludeMacroStack.empty()) && !BuildingSubmoduleStack.empty() && BuildingSubmoduleStack.back().IsPragma) {\n    Diag(BuildingSubmoduleStack.back().ImportLoc, diag::err_pp_module_begin_without_module_end);"}},
[l]={
[l]={
["clang/test/Preprocessor/pragma_module.c"]={"clang/test/Preprocessor/pragma_module.c:52:22: error: no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"}
["clang/test/Preprocessor/pragma_module.c"]={"clang/test/Preprocessor/pragma_module.c:52:22: error: no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"}
Line 2,452: Line 2,453:
},
},
["err_pp_module_begin_wrong_module"]={
["err_pp_module_begin_wrong_module"]={
[b]={{nil,n,"err_pp_module_begin_wrong_module"}},
[d]={{nil,n,"err_pp_module_begin_wrong_module"}},
[j]={{nil,n,"must specify \'-fmodule-name=%0\' to enter %select{|submodule of }1this module%select{ (current module is %3)|}2"}},
[e]={{nil,n,"must specify \'-fmodule-name=%0\' to enter %select{|submodule of }1this module%select{ (current module is %3)|}2"}},
[i]={{nil,n,{"must specify \'-fmodule-name=A\' to enter ",{a,"submodule of "},"this module",{" (current module is D)",a}}}},
[f]={{nil,n,{"must specify \'-fmodule-name=A\' to enter ",{a,"submodule of "},"this module",{" (current module is D)",a}}}},
[h]=k,
[g]=k,
[c]="must specify \'\\-fmodule\\-name\\=(.*?)\' to enter (?:|submodule of )this module(?: \\(current module is (.*?)\\)|)",
[h]="must specify \'\\-fmodule\\-name\\=(.*?)\' to enter (?:|submodule of )this module(?: \\(current module is (.*?)\\)|)",
[f]=a,
[b]=a,
[e]={{nil,n,p}},
[c]={{nil,n,p}},
[g]={Ib,1493857794,Jb,yb},
[j]={Fb,1493857794,Gb,Hb},
[d]={{H,1746,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///  #pragma clang module begin some.module.name\n///  ...\n///  #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (ModuleName.front().first->getName() != Current) {\n      PP.Diag(ModuleName.front().second, diag::err_pp_module_begin_wrong_module) << ModuleName.front().first << (ModuleName.size() > 1) << Current.empty() << Current;"}}
[i]={{H,1746,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///  #pragma clang module begin some.module.name\n///  ...\n///  #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (ModuleName.front().first->getName() != Current) {\n      PP.Diag(ModuleName.front().second, diag::err_pp_module_begin_wrong_module) << ModuleName.front().first << (ModuleName.size() > 1) << Current.empty() << Current;"}}
},
},
["err_pp_module_build_missing_end"]={
["err_pp_module_build_missing_end"]={
[b]={{nil,n,"err_pp_module_build_missing_end"}},
[d]={{nil,n,"err_pp_module_build_missing_end"}},
[j]={{nil,n,"no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'"}},
[e]={{nil,n,"no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'"}},
[i]={{nil,n,"no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'"}},
[f]={{nil,n,"no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'"}},
[h]=k,
[g]=k,
[c]="no matching \'\\#pragma clang module endbuild\' for this \'\\#pragma clang module build\'",
[h]="no matching \'\\#pragma clang module endbuild\' for this \'\\#pragma clang module build\'",
[f]=a,
[b]=a,
[e]={{nil,n,p}},
[c]={{nil,n,p}},
[g]={"5d2ed489870c",1497036152,"Add #pragma clang module build/endbuild pragmas for performing a module build","Add #pragma clang module build/endbuild pragmas for performing a module build\nas part of a compilation.\n\nThis is intended for two purposes:\n\n1) Writing self-contained test cases for modules: we can now write a single\nsource file test that builds some number of module files on the side and\nimports them.\n\n2) Debugging / test case reduction. A single-source testcase is much more\namenable to reduction, compared to a VFS tarball or .pcm files.\n\nllvm-svn: 305101"},
[j]={"5d2ed489870c",1497036152,"Add #pragma clang module build/endbuild pragmas for performing a module build","Add #pragma clang module build/endbuild pragmas for performing a module build\nas part of a compilation.\n\nThis is intended for two purposes:\n\n1) Writing self-contained test cases for modules: we can now write a single\nsource file test that builds some number of module files on the side and\nimports them.\n\n2) Debugging / test case reduction. A single-source testcase is much more\namenable to reduction, compared to a VFS tarball or .pcm files.\n\nllvm-svn: 305101"},
[d]={{H,841,"void Preprocessor::HandlePragmaModuleBuild(Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    if (Tok.is(tok::eof)) {\n      Diag(Loc, diag::err_pp_module_build_missing_end);"}},
[i]={{H,841,"void Preprocessor::HandlePragmaModuleBuild(Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    if (Tok.is(tok::eof)) {\n      Diag(Loc, diag::err_pp_module_build_missing_end);"}},
[l]={
[l]={
["clang/test/Modules/preprocess-build.cpp"]={"clang/test/Modules/preprocess-build.cpp:35:22: error: no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'"}
["clang/test/Modules/preprocess-build.cpp"]={"clang/test/Modules/preprocess-build.cpp:35:22: error: no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'"}
Line 2,477: Line 2,478:
},
},
["err_pp_module_end_without_module_begin"]={
["err_pp_module_end_without_module_begin"]={
[b]={{nil,n,"err_pp_module_end_without_module_begin"}},
[d]={{nil,n,"err_pp_module_end_without_module_begin"}},
[j]={{nil,n,"no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'"}},
[e]={{nil,n,"no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'"}},
[i]={{nil,n,"no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'"}},
[f]={{nil,n,"no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'"}},
[h]=k,
[g]=k,
[c]="no matching \'\\#pragma clang module begin\' for this \'\\#pragma clang module end\'",
[h]="no matching \'\\#pragma clang module begin\' for this \'\\#pragma clang module end\'",
[f]=a,
[b]=a,
[e]={{nil,n,p}},
[c]={{nil,n,p}},
[g]={Ib,1493857794,Jb,yb},
[j]={Fb,1493857794,Gb,Hb},
[d]={{H,1802,"/// Handle the clang \\#pragma module end extension.\nstruct PragmaModuleEndHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (M)\n    // ...\n    else\n      PP.Diag(Loc, diag::err_pp_module_end_without_module_begin);"}},
[i]={{H,1802,"/// Handle the clang \\#pragma module end extension.\nstruct PragmaModuleEndHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (M)\n    // ...\n    else\n      PP.Diag(Loc, diag::err_pp_module_end_without_module_begin);"}},
[l]={
[l]={
["clang/test/Modules/preprocess-unavailable.cpp"]={"clang/test/Modules/preprocess-unavailable.cpp:12:22: error: no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'"}
["clang/test/Modules/preprocess-unavailable.cpp"]={"clang/test/Modules/preprocess-unavailable.cpp:12:22: error: no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'"}
Line 2,491: Line 2,492:
},
},
["err_pp_nested_paren"]={
["err_pp_nested_paren"]={
[b]="err_pp_nested_paren",
[d]="err_pp_nested_paren",
[j]="nested parentheses not permitted in %0",
[e]="nested parentheses not permitted in %0",
[i]="nested parentheses not permitted in A",
[f]="nested parentheses not permitted in A",
[h]=k,
[g]=k,
[c]="nested parentheses not permitted in (.*?)",
[h]="nested parentheses not permitted in (.*?)",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={"50b6ceff1f06",1459845407,"Consolidate and improve the handling of built-in feature-like macros","Consolidate and improve the handling of built-in feature-like macros\n\nSummary:\nThe parsing logic has been separated out from the macro implementation logic, leading to a number of improvements:\n\n* Gracefully handle unexpected/invalid tokens, too few, too many and nested parameters\n* Provide consistent behaviour between all built-in feature-like macros\n* Simplify the implementation of macro logic\n* Fix __is_identifier to correctly return \'0\' for non-identifiers\n\nReviewers: doug.gregor, rsmith\n\nSubscribers: rsmith, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D17149\n\nllvm-svn: 265381"},
[j]={"50b6ceff1f06",1459845407,"Consolidate and improve the handling of built-in feature-like macros","Consolidate and improve the handling of built-in feature-like macros\n\nSummary:\nThe parsing logic has been separated out from the macro implementation logic, leading to a number of improvements:\n\n* Gracefully handle unexpected/invalid tokens, too few, too many and nested parameters\n* Provide consistent behaviour between all built-in feature-like macros\n* Simplify the implementation of macro logic\n* Fix __is_identifier to correctly return \'0\' for non-identifiers\n\nReviewers: doug.gregor, rsmith\n\nSubscribers: rsmith, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D17149\n\nllvm-svn: 265381"},
[d]={{ab,1337,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  // ...\n  already_lexed:\n    // ...\n    case tok::l_paren:\n      // ...\n      if (!SuppressDiagnostic) {\n        PP.Diag(Tok.getLocation(), diag::err_pp_nested_paren) << II;"}},
[i]={{ab,1337,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  // ...\n  already_lexed:\n    // ...\n    case tok::l_paren:\n      // ...\n      if (!SuppressDiagnostic) {\n        PP.Diag(Tok.getLocation(), diag::err_pp_nested_paren) << II;"}},
[l]={
[l]={
["clang/test/Preprocessor/feature_tests.c"]={"clang/test/Preprocessor/feature_tests.c:122:21: error: nested parentheses not permitted in \'__is_identifier\'"}
["clang/test/Preprocessor/feature_tests.c"]={"clang/test/Preprocessor/feature_tests.c:122:21: error: nested parentheses not permitted in \'__is_identifier\'"}
Line 2,505: Line 2,506:
},
},
["err_pp_operator_used_as_macro_name"]={
["err_pp_operator_used_as_macro_name"]={
[b]="err_pp_operator_used_as_macro_name",
[d]="err_pp_operator_used_as_macro_name",
[j]="C++ operator %0 (aka %1) used as a macro name",
[e]="C++ operator %0 (aka %1) used as a macro name",
[i]="C++ operator A (aka B) used as a macro name",
[f]="C++ operator A (aka B) used as a macro name",
[h]=k,
[g]=k,
[c]="C\\+\\+ operator (.*?) \\(aka (.*?)\\) used as a macro name",
[h]="C\\+\\+ operator (.*?) \\(aka (.*?)\\) used as a macro name",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,336,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  // ...\n  if (II->isCPlusPlusOperatorKeyword()) {\n    // ...\n    Diag(MacroNameTok, getLangOpts().MicrosoftExt ? diag::ext_pp_operator_used_as_macro_name : diag::err_pp_operator_used_as_macro_name) << II << MacroNameTok.getKind();"}},
[i]={{z,336,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  // ...\n  if (II->isCPlusPlusOperatorKeyword()) {\n    // ...\n    Diag(MacroNameTok, getLangOpts().MicrosoftExt ? diag::ext_pp_operator_used_as_macro_name : diag::err_pp_operator_used_as_macro_name) << II << MacroNameTok.getKind();"}},
[l]={
[l]={
["clang/test/Preprocessor/cxx_oper_keyword.cpp"]={"clang/test/Preprocessor/cxx_oper_keyword.cpp:16:9: error: C++ operator \'and\' (aka \'&&\') used as a macro name","clang/test/Preprocessor/cxx_oper_keyword.cpp:21:13: error: C++ operator \'xor\' (aka \'^\') used as a macro name","clang/test/Preprocessor/cxx_oper_keyword.cpp:29:8: error: C++ operator \'and\' (aka \'&&\') used as a macro name"}
["clang/test/Preprocessor/cxx_oper_keyword.cpp"]={"clang/test/Preprocessor/cxx_oper_keyword.cpp:16:9: error: C++ operator \'and\' (aka \'&&\') used as a macro name","clang/test/Preprocessor/cxx_oper_keyword.cpp:21:13: error: C++ operator \'xor\' (aka \'^\') used as a macro name","clang/test/Preprocessor/cxx_oper_keyword.cpp:29:8: error: C++ operator \'and\' (aka \'&&\') used as a macro name"}
Line 2,519: Line 2,520:
},
},
["err_pp_pragma_hdrstop_not_seen"]={
["err_pp_pragma_hdrstop_not_seen"]={
[b]={{nil,u,"err_pp_pragma_hdrstop_not_seen"}},
[d]={{nil,u,"err_pp_pragma_hdrstop_not_seen"}},
[j]={{nil,u,"#pragma hdrstop not seen while attempting to use precompiled header"}},
[e]={{nil,u,"#pragma hdrstop not seen while attempting to use precompiled header"}},
[i]={{nil,u,"#pragma hdrstop not seen while attempting to use precompiled header"}},
[f]={{nil,u,"#pragma hdrstop not seen while attempting to use precompiled header"}},
[h]=mc,
[g]=rc,
[c]="\\#pragma hdrstop not seen while attempting to use precompiled header",
[h]="\\#pragma hdrstop not seen while attempting to use precompiled header",
[f]=a,
[b]=a,
[e]={{nil,u,p}},
[c]={{nil,u,p}},
[g]={"58df1affedc0",1536685844,"[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop","[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop\n\nWith clang-cl, when the user specifies /Yc or /Yu without a filename\nthe compiler uses a #pragma hdrstop in the main source file to\ndetermine the end of the PCH. If a header is specified with /Yc or\n/Yu #pragma hdrstop has no effect.\n\nThe optional #pragma hdrstop filename argument is not yet supported.\n\nDifferential Revision: https://reviews.llvm.org/D51391\n\nllvm-svn: 341963"},
[j]={"58df1affedc0",1536685844,"[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop","[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop\n\nWith clang-cl, when the user specifies /Yc or /Yu without a filename\nthe compiler uses a #pragma hdrstop in the main source file to\ndetermine the end of the PCH. If a header is specified with /Yc or\n/Yu #pragma hdrstop has no effect.\n\nThe optional #pragma hdrstop filename argument is not yet supported.\n\nDifferential Revision: https://reviews.llvm.org/D51391\n\nllvm-svn: 341963"},
[d]={{"clang/lib/Lex/Preprocessor.cpp",675,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n  // ...\n  if (ReachedMainFileEOF) {\n    if (UsingPCHThroughHeader)\n    // ...\n    else if (!PPOpts->PCHWithHdrStopCreate)\n      Diag(SourceLocation(), diag::err_pp_pragma_hdrstop_not_seen);"}}
[i]={{"clang/lib/Lex/Preprocessor.cpp",675,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n  // ...\n  if (ReachedMainFileEOF) {\n    if (UsingPCHThroughHeader)\n    // ...\n    else if (!PPOpts->PCHWithHdrStopCreate)\n      Diag(SourceLocation(), diag::err_pp_pragma_hdrstop_not_seen);"}}
},
},
["err_pp_pragma_unsafe_buffer_usage_syntax"]={
["err_pp_pragma_unsafe_buffer_usage_syntax"]={
[b]="err_pp_pragma_unsafe_buffer_usage_syntax",
[d]="err_pp_pragma_unsafe_buffer_usage_syntax",
[j]="Expected \'begin\' or \'end\'",
[e]="Expected \'begin\' or \'end\'",
[i]="Expected \'begin\' or \'end\'",
[f]="Expected \'begin\' or \'end\'",
[h]=k,
[g]=k,
[c]="Expected \'begin\' or \'end\'",
[h]="Expected \'begin\' or \'end\'",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={ib,1625925174,kb,jb},
[j]={gb,1625925174,ib,jb},
[d]={{H,1257,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    // ...\n    if (Tok.isNot(tok::identifier)) {\n      PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"},{H,1271,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    // ...\n    if (II->isStr(\"begin\")) {\n    // ...\n    } else if (II->isStr(\"end\")) {\n    // ...\n    } else\n      PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"}},
[i]={{H,1257,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    // ...\n    if (Tok.isNot(tok::identifier)) {\n      PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"},{H,1271,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    // ...\n    if (II->isStr(\"begin\")) {\n    // ...\n    } else if (II->isStr(\"end\")) {\n    // ...\n    } else\n      PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"}},
[l]={
[l]={
["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:21:35: error: Expected \'begin\' or \'end\'","clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:22:35: error: Expected \'begin\' or \'end\'"}
["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:21:35: error: Expected \'begin\' or \'end\'","clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:22:35: error: Expected \'begin\' or \'end\'"}
Line 2,544: Line 2,545:
},
},
["err_pp_remainder_by_zero"]={
["err_pp_remainder_by_zero"]={
[b]="err_pp_remainder_by_zero",
[d]="err_pp_remainder_by_zero",
[j]="remainder by zero in preprocessor expression",
[e]="remainder by zero in preprocessor expression",
[i]="remainder by zero in preprocessor expression",
[f]="remainder by zero in preprocessor expression",
[h]=k,
[g]=k,
[c]="remainder by zero in preprocessor expression",
[h]="remainder by zero in preprocessor expression",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{Y,709,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec.  This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n  // ...\n  while (true) {\n    // ...\n    case tok::percent:\n      if (RHS.Val != 0)\n      // ...\n      else if (ValueLive) {\n        PP.Diag(OpLoc, diag::err_pp_remainder_by_zero) << LHS.getRange() << RHS.getRange();"}}
[i]={{Z,709,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec.  This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n  // ...\n  while (true) {\n    // ...\n    case tok::percent:\n      if (RHS.Val != 0)\n      // ...\n      else if (ValueLive) {\n        PP.Diag(OpLoc, diag::err_pp_remainder_by_zero) << LHS.getRange() << RHS.getRange();"}}
},
},
["err_pp_stringize_not_parameter"]={
["err_pp_stringize_not_parameter"]={
[b]="err_pp_stringize_not_parameter",
[d]="err_pp_stringize_not_parameter",
[j]="\'%select{#|#@}0\' is not followed by a macro parameter",
[e]="\'%select{#|#@}0\' is not followed by a macro parameter",
[i]={{nil,nil,{"\'",{"#","#@"},"\' is not followed by a macro parameter"}}},
[f]={{nil,nil,{"\'",{"#","#@"},"\' is not followed by a macro parameter"}}},
[h]=k,
[g]=k,
[c]="\'(?:\\#|\\#@)\' is not followed by a macro parameter",
[h]="\'(?:\\#|\\#@)\' is not followed by a macro parameter",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{z,2999,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  // ...\n  } else {\n    // ...\n    while (Tok.isNot(tok::eod)) {\n      // ...\n      // Check for a valid macro arg identifier or __VA_OPT__.\n      if (!VAOCtx.isVAOptToken(Tok) && (Tok.getIdentifierInfo() == nullptr || MI->getParameterNum(Tok.getIdentifierInfo()) == -1)) {\n        // If this is assembler-with-cpp mode, we accept random gibberish after\n        // the \'#\' because \'#\' is often a comment character.  However, change\n        // the kind of the token to tok::unknown so that the preprocessor isn\'t\n        // confused.\n        if (getLangOpts().AsmPreprocessor && Tok.isNot(tok::eod)) {\n        // ...\n        } else {\n          Diag(Tok, diag::err_pp_stringize_not_parameter) << LastTok.is(tok::hashat);"}},
[i]={{z,2999,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  // ...\n  } else {\n    // ...\n    while (Tok.isNot(tok::eod)) {\n      // ...\n      // Check for a valid macro arg identifier or __VA_OPT__.\n      if (!VAOCtx.isVAOptToken(Tok) && (Tok.getIdentifierInfo() == nullptr || MI->getParameterNum(Tok.getIdentifierInfo()) == -1)) {\n        // If this is assembler-with-cpp mode, we accept random gibberish after\n        // the \'#\' because \'#\' is often a comment character.  However, change\n        // the kind of the token to tok::unknown so that the preprocessor isn\'t\n        // confused.\n        if (getLangOpts().AsmPreprocessor && Tok.isNot(tok::eod)) {\n        // ...\n        } else {\n          Diag(Tok, diag::err_pp_stringize_not_parameter) << LastTok.is(tok::hashat);"}},
[l]={
[l]={
["clang/test/Preprocessor/stringize_skipped.c"]={"clang/test/Preprocessor/stringize_skipped.c:5:20: error: \'#\' is not followed by a macro parameter"}
["clang/test/Preprocessor/stringize_skipped.c"]={"clang/test/Preprocessor/stringize_skipped.c:5:20: error: \'#\' is not followed by a macro parameter"}
Line 2,569: Line 2,570:
},
},
["err_pp_through_header_not_found"]={
["err_pp_through_header_not_found"]={
[b]={{nil,K,"err_pp_through_header_not_found"}},
[d]={{nil,K,"err_pp_through_header_not_found"}},
[j]={{nil,K,"\'%0\' required for precompiled header not found"}},
[e]={{nil,K,"\'%0\' required for precompiled header not found"}},
[i]={{nil,K,"\'A\' required for precompiled header not found"}},
[f]={{nil,K,"\'A\' required for precompiled header not found"}},
[h]=mc,
[g]=rc,
[c]="\'(.*?)\' required for precompiled header not found",
[h]="\'(.*?)\' required for precompiled header not found",
[f]=a,
[b]=a,
[e]={{nil,K,p}},
[c]={{nil,K,p}},
[g]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers","[clang-cl, PCH] Implement support for MS-style PCH through headers\n\nImplement support for MS-style PCH through headers.\n\nThis enables support for /Yc and /Yu where the through header is either\non the command line or included in the source. It replaces the current\nsupport the requires the header also be specified with /FI.\n\nThis change adds a -cc1 option -pch-through-header that is used to either\nstart or stop compilation during PCH create or use.\n\nWhen creating a PCH, the compilation ends after compilation of the through\nheader.\n\nWhen using a PCH, tokens are skipped until after the through header is seen.\n\nPatch By: mikerice\nDifferential Revision: https://reviews.llvm.org/D46652\n\nllvm-svn: 336379"},
[j]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers","[clang-cl, PCH] Implement support for MS-style PCH through headers\n\nImplement support for MS-style PCH through headers.\n\nThis enables support for /Yc and /Yu where the through header is either\non the command line or included in the source. It replaces the current\nsupport the requires the header also be specified with /FI.\n\nThis change adds a -cc1 option -pch-through-header that is used to either\nstart or stop compilation during PCH create or use.\n\nWhen creating a PCH, the compilation ends after compilation of the through\nheader.\n\nWhen using a PCH, tokens are skipped until after the through header is seen.\n\nPatch By: mikerice\nDifferential Revision: https://reviews.llvm.org/D46652\n\nllvm-svn: 336379"},
[d]={{"clang/lib/Lex/Preprocessor.cpp",587,"/// EnterMainSourceFile - Enter the specified FileID as the main source file,\n/// which implicitly adds the builtin defines etc.\nvoid Preprocessor::EnterMainSourceFile() {\n  // ...\n  if (!PPOpts->PCHThroughHeader.empty()) {\n    // ...\n    if (!File) {\n      Diag(SourceLocation(), diag::err_pp_through_header_not_found) << PPOpts->PCHThroughHeader;"}}
[i]={{"clang/lib/Lex/Preprocessor.cpp",587,"/// EnterMainSourceFile - Enter the specified FileID as the main source file,\n/// which implicitly adds the builtin defines etc.\nvoid Preprocessor::EnterMainSourceFile() {\n  // ...\n  if (!PPOpts->PCHThroughHeader.empty()) {\n    // ...\n    if (!File) {\n      Diag(SourceLocation(), diag::err_pp_through_header_not_found) << PPOpts->PCHThroughHeader;"}}
},
},
["err_pp_through_header_not_seen"]={
["err_pp_through_header_not_seen"]={
[b]={{nil,K,"err_pp_through_header_not_seen"}},
[d]={{nil,K,"err_pp_through_header_not_seen"}},
[j]={{nil,K,"#include of \'%0\' not seen while attempting to %select{create|use}1 precompiled header"}},
[e]={{nil,K,"#include of \'%0\' not seen while attempting to %select{create|use}1 precompiled header"}},
[i]={{nil,K,{"#include of \'A\' not seen while attempting to ",{"create","use"}," precompiled header"}}},
[f]={{nil,K,{"#include of \'A\' not seen while attempting to ",{"create","use"}," precompiled header"}}},
[h]=mc,
[g]=rc,
[c]="\\#include of \'(.*?)\' not seen while attempting to (?:create|use) precompiled header",
[h]="\\#include of \'(.*?)\' not seen while attempting to (?:create|use) precompiled header",
[f]=a,
[b]=a,
[e]={{nil,K,p}},
[c]={{nil,K,p}},
[g]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers","[clang-cl, PCH] Implement support for MS-style PCH through headers\n\nImplement support for MS-style PCH through headers.\n\nThis enables support for /Yc and /Yu where the through header is either\non the command line or included in the source. It replaces the current\nsupport the requires the header also be specified with /FI.\n\nThis change adds a -cc1 option -pch-through-header that is used to either\nstart or stop compilation during PCH create or use.\n\nWhen creating a PCH, the compilation ends after compilation of the through\nheader.\n\nWhen using a PCH, tokens are skipped until after the through header is seen.\n\nPatch By: mikerice\nDifferential Revision: https://reviews.llvm.org/D46652\n\nllvm-svn: 336379"},
[j]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers","[clang-cl, PCH] Implement support for MS-style PCH through headers\n\nImplement support for MS-style PCH through headers.\n\nThis enables support for /Yc and /Yu where the through header is either\non the command line or included in the source. It replaces the current\nsupport the requires the header also be specified with /FI.\n\nThis change adds a -cc1 option -pch-through-header that is used to either\nstart or stop compilation during PCH create or use.\n\nWhen creating a PCH, the compilation ends after compilation of the through\nheader.\n\nWhen using a PCH, tokens are skipped until after the through header is seen.\n\nPatch By: mikerice\nDifferential Revision: https://reviews.llvm.org/D46652\n\nllvm-svn: 336379"},
[d]={{Hb,566,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // ...\n  if (creatingPCHWithThroughHeader() && !LeavingPCHThroughHeader) {\n    // ...\n    Diag(CurLexer->getFileLoc(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 0;"},{"clang/lib/Lex/Preprocessor.cpp",672,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n  // ...\n  if (ReachedMainFileEOF) {\n    if (UsingPCHThroughHeader)\n      Diag(SourceLocation(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 1;"}}
[i]={{Db,566,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // ...\n  if (creatingPCHWithThroughHeader() && !LeavingPCHThroughHeader) {\n    // ...\n    Diag(CurLexer->getFileLoc(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 0;"},{"clang/lib/Lex/Preprocessor.cpp",672,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n  // ...\n  if (ReachedMainFileEOF) {\n    if (UsingPCHThroughHeader)\n      Diag(SourceLocation(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 1;"}}
},
},
["err_pp_unclosed_pragma_unsafe_buffer_usage"]={
["err_pp_unclosed_pragma_unsafe_buffer_usage"]={
[b]="err_pp_unclosed_pragma_unsafe_buffer_usage",
[d]="err_pp_unclosed_pragma_unsafe_buffer_usage",
[j]="\'#pragma unsafe_buffer_usage\' was not ended",
[e]="\'#pragma unsafe_buffer_usage\' was not ended",
[i]="\'#pragma unsafe_buffer_usage\' was not ended",
[f]="\'#pragma unsafe_buffer_usage\' was not ended",
[h]=k,
[g]=k,
[c]="\'\\#pragma unsafe_buffer_usage\' was not ended",
[h]="\'\\#pragma unsafe_buffer_usage\' was not ended",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={ib,1625925174,kb,jb},
[j]={gb,1625925174,ib,jb},
[d]={{Hb,344,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // ...\n  if (IncludeMacroStack.empty() && isPPInSafeBufferOptOutRegion(UnclosedSafeBufferOptOutLoc)) {\n    // ...\n    Diag(UnclosedSafeBufferOptOutLoc, diag::err_pp_unclosed_pragma_unsafe_buffer_usage);"}},
[i]={{Db,344,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // ...\n  if (IncludeMacroStack.empty() && isPPInSafeBufferOptOutRegion(UnclosedSafeBufferOptOutLoc)) {\n    // ...\n    Diag(UnclosedSafeBufferOptOutLoc, diag::err_pp_unclosed_pragma_unsafe_buffer_usage);"}},
[l]={
[l]={
["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:33:35: error: \'#pragma unsafe_buffer_usage\' was not ended"}
["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:33:35: error: \'#pragma unsafe_buffer_usage\' was not ended"}
Line 2,605: Line 2,606:
},
},
["err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage"]={
["err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage"]={
[b]="err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage",
[d]="err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage",
[j]="not currently inside \'#pragma unsafe_buffer_usage\'",
[e]="not currently inside \'#pragma unsafe_buffer_usage\'",
[i]="not currently inside \'#pragma unsafe_buffer_usage\'",
[f]="not currently inside \'#pragma unsafe_buffer_usage\'",
[h]=k,
[g]=k,
[c]="not currently inside \'\\#pragma unsafe_buffer_usage\'",
[h]="not currently inside \'\\#pragma unsafe_buffer_usage\'",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={ib,1625925174,kb,jb},
[j]={gb,1625925174,ib,jb},
[d]={{H,1269,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    // ...\n    if (II->isStr(\"begin\")) {\n    // ...\n    } else if (II->isStr(\"end\")) {\n      if (PP.enterOrExitSafeBufferOptOutRegion(false, Loc))\n        PP.Diag(Loc, diag::err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage);"}},
[i]={{H,1269,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    // ...\n    if (II->isStr(\"begin\")) {\n    // ...\n    } else if (II->isStr(\"end\")) {\n      if (PP.enterOrExitSafeBufferOptOutRegion(false, Loc))\n        PP.Diag(Loc, diag::err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage);"}},
[l]={
[l]={
["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:13:35: error: not currently inside \'#pragma unsafe_buffer_usage\'"}
["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:13:35: error: not currently inside \'#pragma unsafe_buffer_usage\'"}
Line 2,619: Line 2,620:
},
},
["err_pp_unmatched_end_of_arc_cf_code_audited"]={
["err_pp_unmatched_end_of_arc_cf_code_audited"]={
[b]="err_pp_unmatched_end_of_arc_cf_code_audited",
[d]="err_pp_unmatched_end_of_arc_cf_code_audited",
[j]="not currently inside \'#pragma clang arc_cf_code_audited\'",
[e]="not currently inside \'#pragma clang arc_cf_code_audited\'",
[i]="not currently inside \'#pragma clang arc_cf_code_audited\'",
[f]="not currently inside \'#pragma clang arc_cf_code_audited\'",
[h]=k,
[g]=k,
[c]="not currently inside \'\\#pragma clang arc_cf_code_audited\'",
[h]="not currently inside \'\\#pragma clang arc_cf_code_audited\'",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={Yb,1317359532,Xb,Wb},
[j]={Yb,1317359532,Xb,Wb},
[d]={{H,1906,"/// PragmaARCCFCodeAuditedHandler -\n///  \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    // ...\n    if (IsBegin) {\n    // ...\n    } else {\n      // Complain about attempts to leave an audit that doesn\'t exist.\n      if (!BeginLoc.isValid()) {\n        PP.Diag(Loc, diag::err_pp_unmatched_end_of_arc_cf_code_audited);"}},
[i]={{H,1906,"/// PragmaARCCFCodeAuditedHandler -\n///  \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    // ...\n    if (IsBegin) {\n    // ...\n    } else {\n      // Complain about attempts to leave an audit that doesn\'t exist.\n      if (!BeginLoc.isValid()) {\n        PP.Diag(Loc, diag::err_pp_unmatched_end_of_arc_cf_code_audited);"}},
[l]={
[l]={
[tc]={"clang/test/Sema/pragma-arc-cf-code-audited.c:8:15: error: not currently inside \'#pragma clang arc_cf_code_audited\'"}
[sc]={"clang/test/Sema/pragma-arc-cf-code-audited.c:8:15: error: not currently inside \'#pragma clang arc_cf_code_audited\'"}
}
}
},
},
["err_pp_unmatched_end_of_assume_nonnull"]={
["err_pp_unmatched_end_of_assume_nonnull"]={
[b]="err_pp_unmatched_end_of_assume_nonnull",
[d]="err_pp_unmatched_end_of_assume_nonnull",
[j]="not currently inside \'#pragma clang assume_nonnull\'",
[e]="not currently inside \'#pragma clang assume_nonnull\'",
[i]="not currently inside \'#pragma clang assume_nonnull\'",
[f]="not currently inside \'#pragma clang assume_nonnull\'",
[h]=k,
[g]=k,
[c]="not currently inside \'\\#pragma clang assume_nonnull\'",
[h]="not currently inside \'\\#pragma clang assume_nonnull\'",
[f]=a,
[b]=a,
[e]=lc,
[c]=mc,
[g]={qc,1434738357,sc,uc},
[j]={nc,1434738357,oc,pc},
[d]={{H,1964,"/// PragmaAssumeNonNullHandler -\n///  \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    // ...\n    if (IsBegin) {\n    // ...\n    } else {\n      // Complain about attempts to leave an audit that doesn\'t exist.\n      if (!BeginLoc.isValid()) {\n        PP.Diag(Loc, diag::err_pp_unmatched_end_of_assume_nonnull);"}}
[i]={{H,1964,"/// PragmaAssumeNonNullHandler -\n///  \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    // ...\n    if (IsBegin) {\n    // ...\n    } else {\n      // Complain about attempts to leave an audit that doesn\'t exist.\n      if (!BeginLoc.isValid()) {\n        PP.Diag(Loc, diag::err_pp_unmatched_end_of_assume_nonnull);"}}
},
},
["err_pp_unterminated_conditional"]={
["err_pp_unterminated_conditional"]={
[b]="err_pp_unterminated_conditional",
[d]="err_pp_unterminated_conditional",
[j]="unterminated conditional directive",
[e]="unterminated conditional directive",
[i]="unterminated conditional directive",
[f]="unterminated conditional directive",
[h]=k,
[g]=k,
[c]="unterminated conditional directive",
[h]="unterminated conditional directive",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{"clang/lib/Lex/Lexer.cpp",3037,"/// LexEndOfFile - CurPtr points to the end of this file.  Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n  // ...\n  // If we are in a #if directive, emit an error.\n  while (!ConditionalStack.empty()) {\n    if (PP->getCodeCompletionFileLoc() != FileLoc)\n      PP->Diag(ConditionalStack.back().IfLoc, diag::err_pp_unterminated_conditional);"}},
[i]={{"clang/lib/Lex/Lexer.cpp",3037,"/// LexEndOfFile - CurPtr points to the end of this file.  Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n  // ...\n  // If we are in a #if directive, emit an error.\n  while (!ConditionalStack.empty()) {\n    if (PP->getCodeCompletionFileLoc() != FileLoc)\n      PP->Diag(ConditionalStack.back().IfLoc, diag::err_pp_unterminated_conditional);"}},
[l]={
[l]={
["clang/test/Lexer/eof-number.c"]={"clang/test/Lexer/eof-number.c:9:2: error: unterminated conditional directive"}
["clang/test/Lexer/eof-number.c"]={"clang/test/Lexer/eof-number.c:9:2: error: unterminated conditional directive"}
Line 2,658: Line 2,659:
},
},
["err_pp_used_poisoned_id"]={
["err_pp_used_poisoned_id"]={
[b]="err_pp_used_poisoned_id",
[d]="err_pp_used_poisoned_id",
[j]="attempt to use a poisoned identifier",
[e]="attempt to use a poisoned identifier",
[i]="attempt to use a poisoned identifier",
[f]="attempt to use a poisoned identifier",
[h]=k,
[g]=k,
[c]="attempt to use a poisoned identifier",
[h]="attempt to use a poisoned identifier",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{"clang/lib/Lex/Preprocessor.cpp",768,"void Preprocessor::HandlePoisonedIdentifier(Token &Identifier) {\n  // ...\n  if (it == PoisonReasons.end())\n    Diag(Identifier, diag::err_pp_used_poisoned_id);"}},
[i]={{"clang/lib/Lex/Preprocessor.cpp",768,"void Preprocessor::HandlePoisonedIdentifier(Token &Identifier) {\n  // ...\n  if (it == PoisonReasons.end())\n    Diag(Identifier, diag::err_pp_used_poisoned_id);"}},
[l]={
[l]={
["clang/test/Preprocessor/pragma_poison.c"]={"clang/test/Preprocessor/pragma_poison.c:4:1: error: attempt to use a poisoned identifier","clang/test/Preprocessor/pragma_poison.c:9:3: error: attempt to use a poisoned identifier"}
["clang/test/Preprocessor/pragma_poison.c"]={"clang/test/Preprocessor/pragma_poison.c:4:1: error: attempt to use a poisoned identifier","clang/test/Preprocessor/pragma_poison.c:9:3: error: attempt to use a poisoned identifier"}
Line 2,672: Line 2,673:
},
},
["err_pp_vaopt_nested_use"]={
["err_pp_vaopt_nested_use"]={
[b]={{nil,B,"err_pp_vaopt_nested_use"}},
[d]={{nil,B,"err_pp_vaopt_nested_use"}},
[j]={{nil,B,"__VA_OPT__ cannot be nested within its own replacement tokens"}},
[e]={{nil,B,"__VA_OPT__ cannot be nested within its own replacement tokens"}},
[i]={{nil,B,"__VA_OPT__ cannot be nested within its own replacement tokens"}},
[f]={{nil,B,"__VA_OPT__ cannot be nested within its own replacement tokens"}},
[h]=k,
[g]=k,
[c]="__VA_OPT__ cannot be nested within its own replacement tokens",
[h]="__VA_OPT__ cannot be nested within its own replacement tokens",
[f]=a,
[b]=a,
[e]={{nil,B,p}},
[c]={{nil,B,p}},
[g]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)","[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)\n\nThis patch implements an extension to the preprocessor:\n\n__VA_OPT__(contents) --> which expands into its contents if variadic arguments are supplied to the parent macro, or behaves as an empty token if none.\n\n  - Currently this feature is only enabled for C++2a (this could be enabled, with some careful tweaks, for other dialects with the appropriate extension or compatibility warnings)\n\n  - The patch was reviewed here: https://reviews.llvm.org/D35782 and asides from the above (and moving some of the definition and expansion recognition logic into the corresponding state machines), I believe I incorporated all of Richard\'s suggestions.\n\nA few technicalities (most of which were clarified through private correspondence between rsmith, hubert and thomas) are worth mentioning.  Given:\n\n    #define F(a,...) a #__VA_OPT__(a ## a)  a ## __VA_OPT__(__VA_ARGS__)\n\n    - The call F(,) Does not supply any tokens for the variadic arguments and hence VA_OPT behaves as a placeholder.\n    - When expanding VA_OPT (for e.g. F(,1) token pasting occurs eagerly within its contents if the contents need to be stringified.\n    - A hash or a hashhash prior to VA_OPT does not inhibit expansion of arguments if they are the first token within VA_OPT.\n    - When a variadic argument is supplied, argument substitution occurs within the contents as does stringification - and these resulting tokens are inserted back into the macro expansions token stream just prior to the entire stream being rescanned and concatenated.\n\nSee wg21.link/P0306 for further details on the feature.\n\n\nAcknowledgment: This patch would have been poorer if not for Richard Smith\'s usual thoughtful analysis and feedback.\nllvm-svn: 315840"},
[j]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)","[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)\n\nThis patch implements an extension to the preprocessor:\n\n__VA_OPT__(contents) --> which expands into its contents if variadic arguments are supplied to the parent macro, or behaves as an empty token if none.\n\n  - Currently this feature is only enabled for C++2a (this could be enabled, with some careful tweaks, for other dialects with the appropriate extension or compatibility warnings)\n\n  - The patch was reviewed here: https://reviews.llvm.org/D35782 and asides from the above (and moving some of the definition and expansion recognition logic into the corresponding state machines), I believe I incorporated all of Richard\'s suggestions.\n\nA few technicalities (most of which were clarified through private correspondence between rsmith, hubert and thomas) are worth mentioning.  Given:\n\n    #define F(a,...) a #__VA_OPT__(a ## a)  a ## __VA_OPT__(__VA_ARGS__)\n\n    - The call F(,) Does not supply any tokens for the variadic arguments and hence VA_OPT behaves as a placeholder.\n    - When expanding VA_OPT (for e.g. F(,1) token pasting occurs eagerly within its contents if the contents need to be stringified.\n    - A hash or a hashhash prior to VA_OPT does not inhibit expansion of arguments if they are the first token within VA_OPT.\n    - When a variadic argument is supplied, argument substitution occurs within the contents as does stringification - and these resulting tokens are inserted back into the macro expansions token stream just prior to the entire stream being rescanned and concatenated.\n\nSee wg21.link/P0306 for further details on the feature.\n\n\nAcknowledgment: This patch would have been poorer if not for Richard Smith\'s usual thoughtful analysis and feedback.\nllvm-svn: 315840"},
[d]={{z,2910,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  // ...\n  } else {\n    // ...\n    while (Tok.isNot(tok::eod)) {\n      // ...\n      if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n        // ...\n        if (VAOCtx.isVAOptToken(Tok)) {\n          // If we\'re already within a VAOPT, emit an error.\n          if (VAOCtx.isInVAOpt()) {\n            Diag(Tok, diag::err_pp_vaopt_nested_use);"}},
[i]={{z,2910,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  // ...\n  } else {\n    // ...\n    while (Tok.isNot(tok::eod)) {\n      // ...\n      if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n        // ...\n        if (VAOCtx.isVAOptToken(Tok)) {\n          // If we\'re already within a VAOPT, emit an error.\n          if (VAOCtx.isInVAOpt()) {\n            Diag(Tok, diag::err_pp_vaopt_nested_use);"}},
[l]={
[l]={
["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:25:28: error: __VA_OPT__ cannot be nested within its own replacement tokens"}
["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:25:28: error: __VA_OPT__ cannot be nested within its own replacement tokens"}
Line 2,686: Line 2,687:
},
},
["err_pp_visibility_non_macro"]={
["err_pp_visibility_non_macro"]={
[b]="err_pp_visibility_non_macro",
[d]="err_pp_visibility_non_macro",
[j]="no macro named %0",
[e]="no macro named %0",
[i]="no macro named A",
[f]="no macro named A",
[h]=k,
[g]=k,
[c]="no macro named (.*?)",
[h]="no macro named (.*?)",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={"ebf004990163",1318865549,"For modules, all macros that aren\'t include guards are implicitly","For modules, all macros that aren\'t include guards are implicitly\npublic. Add a __private_macro__ directive to hide a macro, similar to\nthe __module_private__ declaration specifier.\n\nllvm-svn: 142188"},
[j]={"ebf004990163",1318865549,"For modules, all macros that aren\'t include guards are implicitly","For modules, all macros that aren\'t include guards are implicitly\npublic. Add a __private_macro__ directive to hide a macro, similar to\nthe __module_private__ declaration specifier.\n\nllvm-svn: 142188"},
[d]={{z,1715,"/// Handle a #public directive.\nvoid Preprocessor::HandleMacroPublicDirective(Token &Tok) {\n  // ...\n  // If the macro is not defined, this is an error.\n  if (!MD) {\n    Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{z,1742,"/// Handle a #private directive.\nvoid Preprocessor::HandleMacroPrivateDirective() {\n  // ...\n  // If the macro is not defined, this is an error.\n  if (!MD) {\n    Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{H,2026,"/// This handles parsing pragmas that take a macro name and optional message\nstatic IdentifierInfo *HandleMacroAnnotationPragma(Preprocessor &PP, Token &Tok, const char *Pragma, std::string &MessageString) {\n  // ...\n  if (!II->hasMacroDefinition()) {\n    PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"},{H,2114,"/// \"\\#pragma clang final(...)\"\n///\n/// The syntax is\n/// \\code\n///  #pragma clang final(MACRO_NAME)\n/// \\endcode\nstruct PragmaFinalHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (!II->hasMacroDefinition()) {\n      PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"}},
[i]={{z,1715,"/// Handle a #public directive.\nvoid Preprocessor::HandleMacroPublicDirective(Token &Tok) {\n  // ...\n  // If the macro is not defined, this is an error.\n  if (!MD) {\n    Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{z,1742,"/// Handle a #private directive.\nvoid Preprocessor::HandleMacroPrivateDirective() {\n  // ...\n  // If the macro is not defined, this is an error.\n  if (!MD) {\n    Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{H,2026,"/// This handles parsing pragmas that take a macro name and optional message\nstatic IdentifierInfo *HandleMacroAnnotationPragma(Preprocessor &PP, Token &Tok, const char *Pragma, std::string &MessageString) {\n  // ...\n  if (!II->hasMacroDefinition()) {\n    PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"},{H,2114,"/// \"\\#pragma clang final(...)\"\n///\n/// The syntax is\n/// \\code\n///  #pragma clang final(MACRO_NAME)\n/// \\endcode\nstruct PragmaFinalHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (!II->hasMacroDefinition()) {\n      PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"}},
[l]={
[l]={
["clang/test/Lexer/deprecate-macro.c"]={"clang/test/Lexer/deprecate-macro.c:10:26: error: no macro named \'foo\'","clang/test/Lexer/deprecate-macro.c:52:26: error: no macro named \'main\'"}
["clang/test/Lexer/deprecate-macro.c"]={"clang/test/Lexer/deprecate-macro.c:10:26: error: no macro named \'foo\'","clang/test/Lexer/deprecate-macro.c:52:26: error: no macro named \'main\'"}
Line 2,700: Line 2,701:
},
},
["err_ppc_builtin_requires_abi"]={
["err_ppc_builtin_requires_abi"]={
[b]={{nil,F,"err_ppc_builtin_requires_abi"}},
[d]={{nil,F,"err_ppc_builtin_requires_abi"}},
[j]={{nil,F,"this builtin requires ABI -mabi=%0"}},
[e]={{nil,F,"this builtin requires ABI -mabi=%0"}},
[i]={{nil,F,"this builtin requires ABI -mabi=A"}},
[f]={{nil,F,"this builtin requires ABI -mabi=A"}},
[h]=k,
[g]=k,
[c]="this builtin requires ABI \\-mabi\\=(.*?)",
[h]="this builtin requires ABI \\-mabi\\=(.*?)",
[f]=a,
[b]=a,
[e]={{nil,F,m}},
[c]={{nil,F,m}},
[g]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[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"},
[j]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[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"},
[d]={{I,4281,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case PPC::BI__builtin_pack_longdouble:\n    if (&TI.getLongDoubleFormat() != &llvm::APFloat::PPCDoubleDouble())\n      return Diag(TheCall->getBeginLoc(), diag::err_ppc_builtin_requires_abi) << \"ibmlongdouble\";"}}
[i]={{I,4281,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case PPC::BI__builtin_pack_longdouble:\n    if (&TI.getLongDoubleFormat() != &llvm::APFloat::PPCDoubleDouble())\n      return Diag(TheCall->getBeginLoc(), diag::err_ppc_builtin_requires_abi) << \"ibmlongdouble\";"}}
},
},
["err_ppc_invalid_test_data_class_type"]={
["err_ppc_invalid_test_data_class_type"]={
[b]={{nil,F,"err_ppc_invalid_test_data_class_type"}},
[d]={{nil,F,"err_ppc_invalid_test_data_class_type"}},
[j]={{nil,mb,"expected a \'float\', \'double\' or \'__float128\' for the first argument"},{C,F,"expected a \'float\' or \'double\' for the first argument"}},
[e]={{nil,tb,"expected a \'float\', \'double\' or \'__float128\' for the first argument"},{C,F,"expected a \'float\' or \'double\' for the first argument"}},
[i]={{nil,mb,"expected a \'float\', \'double\' or \'__float128\' for the first argument"},{C,F,"expected a \'float\' or \'double\' for the first argument"}},
[f]={{nil,tb,"expected a \'float\', \'double\' or \'__float128\' for the first argument"},{C,F,"expected a \'float\' or \'double\' for the first argument"}},
[h]=k,
[g]=k,
[c]="expected a \'float\', \'double\' or \'__float128\' for the first argument",
[h]="expected a \'float\', \'double\' or \'__float128\' for the first argument",
[f]=a,
[b]=a,
[e]={{nil,F,m}},
[c]={{nil,F,m}},
[g]={"3dbcea8b957a",1615397021,"Reland [clang] Check unsupported types in expressions","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"},
[j]={"3dbcea8b957a",1615397021,"Reland [clang] Check unsupported types in expressions","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"},
[d]={{I,4361,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case PPC::BI__builtin_ppc_test_data_class: {\n    // ...\n    if (ArgType != QualType(Context.FloatTy) && ArgType != QualType(Context.DoubleTy) && ArgType != QualType(Context.Float128Ty))\n      return Diag(TheCall->getBeginLoc(), diag::err_ppc_invalid_test_data_class_type);"}},
[i]={{I,4361,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case PPC::BI__builtin_ppc_test_data_class: {\n    // ...\n    if (ArgType != QualType(Context.FloatTy) && ArgType != QualType(Context.DoubleTy) && ArgType != QualType(Context.Float128Ty))\n      return Diag(TheCall->getBeginLoc(), diag::err_ppc_invalid_test_data_class_type);"}},
[l]={
[l]={
["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-error.c:47:10: error: expected a \'float\', \'double\' or \'__float128\' for the first argument"}
["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-error.c:47:10: error: expected a \'float\', \'double\' or \'__float128\' for the first argument"}
Line 2,725: Line 2,726:
},
},
["err_ppc_invalid_use_mma_type"]={
["err_ppc_invalid_use_mma_type"]={
[b]={{nil,A,"err_ppc_invalid_use_mma_type"}},
[d]={{nil,A,"err_ppc_invalid_use_mma_type"}},
[j]={{nil,A,"invalid use of PPC MMA type"}},
[e]={{nil,A,"invalid use of PPC MMA type"}},
[i]={{nil,A,"invalid use of PPC MMA type"}},
[f]={{nil,A,"invalid use of PPC MMA type"}},
[h]=k,
[g]=k,
[c]="invalid use of PPC MMA type",
[h]="invalid use of PPC MMA type",
[f]=a,
[b]=a,
[e]={{nil,A,m}},
[c]={{nil,A,m}},
[g]={Tb,1590001902,Ub,Vb},
[j]={Vb,1590001902,Ub,Zb},
[d]={{I,4410,"#include \"clang/Basic/PPCTypes.def\"\n  ) {\n    Diag(TypeLoc, diag::err_ppc_invalid_use_mma_type);"}},
[i]={{I,4410,"#include \"clang/Basic/PPCTypes.def\"\n  ) {\n    Diag(TypeLoc, diag::err_ppc_invalid_use_mma_type);"}},
[l]={
[l]={
["clang/test/Sema/ppc-pair-mma-types.c"]={"clang/test/Sema/ppc-pair-mma-types.c:17:31: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:22:37: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:27:28: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:33:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:35:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:38:12: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:40:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:44:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:45:21: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:48:6: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:55:17: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:112:31: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:117:37: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:122:28: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:128:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:130:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:133:12: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:135:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:139:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:140:21: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:143:6: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:149:17: error: invalid use of PPC MMA type"}
["clang/test/Sema/ppc-pair-mma-types.c"]={"clang/test/Sema/ppc-pair-mma-types.c:17:31: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:22:37: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:27:28: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:33:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:35:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:38:12: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:40:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:44:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:45:21: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:48:6: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:55:17: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:112:31: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:117:37: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:122:28: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:128:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:130:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:133:12: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:135:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:139:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:140:21: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:143:6: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:149:17: error: invalid use of PPC MMA type"}
Line 2,739: Line 2,740:
},
},
["err_pragma_alloc_text_c_linkage"]={
["err_pragma_alloc_text_c_linkage"]={
[b]={{nil,C,"err_pragma_alloc_text_c_linkage"}},
[d]={{nil,C,"err_pragma_alloc_text_c_linkage"}},
[j]={{nil,C,"\'#pragma alloc_text\' is applicable only to functions with C linkage"}},
[e]={{nil,C,"\'#pragma alloc_text\' is applicable only to functions with C linkage"}},
[i]={{nil,C,"\'#pragma alloc_text\' is applicable only to functions with C linkage"}},
[f]={{nil,C,"\'#pragma alloc_text\' is applicable only to functions with C linkage"}},
[h]=k,
[g]=k,
[c]="\'\\#pragma alloc_text\' is applicable only to functions with C linkage",
[h]="\'\\#pragma alloc_text\' is applicable only to functions with C linkage",
[f]=a,
[b]=a,
[e]={{nil,C,m}},
[c]={{nil,C,m}},
[g]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
[j]={"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"},
[d]={{J,816,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  // ...\n  for (auto &Function : Functions) {\n    // ...\n    if (getLangOpts().CPlusPlus && !FD->isInExternCContext()) {\n      Diag(Loc, diag::err_pragma_alloc_text_c_linkage);"}},
[i]={{J,816,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  // ...\n  for (auto &Function : Functions) {\n    // ...\n    if (getLangOpts().CPlusPlus && !FD->isInExternCContext()) {\n      Diag(Loc, diag::err_pragma_alloc_text_c_linkage);"}},
[l]={
[l]={
["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:10:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage","clang/test/Sema/pragma-ms-alloc-text.cpp:35:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage","clang/test/Sema/pragma-ms-alloc-text.cpp:55:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage"}
["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:10:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage","clang/test/Sema/pragma-ms-alloc-text.cpp:35:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage","clang/test/Sema/pragma-ms-alloc-text.cpp:55:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage"}
Line 2,753: Line 2,754:
},
},
["err_pragma_alloc_text_not_function"]={
["err_pragma_alloc_text_not_function"]={
[b]={{nil,C,"err_pragma_alloc_text_not_function"}},
[d]={{nil,C,"err_pragma_alloc_text_not_function"}},
[j]={{nil,C,"\'#pragma alloc_text\' is applicable only to functions"}},
[e]={{nil,C,"\'#pragma alloc_text\' is applicable only to functions"}},
[i]={{nil,C,"\'#pragma alloc_text\' is applicable only to functions"}},
[f]={{nil,C,"\'#pragma alloc_text\' is applicable only to functions"}},
[h]=k,
[g]=k,
[c]="\'\\#pragma alloc_text\' is applicable only to functions",
[h]="\'\\#pragma alloc_text\' is applicable only to functions",
[f]=a,
[b]=a,
[e]={{nil,C,m}},
[c]={{nil,C,m}},
[g]={ib,1625925174,kb,jb},
[j]={gb,1625925174,ib,jb},
[d]={{J,811,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  // ...\n  for (auto &Function : Functions) {\n    // ...\n    if (!FD) {\n      Diag(Loc, diag::err_pragma_alloc_text_not_function);"}},
[i]={{J,811,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  // ...\n  for (auto &Function : Functions) {\n    // ...\n    if (!FD) {\n      Diag(Loc, diag::err_pragma_alloc_text_not_function);"}},
[l]={
[l]={
["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:59:23: error: \'#pragma alloc_text\' is applicable only to functions"}
["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:59:23: error: \'#pragma alloc_text\' is applicable only to functions"}
Line 2,767: Line 2,768:
},
},
["err_pragma_attr_attr_no_push"]={
["err_pragma_attr_attr_no_push"]={
[b]={{nil,u,"err_pragma_attr_attr_no_push"}},
[d]={{nil,u,"err_pragma_attr_attr_no_push"}},
[j]={{nil,u,"\'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'"}},
[e]={{nil,u,"\'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'"}},
[i]={{nil,u,"\'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'"}},
[f]={{nil,u,"\'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'"}},
[h]=k,
[g]=k,
[c]="\'\\#pragma clang attribute\' attribute with no matching \'\\#pragma clang attribute push\'",
[h]="\'\\#pragma clang attribute\' attribute with no matching \'\\#pragma clang attribute push\'",
[f]=a,
[b]=a,
[e]={{nil,u,m}},
[c]={{nil,u,m}},
[g]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute","Support for groups of attributes in #pragma clang attribute\n\nThis commit enables pushing an empty #pragma clang attribute push, then adding\nmultiple attributes to it, then popping them all with #pragma clang attribute\npop, just like #pragma clang diagnostic. We still support the current way of\nadding these, #pragma clang attribute push(__attribute__((...))), by treating it\nlike a combined push/attribute. This is needed to create macros like:\n\nDO_SOMETHING_BEGIN(attr1, attr2, attr3)\n// ...\nDO_SOMETHING_END\n\nrdar://45496947\n\nDifferential revision: https://reviews.llvm.org/D53621\n\nllvm-svn: 345486"},
[j]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute","Support for groups of attributes in #pragma clang attribute\n\nThis commit enables pushing an empty #pragma clang attribute push, then adding\nmultiple attributes to it, then popping them all with #pragma clang attribute\npop, just like #pragma clang diagnostic. We still support the current way of\nadding these, #pragma clang attribute push(__attribute__((...))), by treating it\nlike a combined push/attribute. This is needed to create macros like:\n\nDO_SOMETHING_BEGIN(attr1, attr2, attr3)\n// ...\nDO_SOMETHING_END\n\nrdar://45496947\n\nDifferential revision: https://reviews.llvm.org/D53621\n\nllvm-svn: 345486"},
[d]={{J,1066,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // ...\n  if (PragmaAttributeStack.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_attr_attr_no_push);"}},
[i]={{J,1066,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // ...\n  if (PragmaAttributeStack.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_attr_attr_no_push);"}},
[l]={
[l]={
["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:62:15: error: \'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'"}
["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:62:15: error: \'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'"}
Line 2,781: Line 2,782:
},
},
["err_pragma_attribute_duplicate_subject"]={
["err_pragma_attribute_duplicate_subject"]={
[b]={{nil,n,"err_pragma_attribute_duplicate_subject"}},
[d]={{nil,n,"err_pragma_attribute_duplicate_subject"}},
[j]={{nil,n,"duplicate attribute subject matcher \'%0\'"}},
[e]={{nil,n,"duplicate attribute subject matcher \'%0\'"}},
[i]={{nil,n,"duplicate attribute subject matcher \'A\'"}},
[f]={{nil,n,"duplicate attribute subject matcher \'A\'"}},
[h]=k,
[g]=k,
[c]="duplicate attribute subject matcher \'(.*?)\'",
[h]="duplicate attribute subject matcher \'(.*?)\'",
[f]=a,
[b]=a,
[e]={{nil,n,y}},
[c]={{nil,n,y}},
[g]={R,1492508507,T,S},
[j]={R,1492508507,U,T},
[d]={{v,1624,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  // ...\n  do {\n    // ...\n    if (isAbstractAttrMatcherRule(PrimaryRule)) {\n    // ...\n    } else if (Parens.consumeOpen()) {\n      if (!SubjectMatchRules.insert(std::make_pair(PrimaryRule, SourceRange(RuleLoc, RuleLoc))).second)\n        Diag(RuleLoc, diag::err_pragma_attribute_duplicate_subject) << Name << FixItHint::CreateRemoval(SourceRange(RuleLoc, Tok.is(tok::comma) ? Tok.getLocation() : RuleLoc));"},{v,1679,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  // ...\n  do {\n    // ...\n    if (!SubjectMatchRules.insert(std::make_pair(SubRule, SourceRange(RuleLoc, RuleEndLoc))).second) {\n      Diag(RuleLoc, diag::err_pragma_attribute_duplicate_subject) << attr::getSubjectMatchRuleSpelling(SubRule) << FixItHint::CreateRemoval(SourceRange(RuleLoc, Tok.is(tok::comma) ? Tok.getLocation() : RuleEndLoc));"}},
[i]={{v,1624,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  // ...\n  do {\n    // ...\n    if (isAbstractAttrMatcherRule(PrimaryRule)) {\n    // ...\n    } else if (Parens.consumeOpen()) {\n      if (!SubjectMatchRules.insert(std::make_pair(PrimaryRule, SourceRange(RuleLoc, RuleLoc))).second)\n        Diag(RuleLoc, diag::err_pragma_attribute_duplicate_subject) << Name << FixItHint::CreateRemoval(SourceRange(RuleLoc, Tok.is(tok::comma) ? Tok.getLocation() : RuleLoc));"},{v,1679,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  // ...\n  do {\n    // ...\n    if (!SubjectMatchRules.insert(std::make_pair(SubRule, SourceRange(RuleLoc, RuleEndLoc))).second) {\n      Diag(RuleLoc, diag::err_pragma_attribute_duplicate_subject) << attr::getSubjectMatchRuleSpelling(SubRule) << FixItHint::CreateRemoval(SourceRange(RuleLoc, Tok.is(tok::comma) ? Tok.getLocation() : RuleEndLoc));"}},
[l]={
[l]={
[X]={"clang/test/Parser/pragma-attribute.cpp:93:91: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:94:91: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:94:101: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:95:97: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:96:87: error: duplicate attribute subject matcher \'enum\'","clang/test/Parser/pragma-attribute.cpp:98:102: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:99:112: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:99:133: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:100:113: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'","clang/test/Parser/pragma-attribute.cpp:101:113: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'","clang/test/Parser/pragma-attribute.cpp:101:151: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'"}
[Y]={"clang/test/Parser/pragma-attribute.cpp:93:91: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:94:91: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:94:101: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:95:97: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:96:87: error: duplicate attribute subject matcher \'enum\'","clang/test/Parser/pragma-attribute.cpp:98:102: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:99:112: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:99:133: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:100:113: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'","clang/test/Parser/pragma-attribute.cpp:101:113: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'","clang/test/Parser/pragma-attribute.cpp:101:151: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'"}
}
}
},
},
["err_pragma_attribute_expected_attribute"]={
["err_pragma_attribute_expected_attribute"]={
[b]={{nil,n,"err_pragma_attribute_expected_attribute"}},
[d]={{nil,n,"err_pragma_attribute_expected_attribute"}},
[j]={{nil,n,"expected an attribute after \'(\'"}},
[e]={{nil,n,"expected an attribute after \'(\'"}},
[i]={{nil,n,"expected an attribute after \'(\'"}},
[f]={{nil,n,"expected an attribute after \'(\'"}},
[h]=k,
[g]=k,
[c]="expected an attribute after \'\\(\'",
[h]="expected an attribute after \'\\(\'",
[f]=a,
[b]=a,
[e]={{nil,n,y}},
[c]={{nil,n,y}},
[g]={R,1492508507,T,S},
[j]={R,1492508507,U,T},
[d]={{v,3931,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  // Parse the actual attribute.\n  if ((Info->Action == PragmaAttributeInfo::Push && Tok.isNot(tok::eod)) || Info->Action == PragmaAttributeInfo::Attribute) {\n    // ...\n    if (AttributeTokens.empty()) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_attribute);"}},
[i]={{v,3931,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  // Parse the actual attribute.\n  if ((Info->Action == PragmaAttributeInfo::Push && Tok.isNot(tok::eod)) || Info->Action == PragmaAttributeInfo::Attribute) {\n    // ...\n    if (AttributeTokens.empty()) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_attribute);"}},
[l]={
[l]={
[X]={"clang/test/Parser/pragma-attribute.cpp:109:85: error: expected an attribute after \'(\'","clang/test/Parser/pragma-attribute.cpp:111:31: error: expected an attribute after \'(\'"}
[Y]={"clang/test/Parser/pragma-attribute.cpp:109:85: error: expected an attribute after \'(\'","clang/test/Parser/pragma-attribute.cpp:111:31: error: expected an attribute after \'(\'"}
}
}
},
},
["err_pragma_attribute_expected_attribute_name"]={
["err_pragma_attribute_expected_attribute_name"]={
[b]={{nil,n,"err_pragma_attribute_expected_attribute_name"}},
[d]={{nil,n,"err_pragma_attribute_expected_attribute_name"}},
[j]={{nil,n,"expected identifier that represents an attribute name"}},
[e]={{nil,n,"expected identifier that represents an attribute name"}},
[i]={{nil,n,"expected identifier that represents an attribute name"}},
[f]={{nil,n,"expected identifier that represents an attribute name"}},
[h]=k,
[g]=k,
[c]="expected identifier that represents an attribute name",
[h]="expected identifier that represents an attribute name",
[f]=a,
[b]=a,
[e]={{nil,n,y}},
[c]={{nil,n,y}},
[g]={R,1492508507,T,S},
[j]={R,1492508507,U,T},
[d]={{v,1847,"void Parser::HandlePragmaAttribute() {\n  // ...\n  if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n  // ...\n  } else if (Tok.is(tok::kw___attribute)) {\n    // ...\n    // Parse the comma-separated list of attributes.\n    do {\n      if (Tok.isNot(tok::identifier)) {\n        Diag(Tok, diag::err_pragma_attribute_expected_attribute_name);"}},
[i]={{v,1847,"void Parser::HandlePragmaAttribute() {\n  // ...\n  if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n  // ...\n  } else if (Tok.is(tok::kw___attribute)) {\n    // ...\n    // Parse the comma-separated list of attributes.\n    do {\n      if (Tok.isNot(tok::identifier)) {\n        Diag(Tok, diag::err_pragma_attribute_expected_attribute_name);"}},
[l]={
[l]={
[X]={"clang/test/Parser/pragma-attribute.cpp:121:46: error: expected identifier that represents an attribute name","clang/test/Parser/pragma-attribute.cpp:171:45: error: expected identifier that represents an attribute name","clang/test/Parser/pragma-attribute.cpp:217:65: error: expected identifier that represents an attribute name"}
[Y]={"clang/test/Parser/pragma-attribute.cpp:121:46: error: expected identifier that represents an attribute name","clang/test/Parser/pragma-attribute.cpp:171:45: error: expected identifier that represents an attribute name","clang/test/Parser/pragma-attribute.cpp:217:65: error: expected identifier that represents an attribute name"}
}
}
},
},
["err_pragma_attribute_expected_attribute_syntax"]={
["err_pragma_attribute_expected_attribute_syntax"]={
[b]={{nil,n,"err_pragma_attribute_expected_attribute_syntax"}},
[d]={{nil,n,"err_pragma_attribute_expected_attribute_syntax"}},
[j]={{nil,n,"expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax"}},
[e]={{nil,n,"expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax"}},
[i]={{nil,n,"expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax"}},
[f]={{nil,n,"expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax"}},
[h]=k,
[g]=k,
[c]="expected an attribute that is specified using the GNU, C\\+\\+11 or \'__declspec\' syntax",
[h]="expected an attribute that is specified using the GNU, C\\+\\+11 or \'__declspec\' syntax",
[f]=a,
[b]=a,
[e]={{nil,n,y}},
[c]={{nil,n,y}},
[g]={R,1492508507,T,S},
[j]={R,1492508507,U,T},
[d]={{v,1872,"void Parser::HandlePragmaAttribute() {\n  // ...\n  if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n  // ...\n  } else if (Tok.is(tok::kw___attribute)) {\n  // ...\n  } else if (Tok.is(tok::kw___declspec)) {\n  // ...\n  } else {\n    Diag(Tok, diag::err_pragma_attribute_expected_attribute_syntax);"}},
[i]={{v,1872,"void Parser::HandlePragmaAttribute() {\n  // ...\n  if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n  // ...\n  } else if (Tok.is(tok::kw___attribute)) {\n  // ...\n  } else if (Tok.is(tok::kw___declspec)) {\n  // ...\n  } else {\n    Diag(Tok, diag::err_pragma_attribute_expected_attribute_syntax);"}},
[l]={
[l]={
[X]={"clang/test/Parser/pragma-attribute.cpp:176:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:177:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:178:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:180:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax"}
[Y]={"clang/test/Parser/pragma-attribute.cpp:176:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:177:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:178:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:180:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax"}
}
}
},
},
["err_pragma_attribute_expected_period"]={
["err_pragma_attribute_expected_period"]={
[b]={{nil,u,"err_pragma_attribute_expected_period"}},
[d]={{nil,u,"err_pragma_attribute_expected_period"}},
[j]={{nil,u,"expected \'.\' after pragma attribute namespace %0"}},
[e]={{nil,u,"expected \'.\' after pragma attribute namespace %0"}},
[i]={{nil,u,"expected \'.\' after pragma attribute namespace A"}},
[f]={{nil,u,"expected \'.\' after pragma attribute namespace A"}},
[h]=k,
[g]=k,
[c]="expected \'\\.\' after pragma attribute namespace (.*?)",
[h]="expected \'\\.\' after pragma attribute namespace (.*?)",
[f]=a,
[b]=a,
[e]={{nil,u,y}},
[c]={{nil,u,y}},
[g]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","Add support for namespaces on #pragma clang attribute\n\nNamespaces are introduced by adding an \"identifier.\" before a\npush/pop directive. Pop directives with namespaces can only pop a\nattribute group that was pushed with the same namespace. Push and pop\ndirectives that don\'t opt into namespaces have the same semantics.\n\nThis is necessary to prevent a pitfall of using multiple #pragma\nclang attribute directives spread out in a large file, particularly\nwhen macros are involved. It isn\'t easy to see which pop corripsonds\nto which push, so its easy to inadvertently pop the wrong group.\n\nDifferential revision: https://reviews.llvm.org/D55628\n\nllvm-svn: 349845"},
[j]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","Add support for namespaces on #pragma clang attribute\n\nNamespaces are introduced by adding an \"identifier.\" before a\npush/pop directive. Pop directives with namespaces can only pop a\nattribute group that was pushed with the same namespace. Push and pop\ndirectives that don\'t opt into namespaces have the same semantics.\n\nThis is necessary to prevent a pitfall of using multiple #pragma\nclang attribute directives spread out in a large file, particularly\nwhen macros are involved. It isn\'t easy to see which pop corripsonds\nto which push, so its easy to inadvertently pop the wrong group.\n\nDifferential revision: https://reviews.llvm.org/D55628\n\nllvm-svn: 349845"},
[d]={{v,3866,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  // Parse the optional namespace followed by a period.\n  if (Tok.is(tok::identifier)) {\n    // ...\n    if (!II->isStr(\"push\") && !II->isStr(\"pop\")) {\n      // ...\n      if (!Tok.is(tok::period)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_period) << II;"}},
[i]={{v,3866,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  // Parse the optional namespace followed by a period.\n  if (Tok.is(tok::identifier)) {\n    // ...\n    if (!II->isStr(\"push\") && !II->isStr(\"pop\")) {\n      // ...\n      if (!Tok.is(tok::period)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_period) << II;"}},
[l]={
[l]={
[X]={"clang/test/Parser/pragma-attribute.cpp:105:110: error: expected \'.\' after pragma attribute namespace \'pushpop\'"}
[Y]={"clang/test/Parser/pragma-attribute.cpp:105:110: error: expected \'.\' after pragma attribute namespace \'pushpop\'"}
}
}
},
},
["err_pragma_attribute_expected_push_pop_paren"]={
["err_pragma_attribute_expected_push_pop_paren"]={
[b]={{nil,u,"err_pragma_attribute_expected_push_pop_paren"}},
[d]={{nil,u,"err_pragma_attribute_expected_push_pop_paren"}},
[j]={{nil,u,"expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'"}},
[e]={{nil,u,"expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'"}},
[i]={{nil,u,"expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'"}},
[f]={{nil,u,"expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'"}},
[h]=k,
[g]=k,
[c]="expected \'push\', \'pop\', or \'\\(\' after \'\\#pragma clang attribute\'",
[h]="expected \'push\', \'pop\', or \'\\(\' after \'\\#pragma clang attribute\'",
[f]=a,
[b]=a,
[e]={{nil,u,y}},
[c]={{nil,u,y}},
[g]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute","Support for groups of attributes in #pragma clang attribute\n\nThis commit enables pushing an empty #pragma clang attribute push, then adding\nmultiple attributes to it, then popping them all with #pragma clang attribute\npop, just like #pragma clang diagnostic. We still support the current way of\nadding these, #pragma clang attribute push(__attribute__((...))), by treating it\nlike a combined push/attribute. This is needed to create macros like:\n\nDO_SOMETHING_BEGIN(attr1, attr2, attr3)\n// ...\nDO_SOMETHING_END\n\nrdar://45496947\n\nDifferential revision: https://reviews.llvm.org/D53621\n\nllvm-svn: 345486"},
[j]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute","Support for groups of attributes in #pragma clang attribute\n\nThis commit enables pushing an empty #pragma clang attribute push, then adding\nmultiple attributes to it, then popping them all with #pragma clang attribute\npop, just like #pragma clang diagnostic. We still support the current way of\nadding these, #pragma clang attribute push(__attribute__((...))), by treating it\nlike a combined push/attribute. This is needed to create macros like:\n\nDO_SOMETHING_BEGIN(attr1, attr2, attr3)\n// ...\nDO_SOMETHING_END\n\nrdar://45496947\n\nDifferential revision: https://reviews.llvm.org/D53621\n\nllvm-svn: 345486"},
[d]={{v,3876,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  if (!Tok.isOneOf(tok::identifier, tok::l_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_push_pop_paren);"}},
[i]={{v,3876,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  if (!Tok.isOneOf(tok::identifier, tok::l_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_push_pop_paren);"}},
[l]={
[l]={
[X]={"clang/test/Parser/pragma-attribute.cpp:103:109: error: expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'","clang/test/Parser/pragma-attribute.cpp:104:25: error: expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'"}
[Y]={"clang/test/Parser/pragma-attribute.cpp:103:109: error: expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'","clang/test/Parser/pragma-attribute.cpp:104:25: error: expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'"}
}
}
},
},
["err_pragma_attribute_expected_subject_identifier"]={
["err_pragma_attribute_expected_subject_identifier"]={
[b]={{nil,n,"err_pragma_attribute_expected_subject_identifier"}},
[d]={{nil,n,"err_pragma_attribute_expected_subject_identifier"}},
[j]={{nil,n,"expected an identifier that corresponds to an attribute subject rule"}},
[e]={{nil,n,"expected an identifier that corresponds to an attribute subject rule"}},
[i]={{nil,n,"expected an identifier that corresponds to an attribute subject rule"}},
[f]={{nil,n,"expected an identifier that corresponds to an attribute subject rule"}},
[h]=k,
[g]=k,
[c]="expected an identifier that corresponds to an attribute subject rule",
[h]="expected an identifier that corresponds to an attribute subject rule",
[f]=a,
[b]=a,
[e]={{nil,n,y}},
[c]={{nil,n,y}},
[g]={R,1492508507,T,S},
[j]={R,1492508507,U,T},
[d]={{v,1602,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  // ...\n  do {\n    // ...\n    if (Name.empty()) {\n      Diag(Tok, diag::err_pragma_attribute_expected_subject_identifier);"}},
[i]={{v,1602,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  // ...\n  do {\n    // ...\n    if (Name.empty()) {\n      Diag(Tok, diag::err_pragma_attribute_expected_subject_identifier);"}},
[l]={
[l]={
[X]={"clang/test/Parser/pragma-attribute.cpp:44:76: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:47:90: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:50:76: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:52:81: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:53:80: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:54:91: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:208:71: error: expected an identifier that corresponds to an attribute subject rule"}
[Y]={"clang/test/Parser/pragma-attribute.cpp:44:76: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:47:90: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:50:76: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:52:81: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:53:80: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:54:91: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:208:71: error: expected an identifier that corresponds to an attribute subject rule"}
}
}
},
},
["err_pragma_attribute_expected_subject_sub_identifier"]={
["err_pragma_attribute_expected_subject_sub_identifier"]={
[b]={{nil,n,"err_pragma_attribute_expected_subject_sub_identifier"}},
[d]={{nil,n,"err_pragma_attribute_expected_subject_sub_identifier"}},
[j]={{nil,n,"expected an identifier that corresponds to an attribute subject matcher sub-rule; \'%0\' matcher %select{does not support sub-rules|supports the following sub-rules: %2|}1"}},
[e]={{nil,n,"expected an identifier that corresponds to an attribute subject matcher sub-rule; \'%0\' matcher %select{does not support sub-rules|supports the following sub-rules: %2|}1"}},
[i]={{nil,n,{"expected an identifier that corresponds to an attribute subject matcher sub-rule; \'A\' matcher ",{"does not support sub-rules","supports the following sub-rules: C",a}}}},
[f]={{nil,n,{"expected an identifier that corresponds to an attribute subject matcher sub-rule; \'A\' matcher ",{"does not support sub-rules","supports the following sub-rules: C",a}}}},
[h]=k,
[g]=k,
[c]="expected an identifier that corresponds to an attribute subject matcher sub\\-rule; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?)|)",
[h]="expected an identifier that corresponds to an attribute subject matcher sub\\-rule; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?)|)",
[f]=a,
[b]=a,
[e]={{nil,n,y}},
[c]={{nil,n,y}},
[g]={R,1492508507,T,S},
[j]={R,1492508507,U,T},
[d]={{v,1565,"static void diagnoseExpectedAttributeSubjectSubRule(Parser &PRef, attr::SubjectMatchRule PrimaryRule, StringRef PrimaryRuleName, SourceLocation SubRuleLoc) {\n  auto Diagnostic = PRef.Diag(SubRuleLoc, diag::err_pragma_attribute_expected_subject_sub_identifier) << PrimaryRuleName;"}},
[i]={{v,1565,"static void diagnoseExpectedAttributeSubjectSubRule(Parser &PRef, attr::SubjectMatchRule PrimaryRule, StringRef PrimaryRuleName, SourceLocation SubRuleLoc) {\n  auto Diagnostic = PRef.Diag(SubRuleLoc, diag::err_pragma_attribute_expected_subject_sub_identifier) << PrimaryRuleName;"}},
[l]={
[l]={
[X]={"clang/test/Parser/pragma-attribute.cpp:66:89: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:73:99: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:74:101: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'namespace\' matcher does not support sub-rules","clang/test/Parser/pragma-attribute.cpp:87:99: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:88:96: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'enum\' matcher does not support sub-rules"}
[Y]={"clang/test/Parser/pragma-attribute.cpp:66:89: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:73:99: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:74:101: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'namespace\' matcher does not support sub-rules","clang/test/Parser/pragma-attribute.cpp:87:99: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:88:96: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'enum\' matcher does not support sub-rules"}
}
}
},
},
["err_pragma_attribute_extra_tokens_after_attribute"]={
["err_pragma_attribute_extra_tokens_after_attribute"]={
[b]={{nil,n,"err_pragma_attribute_extra_tokens_after_attribute"}},
[d]={{nil,n,"err_pragma_attribute_extra_tokens_after_attribute"}},
[j]={{nil,n,"extra tokens after attribute in a \'#pragma clang attribute push\'"}},
[e]={{nil,n,"extra tokens after attribute in a \'#pragma clang attribute push\'"}},
[i]={{nil,n,"extra tokens after attribute in a \'#pragma clang attribute push\'"}},
[f]={{nil,n,"extra tokens after attribute in a \'#pragma clang attribute push\'"}},
[h]=k,
[g]=k,
[c]="extra tokens after attribute in a \'\\#pragma clang attribute push\'",
[h]="extra tokens after attribute in a \'\\#pragma clang attribute push\'",
[f]=a,
[b]=a,
[e]={{nil,n,y}},
[c]={{nil,n,y}},
[g]={R,1492508507,T,S},
[j]={R,1492508507,U,T},
[d]={{v,1957,"void Parser::HandlePragmaAttribute() {\n  // ...\n  // Tokens following an ill-formed attribute will remain in the token stream\n  // and must be removed.\n  if (Tok.isNot(tok::eof)) {\n    Diag(Tok, diag::err_pragma_attribute_extra_tokens_after_attribute);"}},
[i]={{v,1957,"void Parser::HandlePragmaAttribute() {\n  // ...\n  // Tokens following an ill-formed attribute will remain in the token stream\n  // and must be removed.\n  if (Tok.isNot(tok::eof)) {\n    Diag(Tok, diag::err_pragma_attribute_extra_tokens_after_attribute);"}},
[l]={
[l]={
[X]={"clang/test/Parser/pragma-attribute.cpp:124:76: error: extra tokens after attribute in a \'#pragma clang attribute push\'"}
[Y]={"clang/test/Parser/pragma-attribute.cpp:124:76: error: extra tokens after attribute in a \'#pragma clang attribute push\'"}
}
}
},
},
["err_pragma_attribute_invalid_argument"]={
["err_pragma_attribute_invalid_argument"]={
[b]={{nil,n,"err_pragma_attribute_invalid_argument"}},
[d]={{nil,n,"err_pragma_attribute_invalid_argument"}},
[j]={{nil,n,"unexpected argument \'%0\' to \'#pragma clang attribute\'; expected \'push\' or \'pop\'"}},
[e]={{nil,n,"unexpected argument \'%0\' to \'#pragma clang attribute\'; expected \'push\' or \'pop\'"}},
[i]={{nil,n,"unexpected argument \'A\' to \'#pragma clang attribute\'; expected \'push\' or \'pop\'"}},
[f]={{nil,n,"unexpected argument \'A\' to \'#pragma clang attribute\'; expected \'push\' or \'pop\'"}},
[h]=k,
[g]=k,
[c]="unexpected argument \'(.*?)\' to \'\\#pragma clang attribute\'; expected \'push\' or \'pop\'",
[h]="unexpected argument \'(.*?)\' to \'\\#pragma clang attribute\'; expected \'push\' or \'pop\'",
[f]=a,
[b]=a,
[e]={{nil,n,y}},
[c]={{nil,n,y}},
[g]={R,1492508507,T,S},
[j]={R,1492508507,U,T},
[d]={{v,3897,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  // Determine what action this pragma clang attribute represents.\n  if (Tok.is(tok::l_paren)) {\n  // ...\n  } else {\n    // ...\n    if (II->isStr(\"push\"))\n    // ...\n    else if (II->isStr(\"pop\"))\n    // ...\n    else {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_invalid_argument) << PP.getSpelling(Tok);"}}
[i]={{v,3897,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  // Determine what action this pragma clang attribute represents.\n  if (Tok.is(tok::l_paren)) {\n  // ...\n  } else {\n    // ...\n    if (II->isStr(\"push\"))\n    // ...\n    else if (II->isStr(\"pop\"))\n    // ...\n    else {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_invalid_argument) << PP.getSpelling(Tok);"}}
},
},
["err_pragma_attribute_invalid_matchers"]={
["err_pragma_attribute_invalid_matchers"]={
[b]={{nil,n,"err_pragma_attribute_invalid_matchers"}},
[d]={{nil,n,"err_pragma_attribute_invalid_matchers"}},
[j]={{nil,n,"attribute %0 can\'t be applied to %1"}},
[e]={{nil,n,"attribute %0 can\'t be applied to %1"}},
[i]={{nil,n,"attribute A can\'t be applied to B"}},
[f]={{nil,n,"attribute A can\'t be applied to B"}},
[h]=k,
[g]=k,
[c]="attribute (.*?) can\'t be applied to (.*?)",
[h]="attribute (.*?) can\'t be applied to (.*?)",
[f]=a,
[b]=a,
[e]={{nil,n,m}},
[c]={{nil,n,m}},
[g]={R,1492508507,T,S},
[j]={R,1492508507,U,T},
[d]={{J,1048,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // ...\n  if (!Rules.empty()) {\n    auto Diagnostic = Diag(PragmaLoc, diag::err_pragma_attribute_invalid_matchers) << Attribute;"}},
[i]={{J,1048,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // ...\n  if (!Rules.empty()) {\n    auto Diagnostic = Diag(PragmaLoc, diag::err_pragma_attribute_invalid_matchers) << Attribute;"}},
[l]={
[l]={
[X]={"clang/test/Parser/pragma-attribute.cpp:126:15: error: attribute \'objc_bridge_related\' can\'t be applied to \'function\'","clang/test/Parser/pragma-attribute.cpp:185:15: error: attribute \'uninitialized\' can\'t be applied to \'function\'","clang/test/Parser/pragma-attribute.cpp:187:15: error: attribute \'uninitialized\' can\'t be applied to \'variable\'","clang/test/Parser/pragma-attribute.cpp:189:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_thread_local)\'","clang/test/Parser/pragma-attribute.cpp:191:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:193:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_parameter)\', and \'variable(unless(is_parameter))\'"}
[Y]={"clang/test/Parser/pragma-attribute.cpp:126:15: error: attribute \'objc_bridge_related\' can\'t be applied to \'function\'","clang/test/Parser/pragma-attribute.cpp:185:15: error: attribute \'uninitialized\' can\'t be applied to \'function\'","clang/test/Parser/pragma-attribute.cpp:187:15: error: attribute \'uninitialized\' can\'t be applied to \'variable\'","clang/test/Parser/pragma-attribute.cpp:189:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_thread_local)\'","clang/test/Parser/pragma-attribute.cpp:191:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:193:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_parameter)\', and \'variable(unless(is_parameter))\'"}
}
}
},
},
["err_pragma_attribute_invalid_subject_set_specifier"]={
["err_pragma_attribute_invalid_subject_set_specifier"]={
[b]={{nil,n,"err_pragma_attribute_invalid_subject_set_specifier"}},
[d]={{nil,n,"err_pragma_attribute_invalid_subject_set_specifier"}},
[j]={{nil,n,"expected attribute subject set specifier \'apply_to\'"}},
[e]={{nil,n,"expected attribute subject set specifier \'apply_to\'"}},
[i]={{nil,n,"expected attribute subject set specifier \'apply_to\'"}},
[f]={{nil,n,"expected attribute subject set specifier \'apply_to\'"}},
[h]=k,
[g]=k,
[c]="expected attribute subject set specifier \'apply_to\'",
[h]="expected attribute subject set specifier \'apply_to\'",
[f]=a,
[b]=a,
[e]={{nil,n,y}},
[c]={{nil,n,y}},
[g]={R,1492508507,T,S},
[j]={R,1492508507,U,T},
[d]={{v,1922,"void Parser::HandlePragmaAttribute() {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"},{v,1930,"void Parser::HandlePragmaAttribute() {\n  // ...\n  if (!II->isStr(\"apply_to\")) {\n    createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"}},
[i]={{v,1922,"void Parser::HandlePragmaAttribute() {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"},{v,1930,"void Parser::HandlePragmaAttribute() {\n  // ...\n  if (!II->isStr(\"apply_to\")) {\n    createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"}},
[l]={
[l]={
[X]={"clang/test/Parser/pragma-attribute.cpp:27:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:28:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:29:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:30:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:31:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:32:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:33:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:34:64: error: expected attribute subject set specifier \'apply_to\'"}
[Y]={"clang/test/Parser/pragma-attribute.cpp:27:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:28:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:29:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:30:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:31:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:32:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:33:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:34:64: error: expected attribute subject set specifier \'apply_to\'"}
}
}
},
},
["err_pragma_attribute_matcher_negated_subrule_contradicts_subrule"]={
["err_pragma_attribute_matcher_negated_subrule_contradicts_subrule"]={
[b]={{nil,n,"err_pragma_attribute_matcher_negated_subrule_contradicts_subrule"}},
[d]={{nil,n,"err_pragma_attribute_matcher_negated_subrule_contradicts_subrule"}},
[j]={{nil,n,"negated attribute subject matcher sub-rule \'%0\' contradicts sub-rule \'%1\'"}},
[e]={{nil,n,"negated attribute subject matcher sub-rule \'%0\' contradicts sub-rule \'%1\'"}},
[i]={{nil,n,"negated attribute subject matcher sub-rule \'A\' contradicts sub-rule \'B\'"}},
[f]={{nil,n,"negated attribute subject matcher sub-rule \'A\' contradicts sub-rule \'B\'"}},
[h]=k,
[g]=k,
[c]="negated attribute subject matcher sub\\-rule \'(.*?)\' contradicts sub\\-rule \'(.*?)\'",
[h]="negated attribute subject matcher sub\\-rule \'(.*?)\' contradicts sub\\-rule \'(.*?)\'",
[f]=a,
[b]=a,
[e]={{nil,n,m}},
[c]={{nil,n,m}},
[g]={R,1492508507,T,S},
[j]={R,1492508507,U,T},
[d]={{J,1036,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // ...\n  // Figure out which subject matching rules are valid.\n  if (StrictSubjectMatchRuleSet.empty()) {\n    // ...\n    for (const auto &Rule : Rules) {\n      // ...\n      if (It != RulesToFirstSpecifiedNegatedSubRule.end() && It->second != Rule) {\n        // ...\n        Diag(It->second.second.getBegin(), diag::err_pragma_attribute_matcher_negated_subrule_contradicts_subrule) << attr::getSubjectMatchRuleSpelling(attr::SubjectMatchRule(It->second.first)) << attr::getSubjectMatchRuleSpelling(MatchRule) << Rule.second << FixItHint::CreateRemoval(replacementRangeForListElement(*this, It->second.second));"}},
[i]={{J,1036,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // ...\n  // Figure out which subject matching rules are valid.\n  if (StrictSubjectMatchRuleSet.empty()) {\n    // ...\n    for (const auto &Rule : Rules) {\n      // ...\n      if (It != RulesToFirstSpecifiedNegatedSubRule.end() && It->second != Rule) {\n        // ...\n        Diag(It->second.second.getBegin(), diag::err_pragma_attribute_matcher_negated_subrule_contradicts_subrule) << attr::getSubjectMatchRuleSpelling(attr::SubjectMatchRule(It->second.first)) << attr::getSubjectMatchRuleSpelling(MatchRule) << Rule.second << FixItHint::CreateRemoval(replacementRangeForListElement(*this, It->second.second));"}},
[l]={
[l]={
["clang/test/Sema/pragma-attribute-strict-subjects.c"]={"clang/test/Sema/pragma-attribute-strict-subjects.c:25:130: error: negated attribute subject matcher sub-rule \'variable(unless(is_parameter))\' contradicts sub-rule \'variable(is_parameter)\'","clang/test/Sema/pragma-attribute-strict-subjects.c:30:106: error: negated attribute subject matcher sub-rule \'variable(unless(is_parameter))\' contradicts sub-rule \'variable(is_global)\'"}
["clang/test/Sema/pragma-attribute-strict-subjects.c"]={"clang/test/Sema/pragma-attribute-strict-subjects.c:25:130: error: negated attribute subject matcher sub-rule \'variable(unless(is_parameter))\' contradicts sub-rule \'variable(is_parameter)\'","clang/test/Sema/pragma-attribute-strict-subjects.c:30:106: error: negated attribute subject matcher sub-rule \'variable(unless(is_parameter))\' contradicts sub-rule \'variable(is_global)\'"}
Line 2,960: Line 2,961:
},
},
["err_pragma_attribute_matcher_subrule_contradicts_rule"]={
["err_pragma_attribute_matcher_subrule_contradicts_rule"]={
[b]={{nil,n,"err_pragma_attribute_matcher_subrule_contradicts_rule"}},
[d]={{nil,n,"err_pragma_attribute_matcher_subrule_contradicts_rule"}},
[j]={{nil,n,"redundant attribute subject matcher sub-rule \'%0\'; \'%1\' already matches those declarations"}},
[e]={{nil,n,"redundant attribute subject matcher sub-rule \'%0\'; \'%1\' already matches those declarations"}},
[i]={{nil,n,"redundant attribute subject matcher sub-rule \'A\'; \'B\' already matches those declarations"}},
[f]={{nil,n,"redundant attribute subject matcher sub-rule \'A\'; \'B\' already matches those declarations"}},
[h]=k,
[g]=k,
[c]="redundant attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' already matches those declarations",
[h]="redundant attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' already matches those declarations",
[f]=a,
[b]=a,
[e]={{nil,n,m}},
[c]={{nil,n,m}},
[g]={R,1492508507,T,S},
[j]={R,1492508507,U,T},
[d]={{J,953,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // ...\n  // Figure out which subject matching rules are valid.\n  if (StrictSubjectMatchRuleSet.empty()) {\n    // ...\n    for (const auto &Rule : Rules) {\n      // ...\n      if (It != Rules.end()) {\n        // ...\n        Diag(Rule.second.getBegin(), diag::err_pragma_attribute_matcher_subrule_contradicts_rule) << attr::getSubjectMatchRuleSpelling(MatchRule) << attr::getSubjectMatchRuleSpelling(*ParentRule) << It->second << FixItHint::CreateRemoval(replacementRangeForListElement(*this, Rule.second));"}},
[i]={{J,953,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // ...\n  // Figure out which subject matching rules are valid.\n  if (StrictSubjectMatchRuleSet.empty()) {\n    // ...\n    for (const auto &Rule : Rules) {\n      // ...\n      if (It != Rules.end()) {\n        // ...\n        Diag(Rule.second.getBegin(), diag::err_pragma_attribute_matcher_subrule_contradicts_rule) << attr::getSubjectMatchRuleSpelling(MatchRule) << attr::getSubjectMatchRuleSpelling(*ParentRule) << It->second << FixItHint::CreateRemoval(replacementRangeForListElement(*this, Rule.second));"}},
[l]={
[l]={
["clang/test/Sema/pragma-attribute-strict-subjects.c"]={"clang/test/Sema/pragma-attribute-strict-subjects.c:9:153: error: redundant attribute subject matcher sub-rule \'variable(is_global)\'; \'variable\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:9:108: error: redundant attribute subject matcher sub-rule \'variable(is_parameter)\'; \'variable\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:15:99: error: redundant attribute subject matcher sub-rule \'function(is_member)\'; \'function\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:20:109: error: redundant attribute subject matcher sub-rule \'variable(unless(is_parameter))\'; \'variable\' already matches those declarations"}
["clang/test/Sema/pragma-attribute-strict-subjects.c"]={"clang/test/Sema/pragma-attribute-strict-subjects.c:9:153: error: redundant attribute subject matcher sub-rule \'variable(is_global)\'; \'variable\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:9:108: error: redundant attribute subject matcher sub-rule \'variable(is_parameter)\'; \'variable\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:15:99: error: redundant attribute subject matcher sub-rule \'function(is_member)\'; \'function\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:20:109: error: redundant attribute subject matcher sub-rule \'variable(unless(is_parameter))\'; \'variable\' already matches those declarations"}
Line 2,974: Line 2,975:
},
},
["err_pragma_attribute_namespace_on_attribute"]={
["err_pragma_attribute_namespace_on_attribute"]={
[b]={{nil,u,"err_pragma_attribute_namespace_on_attribute"}},
[d]={{nil,u,"err_pragma_attribute_namespace_on_attribute"}},
[j]={{nil,u,"namespace can only apply to \'push\' or \'pop\' directives"}},
[e]={{nil,u,"namespace can only apply to \'push\' or \'pop\' directives"}},
[i]={{nil,u,"namespace can only apply to \'push\' or \'pop\' directives"}},
[f]={{nil,u,"namespace can only apply to \'push\' or \'pop\' directives"}},
[h]=k,
[g]=k,
[c]="namespace can only apply to \'push\' or \'pop\' directives",
[h]="namespace can only apply to \'push\' or \'pop\' directives",
[f]=a,
[b]=a,
[e]={{nil,u,y}},
[c]={{nil,u,y}},
[g]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","Add support for namespaces on #pragma clang attribute\n\nNamespaces are introduced by adding an \"identifier.\" before a\npush/pop directive. Pop directives with namespaces can only pop a\nattribute group that was pushed with the same namespace. Push and pop\ndirectives that don\'t opt into namespaces have the same semantics.\n\nThis is necessary to prevent a pitfall of using multiple #pragma\nclang attribute directives spread out in a large file, particularly\nwhen macros are involved. It isn\'t easy to see which pop corripsonds\nto which push, so its easy to inadvertently pop the wrong group.\n\nDifferential revision: https://reviews.llvm.org/D55628\n\nllvm-svn: 349845"},
[j]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","Add support for namespaces on #pragma clang attribute\n\nNamespaces are introduced by adding an \"identifier.\" before a\npush/pop directive. Pop directives with namespaces can only pop a\nattribute group that was pushed with the same namespace. Push and pop\ndirectives that don\'t opt into namespaces have the same semantics.\n\nThis is necessary to prevent a pitfall of using multiple #pragma\nclang attribute directives spread out in a large file, particularly\nwhen macros are involved. It isn\'t easy to see which pop corripsonds\nto which push, so its easy to inadvertently pop the wrong group.\n\nDifferential revision: https://reviews.llvm.org/D55628\n\nllvm-svn: 349845"},
[d]={{v,3884,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  // Determine what action this pragma clang attribute represents.\n  if (Tok.is(tok::l_paren)) {\n    if (Info->Namespace) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_namespace_on_attribute);"}},
[i]={{v,3884,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  // Determine what action this pragma clang attribute represents.\n  if (Tok.is(tok::l_paren)) {\n    if (Info->Namespace) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_namespace_on_attribute);"}},
[l]={
[l]={
["clang/test/Sema/pragma-attribute-namespace.c"]={"clang/test/Sema/pragma-attribute-namespace.c:25:31: error: namespace can only apply to \'push\' or \'pop\' directives"}
["clang/test/Sema/pragma-attribute-namespace.c"]={"clang/test/Sema/pragma-attribute-namespace.c:25:31: error: namespace can only apply to \'push\' or \'pop\' directives"}
Line 2,988: Line 2,989:
},
},
["err_pragma_attribute_no_pop_eof"]={
["err_pragma_attribute_no_pop_eof"]={
[b]={{nil,n,"err_pragma_attribute_no_pop_eof"}},
[d]={{nil,n,"err_pragma_attribute_no_pop_eof"}},
[j]={{nil,n,"unterminated \'#pragma clang attribute push\' at end of file"}},
[e]={{nil,n,"unterminated \'#pragma clang attribute push\' at end of file"}},
[i]={{nil,n,"unterminated \'#pragma clang attribute push\' at end of file"}},
[f]={{nil,n,"unterminated \'#pragma clang attribute push\' at end of file"}},
[h]=k,
[g]=k,
[c]="unterminated \'\\#pragma clang attribute push\' at end of file",
[h]="unterminated \'\\#pragma clang attribute push\' at end of file",
[f]=a,
[b]=a,
[e]={{nil,n,m}},
[c]={{nil,n,m}},
[g]={R,1492508507,T,S},
[j]={R,1492508507,U,T},
[d]={{J,1149,"void Sema::DiagnoseUnterminatedPragmaAttribute() {\n  // ...\n  Diag(PragmaAttributeStack.back().Loc, diag::err_pragma_attribute_no_pop_eof);"}},
[i]={{J,1149,"void Sema::DiagnoseUnterminatedPragmaAttribute() {\n  // ...\n  Diag(PragmaAttributeStack.back().Loc, diag::err_pragma_attribute_no_pop_eof);"}},
[l]={
[l]={
["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:68:15: error: unterminated \'#pragma clang attribute push\' at end of file"}
["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:68:15: error: unterminated \'#pragma clang attribute push\' at end of file"}
Line 3,002: Line 3,003:
},
},
["err_pragma_attribute_stack_mismatch"]={
["err_pragma_attribute_stack_mismatch"]={
[b]={{nil,n,"err_pragma_attribute_stack_mismatch"}},
[d]={{nil,n,"err_pragma_attribute_stack_mismatch"}},
[j]={{nil,u,"\'#pragma clang attribute %select{%1.|}0pop\' with no matching \'#pragma clang attribute %select{%1.|}0push\'"},{"7.1",n,"\'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'"}},
[e]={{nil,u,"\'#pragma clang attribute %select{%1.|}0pop\' with no matching \'#pragma clang attribute %select{%1.|}0push\'"},{"7.1",n,"\'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'"}},
[i]={{nil,u,{"\'#pragma clang attribute ",{"B.",a},"pop\' with no matching \'#pragma clang attribute ",{"B.",a},"push\'"}},{"7.1",n,"\'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'"}},
[f]={{nil,u,{"\'#pragma clang attribute ",{"B.",a},"pop\' with no matching \'#pragma clang attribute ",{"B.",a},"push\'"}},{"7.1",n,"\'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'"}},
[h]=k,
[g]=k,
[c]="\'\\#pragma clang attribute (?:(.*?)\\.|)pop\' with no matching \'\\#pragma clang attribute (?:(.*?)\\.|)push\'",
[h]="\'\\#pragma clang attribute (?:(.*?)\\.|)pop\' with no matching \'\\#pragma clang attribute (?:(.*?)\\.|)push\'",
[f]=a,
[b]=a,
[e]={{nil,n,m}},
[c]={{nil,n,m}},
[g]={R,1492508507,T,S},
[j]={R,1492508507,U,T},
[d]={{J,1081,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (PragmaAttributeStack.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"},{J,1095,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  // ...\n  if (Namespace)\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 0 << Namespace->getName();"},{J,1131,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  // ...\n  if (Namespace)\n  // ...\n  else\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"}},
[i]={{J,1081,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (PragmaAttributeStack.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"},{J,1095,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  // ...\n  if (Namespace)\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 0 << Namespace->getName();"},{J,1131,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  // ...\n  if (Namespace)\n  // ...\n  else\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"}},
[l]={
[l]={
["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:3:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:47:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:60:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:66:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'"}
["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:3:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:47:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:60:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:66:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'"}
Line 3,016: Line 3,017:
},
},
["err_pragma_attribute_unknown_subject_rule"]={
["err_pragma_attribute_unknown_subject_rule"]={
[b]={{nil,n,"err_pragma_attribute_unknown_subject_rule"}},
[d]={{nil,n,"err_pragma_attribute_unknown_subject_rule"}},
[j]={{nil,n,"unknown attribute subject rule \'%0\'"}},
[e]={{nil,n,"unknown attribute subject rule \'%0\'"}},
[i]={{nil,n,"unknown attribute subject rule \'A\'"}},
[f]={{nil,n,"unknown attribute subject rule \'A\'"}},
[h]=k,
[g]=k,
[c]="unknown attribute subject rule \'(.*?)\'",
[h]="unknown attribute subject rule \'(.*?)\'",
[f]=a,
[b]=a,
[e]={{nil,n,y}},
[c]={{nil,n,y}},
[g]={R,1492508507,T,S},
[j]={R,1492508507,U,T},
[d]={{v,1609,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  // ...\n  do {\n    // ...\n    if (!Rule.first) {\n      Diag(Tok, diag::err_pragma_attribute_unknown_subject_rule) << Name;"}},
[i]={{v,1609,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  // ...\n  do {\n    // ...\n    if (!Rule.first) {\n      Diag(Tok, diag::err_pragma_attribute_unknown_subject_rule) << Name;"}},
[l]={
[l]={
[X]={"clang/test/Parser/pragma-attribute.cpp:56:81: error: unknown attribute subject rule \'diag\'","clang/test/Parser/pragma-attribute.cpp:57:81: error: unknown attribute subject rule \'a\'","clang/test/Parser/pragma-attribute.cpp:58:91: error: unknown attribute subject rule \'for\'","clang/test/Parser/pragma-attribute.cpp:59:81: error: unknown attribute subject rule \'function42\'"}
[Y]={"clang/test/Parser/pragma-attribute.cpp:56:81: error: unknown attribute subject rule \'diag\'","clang/test/Parser/pragma-attribute.cpp:57:81: error: unknown attribute subject rule \'a\'","clang/test/Parser/pragma-attribute.cpp:58:91: error: unknown attribute subject rule \'for\'","clang/test/Parser/pragma-attribute.cpp:59:81: error: unknown attribute subject rule \'function42\'"}
}
}
},
},
["err_pragma_attribute_unknown_subject_sub_rule"]={
["err_pragma_attribute_unknown_subject_sub_rule"]={
[b]={{nil,n,"err_pragma_attribute_unknown_subject_sub_rule"}},
[d]={{nil,n,"err_pragma_attribute_unknown_subject_sub_rule"}},
[j]={{nil,n,"%select{invalid use of|unknown}2 attribute subject matcher sub-rule \'%0\'; \'%1\' matcher %select{does not support sub-rules|supports the following sub-rules: %3}2"}},
[e]={{nil,n,"%select{invalid use of|unknown}2 attribute subject matcher sub-rule \'%0\'; \'%1\' matcher %select{does not support sub-rules|supports the following sub-rules: %3}2"}},
[i]={{nil,n,{{"invalid use of","unknown"}," attribute subject matcher sub-rule \'A\'; \'B\' matcher ",{"does not support sub-rules","supports the following sub-rules: D"}}}},
[f]={{nil,n,{{"invalid use of","unknown"}," attribute subject matcher sub-rule \'A\'; \'B\' matcher ",{"does not support sub-rules","supports the following sub-rules: D"}}}},
[h]=k,
[g]=k,
[c]="(?:invalid use of|unknown) attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?))",
[h]="(?:invalid use of|unknown) attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?))",
[f]=a,
[b]=a,
[e]={{nil,n,y}},
[c]={{nil,n,y}},
[g]={R,1492508507,T,S},
[j]={R,1492508507,U,T},
[d]={{v,1578,"static void diagnoseUnknownAttributeSubjectSubRule(Parser &PRef, attr::SubjectMatchRule PrimaryRule, StringRef PrimaryRuleName, StringRef SubRuleName, SourceLocation SubRuleLoc) {\n  auto Diagnostic = PRef.Diag(SubRuleLoc, diag::err_pragma_attribute_unknown_subject_sub_rule) << SubRuleName << PrimaryRuleName;"}},
[i]={{v,1578,"static void diagnoseUnknownAttributeSubjectSubRule(Parser &PRef, attr::SubjectMatchRule PrimaryRule, StringRef PrimaryRuleName, StringRef SubRuleName, SourceLocation SubRuleLoc) {\n  auto Diagnostic = PRef.Diag(SubRuleLoc, diag::err_pragma_attribute_unknown_subject_sub_rule) << SubRuleName << PrimaryRuleName;"}},
[l]={
[l]={
[X]={"clang/test/Parser/pragma-attribute.cpp:67:89: error: unknown attribute subject matcher sub-rule \'is\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:72:99: error: unknown attribute subject matcher sub-rule \'is\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:77:81: error: invalid use of attribute subject matcher sub-rule \'is_parameter\'; \'enum\' matcher does not support sub-rules","clang/test/Parser/pragma-attribute.cpp:78:85: error: invalid use of attribute subject matcher sub-rule \'is_parameter\'; \'enum\' matcher does not support sub-rules","clang/test/Parser/pragma-attribute.cpp:82:99: error: unknown attribute subject matcher sub-rule \'unless(is)\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:90:99: error: unknown attribute subject matcher sub-rule \'unless(is_global)\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:91:86: error: invalid use of attribute subject matcher sub-rule \'unless(is_parameter)\'; \'enum\' matcher does not support sub-rules"}
[Y]={"clang/test/Parser/pragma-attribute.cpp:67:89: error: unknown attribute subject matcher sub-rule \'is\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:72:99: error: unknown attribute subject matcher sub-rule \'is\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:77:81: error: invalid use of attribute subject matcher sub-rule \'is_parameter\'; \'enum\' matcher does not support sub-rules","clang/test/Parser/pragma-attribute.cpp:78:85: error: invalid use of attribute subject matcher sub-rule \'is_parameter\'; \'enum\' matcher does not support sub-rules","clang/test/Parser/pragma-attribute.cpp:82:99: error: unknown attribute subject matcher sub-rule \'unless(is)\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:90:99: error: unknown attribute subject matcher sub-rule \'unless(is_global)\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:91:86: error: invalid use of attribute subject matcher sub-rule \'unless(is_parameter)\'; \'enum\' matcher does not support sub-rules"}
}
}
},
},
["err_pragma_attribute_unsupported_attribute"]={
["err_pragma_attribute_unsupported_attribute"]={
[b]={{nil,n,"err_pragma_attribute_unsupported_attribute"}},
[d]={{nil,n,"err_pragma_attribute_unsupported_attribute"}},
[j]={{nil,n,"attribute %0 is not supported by \'#pragma clang attribute\'"}},
[e]={{nil,n,"attribute %0 is not supported by \'#pragma clang attribute\'"}},
[i]={{nil,n,"attribute A is not supported by \'#pragma clang attribute\'"}},
[f]={{nil,n,"attribute A is not supported by \'#pragma clang attribute\'"}},
[h]=k,
[g]=k,
[c]="attribute (.*?) is not supported by \'\\#pragma clang attribute\'",
[h]="attribute (.*?) is not supported by \'\\#pragma clang attribute\'",
[f]=a,
[b]=a,
[e]={{nil,n,y}},
[c]={{nil,n,y}},
[g]={R,1492508507,T,S},
[j]={R,1492508507,U,T},
[d]={{v,1903,"void Parser::HandlePragmaAttribute() {\n  // ...\n  for (const ParsedAttr &Attribute : Attrs) {\n    if (!Attribute.isSupportedByPragmaAttribute()) {\n      Diag(PragmaLoc, diag::err_pragma_attribute_unsupported_attribute) << Attribute;"}},
[i]={{v,1903,"void Parser::HandlePragmaAttribute() {\n  // ...\n  for (const ParsedAttr &Attribute : Attrs) {\n    if (!Attribute.isSupportedByPragmaAttribute()) {\n      Diag(PragmaLoc, diag::err_pragma_attribute_unsupported_attribute) << Attribute;"}},
[l]={
[l]={
["clang/test/Parser/pragma-attribute-declspec.cpp"]={"clang/test/Parser/pragma-attribute-declspec.cpp:12:15: error: attribute \'align\' is not supported by \'#pragma clang attribute\'"}
["clang/test/Parser/pragma-attribute-declspec.cpp"]={"clang/test/Parser/pragma-attribute-declspec.cpp:12:15: error: attribute \'align\' is not supported by \'#pragma clang attribute\'"}
Line 3,058: Line 3,059:
},
},
["err_pragma_cannot_end_force_cuda_host_device"]={
["err_pragma_cannot_end_force_cuda_host_device"]={
[b]="err_pragma_cannot_end_force_cuda_host_device",
[d]="err_pragma_cannot_end_force_cuda_host_device",
[j]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[e]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[i]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[f]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[h]=k,
[g]=k,
[c]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[h]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[f]=a,
[b]=a,
[e]=y,
[c]=y,
[g]={"67a78a6cc021",1475964958,"[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas.","[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas.\n\nSummary:\nThese cause us to consider all functions in-between to be __host__\n__device__.\n\nYou can nest these pragmas; you just can\'t have more \'end\'s than\n\'begin\'s.\n\nReviewers: rsmith\n\nSubscribers: tra, jhen, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D24975\n\nllvm-svn: 283677"},
[j]={"67a78a6cc021",1475964958,"[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas.","[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas.\n\nSummary:\nThese cause us to consider all functions in-between to be __host__\n__device__.\n\nYou can nest these pragmas; you just can\'t have more \'end\'s than\n\'begin\'s.\n\nReviewers: rsmith\n\nSubscribers: tra, jhen, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D24975\n\nllvm-svn: 283677"},
[d]={{v,3815,"void PragmaForceCUDAHostDeviceHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Info->isStr(\"begin\"))\n  // ...\n  else if (!Actions.PopForceCUDAHostDevice())\n    PP.Diag(FirstTok.getLocation(), diag::err_pragma_cannot_end_force_cuda_host_device);"}}
[i]={{v,3815,"void PragmaForceCUDAHostDeviceHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Info->isStr(\"begin\"))\n  // ...\n  else if (!Actions.PopForceCUDAHostDevice())\n    PP.Diag(FirstTok.getLocation(), diag::err_pragma_cannot_end_force_cuda_host_device);"}}
},
},
["err_pragma_clang_section_expected_equal"]={
["err_pragma_clang_section_expected_equal"]={
[b]={{nil,n,"err_pragma_clang_section_expected_equal"}},
[d]={{nil,n,"err_pragma_clang_section_expected_equal"}},
[j]={{nil,o,"expected \'=\' following \'#pragma clang section %select{invalid|bss|data|rodata|text|relro}0\'"},{x,n,"expected \'=\' following \'#pragma clang section %select{invalid|bss|data|rodata|text}0\'"}},
[e]={{nil,o,"expected \'=\' following \'#pragma clang section %select{invalid|bss|data|rodata|text|relro}0\'"},{x,n,"expected \'=\' following \'#pragma clang section %select{invalid|bss|data|rodata|text}0\'"}},
[i]={{nil,o,{"expected \'=\' following \'#pragma clang section ",{ob,"bss","data","rodata","text","relro"},"\'"}},{x,n,{"expected \'=\' following \'#pragma clang section ",{ob,"bss","data","rodata","text"},"\'"}}},
[f]={{nil,o,{"expected \'=\' following \'#pragma clang section ",{nb,"bss","data","rodata","text","relro"},"\'"}},{x,n,{"expected \'=\' following \'#pragma clang section ",{nb,"bss","data","rodata","text"},"\'"}}},
[h]=k,
[g]=k,
[c]="expected \'\\=\' following \'\\#pragma clang section (?:invalid|bss|data|rodata|text|relro)\'",
[h]="expected \'\\=\' following \'\\#pragma clang section (?:invalid|bss|data|rodata|text|relro)\'",
[f]=a,
[b]=a,
[e]={{nil,n,y}},
[c]={{nil,n,y}},
[g]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section","Add support for #pragma clang section\n\nThis patch provides a means to specify section-names for global variables, \nfunctions and static variables, using #pragma directives. \nThis feature is only defined to work sensibly for ELF targets.\nOne can specify section names as:\n#pragma clang section bss=\"myBSS\" data=\"myData\" rodata=\"myRodata\" text=\"myText\"\nOne can \"unspecify\" a section name with empty string e.g.\n#pragma clang section bss=\"\" data=\"\" text=\"\" rodata=\"\"\n\nReviewers: Roger Ferrer, Jonathan Roelofs, Reid Kleckner\nDifferential Revision: https://reviews.llvm.org/D33412\n\nllvm-svn: 304705"},
[j]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section","Add support for #pragma clang section\n\nThis patch provides a means to specify section-names for global variables, \nfunctions and static variables, using #pragma directives. \nThis feature is only defined to work sensibly for ELF targets.\nOne can specify section names as:\n#pragma clang section bss=\"myBSS\" data=\"myData\" rodata=\"myRodata\" text=\"myText\"\nOne can \"unspecify\" a section name with empty string e.g.\n#pragma clang section bss=\"\" data=\"\" text=\"\" rodata=\"\"\n\nReviewers: Roger Ferrer, Jonathan Roelofs, Reid Kleckner\nDifferential Revision: https://reviews.llvm.org/D33412\n\nllvm-svn: 304705"},
[d]={{v,2230,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  while (Tok.isNot(tok::eod)) {\n    // ...\n    if (Tok.isNot(tok::equal)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_clang_section_expected_equal) << SecKind;"}},
[i]={{v,2230,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  while (Tok.isNot(tok::eod)) {\n    // ...\n    if (Tok.isNot(tok::equal)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_clang_section_expected_equal) << SecKind;"}},
[l]={
[l]={
["clang/test/Sema/pragma-clang-section.c"]={"clang/test/Sema/pragma-clang-section.c:13:27: error: expected \'=\' following \'#pragma clang section bss\'","clang/test/Sema/pragma-clang-section.c:14:28: error: expected \'=\' following \'#pragma clang section data\'","clang/test/Sema/pragma-clang-section.c:15:30: error: expected \'=\' following \'#pragma clang section rodata\'","clang/test/Sema/pragma-clang-section.c:16:28: error: expected \'=\' following \'#pragma clang section text\'","clang/test/Sema/pragma-clang-section.c:17:29: error: expected \'=\' following \'#pragma clang section relro\'"}
["clang/test/Sema/pragma-clang-section.c"]={"clang/test/Sema/pragma-clang-section.c:13:27: error: expected \'=\' following \'#pragma clang section bss\'","clang/test/Sema/pragma-clang-section.c:14:28: error: expected \'=\' following \'#pragma clang section data\'","clang/test/Sema/pragma-clang-section.c:15:30: error: expected \'=\' following \'#pragma clang section rodata\'","clang/test/Sema/pragma-clang-section.c:16:28: error: expected \'=\' following \'#pragma clang section text\'","clang/test/Sema/pragma-clang-section.c:17:29: error: expected \'=\' following \'#pragma clang section relro\'"}
Line 3,083: Line 3,084:
},
},
["err_pragma_comment_malformed"]={
["err_pragma_comment_malformed"]={
[b]="err_pragma_comment_malformed",
[d]="err_pragma_comment_malformed",
[j]="pragma comment requires parenthesized identifier and optional string",
[e]="pragma comment requires parenthesized identifier and optional string",
[i]="pragma comment requires parenthesized identifier and optional string",
[f]="pragma comment requires parenthesized identifier and optional string",
[h]=k,
[g]=k,
[c]="pragma comment requires parenthesized identifier and optional string",
[h]="pragma comment requires parenthesized identifier and optional string",
[f]=a,
[b]=a,
[e]=y,
[c]=y,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{v,3089,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::l_paren)) {\n    PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{v,3096,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{v,3137,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::r_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"},{v,3143,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"}},
[i]={{v,3089,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::l_paren)) {\n    PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{v,3096,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{v,3137,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::r_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"},{v,3143,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"}},
[l]={
[l]={
["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:9:31: error: pragma comment requires parenthesized identifier and optional string","clang/test/Preprocessor/pragma_microsoft.c:24:22: error: pragma comment requires parenthesized identifier and optional string"}
["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:9:31: error: pragma comment requires parenthesized identifier and optional string","clang/test/Preprocessor/pragma_microsoft.c:24:22: error: pragma comment requires parenthesized identifier and optional string"}
Line 3,097: Line 3,098:
},
},
["err_pragma_comment_unknown_kind"]={
["err_pragma_comment_unknown_kind"]={
[b]="err_pragma_comment_unknown_kind",
[d]="err_pragma_comment_unknown_kind",
[j]="unknown kind of pragma comment",
[e]="unknown kind of pragma comment",
[i]="unknown kind of pragma comment",
[f]="unknown kind of pragma comment",
[h]=k,
[g]=k,
[c]="unknown kind of pragma comment",
[h]="unknown kind of pragma comment",
[f]=a,
[b]=a,
[e]=y,
[c]=y,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{v,3111,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PCK_Unknown) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_unknown_kind);"}},
[i]={{v,3111,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PCK_Unknown) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_unknown_kind);"}},
[l]={
[l]={
["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:17:17: error: unknown kind of pragma comment"}
["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:17:17: error: unknown kind of pragma comment"}
Line 3,111: Line 3,112:
},
},
["err_pragma_detect_mismatch_malformed"]={
["err_pragma_detect_mismatch_malformed"]={
[b]="err_pragma_detect_mismatch_malformed",
[d]="err_pragma_detect_mismatch_malformed",
[j]="pragma detect_mismatch is malformed; it requires two comma-separated string literals",
[e]="pragma detect_mismatch is malformed; it requires two comma-separated string literals",
[i]="pragma detect_mismatch is malformed; it requires two comma-separated string literals",
[f]="pragma detect_mismatch is malformed; it requires two comma-separated string literals",
[h]=k,
[g]=k,
[c]="pragma detect_mismatch is malformed; it requires two comma\\-separated string literals",
[h]="pragma detect_mismatch is malformed; it requires two comma\\-separated string literals",
[f]=a,
[b]=a,
[e]=y,
[c]=y,
[g]={"5d041beb4e86",1370311634,"Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker co...","Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker command into the object file.\n\nllvm-svn: 183178"},
[j]={"5d041beb4e86",1370311634,"Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker co...","Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker command into the object file.\n\nllvm-svn: 183178"},
[d]={{v,3047,"/// Handle the Microsoft \\#pragma detect_mismatch extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma detect_mismatch(\"name\", \"value\")\n/// \\endcode\n/// Where \'name\' and \'value\' are quoted strings.  The values are embedded in\n/// the object file and passed along to the linker.  If the linker detects a\n/// mismatch in the object file\'s values for the given name, a LNK2038 error\n/// is emitted.  See MSDN for more details.\nvoid PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::comma)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"},{v,3062,"/// Handle the Microsoft \\#pragma detect_mismatch extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma detect_mismatch(\"name\", \"value\")\n/// \\endcode\n/// Where \'name\' and \'value\' are quoted strings.  The values are embedded in\n/// the object file and passed along to the linker.  If the linker detects a\n/// mismatch in the object file\'s values for the given name, a LNK2038 error\n/// is emitted.  See MSDN for more details.\nvoid PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"}},
[i]={{v,3047,"/// Handle the Microsoft \\#pragma detect_mismatch extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma detect_mismatch(\"name\", \"value\")\n/// \\endcode\n/// Where \'name\' and \'value\' are quoted strings.  The values are embedded in\n/// the object file and passed along to the linker.  If the linker detects a\n/// mismatch in the object file\'s values for the given name, a LNK2038 error\n/// is emitted.  See MSDN for more details.\nvoid PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::comma)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"},{v,3062,"/// Handle the Microsoft \\#pragma detect_mismatch extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma detect_mismatch(\"name\", \"value\")\n/// \\endcode\n/// Where \'name\' and \'value\' are quoted strings.  The values are embedded in\n/// the object file and passed along to the linker.  If the linker detects a\n/// mismatch in the object file\'s values for the given name, a LNK2038 error\n/// is emitted.  See MSDN for more details.\nvoid PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"}},
[l]={
[l]={
["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:34:31: error: pragma detect_mismatch is malformed; it requires two comma-separated string literals"}
["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:34:31: error: pragma detect_mismatch is malformed; it requires two comma-separated string literals"}
Line 3,125: Line 3,126:
},
},
["err_pragma_expected_clang_section_name"]={
["err_pragma_expected_clang_section_name"]={
[b]={{nil,n,"err_pragma_expected_clang_section_name"}},
[d]={{nil,n,"err_pragma_expected_clang_section_name"}},
[j]={{nil,o,"expected one of [bss|data|rodata|text|relro] section kind in \'#pragma %0\'"},{x,n,"expected one of [bss|data|rodata|text] section kind in \'#pragma %0\'"}},
[e]={{nil,o,"expected one of [bss|data|rodata|text|relro] section kind in \'#pragma %0\'"},{x,n,"expected one of [bss|data|rodata|text] section kind in \'#pragma %0\'"}},
[i]={{nil,o,"expected one of [bss|data|rodata|text|relro] section kind in \'#pragma A\'"},{x,n,"expected one of [bss|data|rodata|text] section kind in \'#pragma A\'"}},
[f]={{nil,o,"expected one of [bss|data|rodata|text|relro] section kind in \'#pragma A\'"},{x,n,"expected one of [bss|data|rodata|text] section kind in \'#pragma A\'"}},
[h]=k,
[g]=k,
[c]="expected one of \\[bss\\|data\\|rodata\\|text\\|relro\\] section kind in \'\\#pragma (.*?)\'",
[h]="expected one of \\[bss\\|data\\|rodata\\|text\\|relro\\] section kind in \'\\#pragma (.*?)\'",
[f]=a,
[b]=a,
[e]={{nil,n,y}},
[c]={{nil,n,y}},
[g]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section","Add support for #pragma clang section\n\nThis patch provides a means to specify section-names for global variables, \nfunctions and static variables, using #pragma directives. \nThis feature is only defined to work sensibly for ELF targets.\nOne can specify section names as:\n#pragma clang section bss=\"myBSS\" data=\"myData\" rodata=\"myRodata\" text=\"myText\"\nOne can \"unspecify\" a section name with empty string e.g.\n#pragma clang section bss=\"\" data=\"\" text=\"\" rodata=\"\"\n\nReviewers: Roger Ferrer, Jonathan Roelofs, Reid Kleckner\nDifferential Revision: https://reviews.llvm.org/D33412\n\nllvm-svn: 304705"},
[j]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section","Add support for #pragma clang section\n\nThis patch provides a means to specify section-names for global variables, \nfunctions and static variables, using #pragma directives. \nThis feature is only defined to work sensibly for ELF targets.\nOne can specify section names as:\n#pragma clang section bss=\"myBSS\" data=\"myData\" rodata=\"myRodata\" text=\"myText\"\nOne can \"unspecify\" a section name with empty string e.g.\n#pragma clang section bss=\"\" data=\"\" text=\"\" rodata=\"\"\n\nReviewers: Roger Ferrer, Jonathan Roelofs, Reid Kleckner\nDifferential Revision: https://reviews.llvm.org/D33412\n\nllvm-svn: 304705"},
[d]={{v,2207,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  while (Tok.isNot(tok::eod)) {\n    if (Tok.isNot(tok::identifier)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"},{v,2223,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  while (Tok.isNot(tok::eod)) {\n    // ...\n    if (SecType->isStr(\"bss\"))\n    // ...\n    else if (SecType->isStr(\"data\"))\n    // ...\n    else if (SecType->isStr(\"rodata\"))\n    // ...\n    else if (SecType->isStr(\"relro\"))\n    // ...\n    else if (SecType->isStr(\"text\"))\n    // ...\n    else {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"}},
[i]={{v,2207,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  while (Tok.isNot(tok::eod)) {\n    if (Tok.isNot(tok::identifier)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"},{v,2223,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  while (Tok.isNot(tok::eod)) {\n    // ...\n    if (SecType->isStr(\"bss\"))\n    // ...\n    else if (SecType->isStr(\"data\"))\n    // ...\n    else if (SecType->isStr(\"rodata\"))\n    // ...\n    else if (SecType->isStr(\"relro\"))\n    // ...\n    else if (SecType->isStr(\"text\"))\n    // ...\n    else {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"}},
[l]={
[l]={
["clang/test/Sema/pragma-clang-section.c"]={"clang/test/Sema/pragma-clang-section.c:6:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:7:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:8:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:9:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:11:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:18:56: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'"}
["clang/test/Sema/pragma-clang-section.c"]={"clang/test/Sema/pragma-clang-section.c:6:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:7:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:8:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:9:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:11:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:18:56: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'"}
Line 3,139: Line 3,140:
},
},
["err_pragma_expected_file_scope"]={
["err_pragma_expected_file_scope"]={
[b]={{nil,C,"err_pragma_expected_file_scope"}},
[d]={{nil,C,"err_pragma_expected_file_scope"}},
[j]={{nil,C,"\'#pragma %0\' can only appear at file scope"}},
[e]={{nil,C,"\'#pragma %0\' can only appear at file scope"}},
[i]={{nil,C,"\'#pragma A\' can only appear at file scope"}},
[f]={{nil,C,"\'#pragma A\' can only appear at file scope"}},
[h]=k,
[g]=k,
[c]="\'\\#pragma (.*?)\' can only appear at file scope",
[h]="\'\\#pragma (.*?)\' can only appear at file scope",
[f]=a,
[b]=a,
[e]={{nil,C,m}},
[c]={{nil,C,m}},
[g]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
[j]={"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"},
[d]={{J,793,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(PragmaLocation, diag::err_pragma_expected_file_scope) << \"alloc_text\";"},{J,1159,"void Sema::ActOnPragmaMSOptimize(SourceLocation Loc, bool IsOn) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_expected_file_scope) << \"optimize\";"},{J,1260,"void Sema::ActOnPragmaMSFunction(SourceLocation Loc, const llvm::SmallVectorImpl<StringRef> &NoBuiltins) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_expected_file_scope) << \"function\";"}},
[i]={{J,793,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(PragmaLocation, diag::err_pragma_expected_file_scope) << \"alloc_text\";"},{J,1159,"void Sema::ActOnPragmaMSOptimize(SourceLocation Loc, bool IsOn) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_expected_file_scope) << \"optimize\";"},{J,1260,"void Sema::ActOnPragmaMSFunction(SourceLocation Loc, const llvm::SmallVectorImpl<StringRef> &NoBuiltins) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_expected_file_scope) << \"function\";"}},
[l]={
[l]={
["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:27:19: error: \'#pragma alloc_text\' can only appear at file scope"}
["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:27:19: error: \'#pragma alloc_text\' can only appear at file scope"}
Line 3,153: Line 3,154:
},
},
["err_pragma_expected_integer"]={
["err_pragma_expected_integer"]={
[b]={{nil,t,"err_pragma_expected_integer"}},
[d]={{nil,t,"err_pragma_expected_integer"}},
[j]={{nil,t,"expected an integer argument in \'#pragma %0\'"}},
[e]={{nil,t,"expected an integer argument in \'#pragma %0\'"}},
[i]={{nil,t,"expected an integer argument in \'#pragma A\'"}},
[f]={{nil,t,"expected an integer argument in \'#pragma A\'"}},
[h]=k,
[g]=k,
[c]="expected an integer argument in \'\\#pragma (.*?)\'",
[h]="expected an integer argument in \'\\#pragma (.*?)\'",
[f]=a,
[b]=a,
[e]={{nil,t,y}},
[c]={{nil,t,y}},
[g]={gb,1570627358,hb,db},
[j]={lb,1570627358,kb,db},
[d]={{v,3983,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::numeric_constant) || !PP.parseSimpleIntegerLiteral(Tok, MaxTokens)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_expected_integer) << \"clang max_tokens_here\";"},{v,4015,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::numeric_constant) || !PP.parseSimpleIntegerLiteral(Tok, MaxTokens)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_expected_integer) << \"clang max_tokens_total\";"}},
[i]={{v,3983,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::numeric_constant) || !PP.parseSimpleIntegerLiteral(Tok, MaxTokens)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_expected_integer) << \"clang max_tokens_here\";"},{v,4015,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::numeric_constant) || !PP.parseSimpleIntegerLiteral(Tok, MaxTokens)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_expected_integer) << \"clang max_tokens_total\";"}},
[l]={
[l]={
["clang/test/Parser/max-tokens.cpp"]={"clang/test/Parser/max-tokens.cpp:8:31: error: expected an integer argument in \'#pragma clang max_tokens_here\'","clang/test/Parser/max-tokens.cpp:15:32: error: expected an integer argument in \'#pragma clang max_tokens_total\'"}
["clang/test/Parser/max-tokens.cpp"]={"clang/test/Parser/max-tokens.cpp:8:31: error: expected an integer argument in \'#pragma clang max_tokens_here\'","clang/test/Parser/max-tokens.cpp:15:32: error: expected an integer argument in \'#pragma clang max_tokens_total\'"}
Line 3,167: Line 3,168:
},
},
["err_pragma_fc_except_requires_precise"]={
["err_pragma_fc_except_requires_precise"]={
[b]={{nil,t,"err_pragma_fc_except_requires_precise"}},
[d]={{nil,t,"err_pragma_fc_except_requires_precise"}},
[j]={{nil,t,"\'#pragma float_control(except, on)\' is illegal when precise is disabled"}},
[e]={{nil,t,"\'#pragma float_control(except, on)\' is illegal when precise is disabled"}},
[i]={{nil,t,"\'#pragma float_control(except, on)\' is illegal when precise is disabled"}},
[f]={{nil,t,"\'#pragma float_control(except, on)\' is illegal when precise is disabled"}},
[h]=k,
[g]=k,
[c]="\'\\#pragma float_control\\(except, on\\)\' is illegal when precise is disabled",
[h]="\'\\#pragma float_control\\(except, on\\)\' is illegal when precise is disabled",
[f]=a,
[b]=a,
[e]={{nil,t,m}},
[c]={{nil,t,m}},
[g]={qb,1576908663,sb,nb},
[j]={pb,1576908663,sb,ub},
[d]={{J,579,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  // ...\n  case PFC_Except:\n    if (!isPreciseFPEnabled())\n      Diag(Loc, diag::err_pragma_fc_except_requires_precise);"}}
[i]={{J,579,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  // ...\n  case PFC_Except:\n    if (!isPreciseFPEnabled())\n      Diag(Loc, diag::err_pragma_fc_except_requires_precise);"}}
},
},
["err_pragma_fc_noprecise_requires_noexcept"]={
["err_pragma_fc_noprecise_requires_noexcept"]={
[b]={{nil,t,"err_pragma_fc_noprecise_requires_noexcept"}},
[d]={{nil,t,"err_pragma_fc_noprecise_requires_noexcept"}},
[j]={{nil,t,"\'#pragma float_control(precise, off)\' is illegal when except is enabled"}},
[e]={{nil,t,"\'#pragma float_control(precise, off)\' is illegal when except is enabled"}},
[i]={{nil,t,"\'#pragma float_control(precise, off)\' is illegal when except is enabled"}},
[f]={{nil,t,"\'#pragma float_control(precise, off)\' is illegal when except is enabled"}},
[h]=k,
[g]=k,
[c]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when except is enabled",
[h]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when except is enabled",
[f]=a,
[b]=a,
[e]={{nil,t,m}},
[c]={{nil,t,m}},
[g]={qb,1576908663,sb,nb},
[j]={pb,1576908663,sb,ub},
[d]={{J,570,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  // ...\n  case PFC_NoPrecise:\n    if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n      Diag(Loc, diag::err_pragma_fc_noprecise_requires_noexcept);"}},
[i]={{J,570,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  // ...\n  case PFC_NoPrecise:\n    if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n      Diag(Loc, diag::err_pragma_fc_noprecise_requires_noexcept);"}},
[l]={
[l]={
["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:62:9: error: \'#pragma float_control(precise, off)\' is illegal when except is enabled","clang/test/Parser/fp-floatcontrol-syntax.cpp:68:9: error: \'#pragma float_control(precise, off)\' is illegal when except is enabled"}
["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:62:9: error: \'#pragma float_control(precise, off)\' is illegal when except is enabled","clang/test/Parser/fp-floatcontrol-syntax.cpp:68:9: error: \'#pragma float_control(precise, off)\' is illegal when except is enabled"}
Line 3,192: Line 3,193:
},
},
["err_pragma_fc_noprecise_requires_nofenv"]={
["err_pragma_fc_noprecise_requires_nofenv"]={
[b]={{nil,t,"err_pragma_fc_noprecise_requires_nofenv"}},
[d]={{nil,t,"err_pragma_fc_noprecise_requires_nofenv"}},
[j]={{nil,t,"\'#pragma float_control(precise, off)\' is illegal when fenv_access is enabled"}},
[e]={{nil,t,"\'#pragma float_control(precise, off)\' is illegal when fenv_access is enabled"}},
[i]={{nil,t,"\'#pragma float_control(precise, off)\' is illegal when fenv_access is enabled"}},
[f]={{nil,t,"\'#pragma float_control(precise, off)\' is illegal when fenv_access is enabled"}},
[h]=k,
[g]=k,
[c]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when fenv_access is enabled",
[h]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when fenv_access is enabled",
[f]=a,
[b]=a,
[e]={{nil,t,m}},
[c]={{nil,t,m}},
[g]={qb,1576908663,sb,nb},
[j]={pb,1576908663,sb,ub},
[d]={{J,572,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  // ...\n  case PFC_NoPrecise:\n    if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n    // ...\n    else if (CurFPFeatures.getAllowFEnvAccess())\n      Diag(Loc, diag::err_pragma_fc_noprecise_requires_nofenv);"}}
[i]={{J,572,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  // ...\n  case PFC_NoPrecise:\n    if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n    // ...\n    else if (CurFPFeatures.getAllowFEnvAccess())\n      Diag(Loc, diag::err_pragma_fc_noprecise_requires_nofenv);"}}
},
},
["err_pragma_fc_pp_scope"]={
["err_pragma_fc_pp_scope"]={
[b]={{nil,t,"err_pragma_fc_pp_scope"}},
[d]={{nil,t,"err_pragma_fc_pp_scope"}},
[j]={{nil,F,"\'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification"},{U,t,"\'#pragma float_control push/pop\' can only appear at file scope or namespace scope"}},
[e]={{nil,F,"\'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification"},{V,t,"\'#pragma float_control push/pop\' can only appear at file scope or namespace scope"}},
[i]={{nil,F,"\'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification"},{U,t,"\'#pragma float_control push/pop\' can only appear at file scope or namespace scope"}},
[f]={{nil,F,"\'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification"},{V,t,"\'#pragma float_control push/pop\' can only appear at file scope or namespace scope"}},
[h]=k,
[g]=k,
[c]="\'\\#pragma float_control push\\/pop\' can only appear at file or namespace scope or within a language linkage specification",
[h]="\'\\#pragma float_control push\\/pop\' can only appear at file or namespace scope or within a language linkage specification",
[f]=a,
[b]=a,
[e]={{nil,t,m}},
[c]={{nil,t,m}},
[g]={qb,1576908663,sb,nb},
[j]={pb,1576908663,sb,ub},
[d]={{J,558,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  // ...\n  if ((Action == PSK_Push_Set || Action == PSK_Push || Action == PSK_Pop) && !CurContext->getRedeclContext()->isFileContext()) {\n    // ...\n    Diag(Loc, diag::err_pragma_fc_pp_scope);"}},
[i]={{J,558,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  // ...\n  if ((Action == PSK_Push_Set || Action == PSK_Push || Action == PSK_Pop) && !CurContext->getRedeclContext()->isFileContext()) {\n    // ...\n    Diag(Loc, diag::err_pragma_fc_pp_scope);"}},
[l]={
[l]={
["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:33:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:34:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:35:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:36:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification"}
["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:33:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:34:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:35:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:36:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification"}
Line 3,217: Line 3,218:
},
},
["err_pragma_fenv_requires_precise"]={
["err_pragma_fenv_requires_precise"]={
[b]={{nil,t,"err_pragma_fenv_requires_precise"}},
[d]={{nil,t,"err_pragma_fenv_requires_precise"}},
[j]={{nil,t,"\'#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled"}},
[e]={{nil,t,"\'#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled"}},
[i]={{nil,t,"\'#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled"}},
[f]={{nil,t,"\'#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled"}},
[h]=k,
[g]=k,
[c]="\'\\#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled",
[h]="\'\\#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled",
[f]=a,
[b]=a,
[e]={{nil,t,m}},
[c]={{nil,t,m}},
[g]={qb,1576908663,sb,nb},
[j]={pb,1576908663,sb,ub},
[d]={{J,1360,"void Sema::ActOnPragmaFEnvAccess(SourceLocation Loc, bool IsEnabled) {\n  // ...\n  if (IsEnabled) {\n    // Verify Microsoft restriction:\n    // You can\'t enable fenv_access unless precise semantics are enabled.\n    // Precise semantics can be enabled either by the float_control\n    // pragma, or by using the /fp:precise or /fp:strict compiler options\n    if (!isPreciseFPEnabled())\n      Diag(Loc, diag::err_pragma_fenv_requires_precise);"}}
[i]={{J,1360,"void Sema::ActOnPragmaFEnvAccess(SourceLocation Loc, bool IsEnabled) {\n  // ...\n  if (IsEnabled) {\n    // Verify Microsoft restriction:\n    // You can\'t enable fenv_access unless precise semantics are enabled.\n    // Precise semantics can be enabled either by the float_control\n    // pragma, or by using the /fp:precise or /fp:strict compiler options\n    if (!isPreciseFPEnabled())\n      Diag(Loc, diag::err_pragma_fenv_requires_precise);"}}
},
},
["err_pragma_file_or_compound_scope"]={
["err_pragma_file_or_compound_scope"]={
[b]={{nil,t,"err_pragma_file_or_compound_scope"}},
[d]={{nil,t,"err_pragma_file_or_compound_scope"}},
[j]={{nil,t,"\'#pragma %0\' can only appear at file scope or at the start of a compound statement"}},
[e]={{nil,t,"\'#pragma %0\' can only appear at file scope or at the start of a compound statement"}},
[i]={{nil,t,"\'#pragma A\' can only appear at file scope or at the start of a compound statement"}},
[f]={{nil,t,"\'#pragma A\' can only appear at file scope or at the start of a compound statement"}},
[h]=k,
[g]=k,
[c]="\'\\#pragma (.*?)\' can only appear at file scope or at the start of a compound statement",
[h]="\'\\#pragma (.*?)\' can only appear at file scope or at the start of a compound statement",
[f]=a,
[b]=a,
[e]={{nil,t,y}},
[c]={{nil,t,y}},
[g]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control","Add support for #pragma float_control\n\nReviewers: rjmccall, erichkeane, sepavloff\n\nDifferential Revision: https://reviews.llvm.org/D72841"},
[j]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control","Add support for #pragma float_control\n\nReviewers: rjmccall, erichkeane, sepavloff\n\nDifferential Revision: https://reviews.llvm.org/D72841"},
[d]={{rc,422,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_fp_contract:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"fp_contract\";"},{rc,429,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_fp:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"clang fp\";"},{rc,437,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_fenv_access:\n  case tok::annot_pragma_fenv_access_ms:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << (Kind == tok::annot_pragma_fenv_access ? \"STDC FENV_ACCESS\" : \"fenv_access\");"},{rc,446,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_fenv_round:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"STDC FENV_ROUND\";"},{rc,453,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_float_control:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"float_control\";"}},
[i]={{tc,422,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_fp_contract:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"fp_contract\";"},{tc,429,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_fp:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"clang fp\";"},{tc,437,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_fenv_access:\n  case tok::annot_pragma_fenv_access_ms:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << (Kind == tok::annot_pragma_fenv_access ? \"STDC FENV_ACCESS\" : \"fenv_access\");"},{tc,446,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_fenv_round:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"STDC FENV_ROUND\";"},{tc,453,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_float_control:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"float_control\";"}},
[l]={
[l]={
["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:6:14: error: \'#pragma fp_contract\' can only appear at file scope or at the start of a compound statement","clang/test/Parser/pragma-fp-contract.c:31:15: error: \'#pragma clang fp\' can only appear at file scope or at the start of a compound statement"}
["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:6:14: error: \'#pragma fp_contract\' can only appear at file scope or at the start of a compound statement","clang/test/Parser/pragma-fp-contract.c:31:15: error: \'#pragma clang fp\' can only appear at file scope or at the start of a compound statement"}
Line 3,242: Line 3,243:
},
},
["err_pragma_float_control_malformed"]={
["err_pragma_float_control_malformed"]={
[b]={{nil,t,"err_pragma_float_control_malformed"}},
[d]={{nil,t,"err_pragma_float_control_malformed"}},
[j]={{nil,t,"pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"}},
[e]={{nil,t,"pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"}},
[i]={{nil,t,"pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"}},
[f]={{nil,t,"pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"}},
[h]=k,
[g]=k,
[c]="pragma float_control is malformed; use \'float_control\\(\\{push\\|pop\\}\\)\' or \'float_control\\(\\{precise\\|except\\}, \\{on\\|off\\} \\[,push\\]\\)\'",
[h]="pragma float_control is malformed; use \'float_control\\(\\{push\\|pop\\}\\)\' or \'float_control\\(\\{precise\\|except\\}, \\{on\\|off\\} \\[,push\\]\\)\'",
[f]=a,
[b]=a,
[e]={{nil,t,y}},
[c]={{nil,t,y}},
[g]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control","Add support for #pragma float_control\n\nReviewers: rjmccall, erichkeane, sepavloff\n\nDifferential Revision: https://reviews.llvm.org/D72841"},
[j]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control","Add support for #pragma float_control\n\nReviewers: rjmccall, erichkeane, sepavloff\n\nDifferential Revision: https://reviews.llvm.org/D72841"},
[d]={{v,2919,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2934,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2938,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n    if (Tok.isNot(tok::r_paren)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2948,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2953,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (!Tok.isAnyIdentifier()) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2968,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (PushOnOff == \"on\")\n      // ...\n      else if (PushOnOff == \"off\") {\n      // ...\n      } else if (PushOnOff == \"push\") {\n      // ...\n      } else {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2975,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (Tok.is(tok::comma)) {\n        // ...\n        if (!Tok.isAnyIdentifier()) {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2982,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (Tok.is(tok::comma)) {\n        // ...\n        if (ExpectedPush == \"push\") {\n        // ...\n        } else {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2988,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (Tok.isNot(tok::r_paren)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"}},
[i]={{v,2919,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2934,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2938,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n    if (Tok.isNot(tok::r_paren)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2948,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2953,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (!Tok.isAnyIdentifier()) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2968,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (PushOnOff == \"on\")\n      // ...\n      else if (PushOnOff == \"off\") {\n      // ...\n      } else if (PushOnOff == \"push\") {\n      // ...\n      } else {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2975,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (Tok.is(tok::comma)) {\n        // ...\n        if (!Tok.isAnyIdentifier()) {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2982,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (Tok.is(tok::comma)) {\n        // ...\n        if (ExpectedPush == \"push\") {\n        // ...\n        } else {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2988,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (Tok.isNot(tok::r_paren)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"}},
[l]={
[l]={
["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:37:39: error: pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"}
["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:37:39: error: pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"}
Line 3,256: Line 3,257:
},
},
["err_pragma_fp_invalid_argument"]={
["err_pragma_fp_invalid_argument"]={
[b]={{nil,n,"err_pragma_fp_invalid_argument"}},
[d]={{nil,n,"err_pragma_fp_invalid_argument"}},
[j]={{nil,C,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; expected %select{\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'|\'source\', \'double\' or \'extended\'}2"},{F,A,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; expected %select{\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'}2"},{Gb,t,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; %select{expected \'fast\' or \'on\' or \'off\'|expected \'on\' or \'off\'}2"},{o,n,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; expected \'on\', \'fast\' or \'off\'"}},
[e]={{nil,C,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; expected %select{\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'|\'source\', \'double\' or \'extended\'}2"},{F,A,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; expected %select{\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'}2"},{Cb,t,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; %select{expected \'fast\' or \'on\' or \'off\'|expected \'on\' or \'off\'}2"},{o,n,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; expected \'on\', \'fast\' or \'off\'"}},
[i]={{nil,C,{"unexpected argument \'A\' to \'#pragma clang fp B\'; expected ",{"\'fast\' or \'on\' or \'off\'","\'on\' or \'off\'","\'ignore\', \'maytrap\' or \'strict\'","\'source\', \'double\' or \'extended\'"}}},{F,A,{"unexpected argument \'A\' to \'#pragma clang fp B\'; expected ",{"\'fast\' or \'on\' or \'off\'","\'on\' or \'off\'","\'ignore\', \'maytrap\' or \'strict\'"}}},{Gb,t,{"unexpected argument \'A\' to \'#pragma clang fp B\'; ",{"expected \'fast\' or \'on\' or \'off\'","expected \'on\' or \'off\'"}}},{o,n,"unexpected argument \'A\' to \'#pragma clang fp B\'; expected \'on\', \'fast\' or \'off\'"}},
[f]={{nil,C,{"unexpected argument \'A\' to \'#pragma clang fp B\'; expected ",{"\'fast\' or \'on\' or \'off\'","\'on\' or \'off\'","\'ignore\', \'maytrap\' or \'strict\'","\'source\', \'double\' or \'extended\'"}}},{F,A,{"unexpected argument \'A\' to \'#pragma clang fp B\'; expected ",{"\'fast\' or \'on\' or \'off\'","\'on\' or \'off\'","\'ignore\', \'maytrap\' or \'strict\'"}}},{Cb,t,{"unexpected argument \'A\' to \'#pragma clang fp B\'; ",{"expected \'fast\' or \'on\' or \'off\'","expected \'on\' or \'off\'"}}},{o,n,"unexpected argument \'A\' to \'#pragma clang fp B\'; expected \'on\', \'fast\' or \'off\'"}},
[h]=k,
[g]=k,
[c]="unexpected argument \'(.*?)\' to \'\\#pragma clang fp (.*?)\'; expected (?:\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'|\'source\', \'double\' or \'extended\')",
[h]="unexpected argument \'(.*?)\' to \'\\#pragma clang fp (.*?)\'; expected (?:\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'|\'source\', \'double\' or \'extended\')",
[f]=a,
[b]=a,
[e]={{nil,n,y}},
[c]={{nil,n,y}},
[g]={"60d3264d5fbe",1491340716,"Add #pragma clang fp","Add #pragma clang fp\n\nThis adds the new pragma and the first variant, contract(on/off/fast).\n\nThe pragma has the same block scope rules as STDC FP_CONTRACT, i.e. it can be\nplaced at the beginning of a compound statement or at file scope.\n\nSimilarly to STDC FP_CONTRACT there is no need to use attributes.  First an\nannotate token is inserted with the parsed details of the pragma.  Then the\nannotate token is parsed in the proper contexts and the Sema is updated with\nthe corresponding FPOptions using the shared ActOn function with STDC\nFP_CONTRACT.\n\nAfter this the FPOptions from the Sema is propagated into the AST expression\nnodes.  There is no change here.\n\nI was going to add a \'default\' option besides \'on/off/fast\' similar to STDC\nFP_CONTRACT but then decided against it. I think that we\'d have to make option\nuppercase then to avoid using \'default\' the keyword.  Also because of the\nscoped activation of pragma I am not sure there is really a need a for this.\n\nDifferential Revision: https://reviews.llvm.org/D31276\n\nllvm-svn: 299470"},
[j]={"60d3264d5fbe",1491340716,"Add #pragma clang fp","Add #pragma clang fp\n\nThis adds the new pragma and the first variant, contract(on/off/fast).\n\nThe pragma has the same block scope rules as STDC FP_CONTRACT, i.e. it can be\nplaced at the beginning of a compound statement or at file scope.\n\nSimilarly to STDC FP_CONTRACT there is no need to use attributes.  First an\nannotate token is inserted with the parsed details of the pragma.  Then the\nannotate token is parsed in the proper contexts and the Sema is updated with\nthe corresponding FPOptions using the shared ActOn function with STDC\nFP_CONTRACT.\n\nAfter this the FPOptions from the Sema is propagated into the AST expression\nnodes.  There is no change here.\n\nI was going to add a \'default\' option besides \'on/off/fast\' similar to STDC\nFP_CONTRACT but then decided against it. I think that we\'d have to make option\nuppercase then to avoid using \'default\' the keyword.  Also because of the\nscoped activation of pragma I am not sure there is really a need a for this.\n\nDifferential Revision: https://reviews.llvm.org/D31276\n\nllvm-svn: 299470"},
[d]={{v,3248,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    // Don\'t diagnose if we have an eval_metod pragma with \"double\" kind.\n    if (Tok.isNot(tok::identifier) && !isEvalMethodDouble) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << static_cast<int>(*FlagKind);"},{v,3264,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (FlagKind == TokFPAnnotValue::Contract) {\n      // ...\n      if (!AnnotValue->ContractValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{v,3276,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n      // ...\n      if (!AnnotValue->ReassociateValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{v,3289,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n      // ...\n      if (!AnnotValue->ExceptionsValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{v,3302,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::EvalMethod) {\n      // ...\n      if (!AnnotValue->EvalMethodValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"}},
[i]={{v,3248,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    // Don\'t diagnose if we have an eval_metod pragma with \"double\" kind.\n    if (Tok.isNot(tok::identifier) && !isEvalMethodDouble) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << static_cast<int>(*FlagKind);"},{v,3264,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (FlagKind == TokFPAnnotValue::Contract) {\n      // ...\n      if (!AnnotValue->ContractValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{v,3276,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n      // ...\n      if (!AnnotValue->ReassociateValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{v,3289,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n      // ...\n      if (!AnnotValue->ExceptionsValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{v,3302,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::EvalMethod) {\n      // ...\n      if (!AnnotValue->EvalMethodValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"}},
[l]={
[l]={
["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:38:30: error: unexpected argument \'fast\' to \'#pragma clang fp reassociate\'; expected \'on\' or \'off\'"}
["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:38:30: error: unexpected argument \'fast\' to \'#pragma clang fp reassociate\'; expected \'on\' or \'off\'"}
Line 3,270: Line 3,271:
},
},
["err_pragma_fp_invalid_option"]={
["err_pragma_fp_invalid_option"]={
[b]={{nil,n,"err_pragma_fp_invalid_option"}},
[d]={{nil,n,"err_pragma_fp_invalid_option"}},
[j]={{nil,A,"%select{invalid|missing}0 option%select{ %1|}0; expected \'contract\', \'reassociate\' or \'exceptions\'"},{Gb,t,"%select{invalid|missing}0 option%select{ %1|}0; expected \'contract\' or \'reassociate\'"},{o,n,"%select{invalid|missing}0 option%select{ %1|}0; expected contract"}},
[e]={{nil,A,"%select{invalid|missing}0 option%select{ %1|}0; expected \'contract\', \'reassociate\' or \'exceptions\'"},{Cb,t,"%select{invalid|missing}0 option%select{ %1|}0; expected \'contract\' or \'reassociate\'"},{o,n,"%select{invalid|missing}0 option%select{ %1|}0; expected contract"}},
[i]={{nil,A,{{ob,zb},Lb,{vb,a},"; expected \'contract\', \'reassociate\' or \'exceptions\'"}},{Gb,t,{{ob,zb},Lb,{vb,a},"; expected \'contract\' or \'reassociate\'"}},{o,n,{{ob,zb},Lb,{vb,a},"; expected contract"}}},
[f]={{nil,A,{{nb,Lb},Ob,{wb,a},"; expected \'contract\', \'reassociate\' or \'exceptions\'"}},{Cb,t,{{nb,Lb},Ob,{wb,a},"; expected \'contract\' or \'reassociate\'"}},{o,n,{{nb,Lb},Ob,{wb,a},"; expected contract"}}},
[h]=k,
[g]=k,
[c]="(?:invalid|missing) option(?: (.*?)|); expected \'contract\', \'reassociate\' or \'exceptions\'",
[h]="(?:invalid|missing) option(?: (.*?)|); expected \'contract\', \'reassociate\' or \'exceptions\'",
[f]=a,
[b]=a,
[e]={{nil,n,y}},
[c]={{nil,n,y}},
[g]={"60d3264d5fbe",1491340716,"Add #pragma clang fp","Add #pragma clang fp\n\nThis adds the new pragma and the first variant, contract(on/off/fast).\n\nThe pragma has the same block scope rules as STDC FP_CONTRACT, i.e. it can be\nplaced at the beginning of a compound statement or at file scope.\n\nSimilarly to STDC FP_CONTRACT there is no need to use attributes.  First an\nannotate token is inserted with the parsed details of the pragma.  Then the\nannotate token is parsed in the proper contexts and the Sema is updated with\nthe corresponding FPOptions using the shared ActOn function with STDC\nFP_CONTRACT.\n\nAfter this the FPOptions from the Sema is propagated into the AST expression\nnodes.  There is no change here.\n\nI was going to add a \'default\' option besides \'on/off/fast\' similar to STDC\nFP_CONTRACT but then decided against it. I think that we\'d have to make option\nuppercase then to avoid using \'default\' the keyword.  Also because of the\nscoped activation of pragma I am not sure there is really a need a for this.\n\nDifferential Revision: https://reviews.llvm.org/D31276\n\nllvm-svn: 299470"},
[j]={"60d3264d5fbe",1491340716,"Add #pragma clang fp","Add #pragma clang fp\n\nThis adds the new pragma and the first variant, contract(on/off/fast).\n\nThe pragma has the same block scope rules as STDC FP_CONTRACT, i.e. it can be\nplaced at the beginning of a compound statement or at file scope.\n\nSimilarly to STDC FP_CONTRACT there is no need to use attributes.  First an\nannotate token is inserted with the parsed details of the pragma.  Then the\nannotate token is parsed in the proper contexts and the Sema is updated with\nthe corresponding FPOptions using the shared ActOn function with STDC\nFP_CONTRACT.\n\nAfter this the FPOptions from the Sema is propagated into the AST expression\nnodes.  There is no change here.\n\nI was going to add a \'default\' option besides \'on/off/fast\' similar to STDC\nFP_CONTRACT but then decided against it. I think that we\'d have to make option\nuppercase then to avoid using \'default\' the keyword.  Also because of the\nscoped activation of pragma I am not sure there is really a need a for this.\n\nDifferential Revision: https://reviews.llvm.org/D31276\n\nllvm-svn: 299470"},
[d]={{v,3213,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/true << \"\";"},{v,3231,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (!FlagKind) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/false << OptionInfo;"}},
[i]={{v,3213,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/true << \"\";"},{v,3231,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (!FlagKind) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/false << OptionInfo;"}},
[l]={
[l]={
["clang/test/Parser/pragma-fp.cpp"]={"clang/test/Parser/pragma-fp.cpp:5:17: error: missing option; expected \'contract\', \'reassociate\' or \'exceptions\'","clang/test/Parser/pragma-fp.cpp:12:18: error: invalid option \'blah\'; expected \'contract\', \'reassociate\' or \'exceptions\'"}
["clang/test/Parser/pragma-fp.cpp"]={"clang/test/Parser/pragma-fp.cpp:5:17: error: missing option; expected \'contract\', \'reassociate\' or \'exceptions\'","clang/test/Parser/pragma-fp.cpp:12:18: error: invalid option \'blah\'; expected \'contract\', \'reassociate\' or \'exceptions\'"}
Line 3,284: Line 3,285:
},
},
["err_pragma_invalid_keyword"]={
["err_pragma_invalid_keyword"]={
[b]="err_pragma_invalid_keyword",
[d]="err_pragma_invalid_keyword",
[j]="invalid argument; expected \'enable\'%select{|, \'full\'}0%select{|, \'assume_safety\'}1 or \'disable\'",
[e]="invalid argument; expected \'enable\'%select{|, \'full\'}0%select{|, \'assume_safety\'}1 or \'disable\'",
[i]={{nil,nil,{"invalid argument; expected \'enable\'",{a,", \'full\'"},{a,", \'assume_safety\'"}," or \'disable\'"}}},
[f]={{nil,nil,{"invalid argument; expected \'enable\'",{a,", \'full\'"},{a,", \'assume_safety\'"}," or \'disable\'"}}},
[h]=k,
[g]=k,
[c]="invalid argument; expected \'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\'",
[h]="invalid argument; expected \'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\'",
[f]=a,
[b]=a,
[e]=y,
[c]=y,
[g]={"cab7ca3e2a64",1406753673,"Add a state variable to the loop hint attribute.","Add a state variable to the loop hint attribute.\n\nThis patch is necessary to support constant expressions which replaces the integer value in the loop hint attribute with an expression. The integer value was also storing the pragma’s state for options like vectorize(enable/disable) and the pragma unroll and nounroll directive. The state variable is introduced to hold the state of those options/pragmas. This moves the validation of the state (keywords) from SemaStmtAttr handler to the loop hint annotation token handler.\n\nReviewed by Aaron Ballman\n\nllvm-svn: 214333"},
[j]={"cab7ca3e2a64",1406753673,"Add a state variable to the loop hint attribute.","Add a state variable to the loop hint attribute.\n\nThis patch is necessary to support constant expressions which replaces the integer value in the loop hint attribute with an expression. The integer value was also storing the pragma’s state for options like vectorize(enable/disable) and the pragma unroll and nounroll directive. The state variable is introduced to hold the state of those options/pragmas. This moves the validation of the state (keywords) from SemaStmtAttr handler to the loop hint annotation token handler.\n\nReviewed by Aaron Ballman\n\nllvm-svn: 214333"},
[d]={{v,1415,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // ...\n  // Validate the argument.\n  if (StateOption) {\n    // ...\n    if (!Valid) {\n      if (OptionPipelineDisabled) {\n      // ...\n      } else {\n        Diag(Toks[0].getLocation(), diag::err_pragma_invalid_keyword) << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}},
[i]={{v,1415,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // ...\n  // Validate the argument.\n  if (StateOption) {\n    // ...\n    if (!Valid) {\n      if (OptionPipelineDisabled) {\n      // ...\n      } else {\n        Diag(Toks[0].getLocation(), diag::err_pragma_invalid_keyword) << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}},
[l]={
[l]={
["clang/test/Parser/pragma-loop-safety.cpp"]={"clang/test/Parser/pragma-loop-safety.cpp:18:109: error: invalid argument; expected \'enable\', \'full\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:19:105: error: invalid argument; expected \'enable\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:21:121: error: invalid argument; expected \'enable\', \'assume_safety\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:22:122: error: invalid argument; expected \'enable\', \'assume_safety\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:23:109: error: invalid argument; expected \'enable\', \'full\' or \'disable\'"}
["clang/test/Parser/pragma-loop-safety.cpp"]={"clang/test/Parser/pragma-loop-safety.cpp:18:109: error: invalid argument; expected \'enable\', \'full\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:19:105: error: invalid argument; expected \'enable\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:21:121: error: invalid argument; expected \'enable\', \'assume_safety\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:22:122: error: invalid argument; expected \'enable\', \'assume_safety\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:23:109: error: invalid argument; expected \'enable\', \'full\' or \'disable\'"}
Line 3,298: Line 3,299:
},
},
["err_pragma_loop_compatibility"]={
["err_pragma_loop_compatibility"]={
[b]="err_pragma_loop_compatibility",
[d]="err_pragma_loop_compatibility",
[j]="%select{incompatible|duplicate}0 directives \'%1\' and \'%2\'",
[e]="%select{incompatible|duplicate}0 directives \'%1\' and \'%2\'",
[i]={{nil,nil,{{"incompatible","duplicate"}," directives \'B\' and \'C\'"}}},
[f]={{nil,nil,{{"incompatible","duplicate"}," directives \'B\' and \'C\'"}}},
[h]=k,
[g]=k,
[c]="(?:incompatible|duplicate) directives \'(.*?)\' and \'(.*?)\'",
[h]="(?:incompatible|duplicate) directives \'(.*?)\' and \'(.*?)\'",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints.","Adding a new #pragma for the vectorize and interleave optimization hints.\n\nPatch thanks to Tyler Nowicki!\n\nllvm-svn: 210330"},
[j]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints.","Adding a new #pragma for the vectorize and interleave optimization hints.\n\nPatch thanks to Tyler Nowicki!\n\nllvm-svn: 210330"},
[d]={{"clang/lib/Sema/SemaStmtAttr.cpp",431,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n  // ...\n  for (const auto *I : Attrs) {\n    // ...\n    if (PrevAttr)\n      // ...\n      S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/true << PrevAttr->getDiagnosticName(Policy) << LH->getDiagnosticName(Policy);"},{"clang/lib/Sema/SemaStmtAttr.cpp",442,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n  // ...\n  for (const auto *I : Attrs) {\n    // ...\n    if (CategoryState.StateAttr && CategoryState.NumericAttr && (Category == Unroll || Category == UnrollAndJam || CategoryState.StateAttr->getState() == LoopHintAttr::Disable)) {\n      // ...\n      S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/false << CategoryState.StateAttr->getDiagnosticName(Policy) << CategoryState.NumericAttr->getDiagnosticName(Policy);"}},
[i]={{"clang/lib/Sema/SemaStmtAttr.cpp",431,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n  // ...\n  for (const auto *I : Attrs) {\n    // ...\n    if (PrevAttr)\n      // ...\n      S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/true << PrevAttr->getDiagnosticName(Policy) << LH->getDiagnosticName(Policy);"},{"clang/lib/Sema/SemaStmtAttr.cpp",442,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n  // ...\n  for (const auto *I : Attrs) {\n    // ...\n    if (CategoryState.StateAttr && CategoryState.NumericAttr && (Category == Unroll || Category == UnrollAndJam || CategoryState.StateAttr->getState() == LoopHintAttr::Disable)) {\n      // ...\n      S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/false << CategoryState.StateAttr->getDiagnosticName(Policy) << CategoryState.NumericAttr->getDiagnosticName(Policy);"}},
[l]={
[l]={
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:27:15: error: incompatible directives \'pipeline(disable)\' and \'pipeline_initiation_interval(4)\'"}
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:27:15: error: incompatible directives \'pipeline(disable)\' and \'pipeline_initiation_interval(4)\'"}
Line 3,312: Line 3,313:
},
},
["err_pragma_loop_invalid_argument_type"]={
["err_pragma_loop_invalid_argument_type"]={
[b]="err_pragma_loop_invalid_argument_type",
[d]="err_pragma_loop_invalid_argument_type",
[j]="invalid argument of type %0; expected an integer type",
[e]="invalid argument of type %0; expected an integer type",
[i]="invalid argument of type A; expected an integer type",
[f]="invalid argument of type A; expected an integer type",
[h]=k,
[g]=k,
[c]="invalid argument of type (.*?); expected an integer type",
[h]="invalid argument of type (.*?); expected an integer type",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints.","Allow constant expressions in pragma loop hints.\n\nPreviously loop hints such as #pragma loop vectorize_width(#) required a constant. This patch allows a constant expression to be used as well. Such as a non-type template parameter or an expression (2 * c + 1).\n\nReviewed by Richard Smith\n\nllvm-svn: 219589"},
[j]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints.","Allow constant expressions in pragma loop hints.\n\nPreviously loop hints such as #pragma loop vectorize_width(#) required a constant. This patch allows a constant expression to be used as well. Such as a non-type template parameter or an expression (2 * c + 1).\n\nReviewed by Richard Smith\n\nllvm-svn: 219589"},
[d]={{O,3826,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n  // ...\n  if (!QT->isIntegerType() || QT->isBooleanType() || QT->isCharType()) {\n    Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_type) << QT;"}},
[i]={{O,3826,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n  // ...\n  if (!QT->isIntegerType() || QT->isBooleanType() || QT->isCharType()) {\n    Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_type) << QT;"}},
[l]={
[l]={
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:12:134: error: invalid argument of type \'double\'; expected an integer type"}
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:12:134: error: invalid argument of type \'double\'; expected an integer type"}
Line 3,326: Line 3,327:
},
},
["err_pragma_loop_invalid_argument_value"]={
["err_pragma_loop_invalid_argument_value"]={
[b]="err_pragma_loop_invalid_argument_value",
[d]="err_pragma_loop_invalid_argument_value",
[j]="%select{invalid value \'%0\'; must be positive|value \'%0\' is too large}1",
[e]="%select{invalid value \'%0\'; must be positive|value \'%0\' is too large}1",
[i]={{nil,nil,{{"invalid value \'A\'; must be positive","value \'A\' is too large"}}}},
[f]={{nil,nil,{{"invalid value \'A\'; must be positive","value \'A\' is too large"}}}},
[h]=k,
[g]=k,
[c]="(?:invalid value \'(.*?)\'; must be positive|value \'(.*?)\' is too large)",
[h]="(?:invalid value \'(.*?)\'; must be positive|value \'(.*?)\' is too large)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints.","Allow constant expressions in pragma loop hints.\n\nPreviously loop hints such as #pragma loop vectorize_width(#) required a constant. This patch allows a constant expression to be used as well. Such as a non-type template parameter or an expression (2 * c + 1).\n\nReviewed by Richard Smith\n\nllvm-svn: 219589"},
[j]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints.","Allow constant expressions in pragma loop hints.\n\nPreviously loop hints such as #pragma loop vectorize_width(#) required a constant. This patch allows a constant expression to be used as well. Such as a non-type template parameter or an expression (2 * c + 1).\n\nReviewed by Richard Smith\n\nllvm-svn: 219589"},
[d]={{O,3838,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n  // ...\n  if (!ValueIsPositive || ValueAPS.getActiveBits() > 31) {\n    Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_value) << toString(ValueAPS, 10) << ValueIsPositive;"}},
[i]={{O,3838,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n  // ...\n  if (!ValueIsPositive || ValueAPS.getActiveBits() > 31) {\n    Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_value) << toString(ValueAPS, 10) << ValueIsPositive;"}},
[l]={
[l]={
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:13:110: error: invalid value \'0\'; must be positive","clang/test/Sema/pragma-pipeline.cpp:14:111: error: invalid value \'-1\'; must be positive"}
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:13:110: error: invalid value \'0\'; must be positive","clang/test/Sema/pragma-pipeline.cpp:14:111: error: invalid value \'-1\'; must be positive"}
Line 3,340: Line 3,341:
},
},
["err_pragma_loop_invalid_option"]={
["err_pragma_loop_invalid_option"]={
[b]="err_pragma_loop_invalid_option",
[d]="err_pragma_loop_invalid_option",
[j]={{nil,o,"%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"},{x,u,"%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, or distribute"},{"7.1",nil,"%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, or distribute"}},
[e]={{nil,o,"%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"},{x,u,"%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, or distribute"},{"7.1",nil,"%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, or distribute"}},
[i]={{nil,o,{{ob,zb},Lb,{vb,a},"; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"}},{x,u,{{ob,zb},Lb,{vb,a},"; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, or distribute"}},{"7.1",nil,{{ob,zb},Lb,{vb,a},"; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, or distribute"}}},
[f]={{nil,o,{{nb,Lb},Ob,{wb,a},"; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"}},{x,u,{{nb,Lb},Ob,{wb,a},"; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, or distribute"}},{"7.1",nil,{{nb,Lb},Ob,{wb,a},"; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, or distribute"}}},
[h]=k,
[g]=k,
[c]="(?:invalid|missing) option(?: (.*?)|); expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute",
[h]="(?:invalid|missing) option(?: (.*?)|); expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute",
[f]=a,
[b]=a,
[e]=y,
[c]=y,
[g]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints.","Adding a new #pragma for the vectorize and interleave optimization hints.\n\nPatch thanks to Tyler Nowicki!\n\nllvm-svn: 210330"},
[j]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints.","Adding a new #pragma for the vectorize and interleave optimization hints.\n\nPatch thanks to Tyler Nowicki!\n\nllvm-svn: 210330"},
[d]={{v,3515,"/// Handle the \\#pragma clang loop directive.\n///  #pragma clang \'loop\' loop-hints\n///\n///  loop-hints:\n///    loop-hint loop-hints[opt]\n///\n///  loop-hint:\n///    \'vectorize\' \'(\' loop-hint-keyword \')\'\n///    \'interleave\' \'(\' loop-hint-keyword \')\'\n///    \'unroll\' \'(\' unroll-hint-keyword \')\'\n///    \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n///    \'vectorize_width\' \'(\' loop-hint-value \')\'\n///    \'interleave_count\' \'(\' loop-hint-value \')\'\n///    \'unroll_count\' \'(\' loop-hint-value \')\'\n///    \'pipeline\' \'(\' disable \')\'\n///    \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n///  loop-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'assume_safety\'\n///\n///  unroll-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'full\'\n///\n///  loop-hint-value:\n///    constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known.  Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time.  Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/true << \"\";"},{v,3537,"/// Handle the \\#pragma clang loop directive.\n///  #pragma clang \'loop\' loop-hints\n///\n///  loop-hints:\n///    loop-hint loop-hints[opt]\n///\n///  loop-hint:\n///    \'vectorize\' \'(\' loop-hint-keyword \')\'\n///    \'interleave\' \'(\' loop-hint-keyword \')\'\n///    \'unroll\' \'(\' unroll-hint-keyword \')\'\n///    \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n///    \'vectorize_width\' \'(\' loop-hint-value \')\'\n///    \'interleave_count\' \'(\' loop-hint-value \')\'\n///    \'unroll_count\' \'(\' loop-hint-value \')\'\n///    \'pipeline\' \'(\' disable \')\'\n///    \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n///  loop-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'assume_safety\'\n///\n///  unroll-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'full\'\n///\n///  loop-hint-value:\n///    constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known.  Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time.  Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (!OptionValid) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/false << OptionInfo;"}},
[i]={{v,3515,"/// Handle the \\#pragma clang loop directive.\n///  #pragma clang \'loop\' loop-hints\n///\n///  loop-hints:\n///    loop-hint loop-hints[opt]\n///\n///  loop-hint:\n///    \'vectorize\' \'(\' loop-hint-keyword \')\'\n///    \'interleave\' \'(\' loop-hint-keyword \')\'\n///    \'unroll\' \'(\' unroll-hint-keyword \')\'\n///    \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n///    \'vectorize_width\' \'(\' loop-hint-value \')\'\n///    \'interleave_count\' \'(\' loop-hint-value \')\'\n///    \'unroll_count\' \'(\' loop-hint-value \')\'\n///    \'pipeline\' \'(\' disable \')\'\n///    \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n///  loop-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'assume_safety\'\n///\n///  unroll-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'full\'\n///\n///  loop-hint-value:\n///    constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known.  Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time.  Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/true << \"\";"},{v,3537,"/// Handle the \\#pragma clang loop directive.\n///  #pragma clang \'loop\' loop-hints\n///\n///  loop-hints:\n///    loop-hint loop-hints[opt]\n///\n///  loop-hint:\n///    \'vectorize\' \'(\' loop-hint-keyword \')\'\n///    \'interleave\' \'(\' loop-hint-keyword \')\'\n///    \'unroll\' \'(\' unroll-hint-keyword \')\'\n///    \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n///    \'vectorize_width\' \'(\' loop-hint-value \')\'\n///    \'interleave_count\' \'(\' loop-hint-value \')\'\n///    \'unroll_count\' \'(\' loop-hint-value \')\'\n///    \'pipeline\' \'(\' disable \')\'\n///    \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n///  loop-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'assume_safety\'\n///\n///  unroll-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'full\'\n///\n///  loop-hint-value:\n///    constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known.  Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time.  Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (!OptionValid) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/false << OptionInfo;"}},
[l]={
[l]={
["clang/test/Parser/pragma-unroll-and-jam.cpp"]={"clang/test/Parser/pragma-unroll-and-jam.cpp:70:242: error: invalid option \'unroll_and_jam\'; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"}
["clang/test/Parser/pragma-unroll-and-jam.cpp"]={"clang/test/Parser/pragma-unroll-and-jam.cpp:70:242: error: invalid option \'unroll_and_jam\'; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"}
Line 3,354: Line 3,355:
},
},
["err_pragma_loop_invalid_vectorize_option"]={
["err_pragma_loop_invalid_vectorize_option"]={
[b]={{nil,A,"err_pragma_loop_invalid_vectorize_option"}},
[d]={{nil,A,"err_pragma_loop_invalid_vectorize_option"}},
[j]={{nil,A,"vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')"}},
[e]={{nil,A,"vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')"}},
[i]={{nil,A,"vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')"}},
[f]={{nil,A,"vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')"}},
[h]=k,
[g]=k,
[c]="vectorize_width loop hint malformed; use vectorize_width\\(X, fixed\\) or vectorize_width\\(X, scalable\\) where X is an integer, or vectorize_width\\(\'fixed\' or \'scalable\'\\)",
[h]="vectorize_width loop hint malformed; use vectorize_width\\(X, fixed\\) or vectorize_width\\(X, scalable\\) where X is an integer, or vectorize_width\\(\'fixed\' or \'scalable\'\\)",
[f]=a,
[b]=a,
[e]={{nil,A,y}},
[c]={{nil,A,y}},
[g]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors","[SVE] Add support to vectorize_width loop pragma for scalable vectors\n\nThis patch adds support for two new variants of the vectorize_width\npragma:\n\n1. vectorize_width(X[, fixed|scalable]) where an optional second\nparameter is passed to the vectorize_width pragma, which indicates if\nthe user wishes to use fixed width or scalable vectorization. For\nexample the user can now write something like:\n\n  #pragma clang loop vectorize_width(4, fixed)\nor\n  #pragma clang loop vectorize_width(4, scalable)\n\nIn the absence of a second parameter it is assumed the user wants\nfixed width vectorization, in order to maintain compatibility with\nexisting code.\n2. vectorize_width(fixed|scalable) where the width is left unspecified,\nbut the user hints what type of vectorization they prefer, either\nfixed width or scalable.\n\nI have implemented this by making use of the LLVM loop hint attribute:\n\n  llvm.loop.vectorize.scalable.enable\n\nTests were added to\n\n  clang/test/CodeGenCXX/pragma-loop.cpp\n\nfor both the \'fixed\' and \'scalable\' optional parameter.\n\nSee this thread for context: http://lists.llvm.org/pipermail/cfe-dev/2020-November/067262.html\n\nDifferential Revision: https://reviews.llvm.org/D89031"},
[j]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors","[SVE] Add support to vectorize_width loop pragma for scalable vectors\n\nThis patch adds support for two new variants of the vectorize_width\npragma:\n\n1. vectorize_width(X[, fixed|scalable]) where an optional second\nparameter is passed to the vectorize_width pragma, which indicates if\nthe user wishes to use fixed width or scalable vectorization. For\nexample the user can now write something like:\n\n  #pragma clang loop vectorize_width(4, fixed)\nor\n  #pragma clang loop vectorize_width(4, scalable)\n\nIn the absence of a second parameter it is assumed the user wants\nfixed width vectorization, in order to maintain compatibility with\nexisting code.\n2. vectorize_width(fixed|scalable) where the width is left unspecified,\nbut the user hints what type of vectorization they prefer, either\nfixed width or scalable.\n\nI have implemented this by making use of the LLVM loop hint attribute:\n\n  llvm.loop.vectorize.scalable.enable\n\nTests were added to\n\n  clang/test/CodeGenCXX/pragma-loop.cpp\n\nfor both the \'fixed\' and \'scalable\' optional parameter.\n\nSee this thread for context: http://lists.llvm.org/pipermail/cfe-dev/2020-November/067262.html\n\nDifferential Revision: https://reviews.llvm.org/D89031"},
[d]={{v,1466,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // ...\n  // Validate the argument.\n  if (StateOption) {\n  // ...\n  } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n    // ...\n    // Look for vectorize_width(fixed|scalable)\n    if (IsScalableStr == \"scalable\" || IsScalableStr == \"fixed\") {\n    // ...\n    } else {\n      // ...\n      if (Tok.is(tok::comma)) {\n        // ...\n        if (IsScalableStr != \"scalable\" && IsScalableStr != \"fixed\") {\n          Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_vectorize_option);"}}
[i]={{v,1466,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // ...\n  // Validate the argument.\n  if (StateOption) {\n  // ...\n  } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n    // ...\n    // Look for vectorize_width(fixed|scalable)\n    if (IsScalableStr == \"scalable\" || IsScalableStr == \"fixed\") {\n    // ...\n    } else {\n      // ...\n      if (Tok.is(tok::comma)) {\n        // ...\n        if (IsScalableStr != \"scalable\" && IsScalableStr != \"fixed\") {\n          Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_vectorize_option);"}}
},
},
["err_pragma_loop_missing_argument"]={
["err_pragma_loop_missing_argument"]={
[b]="err_pragma_loop_missing_argument",
[d]="err_pragma_loop_missing_argument",
[j]="missing argument; expected %select{an integer value|\'enable\'%select{|, \'full\'}1%select{|, \'assume_safety\'}2 or \'disable\'}0",
[e]="missing argument; expected %select{an integer value|\'enable\'%select{|, \'full\'}1%select{|, \'assume_safety\'}2 or \'disable\'}0",
[i]={{nil,nil,{"missing argument; expected ",{"an integer value",{"\'enable\'",{a,", \'full\'"},{a,", \'assume_safety\'"}," or \'disable\'"}}}}},
[f]={{nil,nil,{"missing argument; expected ",{"an integer value",{"\'enable\'",{a,", \'full\'"},{a,", \'assume_safety\'"}," or \'disable\'"}}}}},
[h]=k,
[g]=k,
[c]="missing argument; expected (?:an integer value|\'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\')",
[h]="missing argument; expected (?:an integer value|\'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\')",
[f]=a,
[b]=a,
[e]=y,
[c]=y,
[g]={"f637790102ea",1403202615,"Fix PR20069: bad loop pragma arguments crash FE","Fix PR20069: bad loop pragma arguments crash FE\n\nThis patch fixes a crash when handling malformed arguments to loop pragmas such\nas: \"#pragma clang loop vectorize(()\".  Essentially any argument which is not an\nidentifier or constant resulted in a crash.  This patch also changes a couple of\nthe error messages which weren\'t quite correct.  New behavior with this patch vs\nold behavior:\n\n#pragma clang loop vectorize(1)\nOLD: error: missing keyword; expected \'enable\' or \'disable\'\nNEW: error: invalid argument; expected \'enable\' or \'disable\'\n\n#pragma clang loop vectorize()\nOLD: error: expected \')\'\nNEW: error: missing argument to loop pragma \'vectorize\'\n\n#pragma clang loop vectorize_width(bad)\nOLD: error: missing value; expected a positive integer value\nNEW: error: invalid argument; expected a positive integer value\n\n#pragma clang loop vectorize(bad)\nOLD: invalid keyword \'bad\'; expected \'enable\' or \'disable\'\nNEW: error: invalid argument; expected \'enable\' or \'disable\'\n\nhttp://reviews.llvm.org/D4197\n\nPatch by Mark Heffernan\n\nllvm-svn: 211292"},
[j]={"f637790102ea",1403202615,"Fix PR20069: bad loop pragma arguments crash FE","Fix PR20069: bad loop pragma arguments crash FE\n\nThis patch fixes a crash when handling malformed arguments to loop pragmas such\nas: \"#pragma clang loop vectorize(()\".  Essentially any argument which is not an\nidentifier or constant resulted in a crash.  This patch also changes a couple of\nthe error messages which weren\'t quite correct.  New behavior with this patch vs\nold behavior:\n\n#pragma clang loop vectorize(1)\nOLD: error: missing keyword; expected \'enable\' or \'disable\'\nNEW: error: invalid argument; expected \'enable\' or \'disable\'\n\n#pragma clang loop vectorize()\nOLD: error: expected \')\'\nNEW: error: missing argument to loop pragma \'vectorize\'\n\n#pragma clang loop vectorize_width(bad)\nOLD: error: missing value; expected a positive integer value\nNEW: error: invalid argument; expected a positive integer value\n\n#pragma clang loop vectorize(bad)\nOLD: invalid keyword \'bad\'; expected \'enable\' or \'disable\'\nNEW: error: invalid argument; expected \'enable\' or \'disable\'\n\nhttp://reviews.llvm.org/D4197\n\nPatch by Mark Heffernan\n\nllvm-svn: 211292"},
[d]={{v,1391,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // ...\n  // Verify loop hint has an argument.\n  if (Toks[0].is(tok::eof)) {\n    // ...\n    Diag(Toks[0].getLocation(), diag::err_pragma_loop_missing_argument) << /*StateArgument=*/StateOption << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}},
[i]={{v,1391,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // ...\n  // Verify loop hint has an argument.\n  if (Toks[0].is(tok::eof)) {\n    // ...\n    Diag(Toks[0].getLocation(), diag::err_pragma_loop_missing_argument) << /*StateArgument=*/StateOption << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}},
[l]={
[l]={
["clang/test/Parser/pragma-unroll-and-jam.cpp"]={"clang/test/Parser/pragma-unroll-and-jam.cpp:31:94: error: missing argument; expected an integer value"}
["clang/test/Parser/pragma-unroll-and-jam.cpp"]={"clang/test/Parser/pragma-unroll-and-jam.cpp:31:94: error: missing argument; expected an integer value"}
Line 3,379: Line 3,380:
},
},
["err_pragma_loop_precedes_nonloop"]={
["err_pragma_loop_precedes_nonloop"]={
[b]="err_pragma_loop_precedes_nonloop",
[d]="err_pragma_loop_precedes_nonloop",
[j]="expected a for, while, or do-while loop to follow \'%0\'",
[e]="expected a for, while, or do-while loop to follow \'%0\'",
[i]="expected a for, while, or do-while loop to follow \'A\'",
[f]="expected a for, while, or do-while loop to follow \'A\'",
[h]=k,
[g]=k,
[c]="expected a for, while, or do\\-while loop to follow \'(.*?)\'",
[h]="expected a for, while, or do\\-while loop to follow \'(.*?)\'",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints.","Adding a new #pragma for the vectorize and interleave optimization hints.\n\nPatch thanks to Tyler Nowicki!\n\nllvm-svn: 210330"},
[j]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints.","Adding a new #pragma for the vectorize and interleave optimization hints.\n\nPatch thanks to Tyler Nowicki!\n\nllvm-svn: 210330"},
[d]={{"clang/lib/Sema/SemaStmtAttr.cpp",91,"static Attr *handleLoopHintAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange) {\n  // ...\n  // This could be handled automatically by adding a Subjects definition in\n  // Attr.td, but that would make the diagnostic behavior worse in this case\n  // because the user spells this attribute as a pragma.\n  if (!isa<DoStmt, ForStmt, CXXForRangeStmt, WhileStmt>(St)) {\n    // ...\n    S.Diag(St->getBeginLoc(), diag::err_pragma_loop_precedes_nonloop) << Pragma;"}},
[i]={{"clang/lib/Sema/SemaStmtAttr.cpp",91,"static Attr *handleLoopHintAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange) {\n  // ...\n  // This could be handled automatically by adding a Subjects definition in\n  // Attr.td, but that would make the diagnostic behavior worse in this case\n  // because the user spells this attribute as a pragma.\n  if (!isa<DoStmt, ForStmt, CXXForRangeStmt, WhileStmt>(St)) {\n    // ...\n    S.Diag(St->getBeginLoc(), diag::err_pragma_loop_precedes_nonloop) << Pragma;"}},
[l]={
[l]={
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:22:97: error: expected a for, while, or do-while loop to follow \'#pragma clang loop\'","clang/test/Sema/pragma-pipeline.cpp:24:97: error: expected a for, while, or do-while loop to follow \'#pragma clang loop\'"}
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:22:97: error: expected a for, while, or do-while loop to follow \'#pragma clang loop\'","clang/test/Sema/pragma-pipeline.cpp:24:97: error: expected a for, while, or do-while loop to follow \'#pragma clang loop\'"}
Line 3,393: Line 3,394:
},
},
["err_pragma_message_malformed"]={
["err_pragma_message_malformed"]={
[b]="err_pragma_message_malformed",
[d]="err_pragma_message_malformed",
[j]="pragma %select{message|warning|error}0 requires parenthesized string",
[e]="pragma %select{message|warning|error}0 requires parenthesized string",
[i]={{nil,nil,{"pragma ",{"message","warning","error"}," requires parenthesized string"}}},
[f]={{nil,nil,{"pragma ",{"message","warning","error"}," requires parenthesized string"}}},
[h]=k,
[g]=k,
[c]="pragma (?:message|warning|error) requires parenthesized string",
[h]="pragma (?:message|warning|error) requires parenthesized string",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={"30c924b3e874",1277572299,"Implement support for #pragma message, patch by Michael Spencer!","Implement support for #pragma message, patch by Michael Spencer!\n\nllvm-svn: 106950"},
[j]={"30c924b3e874",1277572299,"Implement support for #pragma message, patch by Michael Spencer!","Implement support for #pragma message, patch by Michael Spencer!\n\nllvm-svn: 106950"},
[d]={{H,1653,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension.  The syntax is:\n/// \\code\n///  #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n///  #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    default:\n      PP.Diag(MessageLoc, diag::err_pragma_message_malformed) << Kind;"},{H,1664,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension.  The syntax is:\n/// \\code\n///  #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n///  #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (ExpectClosingParen) {\n      if (Tok.isNot(tok::r_paren)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"},{H,1671,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension.  The syntax is:\n/// \\code\n///  #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n///  #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (Tok.isNot(tok::eod)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"}},
[i]={{H,1653,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension.  The syntax is:\n/// \\code\n///  #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n///  #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    default:\n      PP.Diag(MessageLoc, diag::err_pragma_message_malformed) << Kind;"},{H,1664,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension.  The syntax is:\n/// \\code\n///  #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n///  #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (ExpectClosingParen) {\n      if (Tok.isNot(tok::r_paren)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"},{H,1671,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension.  The syntax is:\n/// \\code\n///  #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n///  #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (Tok.isNot(tok::eod)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"}},
[l]={
[l]={
["clang/test/Lexer/pragma-message.c"]={"clang/test/Lexer/pragma-message.c:30:9: error: pragma message requires parenthesized string","clang/test/Lexer/pragma-message.c:31:90: error: pragma warning requires parenthesized string"}
["clang/test/Lexer/pragma-message.c"]={"clang/test/Lexer/pragma-message.c:30:9: error: pragma message requires parenthesized string","clang/test/Lexer/pragma-message.c:31:90: error: pragma warning requires parenthesized string"}
Line 3,407: Line 3,408:
},
},
["err_pragma_misplaced_in_decl"]={
["err_pragma_misplaced_in_decl"]={
[b]={{nil,o,"err_pragma_misplaced_in_decl"}},
[d]={{nil,o,"err_pragma_misplaced_in_decl"}},
[j]={{nil,o,"this pragma cannot appear in %0 declaration"}},
[e]={{nil,o,"this pragma cannot appear in %0 declaration"}},
[i]={{nil,o,"this pragma cannot appear in A declaration"}},
[f]={{nil,o,"this pragma cannot appear in A declaration"}},
[h]=k,
[g]=k,
[c]="this pragma cannot appear in (.*?) declaration",
[h]="this pragma cannot appear in (.*?) declaration",
[f]=a,
[b]=a,
[e]={{nil,o,y}},
[c]={{nil,o,y}},
[g]={"037861b23092",1564913331,"[Parser] Emit descriptive diagnostic for misplaced pragma","[Parser] Emit descriptive diagnostic for misplaced pragma\n\nIf a class or struct or union declaration contains a pragma that\nis not valid in this context, compiler issues generic error like\n\"expected member name or \';\' after declaration specifiers\". With this\nchange the error tells that this pragma cannot appear in this declaration.\n\nDifferential Revision: https://reviews.llvm.org/D64932\n\nllvm-svn: 367779"},
[j]={"037861b23092",1564913331,"[Parser] Emit descriptive diagnostic for misplaced pragma","[Parser] Emit descriptive diagnostic for misplaced pragma\n\nIf a class or struct or union declaration contains a pragma that\nis not valid in this context, compiler issues generic error like\n\"expected member name or \';\' after declaration specifiers\". With this\nchange the error tells that this pragma cannot appear in this declaration.\n\nDifferential Revision: https://reviews.llvm.org/D64932\n\nllvm-svn: 367779"},
[d]={{Kb,4671,"/// ParseStructUnionBody\n///      struct-contents:\n///        struct-declaration-list\n/// [EXT]  empty\n/// [GNU]  \"struct-declaration-list\" without terminating \';\'\n///      struct-declaration-list:\n///        struct-declaration\n///        struct-declaration-list struct-declaration\n/// [OBC]  \'@\' \'defs\' \'(\' class-name \')\'\n///\nvoid Parser::ParseStructUnionBody(SourceLocation RecordLoc, DeclSpec::TST TagType, RecordDecl *TagDecl) {\n  // ...\n  // While we still have something to read, read the declarations in the struct.\n  while (!tryParseMisplacedModuleImport() && Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) {\n    // ...\n    if (tok::isPragmaAnnotation(Tok.getKind())) {\n      Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"},{kc,3421,"Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(AccessSpecifier &AS, ParsedAttributes &AccessAttrs, DeclSpec::TST TagType, Decl *TagDecl) {\n  // ...\n  default:\n    if (tok::isPragmaAnnotation(Tok.getKind())) {\n      Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"}},
[i]={{yb,4671,"/// ParseStructUnionBody\n///      struct-contents:\n///        struct-declaration-list\n/// [EXT]  empty\n/// [GNU]  \"struct-declaration-list\" without terminating \';\'\n///      struct-declaration-list:\n///        struct-declaration\n///        struct-declaration-list struct-declaration\n/// [OBC]  \'@\' \'defs\' \'(\' class-name \')\'\n///\nvoid Parser::ParseStructUnionBody(SourceLocation RecordLoc, DeclSpec::TST TagType, RecordDecl *TagDecl) {\n  // ...\n  // While we still have something to read, read the declarations in the struct.\n  while (!tryParseMisplacedModuleImport() && Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) {\n    // ...\n    if (tok::isPragmaAnnotation(Tok.getKind())) {\n      Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"},{lc,3421,"Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(AccessSpecifier &AS, ParsedAttributes &AccessAttrs, DeclSpec::TST TagType, Decl *TagDecl) {\n  // ...\n  default:\n    if (tok::isPragmaAnnotation(Tok.getKind())) {\n      Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"}},
[l]={
[l]={
["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:16:14: error: this pragma cannot appear in struct declaration","clang/test/Parser/pragma-fp-contract.c:24:14: error: this pragma cannot appear in union declaration"}
["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:16:14: error: this pragma cannot appear in struct declaration","clang/test/Parser/pragma-fp-contract.c:24:14: error: this pragma cannot appear in union declaration"}
Line 3,421: Line 3,422:
},
},
["err_pragma_missing_argument"]={
["err_pragma_missing_argument"]={
[b]="err_pragma_missing_argument",
[d]="err_pragma_missing_argument",
[j]="missing argument to \'#pragma %0\'%select{|; expected %2}1",
[e]="missing argument to \'#pragma %0\'%select{|; expected %2}1",
[i]={{nil,nil,{"missing argument to \'#pragma A\'",{a,"; expected C"}}}},
[f]={{nil,nil,{"missing argument to \'#pragma A\'",{a,"; expected C"}}}},
[h]=k,
[g]=k,
[c]="missing argument to \'\\#pragma (.*?)\'(?:|; expected (.*?))",
[h]="missing argument to \'\\#pragma (.*?)\'(?:|; expected (.*?))",
[f]=a,
[b]=a,
[e]=y,
[c]=y,
[g]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'.","Add support for \'#pragma unroll\'.\n\nllvm-svn: 213574"},
[j]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'.","Add support for \'#pragma unroll\'.\n\nllvm-svn: 213574"},
[d]={{v,3162,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang optimize\" << /*Expected=*/true << \"\'on\' or \'off\'\";"},{v,3974,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_here\" << /*Expected=*/true << \"integer\";"},{v,4006,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_total\" << /*Expected=*/true << \"integer\";"}},
[i]={{v,3162,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang optimize\" << /*Expected=*/true << \"\'on\' or \'off\'\";"},{v,3974,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_here\" << /*Expected=*/true << \"integer\";"},{v,4006,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_total\" << /*Expected=*/true << \"integer\";"}},
[l]={
[l]={
["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:14:114: error: missing argument to \'#pragma clang optimize\'; expected \'on\' or \'off\'"}
["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:14:114: error: missing argument to \'#pragma clang optimize\'; expected \'on\' or \'off\'"}
Line 3,435: Line 3,436:
},
},
["err_pragma_optimize_extra_argument"]={
["err_pragma_optimize_extra_argument"]={
[b]="err_pragma_optimize_extra_argument",
[d]="err_pragma_optimize_extra_argument",
[j]="unexpected extra argument \'%0\' to \'#pragma clang optimize\'",
[e]="unexpected extra argument \'%0\' to \'#pragma clang optimize\'",
[i]="unexpected extra argument \'A\' to \'#pragma clang optimize\'",
[f]="unexpected extra argument \'A\' to \'#pragma clang optimize\'",
[h]=k,
[g]=k,
[c]="unexpected extra argument \'(.*?)\' to \'\\#pragma clang optimize\'",
[h]="unexpected extra argument \'(.*?)\' to \'\\#pragma clang optimize\'",
[f]=a,
[b]=a,
[e]=y,
[c]=y,
[g]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.","Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.\n\nThis patch implements support for selectively disabling optimizations on a\nrange of function definitions through a pragma. The implementation is that\nall function definitions in the range are decorated with attribute\n\'optnone\'.\n\n    #pragma clang optimize off\n    // All function definitions in here are decorated with \'optnone\'.\n    #pragma clang optimize on\n    // Compilation resumes as normal.\n\nllvm-svn: 209510"},
[j]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.","Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.\n\nThis patch implements support for selectively disabling optimizations on a\nrange of function definitions through a pragma. The implementation is that\nall function definitions in the range are decorated with attribute\n\'optnone\'.\n\n    #pragma clang optimize off\n    // All function definitions in here are decorated with \'optnone\'.\n    #pragma clang optimize on\n    // Compilation resumes as normal.\n\nllvm-svn: 209510"},
[d]={{v,3184,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_extra_argument) << PP.getSpelling(Tok);"}},
[i]={{v,3184,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_extra_argument) << PP.getSpelling(Tok);"}},
[l]={
[l]={
["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:8:27: error: unexpected extra argument \'top\' to \'#pragma clang optimize\'"}
["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:8:27: error: unexpected extra argument \'top\' to \'#pragma clang optimize\'"}
Line 3,449: Line 3,450:
},
},
["err_pragma_optimize_invalid_argument"]={
["err_pragma_optimize_invalid_argument"]={
[b]="err_pragma_optimize_invalid_argument",
[d]="err_pragma_optimize_invalid_argument",
[j]="unexpected argument \'%0\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'",
[e]="unexpected argument \'%0\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'",
[i]="unexpected argument \'A\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'",
[f]="unexpected argument \'A\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'",
[h]=k,
[g]=k,
[c]="unexpected argument \'(.*?)\' to \'\\#pragma clang optimize\'; expected \'on\' or \'off\'",
[h]="unexpected argument \'(.*?)\' to \'\\#pragma clang optimize\'; expected \'on\' or \'off\'",
[f]=a,
[b]=a,
[e]=y,
[c]=y,
[g]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.","Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.\n\nThis patch implements support for selectively disabling optimizations on a\nrange of function definitions through a pragma. The implementation is that\nall function definitions in the range are decorated with attribute\n\'optnone\'.\n\n    #pragma clang optimize off\n    // All function definitions in here are decorated with \'optnone\'.\n    #pragma clang optimize on\n    // Compilation resumes as normal.\n\nllvm-svn: 209510"},
[j]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.","Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.\n\nThis patch implements support for selectively disabling optimizations on a\nrange of function definitions through a pragma. The implementation is that\nall function definitions in the range are decorated with attribute\n\'optnone\'.\n\n    #pragma clang optimize off\n    // All function definitions in here are decorated with \'optnone\'.\n    #pragma clang optimize on\n    // Compilation resumes as normal.\n\nllvm-svn: 209510"},
[d]={{v,3167,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"},{v,3177,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  if (II->isStr(\"on\")) {\n  // ...\n  } else if (!II->isStr(\"off\")) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"}},
[i]={{v,3167,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"},{v,3177,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  if (II->isStr(\"on\")) {\n  // ...\n  } else if (!II->isStr(\"off\")) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"}},
[l]={
[l]={
["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:11:24: error: unexpected argument \'something_wrong\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'"}
["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:11:24: error: unexpected argument \'something_wrong\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'"}
Line 3,463: Line 3,464:
},
},
["err_pragma_options_align_mac68k_target_unsupported"]={
["err_pragma_options_align_mac68k_target_unsupported"]={
[b]="err_pragma_options_align_mac68k_target_unsupported",
[d]="err_pragma_options_align_mac68k_target_unsupported",
[j]="mac68k alignment pragma is not supported on this target",
[e]="mac68k alignment pragma is not supported on this target",
[i]="mac68k alignment pragma is not supported on this target",
[f]="mac68k alignment pragma is not supported on this target",
[h]=k,
[g]=k,
[c]="mac68k alignment pragma is not supported on this target",
[h]="mac68k alignment pragma is not supported on this target",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"bd60652ace14",1274920516,"Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin.","Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin.\n\nllvm-svn: 104789"},
[j]={"bd60652ace14",1274920516,"Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin.","Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin.\n\nllvm-svn: 104789"},
[d]={{J,246,"void Sema::ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind, SourceLocation PragmaLoc) {\n  // ...\n  case POAK_Mac68k:\n    // Check if the target supports this.\n    if (!this->Context.getTargetInfo().hasAlignMac68kSupport()) {\n      Diag(PragmaLoc, diag::err_pragma_options_align_mac68k_target_unsupported);"}},
[i]={{J,246,"void Sema::ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind, SourceLocation PragmaLoc) {\n  // ...\n  case POAK_Mac68k:\n    // Check if the target supports this.\n    if (!this->Context.getTargetInfo().hasAlignMac68kSupport()) {\n      Diag(PragmaLoc, diag::err_pragma_options_align_mac68k_target_unsupported);"}},
[l]={
[l]={
["clang/test/Sema/pragma-align-mac68k-unsupported.c"]={"clang/test/Sema/pragma-align-mac68k-unsupported.c:4:75: error: mac68k alignment pragma is not supported on this target"}
["clang/test/Sema/pragma-align-mac68k-unsupported.c"]={"clang/test/Sema/pragma-align-mac68k-unsupported.c:4:75: error: mac68k alignment pragma is not supported on this target"}
Line 3,477: Line 3,478:
},
},
["err_pragma_pack_identifer_not_supported"]={
["err_pragma_pack_identifer_not_supported"]={
[b]={{nil,A,"err_pragma_pack_identifer_not_supported"}},
[d]={{nil,A,"err_pragma_pack_identifer_not_supported"}},
[j]={{nil,A,"specifying an identifier within `#pragma pack` is not supported on this target"}},
[e]={{nil,A,"specifying an identifier within `#pragma pack` is not supported on this target"}},
[i]={{nil,A,"specifying an identifier within `#pragma pack` is not supported on this target"}},
[f]={{nil,A,"specifying an identifier within `#pragma pack` is not supported on this target"}},
[h]=k,
[g]=k,
[c]="specifying an identifier within `\\#pragma pack` is not supported on this target",
[h]="specifying an identifier within `\\#pragma pack` is not supported on this target",
[f]=a,
[b]=a,
[e]={{nil,A,m}},
[c]={{nil,A,m}},
[g]={Tb,1590001902,Ub,Vb},
[j]={Vb,1590001902,Ub,Zb},
[d]={{J,328,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n  // ...\n  // XL pragma pack does not support identifier syntax.\n  if (IsXLPragma && !SlotLabel.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_pack_identifer_not_supported);"}},
[i]={{J,328,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n  // ...\n  // XL pragma pack does not support identifier syntax.\n  if (IsXLPragma && !SlotLabel.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_pack_identifer_not_supported);"}},
[l]={
[l]={
["clang/test/Sema/aix-pragma-pack-and-align.c"]={"clang/test/Sema/aix-pragma-pack-and-align.c:194:9: error: specifying an identifier within `#pragma pack` is not supported on this target"}
["clang/test/Sema/aix-pragma-pack-and-align.c"]={"clang/test/Sema/aix-pragma-pack-and-align.c:194:9: error: specifying an identifier within `#pragma pack` is not supported on this target"}
Line 3,491: Line 3,492:
},
},
["err_pragma_pack_invalid_alignment"]={
["err_pragma_pack_invalid_alignment"]={
[b]={{nil,A,"err_pragma_pack_invalid_alignment"}},
[d]={{nil,A,"err_pragma_pack_invalid_alignment"}},
[j]={{nil,A,"expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'"}},
[e]={{nil,A,"expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'"}},
[i]={{nil,A,"expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'"}},
[f]={{nil,A,"expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'"}},
[h]=k,
[g]=k,
[c]="expected \\#pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'",
[h]="expected \\#pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'",
[f]=a,
[b]=a,
[e]={{nil,A,m}},
[c]={{nil,A,m}},
[g]={Tb,1590001902,Ub,Vb},
[j]={Vb,1590001902,Ub,Zb},
[d]={{J,353,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n  // ...\n  if (Alignment) {\n    // ...\n    if (IsXLPragma && *Val == 0) {\n      // ...\n      Diag(PragmaLoc, diag::err_pragma_pack_invalid_alignment);"}},
[i]={{J,353,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n  // ...\n  if (Alignment) {\n    // ...\n    if (IsXLPragma && *Val == 0) {\n      // ...\n      Diag(PragmaLoc, diag::err_pragma_pack_invalid_alignment);"}},
[l]={
[l]={
["clang/test/Sema/aix-pragma-pack-and-align.c"]={"clang/test/Sema/aix-pragma-pack-and-align.c:147:9: error: expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'"}
["clang/test/Sema/aix-pragma-pack-and-align.c"]={"clang/test/Sema/aix-pragma-pack-and-align.c:147:9: error: expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'"}
Line 3,505: Line 3,506:
},
},
["err_pragma_pipeline_invalid_keyword"]={
["err_pragma_pipeline_invalid_keyword"]={
[b]={{nil,u,"err_pragma_pipeline_invalid_keyword"}},
[d]={{nil,u,"err_pragma_pipeline_invalid_keyword"}},
[j]={{nil,u,"invalid argument; expected \'disable\'"}},
[e]={{nil,u,"invalid argument; expected \'disable\'"}},
[i]={{nil,u,"invalid argument; expected \'disable\'"}},
[f]={{nil,u,"invalid argument; expected \'disable\'"}},
[h]=k,
[g]=k,
[c]="invalid argument; expected \'disable\'",
[h]="invalid argument; expected \'disable\'",
[f]=a,
[b]=a,
[e]={{nil,u,y}},
[c]={{nil,u,y}},
[g]={"9bdf515c744f",1546622400,"Add two new pragmas for controlling software pipelining optimizations.","Add two new pragmas for controlling software pipelining optimizations.\n\nThis patch adds #pragma clang loop pipeline and #pragma clang loop pipeline_initiation_interval for debugging or reducing compile time purposes. It is possible to disable SWP for concrete loops to save compilation time or to find bugs by not doing SWP to certain loops. It is possible to set value of initiation interval to concrete number to save compilation time by not doing extra pipeliner passes or to check created schedule for specific initiation interval.\n\nPatch by Alexey Lapshin.\n\nllvm-svn: 350414"},
[j]={"9bdf515c744f",1546622400,"Add two new pragmas for controlling software pipelining optimizations.","Add two new pragmas for controlling software pipelining optimizations.\n\nThis patch adds #pragma clang loop pipeline and #pragma clang loop pipeline_initiation_interval for debugging or reducing compile time purposes. It is possible to disable SWP for concrete loops to save compilation time or to find bugs by not doing SWP to certain loops. It is possible to set value of initiation interval to concrete number to save compilation time by not doing extra pipeliner passes or to check created schedule for specific initiation interval.\n\nPatch by Alexey Lapshin.\n\nllvm-svn: 350414"},
[d]={{v,1413,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // ...\n  // Validate the argument.\n  if (StateOption) {\n    // ...\n    if (!Valid) {\n      if (OptionPipelineDisabled) {\n        Diag(Toks[0].getLocation(), diag::err_pragma_pipeline_invalid_keyword);"}},
[i]={{v,1413,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // ...\n  // Validate the argument.\n  if (StateOption) {\n    // ...\n    if (!Valid) {\n      if (OptionPipelineDisabled) {\n        Diag(Toks[0].getLocation(), diag::err_pragma_pipeline_invalid_keyword);"}},
[l]={
[l]={
["clang/test/Parser/pragma-pipeline.cpp"]={"clang/test/Parser/pragma-pipeline.cpp:20:91: error: invalid argument; expected \'disable\'","clang/test/Parser/pragma-pipeline.cpp:21:91: error: invalid argument; expected \'disable\'"}
["clang/test/Parser/pragma-pipeline.cpp"]={"clang/test/Parser/pragma-pipeline.cpp:20:91: error: invalid argument; expected \'disable\'","clang/test/Parser/pragma-pipeline.cpp:21:91: error: invalid argument; expected \'disable\'"}
Line 3,519: Line 3,520:
},
},
["err_pragma_pointers_to_members_unknown_kind"]={
["err_pragma_pointers_to_members_unknown_kind"]={
[b]="err_pragma_pointers_to_members_unknown_kind",
[d]="err_pragma_pointers_to_members_unknown_kind",
[j]="unexpected %0, expected to see one of %select{|\'best_case\', \'full_generality\', }1\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
[e]="unexpected %0, expected to see one of %select{|\'best_case\', \'full_generality\', }1\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
[i]={{nil,nil,{"unexpected A, expected to see one of ",{a,"\'best_case\', \'full_generality\', "},"\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'"}}},
[f]={{nil,nil,{"unexpected A, expected to see one of ",{a,"\'best_case\', \'full_generality\', "},"\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'"}}},
[h]=k,
[g]=k,
[c]="unexpected (.*?), expected to see one of (?:|\'best_case\', \'full_generality\', )\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
[h]="unexpected (.*?), expected to see one of (?:|\'best_case\', \'full_generality\', )\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
[f]=a,
[b]=a,
[e]=y,
[c]=y,
[g]={"4bb0980d9628",1392061815,"MS ABI: Add support for #pragma pointers_to_members","MS ABI: Add support for #pragma pointers_to_members\n\nIntroduce a notion of a \'current representation method\' for\npointers-to-members.\n\nWhen starting out, this is set to \'best case\' (representation method is\nchosen by examining the class, selecting the smallest representation\nthat would work given the class definition or lack thereof).\n\nThis pragma allows the translation unit to dictate exactly what\nrepresentation to use, similar to how the inheritance model keywords\noperate.\n\nN.B.  PCH support is forthcoming.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2723\n\nllvm-svn: 201105"},
[j]={"4bb0980d9628",1392061815,"MS ABI: Add support for #pragma pointers_to_members","MS ABI: Add support for #pragma pointers_to_members\n\nIntroduce a notion of a \'current representation method\' for\npointers-to-members.\n\nWhen starting out, this is set to \'best case\' (representation method is\nchosen by examining the class, selecting the smallest representation\nthat would work given the class definition or lack thereof).\n\nThis pragma allows the translation unit to dictate exactly what\nrepresentation to use, similar to how the inheritance model keywords\noperate.\n\nN.B.  PCH support is forthcoming.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2723\n\nllvm-svn: 201105"},
[d]={{v,2705,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Arg->isStr(\"best_case\")) {\n  // ...\n  } else {\n    if (Arg->isStr(\"full_generality\")) {\n      if (Tok.is(tok::comma)) {\n        // ...\n        if (!Arg) {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Tok.getKind() << /*OnlyInheritanceModels*/ 0;"},{v,2734,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Arg->isStr(\"best_case\")) {\n  // ...\n  } else {\n    // ...\n    if (Arg) {\n      if (Arg->isStr(\"single_inheritance\")) {\n      // ...\n      } else if (Arg->isStr(\"multiple_inheritance\")) {\n      // ...\n      } else if (Arg->isStr(\"virtual_inheritance\")) {\n      // ...\n      } else {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Arg << /*HasPointerDeclaration*/ 1;"}},
[i]={{v,2705,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Arg->isStr(\"best_case\")) {\n  // ...\n  } else {\n    if (Arg->isStr(\"full_generality\")) {\n      if (Tok.is(tok::comma)) {\n        // ...\n        if (!Arg) {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Tok.getKind() << /*OnlyInheritanceModels*/ 0;"},{v,2734,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Arg->isStr(\"best_case\")) {\n  // ...\n  } else {\n    // ...\n    if (Arg) {\n      if (Arg->isStr(\"single_inheritance\")) {\n      // ...\n      } else if (Arg->isStr(\"multiple_inheritance\")) {\n      // ...\n      } else if (Arg->isStr(\"virtual_inheritance\")) {\n      // ...\n      } else {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Arg << /*HasPointerDeclaration*/ 1;"}},
[l]={
[l]={
["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:292:35: error: unexpected \'single\', expected to see one of \'best_case\', \'full_generality\', \'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'"}
["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:292:35: error: unexpected \'single\', expected to see one of \'best_case\', \'full_generality\', \'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'"}
Line 3,533: Line 3,534:
},
},
["err_pragma_pop_visibility_mismatch"]={
["err_pragma_pop_visibility_mismatch"]={
[b]="err_pragma_pop_visibility_mismatch",
[d]="err_pragma_pop_visibility_mismatch",
[j]="#pragma visibility pop with no matching #pragma visibility push",
[e]="#pragma visibility pop with no matching #pragma visibility push",
[i]="#pragma visibility pop with no matching #pragma visibility push",
[f]="#pragma visibility pop with no matching #pragma visibility push",
[h]=k,
[g]=k,
[c]="\\#pragma visibility pop with no matching \\#pragma visibility push",
[h]="\\#pragma visibility pop with no matching \\#pragma visibility push",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".\n\nllvm-svn: 149559"},
[j]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".\n\nllvm-svn: 149559"},
[d]={{J,1370,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (!VisContext) {\n    Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"},{J,1381,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  // ...\n  if (StartsWithPragma && IsNamespaceEnd) {\n  // ...\n  } else if (!StartsWithPragma && !IsNamespaceEnd) {\n    Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"}},
[i]={{J,1370,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (!VisContext) {\n    Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"},{J,1381,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  // ...\n  if (StartsWithPragma && IsNamespaceEnd) {\n  // ...\n  } else if (!StartsWithPragma && !IsNamespaceEnd) {\n    Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"}},
[l]={
[l]={
["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:4:13: error: #pragma visibility pop with no matching #pragma visibility push","clang/test/SemaCXX/pragma-visibility.cpp:12:13: error: #pragma visibility pop with no matching #pragma visibility push"}
["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:4:13: error: #pragma visibility pop with no matching #pragma visibility push","clang/test/SemaCXX/pragma-visibility.cpp:12:13: error: #pragma visibility pop with no matching #pragma visibility push"}
Line 3,547: Line 3,548:
},
},
["err_pragma_push_pop_macro_malformed"]={
["err_pragma_push_pop_macro_malformed"]={
[b]="err_pragma_push_pop_macro_malformed",
[d]="err_pragma_push_pop_macro_malformed",
[j]="pragma %0 requires a parenthesized string",
[e]="pragma %0 requires a parenthesized string",
[i]="pragma A requires a parenthesized string",
[f]="pragma A requires a parenthesized string",
[h]=k,
[g]=k,
[c]="pragma (.*?) requires a parenthesized string",
[h]="pragma (.*?) requires a parenthesized string",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!","Implement #pragma push_macro, patch by Francois Pichet!\n\nllvm-svn: 111234"},
[j]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!","Implement #pragma push_macro, patch by Francois Pichet!\n\nllvm-svn: 111234"},
[d]={{H,580,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::l_paren)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{H,588,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::string_literal)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{H,604,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::r_paren)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"}}
[i]={{H,580,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::l_paren)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{H,588,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::string_literal)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{H,604,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::r_paren)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"}}
},
},
["err_pragma_push_visibility_mismatch"]={
["err_pragma_push_visibility_mismatch"]={
[b]="err_pragma_push_visibility_mismatch",
[d]="err_pragma_push_visibility_mismatch",
[j]="#pragma visibility push with no matching #pragma visibility pop",
[e]="#pragma visibility push with no matching #pragma visibility pop",
[i]="#pragma visibility push with no matching #pragma visibility pop",
[f]="#pragma visibility push with no matching #pragma visibility pop",
[h]=k,
[g]=k,
[c]="\\#pragma visibility push with no matching \\#pragma visibility pop",
[h]="\\#pragma visibility push with no matching \\#pragma visibility pop",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".\n\nllvm-svn: 149559"},
[j]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".\n\nllvm-svn: 149559"},
[d]={{J,1371,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  // ...\n  if (StartsWithPragma && IsNamespaceEnd) {\n    Diag(Back->second, diag::err_pragma_push_visibility_mismatch);"}},
[i]={{J,1371,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  // ...\n  if (StartsWithPragma && IsNamespaceEnd) {\n    Diag(Back->second, diag::err_pragma_push_visibility_mismatch);"}},
[l]={
[l]={
["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:9:13: error: #pragma visibility push with no matching #pragma visibility pop"}
["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:9:13: error: #pragma visibility push with no matching #pragma visibility pop"}
Line 3,572: Line 3,573:
},
},
["err_pragma_section_invalid_for_target"]={
["err_pragma_section_invalid_for_target"]={
[b]={{nil,U,"err_pragma_section_invalid_for_target"}},
[d]={{nil,V,"err_pragma_section_invalid_for_target"}},
[j]={{nil,U,"argument to #pragma section is not valid for this target: %0"}},
[e]={{nil,V,"argument to #pragma section is not valid for this target: %0"}},
[i]={{nil,U,"argument to #pragma section is not valid for this target: A"}},
[f]={{nil,V,"argument to #pragma section is not valid for this target: A"}},
[h]=k,
[g]=k,
[c]="argument to \\#pragma section is not valid for this target\\: (.*?)",
[h]="argument to \\#pragma section is not valid for this target\\: (.*?)",
[f]=a,
[b]=a,
[e]={{nil,U,m}},
[c]={{nil,V,m}},
[g]={Tb,1590001902,Ub,Vb},
[j]={Vb,1590001902,Ub,Zb},
[d]={{J,309,"void Sema::ActOnPragmaClangSection(SourceLocation PragmaLoc, PragmaClangSectionAction Action, PragmaClangSectionKind SecKind, StringRef SecName) {\n  // ...\n  if (llvm::Error E = isValidSectionSpecifier(SecName)) {\n    Diag(PragmaLoc, diag::err_pragma_section_invalid_for_target) << toString(std::move(E));"}},
[i]={{J,309,"void Sema::ActOnPragmaClangSection(SourceLocation PragmaLoc, PragmaClangSectionAction Action, PragmaClangSectionKind SecKind, StringRef SecName) {\n  // ...\n  if (llvm::Error E = isValidSectionSpecifier(SecName)) {\n    Diag(PragmaLoc, diag::err_pragma_section_invalid_for_target) << toString(std::move(E));"}},
[l]={
[l]={
["clang/test/Sema/pragma-clang-section-macho.c"]={"clang/test/Sema/pragma-clang-section-macho.c:5:54: error: argument to #pragma section is not valid for this target: mach-o section specifier requires a segment and section separated by a comma","clang/test/Sema/pragma-clang-section-macho.c:6:54: error: argument to #pragma section is not valid for this target: mach-o section specifier requires a section whose length is between 1 and 16 characters"}
["clang/test/Sema/pragma-clang-section-macho.c"]={"clang/test/Sema/pragma-clang-section-macho.c:5:54: error: argument to #pragma section is not valid for this target: mach-o section specifier requires a segment and section separated by a comma","clang/test/Sema/pragma-clang-section-macho.c:6:54: error: argument to #pragma section is not valid for this target: mach-o section specifier requires a section whose length is between 1 and 16 characters"}
Line 3,586: Line 3,587:
},
},
["err_preserve_enum_value_invalid"]={
["err_preserve_enum_value_invalid"]={
[b]={{nil,A,"err_preserve_enum_value_invalid"}},
[d]={{nil,A,"err_preserve_enum_value_invalid"}},
[j]={{nil,A,"__builtin_preserve_enum_value argument %0 invalid"}},
[e]={{nil,A,"__builtin_preserve_enum_value argument %0 invalid"}},
[i]={{nil,A,"__builtin_preserve_enum_value argument A invalid"}},
[f]={{nil,A,"__builtin_preserve_enum_value argument A invalid"}},
[h]=k,
[g]=k,
[c]="__builtin_preserve_enum_value argument (.*?) invalid",
[h]="__builtin_preserve_enum_value argument (.*?) invalid",
[f]=a,
[b]=a,
[e]={{nil,A,a}},
[c]={{nil,A,S}},
[g]={Ab,1582847864,Bb,Db},
[j]={Jb,1582847864,Ib,Ab},
[d]={{I,3540,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n  // ...\n  } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n  // ...\n  } else if (BuiltinID == BPF::BI__builtin_preserve_enum_value) {\n    if (!isValidBPFPreserveEnumValueArg(Arg)) {\n      // ...\n      kind = diag::err_preserve_enum_value_invalid;"}},
[i]={{I,3540,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n  // ...\n  } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n  // ...\n  } else if (BuiltinID == BPF::BI__builtin_preserve_enum_value) {\n    if (!isValidBPFPreserveEnumValueArg(Arg)) {\n      // ...\n      kind = diag::err_preserve_enum_value_invalid;"}},
[l]={
[l]={
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:95:40: error: __builtin_preserve_enum_value argument 1 invalid","clang/test/Sema/builtins-bpf.c:99:40: error: __builtin_preserve_enum_value argument 1 invalid"}
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:95:40: error: __builtin_preserve_enum_value argument 1 invalid","clang/test/Sema/builtins-bpf.c:99:40: error: __builtin_preserve_enum_value argument 1 invalid"}
Line 3,600: Line 3,601:
},
},
["err_preserve_enum_value_not_const"]={
["err_preserve_enum_value_not_const"]={
[b]={{nil,A,"err_preserve_enum_value_not_const"}},
[d]={{nil,A,"err_preserve_enum_value_not_const"}},
[j]={{nil,A,"__builtin_preserve_enum_value argument %0 not a constant"}},
[e]={{nil,A,"__builtin_preserve_enum_value argument %0 not a constant"}},
[i]={{nil,A,"__builtin_preserve_enum_value argument A not a constant"}},
[f]={{nil,A,"__builtin_preserve_enum_value argument A not a constant"}},
[h]=k,
[g]=k,
[c]="__builtin_preserve_enum_value argument (.*?) not a constant",
[h]="__builtin_preserve_enum_value argument (.*?) not a constant",
[f]=a,
[b]=a,
[e]={{nil,A,a}},
[c]={{nil,A,S}},
[g]={Ab,1582847864,Bb,Db},
[j]={Jb,1582847864,Ib,Ab},
[d]={{I,3518,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n    // ...\n    else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n    // ...\n    else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n    // ...\n    else\n      kind = diag::err_preserve_enum_value_not_const;"}}
[i]={{I,3518,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n    // ...\n    else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n    // ...\n    else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n    // ...\n    else\n      kind = diag::err_preserve_enum_value_not_const;"}}
},
},
["err_preserve_field_info_not_const"]={
["err_preserve_field_info_not_const"]={
[b]={{nil,o,"err_preserve_field_info_not_const"}},
[d]={{nil,o,"err_preserve_field_info_not_const"}},
[j]={{nil,o,"__builtin_preserve_field_info argument %0 not a constant"}},
[e]={{nil,o,"__builtin_preserve_field_info argument %0 not a constant"}},
[i]={{nil,o,"__builtin_preserve_field_info argument A not a constant"}},
[f]={{nil,o,"__builtin_preserve_field_info argument A not a constant"}},
[h]=k,
[g]=k,
[c]="__builtin_preserve_field_info argument (.*?) not a constant",
[h]="__builtin_preserve_field_info argument (.*?) not a constant",
[f]=a,
[b]=a,
[e]={{nil,o,a}},
[c]={{nil,o,S}},
[g]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[j]={"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"},
[d]={{I,3512,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n      kind = diag::err_preserve_field_info_not_const;"}},
[i]={{I,3512,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n      kind = diag::err_preserve_field_info_not_const;"}},
[l]={
[l]={
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:64:48: error: __builtin_preserve_field_info argument 2 not a constant","clang/test/Sema/builtins-bpf.c:68:48: error: __builtin_preserve_field_info argument 2 not a constant"}
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:64:48: error: __builtin_preserve_field_info argument 2 not a constant","clang/test/Sema/builtins-bpf.c:68:48: error: __builtin_preserve_field_info argument 2 not a constant"}
Line 3,625: Line 3,626:
},
},
["err_preserve_field_info_not_field"]={
["err_preserve_field_info_not_field"]={
[b]={{nil,o,"err_preserve_field_info_not_field"}},
[d]={{nil,o,"err_preserve_field_info_not_field"}},
[j]={{nil,o,"__builtin_preserve_field_info argument %0 not a field access"}},
[e]={{nil,o,"__builtin_preserve_field_info argument %0 not a field access"}},
[i]={{nil,o,"__builtin_preserve_field_info argument A not a field access"}},
[f]={{nil,o,"__builtin_preserve_field_info argument A not a field access"}},
[h]=k,
[g]=k,
[c]="__builtin_preserve_field_info argument (.*?) not a field access",
[h]="__builtin_preserve_field_info argument (.*?) not a field access",
[f]=a,
[b]=a,
[e]={{nil,o,a}},
[c]={{nil,o,S}},
[g]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[j]={"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"},
[d]={{I,3530,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n    if (!isValidBPFPreserveFieldInfoArg(Arg)) {\n      // ...\n      kind = diag::err_preserve_field_info_not_field;"}},
[i]={{I,3530,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n    if (!isValidBPFPreserveFieldInfoArg(Arg)) {\n      // ...\n      kind = diag::err_preserve_field_info_not_field;"}},
[l]={
[l]={
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:28:40: error: __builtin_preserve_field_info argument 1 not a field access","clang/test/Sema/builtins-bpf.c:32:40: error: __builtin_preserve_field_info argument 1 not a field access"}
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:28:40: error: __builtin_preserve_field_info argument 1 not a field access","clang/test/Sema/builtins-bpf.c:32:40: error: __builtin_preserve_field_info argument 1 not a field access"}
Line 3,639: Line 3,640:
},
},
["err_preserve_type_info_invalid"]={
["err_preserve_type_info_invalid"]={
[b]={{nil,A,"err_preserve_type_info_invalid"}},
[d]={{nil,A,"err_preserve_type_info_invalid"}},
[j]={{nil,A,"__builtin_preserve_type_info argument %0 invalid"}},
[e]={{nil,A,"__builtin_preserve_type_info argument %0 invalid"}},
[i]={{nil,A,"__builtin_preserve_type_info argument A invalid"}},
[f]={{nil,A,"__builtin_preserve_type_info argument A invalid"}},
[h]=k,
[g]=k,
[c]="__builtin_preserve_type_info argument (.*?) invalid",
[h]="__builtin_preserve_type_info argument (.*?) invalid",
[f]=a,
[b]=a,
[e]={{nil,A,a}},
[c]={{nil,A,S}},
[g]={Ab,1582847864,Bb,Db},
[j]={Jb,1582847864,Ib,Ab},
[d]={{I,3535,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n  // ...\n  } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n    if (!isValidBPFPreserveTypeInfoArg(Arg)) {\n      // ...\n      kind = diag::err_preserve_type_info_invalid;"}},
[i]={{I,3535,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n  // ...\n  } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n    if (!isValidBPFPreserveTypeInfoArg(Arg)) {\n      // ...\n      kind = diag::err_preserve_type_info_invalid;"}},
[l]={
[l]={
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:103:39: error: __builtin_preserve_type_info argument 1 invalid"}
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:103:39: error: __builtin_preserve_type_info argument 1 invalid"}
Line 3,653: Line 3,654:
},
},
["err_preserve_type_info_not_const"]={
["err_preserve_type_info_not_const"]={
[b]={{nil,A,"err_preserve_type_info_not_const"}},
[d]={{nil,A,"err_preserve_type_info_not_const"}},
[j]={{nil,A,"__builtin_preserve_type_info argument %0 not a constant"}},
[e]={{nil,A,"__builtin_preserve_type_info argument %0 not a constant"}},
[i]={{nil,A,"__builtin_preserve_type_info argument A not a constant"}},
[f]={{nil,A,"__builtin_preserve_type_info argument A not a constant"}},
[h]=k,
[g]=k,
[c]="__builtin_preserve_type_info argument (.*?) not a constant",
[h]="__builtin_preserve_type_info argument (.*?) not a constant",
[f]=a,
[b]=a,
[e]={{nil,A,a}},
[c]={{nil,A,S}},
[g]={Ab,1582847864,Bb,Db},
[j]={Jb,1582847864,Ib,Ab},
[d]={{I,3516,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n    // ...\n    else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n    // ...\n    else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n      kind = diag::err_preserve_type_info_not_const;"}}
[i]={{I,3516,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n    // ...\n    else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n    // ...\n    else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n      kind = diag::err_preserve_type_info_not_const;"}}
},
},
["err_private_ivar_access"]={
["err_private_ivar_access"]={
[b]="err_private_ivar_access",
[d]="err_private_ivar_access",
[j]="instance variable %0 is private",
[e]="instance variable %0 is private",
[i]="instance variable A is private",
[f]="instance variable A is private",
[h]=k,
[g]=k,
[c]="instance variable (.*?) is private",
[h]="instance variable (.*?) is private",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={bb,1480718311,eb,fb},
[j]={eb,1480718311,cb,fb},
[d]={{O,2971,"/// The parser has read a name in, and Sema has detected that we\'re currently\n/// inside an ObjC method. Perform some additional checks and determine if we\n/// should form a reference to an ivar.\n///\n/// Ideally, most of this would be done by lookup, but there\'s\n/// actually quite a lot of extra work involved.\nDeclResult Sema::LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S, IdentifierInfo *II) {\n  // ...\n  if (LookForIvars) {\n    // ...\n    if (IFace && (IV = IFace->lookupInstanceVariable(II, ClassDeclared))) {\n      // ...\n      // Diagnose the use of an ivar outside of the declaring class.\n      if (IV->getAccessControl() == ObjCIvarDecl::Private && !declaresSameEntity(ClassDeclared, IFace) && !getLangOpts().DebuggerSupport)\n        Diag(Loc, diag::err_private_ivar_access) << IV->getDeclName();"},{cb,1445,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    // ...\n    if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n      // ...\n      if (!S.getLangOpts().DebuggerSupport) {\n        if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n          if (!declaresSameEntity(ClassDeclared, IDecl) || !declaresSameEntity(ClassOfMethodDecl, ClassDeclared))\n            S.Diag(MemberLoc, diag::err_private_ivar_access) << IV->getDeclName();"}},
[i]={{O,2971,"/// The parser has read a name in, and Sema has detected that we\'re currently\n/// inside an ObjC method. Perform some additional checks and determine if we\n/// should form a reference to an ivar.\n///\n/// Ideally, most of this would be done by lookup, but there\'s\n/// actually quite a lot of extra work involved.\nDeclResult Sema::LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S, IdentifierInfo *II) {\n  // ...\n  if (LookForIvars) {\n    // ...\n    if (IFace && (IV = IFace->lookupInstanceVariable(II, ClassDeclared))) {\n      // ...\n      // Diagnose the use of an ivar outside of the declaring class.\n      if (IV->getAccessControl() == ObjCIvarDecl::Private && !declaresSameEntity(ClassDeclared, IFace) && !getLangOpts().DebuggerSupport)\n        Diag(Loc, diag::err_private_ivar_access) << IV->getDeclName();"},{hb,1445,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    // ...\n    if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n      // ...\n      if (!S.getLangOpts().DebuggerSupport) {\n        if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n          if (!declaresSameEntity(ClassDeclared, IDecl) || !declaresSameEntity(ClassOfMethodDecl, ClassDeclared))\n            S.Diag(MemberLoc, diag::err_private_ivar_access) << IV->getDeclName();"}},
[l]={
[l]={
["clang/test/SemaObjC/synthesized-ivar.m"]={"clang/test/SemaObjC/synthesized-ivar.m:16:26: error: instance variable \'IP\' is private","clang/test/SemaObjC/synthesized-ivar.m:48:4: error: instance variable \'_PROP_INMAIN\' is private","clang/test/SemaObjC/synthesized-ivar.m:49:4: error: instance variable \'_PROP_INCLASSEXT\' is private","clang/test/SemaObjC/synthesized-ivar.m:50:11: error: instance variable \'private_ivar\' is private"}
["clang/test/SemaObjC/synthesized-ivar.m"]={"clang/test/SemaObjC/synthesized-ivar.m:16:26: error: instance variable \'IP\' is private","clang/test/SemaObjC/synthesized-ivar.m:48:4: error: instance variable \'_PROP_INMAIN\' is private","clang/test/SemaObjC/synthesized-ivar.m:49:4: error: instance variable \'_PROP_INCLASSEXT\' is private","clang/test/SemaObjC/synthesized-ivar.m:50:11: error: instance variable \'private_ivar\' is private"}
Line 3,678: Line 3,679:
},
},
["err_private_module_fragment_expected_semi"]={
["err_private_module_fragment_expected_semi"]={
[b]={{nil,x,"err_private_module_fragment_expected_semi"}},
[d]={{nil,x,"err_private_module_fragment_expected_semi"}},
[j]={{nil,x,"expected \';\' after private module fragment declaration"}},
[e]={{nil,x,"expected \';\' after private module fragment declaration"}},
[i]={{nil,x,"expected \';\' after private module fragment declaration"}},
[f]={{nil,x,"expected \';\' after private module fragment declaration"}},
[h]=k,
[g]=k,
[c]="expected \';\' after private module fragment declaration",
[h]="expected \';\' after private module fragment declaration",
[f]=a,
[b]=a,
[e]={{nil,x,fc}},
[c]={{nil,x,ac}},
[g]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,\nand the global and private module fragment.\n\nFor now, the private module fragment introducer is ignored, but use of\nthe global module fragment introducer should be properly enforced.\n\nllvm-svn: 358353"},
[j]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,\nand the global and private module fragment.\n\nFor now, the private module fragment introducer is ignored, but use of\nthe global module fragment introducer should be properly enforced.\n\nllvm-svn: 358353"},
[d]={{"clang/lib/Parse/Parser.cpp",2438,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n///  module-declaration:  [C++20]\n///    \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n///  global-module-fragment:  [C++2a]\n///    \'module\' \';\' top-level-declaration-seq[opt]\n///  module-declaration:      [C++2a]\n///    \'export\'[opt] \'module\' module-name module-partition[opt]\n///            attribute-specifier-seq[opt] \';\'\n///  private-module-fragment: [C++2a]\n///    \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n  // ...\n  // Parse a private-module-fragment, if present.\n  if (getLangOpts().CPlusPlusModules && Tok.is(tok::colon) && NextToken().is(tok::kw_private)) {\n    // ...\n    ExpectAndConsumeSemi(diag::err_private_module_fragment_expected_semi);"}}
[i]={{"clang/lib/Parse/Parser.cpp",2438,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n///  module-declaration:  [C++20]\n///    \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n///  global-module-fragment:  [C++2a]\n///    \'module\' \';\' top-level-declaration-seq[opt]\n///  module-declaration:      [C++2a]\n///    \'export\'[opt] \'module\' module-name module-partition[opt]\n///            attribute-specifier-seq[opt] \';\'\n///  private-module-fragment: [C++2a]\n///    \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n  // ...\n  // Parse a private-module-fragment, if present.\n  if (getLangOpts().CPlusPlusModules && Tok.is(tok::colon) && NextToken().is(tok::kw_private)) {\n    // ...\n    ExpectAndConsumeSemi(diag::err_private_module_fragment_expected_semi);"}}
},
},
["err_private_module_fragment_not_module"]={
["err_private_module_fragment_not_module"]={
[b]={{nil,x,"err_private_module_fragment_not_module"}},
[d]={{nil,x,"err_private_module_fragment_not_module"}},
[j]={{nil,x,"private module fragment declaration with no preceding module declaration"}},
[e]={{nil,x,"private module fragment declaration with no preceding module declaration"}},
[i]={{nil,x,"private module fragment declaration with no preceding module declaration"}},
[f]={{nil,x,"private module fragment declaration with no preceding module declaration"}},
[h]=k,
[g]=k,
[c]="private module fragment declaration with no preceding module declaration",
[h]="private module fragment declaration with no preceding module declaration",
[f]=a,
[b]=a,
[e]={{nil,x,fc}},
[c]={{nil,x,ac}},
[g]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments.\n\nllvm-svn: 358713"},
[j]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments.\n\nllvm-svn: 358713"},
[d]={{"clang/lib/Sema/SemaModule.cpp",437,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  // ...\n  case Module::ModuleMapModule:\n  case Module::ExplicitGlobalModuleFragment:\n  case Module::ImplicitGlobalModuleFragment:\n  case Module::ModulePartitionImplementation:\n  case Module::ModulePartitionInterface:\n  case Module::ModuleHeaderUnit:\n    Diag(PrivateLoc, diag::err_private_module_fragment_not_module);"}},
[i]={{"clang/lib/Sema/SemaModule.cpp",437,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  // ...\n  case Module::ModuleMapModule:\n  case Module::ExplicitGlobalModuleFragment:\n  case Module::ImplicitGlobalModuleFragment:\n  case Module::ModulePartitionImplementation:\n  case Module::ModulePartitionInterface:\n  case Module::ModuleHeaderUnit:\n    Diag(PrivateLoc, diag::err_private_module_fragment_not_module);"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:43:9: error: private module fragment declaration with no preceding module declaration"}
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:43:9: error: private module fragment declaration with no preceding module declaration"}
Line 3,703: Line 3,704:
},
},
["err_private_module_fragment_not_module_interface"]={
["err_private_module_fragment_not_module_interface"]={
[b]={{nil,x,"err_private_module_fragment_not_module_interface"}},
[d]={{nil,x,"err_private_module_fragment_not_module_interface"}},
[j]={{nil,x,"private module fragment in module implementation unit"}},
[e]={{nil,x,"private module fragment in module implementation unit"}},
[i]={{nil,x,"private module fragment in module implementation unit"}},
[f]={{nil,x,"private module fragment in module implementation unit"}},
[h]=k,
[g]=k,
[c]="private module fragment in module implementation unit",
[h]="private module fragment in module implementation unit",
[f]=a,
[b]=a,
[e]={{nil,x,fc}},
[c]={{nil,x,ac}},
[g]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments.\n\nllvm-svn: 358713"},
[j]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments.\n\nllvm-svn: 358713"},
[d]={{"clang/lib/Sema/SemaModule.cpp",446,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  // ...\n  case Module::ModuleImplementationUnit:\n    Diag(PrivateLoc, diag::err_private_module_fragment_not_module_interface);"}},
[i]={{"clang/lib/Sema/SemaModule.cpp",446,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  // ...\n  case Module::ModuleImplementationUnit:\n    Diag(PrivateLoc, diag::err_private_module_fragment_not_module_interface);"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.link/p2.cpp"]={"clang/test/CXX/basic/basic.link/p2.cpp:16:9: error: private module fragment in module implementation unit"}
["clang/test/CXX/basic/basic.link/p2.cpp"]={"clang/test/CXX/basic/basic.link/p2.cpp:16:9: error: private module fragment in module implementation unit"}
Line 3,717: Line 3,718:
},
},
["err_private_module_fragment_redefined"]={
["err_private_module_fragment_redefined"]={
[b]={{nil,x,"err_private_module_fragment_redefined"}},
[d]={{nil,x,"err_private_module_fragment_redefined"}},
[j]={{nil,x,"private module fragment redefined"}},
[e]={{nil,x,"private module fragment redefined"}},
[i]={{nil,x,"private module fragment redefined"}},
[f]={{nil,x,"private module fragment redefined"}},
[h]=k,
[g]=k,
[c]="private module fragment redefined",
[h]="private module fragment redefined",
[f]=a,
[b]=a,
[e]={{nil,x,fc}},
[c]={{nil,x,ac}},
[g]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments.\n\nllvm-svn: 358713"},
[j]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments.\n\nllvm-svn: 358713"},
[d]={{"clang/lib/Sema/SemaModule.cpp",441,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  // ...\n  case Module::PrivateModuleFragment:\n    Diag(PrivateLoc, diag::err_private_module_fragment_redefined);"}},
[i]={{"clang/lib/Sema/SemaModule.cpp",441,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  // ...\n  case Module::PrivateModuleFragment:\n    Diag(PrivateLoc, diag::err_private_module_fragment_redefined);"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:54:9: error: private module fragment redefined"}
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:54:9: error: private module fragment redefined"}
Line 3,731: Line 3,732:
},
},
["err_probability_not_constant_float"]={
["err_probability_not_constant_float"]={
[b]={{nil,t,"err_probability_not_constant_float"}},
[d]={{nil,t,"err_probability_not_constant_float"}},
[j]={{nil,t,"probability argument to __builtin_expect_with_probability must be constant floating-point expression"}},
[e]={{nil,t,"probability argument to __builtin_expect_with_probability must be constant floating-point expression"}},
[i]={{nil,t,"probability argument to __builtin_expect_with_probability must be constant floating-point expression"}},
[f]={{nil,t,"probability argument to __builtin_expect_with_probability must be constant floating-point expression"}},
[h]=k,
[g]=k,
[c]="probability argument to __builtin_expect_with_probability must be constant floating\\-point expression",
[h]="probability argument to __builtin_expect_with_probability must be constant floating\\-point expression",
[f]=a,
[b]=a,
[e]={{nil,t,a}},
[c]={{nil,t,S}},
[g]={Ab,1582847864,Bb,Db},
[j]={Jb,1582847864,Ib,Ab},
[d]={{I,2441,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_expect_with_probability: {\n    // ...\n    if ((!ProbArg->EvaluateAsConstantExpr(Eval, Context)) || !Eval.Val.isFloat()) {\n      Diag(ProbArg->getBeginLoc(), diag::err_probability_not_constant_float) << ProbArg->getSourceRange();"}},
[i]={{I,2441,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_expect_with_probability: {\n    // ...\n    if ((!ProbArg->EvaluateAsConstantExpr(Eval, Context)) || !Eval.Val.isFloat()) {\n      Diag(ProbArg->getBeginLoc(), diag::err_probability_not_constant_float) << ProbArg->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/builtin-expect-with-probability-avr.cpp"]={"clang/test/Sema/builtin-expect-with-probability-avr.cpp:8:55: error: probability argument to __builtin_expect_with_probability must be constant floating-point expression"}
["clang/test/Sema/builtin-expect-with-probability-avr.cpp"]={"clang/test/Sema/builtin-expect-with-probability-avr.cpp:8:55: error: probability argument to __builtin_expect_with_probability must be constant floating-point expression"}
Line 3,745: Line 3,746:
},
},
["err_probability_out_of_range"]={
["err_probability_out_of_range"]={
[b]={{nil,t,"err_probability_out_of_range"}},
[d]={{nil,t,"err_probability_out_of_range"}},
[j]={{nil,t,"probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"}},
[e]={{nil,t,"probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"}},
[i]={{nil,t,"probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"}},
[f]={{nil,t,"probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"}},
[h]=k,
[g]=k,
[c]="probability argument to __builtin_expect_with_probability is outside the range \\[0\\.0, 1\\.0\\]",
[h]="probability argument to __builtin_expect_with_probability is outside the range \\[0\\.0, 1\\.0\\]",
[f]=a,
[b]=a,
[e]={{nil,t,a}},
[c]={{nil,t,S}},
[g]={Ab,1582847864,Bb,Db},
[j]={Jb,1582847864,Ib,Ab},
[d]={{I,2453,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_expect_with_probability: {\n    // ...\n    if (!(Probability >= llvm::APFloat(0.0) && Probability <= llvm::APFloat(1.0))) {\n      Diag(ProbArg->getBeginLoc(), diag::err_probability_out_of_range) << ProbArg->getSourceRange();"}},
[i]={{I,2453,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_expect_with_probability: {\n    // ...\n    if (!(Probability >= llvm::APFloat(0.0) && Probability <= llvm::APFloat(1.0))) {\n      Diag(ProbArg->getBeginLoc(), diag::err_probability_out_of_range) << ProbArg->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/builtin-expect-with-probability-avr.cpp"]={"clang/test/Sema/builtin-expect-with-probability-avr.cpp:6:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:7:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:10:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:11:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:13:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:14:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"}
["clang/test/Sema/builtin-expect-with-probability-avr.cpp"]={"clang/test/Sema/builtin-expect-with-probability-avr.cpp:6:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:7:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:10:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:11:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:13:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:14:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"}
Line 3,759: Line 3,760:
},
},
["err_property_accessor_type"]={
["err_property_accessor_type"]={
[b]="err_property_accessor_type",
[d]="err_property_accessor_type",
[j]="type of property %0 (%1) does not match type of accessor %2 (%3)",
[e]="type of property %0 (%1) does not match type of accessor %2 (%3)",
[i]="type of property A (B) does not match type of accessor C (D)",
[f]="type of property A (B) does not match type of accessor C (D)",
[h]=k,
[g]=k,
[c]="type of property (.*?) \\((.*?)\\) does not match type of accessor (.*?) \\((.*?)\\)",
[h]="type of property (.*?) \\((.*?)\\) does not match type of accessor (.*?) \\((.*?)\\)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={bb,1480718311,eb,fb},
[j]={eb,1480718311,cb,fb},
[d]={{wb,1727,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n  // ...\n  if (!compat) {\n    // ...\n    if ((propertyObjCPtr = PropertyRValueType->getAs<ObjCObjectPointerType>()) && (getterObjCPtr = GetterType->getAs<ObjCObjectPointerType>()))\n    // ...\n    else if (CheckAssignmentConstraints(Loc, GetterType, PropertyRValueType) != Compatible) {\n      Diag(Loc, diag::err_property_accessor_type) << property->getDeclName() << PropertyRValueType << GetterMethod->getSelector() << GetterType;"}},
[i]={{xb,1727,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n  // ...\n  if (!compat) {\n    // ...\n    if ((propertyObjCPtr = PropertyRValueType->getAs<ObjCObjectPointerType>()) && (getterObjCPtr = GetterType->getAs<ObjCObjectPointerType>()))\n    // ...\n    else if (CheckAssignmentConstraints(Loc, GetterType, PropertyRValueType) != Compatible) {\n      Diag(Loc, diag::err_property_accessor_type) << property->getDeclName() << PropertyRValueType << GetterMethod->getSelector() << GetterType;"}},
[l]={
[l]={
["clang/test/SemaObjC/property-impl-misuse.m"]={"clang/test/SemaObjC/property-impl-misuse.m:40:15: error: type of property \'P\' (\'int\') does not match type of accessor \'P\' (\'void\')","clang/test/SemaObjC/property-impl-misuse.m:46:15: error: type of property \'P2\' (\'int\') does not match type of accessor \'P2\' (\'double *\')"}
["clang/test/SemaObjC/property-impl-misuse.m"]={"clang/test/SemaObjC/property-impl-misuse.m:40:15: error: type of property \'P\' (\'int\') does not match type of accessor \'P\' (\'void\')","clang/test/SemaObjC/property-impl-misuse.m:46:15: error: type of property \'P2\' (\'int\') does not match type of accessor \'P2\' (\'double *\')"}
Line 3,773: Line 3,774:
},
},
["err_property_found_suggest"]={
["err_property_found_suggest"]={
[b]="err_property_found_suggest",
[d]="err_property_found_suggest",
[j]="property %0 found on object of type %1; did you mean to access it with the \".\" operator?",
[e]="property %0 found on object of type %1; did you mean to access it with the \".\" operator?",
[i]="property A found on object of type B; did you mean to access it with the \".\" operator?",
[f]="property A found on object of type B; did you mean to access it with the \".\" operator?",
[h]=k,
[g]=k,
[c]="property (.*?) found on object of type (.*?); did you mean to access it with the \"\\.\" operator\\?",
[h]="property (.*?) found on object of type (.*?); did you mean to access it with the \"\\.\" operator\\?",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"c297cd883641",1309219252,"Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access.","Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access.\n// rdar://7811841\n\nllvm-svn: 133970"},
[j]={"c297cd883641",1309219252,"Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access.","Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access.\n// rdar://7811841\n\nllvm-svn: 133970"},
[d]={{cb,1398,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    // ...\n    if (!IV) {\n      // ...\n      if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n      // ...\n      } else {\n        if (IsArrow && IDecl->FindPropertyDeclaration(Member, ObjCPropertyQueryKind::OBJC_PR_query_instance)) {\n          S.Diag(MemberLoc, diag::err_property_found_suggest) << Member << BaseExpr.get()->getType() << FixItHint::CreateReplacement(OpLoc, \".\");"}},
[i]={{hb,1398,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    // ...\n    if (!IV) {\n      // ...\n      if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n      // ...\n      } else {\n        if (IsArrow && IDecl->FindPropertyDeclaration(Member, ObjCPropertyQueryKind::OBJC_PR_query_instance)) {\n          S.Diag(MemberLoc, diag::err_property_found_suggest) << Member << BaseExpr.get()->getType() << FixItHint::CreateReplacement(OpLoc, \".\");"}},
[l]={
[l]={
["clang/test/FixIt/fixit-objc.m"]={"clang/test/FixIt/fixit-objc.m:54:37: error: property \'y\' found on object of type \'Radar7861841 *\'; did you mean to access it with the \".\" operator?"}
["clang/test/FixIt/fixit-objc.m"]={"clang/test/FixIt/fixit-objc.m:54:37: error: property \'y\' found on object of type \'Radar7861841 *\'; did you mean to access it with the \".\" operator?"}
Line 3,787: Line 3,788:
},
},
["err_property_function_in_objc_container"]={
["err_property_function_in_objc_container"]={
[b]="err_property_function_in_objc_container",
[d]="err_property_function_in_objc_container",
[j]="use of Objective-C property in function nested in Objective-C container not supported, move function outside its container",
[e]="use of Objective-C property in function nested in Objective-C container not supported, move function outside its container",
[i]="use of Objective-C property in function nested in Objective-C container not supported, move function outside its container",
[f]="use of Objective-C property in function nested in Objective-C container not supported, move function outside its container",
[h]=k,
[g]=k,
[c]="use of Objective\\-C property in function nested in Objective\\-C container not supported, move function outside its container",
[h]="use of Objective\\-C property in function nested in Objective\\-C container not supported, move function outside its container",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"555132824a9e",1401300730,"Objective-C. Diagnose use of properties in functions nested in, ","Objective-C. Diagnose use of properties in functions nested in, \nnow deprecated, ObjC containers instead of crashing. \n// rdar://16859666\n\nllvm-svn: 209758"},
[j]={"555132824a9e",1401300730,"Objective-C. Diagnose use of properties in functions nested in, ","Objective-C. Diagnose use of properties in functions nested in, \nnow deprecated, ObjC containers instead of crashing. \n// rdar://16859666\n\nllvm-svn: 209758"},
[d]={{"clang/lib/Sema/SemaPseudoObject.cpp",699,"void ObjCPropertyOpBuilder::DiagnoseUnsupportedPropertyUse() {\n  if (S.getCurLexicalContext()->isObjCContainer() && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCCategoryImpl && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCImplementation) {\n    if (ObjCPropertyDecl *prop = RefExpr->getExplicitProperty()) {\n      S.Diag(RefExpr->getLocation(), diag::err_property_function_in_objc_container);"}},
[i]={{"clang/lib/Sema/SemaPseudoObject.cpp",699,"void ObjCPropertyOpBuilder::DiagnoseUnsupportedPropertyUse() {\n  if (S.getCurLexicalContext()->isObjCContainer() && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCCategoryImpl && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCImplementation) {\n    if (ObjCPropertyDecl *prop = RefExpr->getExplicitProperty()) {\n      S.Diag(RefExpr->getLocation(), diag::err_property_function_in_objc_container);"}},
[l]={
[l]={
["clang/test/SemaObjC/deprecate_function_containers.m"]={"clang/test/SemaObjC/deprecate_function_containers.m:34:37: error: use of Objective-C property in function nested in Objective-C container not supported, move function outside its container"}
["clang/test/SemaObjC/deprecate_function_containers.m"]={"clang/test/SemaObjC/deprecate_function_containers.m:34:37: error: use of Objective-C property in function nested in Objective-C container not supported, move function outside its container"}
Line 3,801: Line 3,802:
},
},
["err_property_implemented"]={
["err_property_implemented"]={
[b]="err_property_implemented",
[d]="err_property_implemented",
[j]="property %0 is already implemented",
[e]="property %0 is already implemented",
[i]="property A is already implemented",
[f]="property A is already implemented",
[h]=k,
[g]=k,
[c]="property (.*?) is already implemented",
[h]="property (.*?) is already implemented",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={bb,1480718311,eb,fb},
[j]={eb,1480718311,cb,fb},
[d]={{wb,1569,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  if (IC) {\n    // ...\n    if (ObjCPropertyImplDecl *PPIDecl = IC->FindPropertyImplDecl(PropertyId, QueryKind)) {\n      Diag(PropertyLoc, diag::err_property_implemented) << PropertyId;"},{wb,1608,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  if (IC) {\n  // ...\n  } else {\n    // ...\n    if (ObjCPropertyImplDecl *PPIDecl = CatImplClass->FindPropertyImplDecl(PropertyId, QueryKind)) {\n      Diag(PropertyDiagLoc, diag::err_property_implemented) << PropertyId;"}},
[i]={{xb,1569,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  if (IC) {\n    // ...\n    if (ObjCPropertyImplDecl *PPIDecl = IC->FindPropertyImplDecl(PropertyId, QueryKind)) {\n      Diag(PropertyLoc, diag::err_property_implemented) << PropertyId;"},{xb,1608,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  if (IC) {\n  // ...\n  } else {\n    // ...\n    if (ObjCPropertyImplDecl *PPIDecl = CatImplClass->FindPropertyImplDecl(PropertyId, QueryKind)) {\n      Diag(PropertyDiagLoc, diag::err_property_implemented) << PropertyId;"}},
[l]={
[l]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:21:13: error: property \'prop_id\' is already implemented"}
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:21:13: error: property \'prop_id\' is already implemented"}
Line 3,815: Line 3,816:
},
},
["err_property_is_variably_modified"]={
["err_property_is_variably_modified"]={
[b]="err_property_is_variably_modified",
[d]="err_property_is_variably_modified",
[j]="property %0 has a variably modified type",
[e]="property %0 has a variably modified type",
[i]="property A has a variably modified type",
[f]="property A has a variably modified type",
[h]=k,
[g]=k,
[c]="property (.*?) has a variably modified type",
[h]="property (.*?) has a variably modified type",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"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"},
[j]={"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"},
[d]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",1305,"Decl *TemplateDeclInstantiator::VisitMSPropertyDecl(MSPropertyDecl *D) {\n  // ...\n  if (DI->getType()->isVariablyModifiedType()) {\n    SemaRef.Diag(D->getLocation(), diag::err_property_is_variably_modified) << D;"}}
[i]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",1305,"Decl *TemplateDeclInstantiator::VisitMSPropertyDecl(MSPropertyDecl *D) {\n  // ...\n  if (DI->getType()->isVariablyModifiedType()) {\n    SemaRef.Diag(D->getLocation(), diag::err_property_is_variably_modified) << D;"}}
},
},
["err_property_ivar_type"]={
["err_property_ivar_type"]={
[b]="err_property_ivar_type",
[d]="err_property_ivar_type",
[j]="type of property %0 (%1) does not match type of instance variable %2 (%3)",
[e]="type of property %0 (%1) does not match type of instance variable %2 (%3)",
[i]="type of property A (B) does not match type of instance variable C (D)",
[f]="type of property A (B) does not match type of instance variable C (D)",
[h]=k,
[g]=k,
[c]="type of property (.*?) \\((.*?)\\) does not match type of instance variable (.*?) \\((.*?)\\)",
[h]="type of property (.*?) \\((.*?)\\) does not match type of instance variable (.*?) \\((.*?)\\)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={bb,1480718311,eb,fb},
[j]={eb,1480718311,cb,fb},
[d]={{wb,1376,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // ...\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      // ...\n      if (!compat) {\n        Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"},{wb,1391,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // ...\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      // ...\n      if (!compat) {\n      // ...\n      } else {\n        // ...\n        if (lhsType != rhsType && lhsType->isArithmeticType()) {\n          Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"}},
[i]={{xb,1376,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // ...\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      // ...\n      if (!compat) {\n        Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"},{xb,1391,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // ...\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      // ...\n      if (!compat) {\n      // ...\n      } else {\n        // ...\n        if (lhsType != rhsType && lhsType->isArithmeticType()) {\n          Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"}},
[l]={
[l]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:21:13: error: type of property \'prop_id\' (\'id\') does not match type of instance variable \'IVAR\' (\'int\')"}
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:21:13: error: type of property \'prop_id\' (\'id\') does not match type of instance variable \'IVAR\' (\'int\')"}
Line 3,840: Line 3,841:
},
},
["err_property_method_unavailable"]={
["err_property_method_unavailable"]={
[b]="err_property_method_unavailable",
[d]="err_property_method_unavailable",
[j]="property access is using %0 method which is unavailable",
[e]="property access is using %0 method which is unavailable",
[i]="property access is using A method which is unavailable",
[f]="property access is using A method which is unavailable",
[h]=k,
[g]=k,
[c]="property access is using (.*?) method which is unavailable",
[h]="property access is using (.*?) method which is unavailable",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"89ea9610b306",1402939541,"Objective-C. Diagnose when property access is using declared","Objective-C. Diagnose when property access is using declared\nproperty accessor methods which have become deprecated\nor available. // rdar://15951801\n\nllvm-svn: 211039"},
[j]={"89ea9610b306",1402939541,"Objective-C. Diagnose when property access is using declared","Objective-C. Diagnose when property access is using declared\nproperty accessor methods which have become deprecated\nor available. // rdar://15951801\n\nllvm-svn: 211039"},
[d]={{"clang/lib/Sema/SemaAvailability.cpp",448,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // ...\n  case AR_Unavailable:\n    diag = !ObjCPropertyAccess ? diag::err_unavailable : diag::err_property_method_unavailable;"}},
[i]={{"clang/lib/Sema/SemaAvailability.cpp",448,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // ...\n  case AR_Unavailable:\n    diag = !ObjCPropertyAccess ? diag::err_unavailable : diag::err_property_method_unavailable;"}},
[l]={
[l]={
["clang/test/SemaObjC/property-deprecated-warning.m"]={"clang/test/SemaObjC/property-deprecated-warning.m:168:14: error: property access is using \'x\' method which is unavailable"}
["clang/test/SemaObjC/property-deprecated-warning.m"]={"clang/test/SemaObjC/property-deprecated-warning.m:168:14: error: property access is using \'x\' method which is unavailable"}
Line 3,854: Line 3,855:
},
},
["err_property_not_as_forward_class"]={
["err_property_not_as_forward_class"]={
[b]="err_property_not_as_forward_class",
[d]="err_property_not_as_forward_class",
[j]="property %0 refers to an incomplete Objective-C class %1 (with no @interface available)",
[e]="property %0 refers to an incomplete Objective-C class %1 (with no @interface available)",
[i]="property A refers to an incomplete Objective-C class B (with no @interface available)",
[f]="property A refers to an incomplete Objective-C class B (with no @interface available)",
[h]=k,
[g]=k,
[c]="property (.*?) refers to an incomplete Objective\\-C class (.*?) \\(with no @interface available\\)",
[h]="property (.*?) refers to an incomplete Objective\\-C class (.*?) \\(with no @interface available\\)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"05d389f407d0",1297905974,"Improve diagnostics when property names an object type of","Improve diagnostics when property names an object type of\na forward class. // rdar://8851803\n\nllvm-svn: 125699"},
[j]={"05d389f407d0",1297905974,"Improve diagnostics when property names an object type of","Improve diagnostics when property names an object type of\na forward class. // rdar://8851803\n\nllvm-svn: 125699"},
[d]={{lb,2138,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  // ...\n  if (ObjCIvarDecl *Ivar = IFace->lookupInstanceVariable(Member, ClassDeclared)) {\n    // ...\n    if (const ObjCObjectPointerType *OBJPT = T->getAsObjCInterfacePointerType()) {\n      if (RequireCompleteType(MemberLoc, OBJPT->getPointeeType(), diag::err_property_not_as_forward_class, MemberName, BaseExpr))"}},
[i]={{qb,2138,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  // ...\n  if (ObjCIvarDecl *Ivar = IFace->lookupInstanceVariable(Member, ClassDeclared)) {\n    // ...\n    if (const ObjCObjectPointerType *OBJPT = T->getAsObjCInterfacePointerType()) {\n      if (RequireCompleteType(MemberLoc, OBJPT->getPointeeType(), diag::err_property_not_as_forward_class, MemberName, BaseExpr))"}},
[l]={
[l]={
["clang/test/SemaObjC/property-missing.m"]={"clang/test/SemaObjC/property-missing.m:32:11: error: property \'someOtherObject\' refers to an incomplete Objective-C class \'SomeOtherClass\' (with no @interface available)"}
["clang/test/SemaObjC/property-missing.m"]={"clang/test/SemaObjC/property-missing.m:32:11: error: property \'someOtherObject\' refers to an incomplete Objective-C class \'SomeOtherClass\' (with no @interface available)"}
Line 3,868: Line 3,869:
},
},
["err_property_not_found"]={
["err_property_not_found"]={
[b]="err_property_not_found",
[d]="err_property_not_found",
[j]="property %0 not found on object of type %1",
[e]="property %0 not found on object of type %1",
[i]="property A not found on object of type B",
[f]="property A not found on object of type B",
[h]=k,
[g]=k,
[c]="property (.*?) not found on object of type (.*?)",
[h]="property (.*?) not found on object of type (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{cb,1549,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    // ...\n    // id, with and without qualifiers.\n    if (OT->isObjCId()) {\n      // ...\n      return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{cb,1604,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    // ...\n    // \'Class\', unqualified only.\n    if (OT->isObjCClass()) {\n      // ...\n      return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{lb,2149,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  // ...\n  Diag(MemberLoc, diag::err_property_not_found) << MemberName << QualType(OPT, 0);"},{lb,2257,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n  // ...\n  return ExprError(Diag(propertyNameLoc, diag::err_property_not_found) << &propertyName << Context.getObjCInterfaceType(IFace));"}},
[i]={{hb,1549,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    // ...\n    // id, with and without qualifiers.\n    if (OT->isObjCId()) {\n      // ...\n      return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{hb,1604,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    // ...\n    // \'Class\', unqualified only.\n    if (OT->isObjCClass()) {\n      // ...\n      return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{qb,2149,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  // ...\n  Diag(MemberLoc, diag::err_property_not_found) << MemberName << QualType(OPT, 0);"},{qb,2257,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n  // ...\n  return ExprError(Diag(propertyNameLoc, diag::err_property_not_found) << &propertyName << Context.getObjCInterfaceType(IFace));"}},
[l]={
[l]={
["clang/test/SemaObjC/conditional-expr-4.m"]={"clang/test/SemaObjC/conditional-expr-4.m:78:25: error: property \'x\' not found on object of type \'id\'"}
["clang/test/SemaObjC/conditional-expr-4.m"]={"clang/test/SemaObjC/conditional-expr-4.m:78:25: error: property \'x\' not found on object of type \'id\'"}
Line 3,882: Line 3,883:
},
},
["err_property_not_found_forward_class"]={
["err_property_not_found_forward_class"]={
[b]="err_property_not_found_forward_class",
[d]="err_property_not_found_forward_class",
[j]="property %0 cannot be found in forward class object %1",
[e]="property %0 cannot be found in forward class object %1",
[i]="property A cannot be found in forward class object B",
[f]="property A cannot be found in forward class object B",
[h]=k,
[g]=k,
[c]="property (.*?) cannot be found in forward class object (.*?)",
[h]="property (.*?) cannot be found in forward class object (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up","Improve diagnostics when property being looked up\nin a forward @class object. // rdar://8774513\n\nllvm-svn: 121933"},
[j]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up","Improve diagnostics when property being looked up\nin a forward @class object. // rdar://8774513\n\nllvm-svn: 121933"},
[d]={{lb,1995,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  // ...\n  if (RequireCompleteType(MemberLoc, OPT->getPointeeType(), diag::err_property_not_found_forward_class, MemberName, BaseRange))"}},
[i]={{qb,1995,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  // ...\n  if (RequireCompleteType(MemberLoc, OPT->getPointeeType(), diag::err_property_not_found_forward_class, MemberName, BaseRange))"}},
[l]={
[l]={
["clang/test/SemaObjC/property-9.m"]={"clang/test/SemaObjC/property-9.m:106:21: error: property \'path\' cannot be found in forward class object \'MDAInstance\'"}
["clang/test/SemaObjC/property-9.m"]={"clang/test/SemaObjC/property-9.m:106:21: error: property \'path\' cannot be found in forward class object \'MDAInstance\'"}
Line 3,896: Line 3,897:
},
},
["err_property_not_found_suggest"]={
["err_property_not_found_suggest"]={
[b]="err_property_not_found_suggest",
[d]="err_property_not_found_suggest",
[j]="property %0 not found on object of type %1; did you mean %2?",
[e]="property %0 not found on object of type %1; did you mean %2?",
[i]="property A not found on object of type B; did you mean C?",
[f]="property A not found on object of type B; did you mean C?",
[h]=k,
[g]=k,
[c]="property (.*?) not found on object of type (.*?); did you mean (.*?)\\?",
[h]="property (.*?) not found on object of type (.*?); did you mean (.*?)\\?",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific","Implement typo correction for a variety of Objective-C-specific\nconstructs:\n\n  - Instance variable lookup (\"foo->ivar\" and, in instance methods, \"ivar\")\n  - Property name lookup (\"foo.prop\")\n  - Superclasses\n  - Various places where a class name is required\n  - Protocol names (e.g., id<proto>)\n\nThis seems to cover many of the common places where typos could occur.\n\nllvm-svn: 92449"},
[j]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific","Implement typo correction for a variety of Objective-C-specific\nconstructs:\n\n  - Instance variable lookup (\"foo->ivar\" and, in instance methods, \"ivar\")\n  - Property name lookup (\"foo.prop\")\n  - Superclasses\n  - Various places where a class name is required\n  - Protocol names (e.g., id<proto>)\n\nThis seems to cover many of the common places where typos could occur.\n\nllvm-svn: 92449"},
[d]={{lb,2124,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(MemberName, MemberLoc), LookupOrdinaryName, nullptr, nullptr, CCC, CTK_ErrorRecovery, IFace, false, OPT)) {\n    // ...\n    if (TypoResult.isIdentifier() && TypoResult.getAsIdentifierInfo() == Member) {\n    // ...\n    } else {\n      diagnoseTypo(Corrected, PDiag(diag::err_property_not_found_suggest) << MemberName << QualType(OPT, 0));"}},
[i]={{qb,2124,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(MemberName, MemberLoc), LookupOrdinaryName, nullptr, nullptr, CCC, CTK_ErrorRecovery, IFace, false, OPT)) {\n    // ...\n    if (TypoResult.isIdentifier() && TypoResult.getAsIdentifierInfo() == Member) {\n    // ...\n    } else {\n      diagnoseTypo(Corrected, PDiag(diag::err_property_not_found_suggest) << MemberName << QualType(OPT, 0));"}},
[l]={
[l]={
["clang/test/FixIt/typo.m"]={"clang/test/FixIt/typo.m:54:8: error: property \'hisprop\' not found on object of type \'B *\'; did you mean \'his_prop\'?","clang/test/FixIt/typo.m:55:8: error: property \'herprop\' not found on object of type \'B *\'; did you mean \'her_prop\'?","clang/test/FixIt/typo.m:56:8: error: property \'s_prop\' not found on object of type \'B *\'; did you mean \'sprop\'?","clang/test/FixIt/typo.m:81:5: error: property \'valu\' not found on object of type \'Collide *\'; did you mean \'value\'?"}
["clang/test/FixIt/typo.m"]={"clang/test/FixIt/typo.m:54:8: error: property \'hisprop\' not found on object of type \'B *\'; did you mean \'his_prop\'?","clang/test/FixIt/typo.m:55:8: error: property \'herprop\' not found on object of type \'B *\'; did you mean \'her_prop\'?","clang/test/FixIt/typo.m:56:8: error: property \'s_prop\' not found on object of type \'B *\'; did you mean \'sprop\'?","clang/test/FixIt/typo.m:81:5: error: property \'valu\' not found on object of type \'Collide *\'; did you mean \'value\'?"}
Line 3,910: Line 3,911:
},
},
["err_property_setter_ambiguous_use"]={
["err_property_setter_ambiguous_use"]={
[b]="err_property_setter_ambiguous_use",
[d]="err_property_setter_ambiguous_use",
[j]="synthesized properties %0 and %1 both claim setter %2 - use of this setter will cause unexpected behavior",
[e]="synthesized properties %0 and %1 both claim setter %2 - use of this setter will cause unexpected behavior",
[i]="synthesized properties A and B both claim setter C - use of this setter will cause unexpected behavior",
[f]="synthesized properties A and B both claim setter C - use of this setter will cause unexpected behavior",
[h]=k,
[g]=k,
[c]="synthesized properties (.*?) and (.*?) both claim setter (.*?) \\- use of this setter will cause unexpected behavior",
[h]="synthesized properties (.*?) and (.*?) both claim setter (.*?) \\- use of this setter will cause unexpected behavior",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={bb,1480718311,eb,fb},
[j]={eb,1480718311,cb,fb},
[d]={{"clang/lib/Sema/SemaPseudoObject.cpp",675,"/// Try to find the most accurate setter declaration for the property\n/// reference.\n///\n/// \\return true if a setter was found, in which case Setter\nbool ObjCPropertyOpBuilder::findSetter(bool warn) {\n  // ...\n  // Do a normal method lookup first.\n  if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n    if (setter->isPropertyAccessor() && warn)\n      if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n        // ...\n        if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n          if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n            S.Diag(RefExpr->getExprLoc(), diag::err_property_setter_ambiguous_use) << prop << prop1 << setter->getSelector();"}},
[i]={{"clang/lib/Sema/SemaPseudoObject.cpp",675,"/// Try to find the most accurate setter declaration for the property\n/// reference.\n///\n/// \\return true if a setter was found, in which case Setter\nbool ObjCPropertyOpBuilder::findSetter(bool warn) {\n  // ...\n  // Do a normal method lookup first.\n  if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n    if (setter->isPropertyAccessor() && warn)\n      if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n        // ...\n        if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n          if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n            S.Diag(RefExpr->getExprLoc(), diag::err_property_setter_ambiguous_use) << prop << prop1 << setter->getSelector();"}},
[l]={
[l]={
["clang/test/SemaObjC/property-user-setter.m"]={"clang/test/SemaObjC/property-user-setter.m:130:3: error: synthesized properties \'t\' and \'T\' both claim setter \'setT:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:131:3: error: synthesized properties \'T\' and \'t\' both claim setter \'setT:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:132:3: error: synthesized properties \'Pxyz\' and \'pxyz\' both claim setter \'setPxyz:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:133:3: error: synthesized properties \'pxyz\' and \'Pxyz\' both claim setter \'setPxyz:\' - use of this setter will cause unexpected behavior"}
["clang/test/SemaObjC/property-user-setter.m"]={"clang/test/SemaObjC/property-user-setter.m:130:3: error: synthesized properties \'t\' and \'T\' both claim setter \'setT:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:131:3: error: synthesized properties \'T\' and \'t\' both claim setter \'setT:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:132:3: error: synthesized properties \'Pxyz\' and \'pxyz\' both claim setter \'setPxyz:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:133:3: error: synthesized properties \'pxyz\' and \'Pxyz\' both claim setter \'setPxyz:\' - use of this setter will cause unexpected behavior"}
Line 3,924: Line 3,925:
},
},
["err_property_type"]={
["err_property_type"]={
[b]="err_property_type",
[d]="err_property_type",
[j]="property cannot have array or function type %0",
[e]="property cannot have array or function type %0",
[i]="property cannot have array or function type A",
[f]="property cannot have array or function type A",
[h]=k,
[g]=k,
[c]="property cannot have array or function type (.*?)",
[h]="property cannot have array or function type (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{wb,638,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n  // ...\n  if (T->isArrayType() || T->isFunctionType()) {\n    Diag(AtLoc, diag::err_property_type) << T;"}},
[i]={{xb,638,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n  // ...\n  if (T->isArrayType() || T->isFunctionType()) {\n    Diag(AtLoc, diag::err_property_type) << T;"}},
[l]={
[l]={
["clang/test/SemaObjC/rdr-6211479-array-property.m"]={"clang/test/SemaObjC/rdr-6211479-array-property.m:7:1: error: property cannot have array or function type \'T\' (aka \'int[2]\')"}
["clang/test/SemaObjC/rdr-6211479-array-property.m"]={"clang/test/SemaObjC/rdr-6211479-array-property.m:7:1: error: property cannot have array or function type \'T\' (aka \'int[2]\')"}
Line 3,938: Line 3,939:
},
},
["err_protected_ivar_access"]={
["err_protected_ivar_access"]={
[b]="err_protected_ivar_access",
[d]="err_protected_ivar_access",
[j]="instance variable %0 is protected",
[e]="instance variable %0 is protected",
[i]="instance variable A is protected",
[f]="instance variable A is protected",
[h]=k,
[g]=k,
[c]="instance variable (.*?) is protected",
[h]="instance variable (.*?) is protected",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={bb,1480718311,eb,fb},
[j]={eb,1480718311,cb,fb},
[d]={{cb,1449,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    // ...\n    if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n      // ...\n      if (!S.getLangOpts().DebuggerSupport) {\n        if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n        // ...\n        } else if (!IDecl->isSuperClassOf(ClassOfMethodDecl))\n          // ...\n          S.Diag(MemberLoc, diag::err_protected_ivar_access) << IV->getDeclName();"}},
[i]={{hb,1449,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    // ...\n    if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n      // ...\n      if (!S.getLangOpts().DebuggerSupport) {\n        if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n        // ...\n        } else if (!IDecl->isSuperClassOf(ClassOfMethodDecl))\n          // ...\n          S.Diag(MemberLoc, diag::err_protected_ivar_access) << IV->getDeclName();"}},
[l]={
[l]={
["clang/test/SemaObjC/ivar-access-tests.m"]={"clang/test/SemaObjC/ivar-access-tests.m:65:17: error: instance variable \'protected\' is protected","clang/test/SemaObjC/ivar-access-tests.m:68:17: error: instance variable \'protected\' is protected","clang/test/SemaObjC/ivar-access-tests.m:77:15: error: instance variable \'protected\' is protected"}
["clang/test/SemaObjC/ivar-access-tests.m"]={"clang/test/SemaObjC/ivar-access-tests.m:65:17: error: instance variable \'protected\' is protected","clang/test/SemaObjC/ivar-access-tests.m:68:17: error: instance variable \'protected\' is protected","clang/test/SemaObjC/ivar-access-tests.m:77:15: error: instance variable \'protected\' is protected"}
Line 3,952: Line 3,953:
},
},
["err_protocol_has_circular_dependency"]={
["err_protocol_has_circular_dependency"]={
[b]="err_protocol_has_circular_dependency",
[d]="err_protocol_has_circular_dependency",
[j]="protocol has circular dependency",
[e]="protocol has circular dependency",
[i]="protocol has circular dependency",
[f]="protocol has circular dependency",
[h]=k,
[g]=k,
[c]="protocol has circular dependency",
[h]="protocol has circular dependency",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{Z,1205,"bool Sema::CheckForwardProtocolDeclarationForCircularDependency(IdentifierInfo *PName, SourceLocation &Ploc, SourceLocation PrevLoc, const ObjCList<ObjCProtocolDecl> &PList) {\n  // ...\n  for (ObjCList<ObjCProtocolDecl>::iterator I = PList.begin(), E = PList.end(); I != E; ++I) {\n    if (ObjCProtocolDecl *PDecl = LookupProtocol((*I)->getIdentifier(), Ploc)) {\n      if (PDecl->getIdentifier() == PName) {\n        Diag(Ploc, diag::err_protocol_has_circular_dependency);"}},
[i]={{bb,1205,"bool Sema::CheckForwardProtocolDeclarationForCircularDependency(IdentifierInfo *PName, SourceLocation &Ploc, SourceLocation PrevLoc, const ObjCList<ObjCProtocolDecl> &PList) {\n  // ...\n  for (ObjCList<ObjCProtocolDecl>::iterator I = PList.begin(), E = PList.end(); I != E; ++I) {\n    if (ObjCProtocolDecl *PDecl = LookupProtocol((*I)->getIdentifier(), Ploc)) {\n      if (PDecl->getIdentifier() == PName) {\n        Diag(Ploc, diag::err_protocol_has_circular_dependency);"}},
[l]={
[l]={
["clang/test/SemaObjC/protocols.m"]={"clang/test/SemaObjC/protocols.m:61:11: error: protocol has circular dependency"}
["clang/test/SemaObjC/protocols.m"]={"clang/test/SemaObjC/protocols.m:61:11: error: protocol has circular dependency"}
Line 3,966: Line 3,967:
},
},
["err_protocol_property_mismatch"]={
["err_protocol_property_mismatch"]={
[b]={{nil,n,"err_protocol_property_mismatch"}},
[d]={{nil,n,"err_protocol_property_mismatch"}},
[j]={{nil,n,"property %select{of type %1|with attribute \'%1\'|without attribute \'%1\'|with getter %1|with setter %1}0 was selected for synthesis"}},
[e]={{nil,n,"property %select{of type %1|with attribute \'%1\'|without attribute \'%1\'|with getter %1|with setter %1}0 was selected for synthesis"}},
[i]={{nil,n,{"property ",{"of type B","with attribute \'B\'","without attribute \'B\'","with getter B","with setter B"}," was selected for synthesis"}}},
[f]={{nil,n,{"property ",{"of type B","with attribute \'B\'","without attribute \'B\'","with getter B","with setter B"}," was selected for synthesis"}}},
[h]=k,
[g]=k,
[c]="property (?:of type (.*?)|with attribute \'(.*?)\'|without attribute \'(.*?)\'|with getter (.*?)|with setter (.*?)) was selected for synthesis",
[h]="property (?:of type (.*?)|with attribute \'(.*?)\'|without attribute \'(.*?)\'|with getter (.*?)|with setter (.*?)) was selected for synthesis",
[f]=a,
[b]=a,
[e]={{nil,n,m}},
[c]={{nil,n,m}},
[g]={"50b2dd336e39",1499943982,"[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous","[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous\nproperty and check for incompatible attributes\n\nThis commit changes the way ambiguous property synthesis (i.e. when synthesizing\na property that\'s declared in multiple protocols) is performed. Previously,\nClang synthesized the first property that was found. This lead to problems when\nthe property was synthesized in a class that conformed to two protocols that\ndeclared that property and a second protocols had a \'readwrite\' declaration -\nthe setter was not synthesized so the class didn\'t really conform to the second\nprotocol and user\'s code would crash at runtime when they would try to set the\nproperty.\n\nThis commit ensures that a first readwrite property is selected. This is a\nsemantic change that changes users code in this manner:\n\n```\n@protocol P @property(readonly) int p; @end\n@protocol P2 @property(readwrite) id p; @end\n@interface I <P2> @end\n@implementation I\n@syntesize p; // Users previously got a warning here, and Clang synthesized\n              // readonly \'int p\' here. Now Clang synthesizes readwrite \'id\' p..\n@end\n```\n\nTo ensure that this change is safe, the warning about incompatible types is\npromoted to an error when this kind of readonly/readwrite ambiguity is detected\nin the @implementation. This will ensure that previous code that had this subtle\nbug and ignored the warning now will fail to compile with an error, and users\nshould not get suprises at runtime once they resolve the error.\n\nThe commit also extends the ambiguity checker, and now it can detect conflicts\namong the different property attributes. An error diagnostic is used for\nconflicting attributes, to ensure that the user won\'t get \"suprises\" at runtime.\n\nProtocolPropertyMap is removed in favour of a a set + vector because the map\'s\norder of iteration is non-deterministic, so it couldn\'t be used to select the\nreadwrite property.\n\nrdar://31579994\n\nDifferential Revision: https://reviews.llvm.org/D35268\n\nllvm-svn: 307903"},
[j]={"50b2dd336e39",1499943982,"[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous","[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous\nproperty and check for incompatible attributes\n\nThis commit changes the way ambiguous property synthesis (i.e. when synthesizing\na property that\'s declared in multiple protocols) is performed. Previously,\nClang synthesized the first property that was found. This lead to problems when\nthe property was synthesized in a class that conformed to two protocols that\ndeclared that property and a second protocols had a \'readwrite\' declaration -\nthe setter was not synthesized so the class didn\'t really conform to the second\nprotocol and user\'s code would crash at runtime when they would try to set the\nproperty.\n\nThis commit ensures that a first readwrite property is selected. This is a\nsemantic change that changes users code in this manner:\n\n```\n@protocol P @property(readonly) int p; @end\n@protocol P2 @property(readwrite) id p; @end\n@interface I <P2> @end\n@implementation I\n@syntesize p; // Users previously got a warning here, and Clang synthesized\n              // readonly \'int p\' here. Now Clang synthesizes readwrite \'id\' p..\n@end\n```\n\nTo ensure that this change is safe, the warning about incompatible types is\npromoted to an error when this kind of readonly/readwrite ambiguity is detected\nin the @implementation. This will ensure that previous code that had this subtle\nbug and ignored the warning now will fail to compile with an error, and users\nshould not get suprises at runtime once they resolve the error.\n\nThe commit also extends the ambiguity checker, and now it can detect conflicts\namong the different property attributes. An error diagnostic is used for\nconflicting attributes, to ensure that the user won\'t get \"suprises\" at runtime.\n\nProtocolPropertyMap is removed in favour of a a set + vector because the map\'s\norder of iteration is non-deterministic, so it couldn\'t be used to select the\nreadwrite property.\n\nrdar://31579994\n\nDifferential Revision: https://reviews.llvm.org/D35268\n\nllvm-svn: 307903"},
[d]={{wb,969,"/// SelectPropertyForSynthesisFromProtocols - Finds the most appropriate\n/// property declaration that should be synthesised in all of the inherited\n/// protocols. It also diagnoses properties declared in inherited protocols with\n/// mismatched types or attributes, since any of them can be candidate for\n/// synthesis.\nstatic ObjCPropertyDecl *SelectPropertyForSynthesisFromProtocols(Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) {\n  // ...\n  // Diagnose incompability.\n  {\n    // ...\n    auto Diag = S.Diag(Property->getLocation(), Property != OriginalProperty || HasIncompatibleAttributes ? diag::err_protocol_property_mismatch : diag::warn_protocol_property_mismatch);"}},
[i]={{xb,969,"/// SelectPropertyForSynthesisFromProtocols - Finds the most appropriate\n/// property declaration that should be synthesised in all of the inherited\n/// protocols. It also diagnoses properties declared in inherited protocols with\n/// mismatched types or attributes, since any of them can be candidate for\n/// synthesis.\nstatic ObjCPropertyDecl *SelectPropertyForSynthesisFromProtocols(Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) {\n  // ...\n  // Diagnose incompability.\n  {\n    // ...\n    auto Diag = S.Diag(Property->getLocation(), Property != OriginalProperty || HasIncompatibleAttributes ? diag::err_protocol_property_mismatch : diag::warn_protocol_property_mismatch);"}},
[l]={
[l]={
["clang/test/SemaObjC/arc-property-decl-attrs.m"]={"clang/test/SemaObjC/arc-property-decl-attrs.m:130:43: error: property with attribute \'copy\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:143:25: error: property without attribute \'retain (or strong)\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:156:42: error: property without attribute \'atomic\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:169:31: error: property with getter \'prop\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:185:46: error: property with setter \'setp:\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:198:42: error: property of type \'int\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:220:45: error: property of type \'id\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:264:40: error: property with attribute \'retain (or strong)\' was selected for synthesis"}
["clang/test/SemaObjC/arc-property-decl-attrs.m"]={"clang/test/SemaObjC/arc-property-decl-attrs.m:130:43: error: property with attribute \'copy\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:143:25: error: property without attribute \'retain (or strong)\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:156:42: error: property without attribute \'atomic\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:169:31: error: property with getter \'prop\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:185:46: error: property with setter \'setp:\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:198:42: error: property of type \'int\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:220:45: error: property of type \'id\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:264:40: error: property with attribute \'retain (or strong)\' was selected for synthesis"}
Line 3,980: Line 3,981:
},
},
["err_pseudo_dtor_base_not_scalar"]={
["err_pseudo_dtor_base_not_scalar"]={
[b]="err_pseudo_dtor_base_not_scalar",
[d]="err_pseudo_dtor_base_not_scalar",
[j]="object expression of non-scalar type %0 cannot be used in a pseudo-destructor expression",
[e]="object expression of non-scalar type %0 cannot be used in a pseudo-destructor expression",
[i]="object expression of non-scalar type A cannot be used in a pseudo-destructor expression",
[f]="object expression of non-scalar type A cannot be used in a pseudo-destructor expression",
[h]=k,
[g]=k,
[c]="object expression of non\\-scalar type (.*?) cannot be used in a pseudo\\-destructor expression",
[h]="object expression of non\\-scalar type (.*?) cannot be used in a pseudo\\-destructor expression",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor","Implement AST, semantics, and CodeGen for C++ pseudo-destructor\nexpressions, e.g.,\n\n  p->~T()\n\nwhen p is a pointer to a scalar type. \n\nWe don\'t currently diagnose errors when pseudo-destructor expressions\nare used in any way other than by forming a call.\n\nllvm-svn: 81009"},
[j]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor","Implement AST, semantics, and CodeGen for C++ pseudo-destructor\nexpressions, e.g.,\n\n  p->~T()\n\nwhen p is a pointer to a scalar type. \n\nWe don\'t currently diagnose errors when pseudo-destructor expressions\nare used in any way other than by forming a call.\n\nllvm-svn: 81009"},
[d]={{Q,7770,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  // ...\n  if (!ObjectType->isDependentType() && !ObjectType->isScalarType() && !ObjectType->isVectorType()) {\n    if (getLangOpts().MSVCCompat && ObjectType->isVoidType())\n    // ...\n    else {\n      Diag(OpLoc, diag::err_pseudo_dtor_base_not_scalar) << ObjectType << Base->getSourceRange();"}},
[i]={{Q,7770,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  // ...\n  if (!ObjectType->isDependentType() && !ObjectType->isScalarType() && !ObjectType->isVectorType()) {\n    if (getLangOpts().MSVCCompat && ObjectType->isVoidType())\n    // ...\n    else {\n      Diag(OpLoc, diag::err_pseudo_dtor_base_not_scalar) << ObjectType << Base->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:34:6: error: object expression of non-scalar type \'void\' cannot be used in a pseudo-destructor expression","clang/test/SemaCXX/pseudo-destructors.cpp:195:19: error: object expression of non-scalar type \'void ()\' cannot be used in a pseudo-destructor expression"}
["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:34:6: error: object expression of non-scalar type \'void\' cannot be used in a pseudo-destructor expression","clang/test/SemaCXX/pseudo-destructors.cpp:195:19: error: object expression of non-scalar type \'void ()\' cannot be used in a pseudo-destructor expression"}
Line 3,994: Line 3,995:
},
},
["err_pseudo_dtor_call_with_args"]={
["err_pseudo_dtor_call_with_args"]={
[b]="err_pseudo_dtor_call_with_args",
[d]="err_pseudo_dtor_call_with_args",
[j]="call to pseudo-destructor cannot have any arguments",
[e]="call to pseudo-destructor cannot have any arguments",
[i]="call to pseudo-destructor cannot have any arguments",
[f]="call to pseudo-destructor cannot have any arguments",
[h]=k,
[g]=k,
[c]="call to pseudo\\-destructor cannot have any arguments",
[h]="call to pseudo\\-destructor cannot have any arguments",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor","Implement AST, semantics, and CodeGen for C++ pseudo-destructor\nexpressions, e.g.,\n\n  p->~T()\n\nwhen p is a pointer to a scalar type. \n\nWe don\'t currently diagnose errors when pseudo-destructor expressions\nare used in any way other than by forming a call.\n\nllvm-svn: 81009"},
[j]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor","Implement AST, semantics, and CodeGen for C++ pseudo-destructor\nexpressions, e.g.,\n\n  p->~T()\n\nwhen p is a pointer to a scalar type. \n\nWe don\'t currently diagnose errors when pseudo-destructor expressions\nare used in any way other than by forming a call.\n\nllvm-svn: 81009"},
[d]={{O,7307,"/// BuildCallExpr - Handle a call to Fn with the specified array of arguments.\n/// This provides the location of the left/right parens and a list of comma\n/// locations.\nExprResult Sema::BuildCallExpr(Scope *Scope, Expr *Fn, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // If this is a pseudo-destructor expression, build the call immediately.\n    if (isa<CXXPseudoDestructorExpr>(Fn)) {\n      if (!ArgExprs.empty()) {\n        // ...\n        Diag(Fn->getBeginLoc(), diag::err_pseudo_dtor_call_with_args) << FixItHint::CreateRemoval(SourceRange(ArgExprs.front()->getBeginLoc(), ArgExprs.back()->getEndLoc()));"}},
[i]={{O,7307,"/// BuildCallExpr - Handle a call to Fn with the specified array of arguments.\n/// This provides the location of the left/right parens and a list of comma\n/// locations.\nExprResult Sema::BuildCallExpr(Scope *Scope, Expr *Fn, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // If this is a pseudo-destructor expression, build the call immediately.\n    if (isa<CXXPseudoDestructorExpr>(Fn)) {\n      if (!ArgExprs.empty()) {\n        // ...\n        Diag(Fn->getBeginLoc(), diag::err_pseudo_dtor_call_with_args) << FixItHint::CreateRemoval(SourceRange(ArgExprs.front()->getBeginLoc(), ArgExprs.back()->getEndLoc()));"}},
[l]={
[l]={
["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:40:3: error: call to pseudo-destructor cannot have any arguments"}
["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:40:3: error: call to pseudo-destructor cannot have any arguments"}
Line 4,008: Line 4,009:
},
},
["err_pseudo_dtor_destructor_non_type"]={
["err_pseudo_dtor_destructor_non_type"]={
[b]="err_pseudo_dtor_destructor_non_type",
[d]="err_pseudo_dtor_destructor_non_type",
[j]="%0 does not refer to a type name in pseudo-destructor expression; expected the name of type %1",
[e]="%0 does not refer to a type name in pseudo-destructor expression; expected the name of type %1",
[i]="A does not refer to a type name in pseudo-destructor expression; expected the name of type B",
[f]="A does not refer to a type name in pseudo-destructor expression; expected the name of type B",
[h]=k,
[g]=k,
[c]="(.*?) does not refer to a type name in pseudo\\-destructor expression; expected the name of type (.*?)",
[h]="(.*?) does not refer to a type name in pseudo\\-destructor expression; expected the name of type (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"0d5b0a1e5edb",1267046952,"ActOnPseudoDestructorExpr now performs all semantic analysis for","ActOnPseudoDestructorExpr now performs all semantic analysis for\npseudo-destructor expressions, and builds the CXXPseudoDestructorExpr\nnode directly. Currently, this only affects pseudo-destructor\nexpressions when they are parsed, but not after template\ninstantiation. That\'s coming next...\n\nImprove parsing of pseudo-destructor-names. When parsing the\nnested-name-specifier and we hit the sequence of tokens X :: ~, query\nthe actual module to determine whether X is a type-name (in which case\nthe X :: is part of the pseudo-destructor-name but not the\nnested-name-specifier) or not (in which case the X :: is part of the\nnested-name-specifier). \n\nllvm-svn: 97058"},
[j]={"0d5b0a1e5edb",1267046952,"ActOnPseudoDestructorExpr now performs all semantic analysis for","ActOnPseudoDestructorExpr now performs all semantic analysis for\npseudo-destructor expressions, and builds the CXXPseudoDestructorExpr\nnode directly. Currently, this only affects pseudo-destructor\nexpressions when they are parsed, but not after template\ninstantiation. That\'s coming next...\n\nImprove parsing of pseudo-destructor-names. When parsing the\nnested-name-specifier and we hit the sequence of tokens X :: ~, query\nthe actual module to determine whether X is a type-name (in which case\nthe X :: is part of the pseudo-destructor-name but not the\nnested-name-specifier) or not (in which case the X :: is part of the\nnested-name-specifier). \n\nllvm-svn: 97058"},
[d]={{Q,7920,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n  // ...\n  if (SecondTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n    // ...\n    if (!T && ((SS.isSet() && !computeDeclContext(SS, false)) || (!SS.isSet() && ObjectType->isDependentType()))) {\n    // ...\n    } else if (!T) {\n      Diag(SecondTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << SecondTypeName.Identifier << ObjectType;"},{Q,7972,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n  // ...\n  if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_TemplateId || FirstTypeName.Identifier) {\n    if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n      // ...\n      if (!T) {\n        Diag(FirstTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << FirstTypeName.Identifier << ObjectType;"}},
[i]={{Q,7920,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n  // ...\n  if (SecondTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n    // ...\n    if (!T && ((SS.isSet() && !computeDeclContext(SS, false)) || (!SS.isSet() && ObjectType->isDependentType()))) {\n    // ...\n    } else if (!T) {\n      Diag(SecondTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << SecondTypeName.Identifier << ObjectType;"},{Q,7972,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n  // ...\n  if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_TemplateId || FirstTypeName.Identifier) {\n    if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n      // ...\n      if (!T) {\n        Diag(FirstTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << FirstTypeName.Identifier << ObjectType;"}},
[l]={
[l]={
["clang/test/Frontend/crash-diagnostic-renderer.cpp"]={"clang/test/Frontend/crash-diagnostic-renderer.cpp:13:23: error: \'b\' does not refer to a type name in pseudo-destructor expression; expected the name of type \'volatile long\'"}
["clang/test/Frontend/crash-diagnostic-renderer.cpp"]={"clang/test/Frontend/crash-diagnostic-renderer.cpp:13:23: error: \'b\' does not refer to a type name in pseudo-destructor expression; expected the name of type \'volatile long\'"}
Line 4,022: Line 4,023:
},
},
["err_pseudo_dtor_type_mismatch"]={
["err_pseudo_dtor_type_mismatch"]={
[b]="err_pseudo_dtor_type_mismatch",
[d]="err_pseudo_dtor_type_mismatch",
[j]="the type of object expression %diff{($) does not match the type being destroyed ($)|does not match the type being destroyed}0,1 in pseudo-destructor expression",
[e]="the type of object expression %diff{($) does not match the type being destroyed ($)|does not match the type being destroyed}0,1 in pseudo-destructor expression",
[i]={{nil,nil,{"the type of object expression ",{"(A) does not match the type being destroyed (B)","does not match the type being destroyed"}," in pseudo-destructor expression"}}},
[f]={{nil,nil,{"the type of object expression ",{"(A) does not match the type being destroyed (B)","does not match the type being destroyed"}," in pseudo-destructor expression"}}},
[h]=k,
[g]=k,
[c]="the type of object expression (?:\\((.*?)\\) does not match the type being destroyed \\((.*?)\\)|does not match the type being destroyed) in pseudo\\-destructor expression",
[h]="the type of object expression (?:\\((.*?)\\) does not match the type being destroyed \\((.*?)\\)|does not match the type being destroyed) in pseudo\\-destructor expression",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor","Implement AST, semantics, and CodeGen for C++ pseudo-destructor\nexpressions, e.g.,\n\n  p->~T()\n\nwhen p is a pointer to a scalar type. \n\nWe don\'t currently diagnose errors when pseudo-destructor expressions\nare used in any way other than by forming a call.\n\nllvm-svn: 81009"},
[j]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor","Implement AST, semantics, and CodeGen for C++ pseudo-destructor\nexpressions, e.g.,\n\n  p->~T()\n\nwhen p is a pointer to a scalar type. \n\nWe don\'t currently diagnose errors when pseudo-destructor expressions\nare used in any way other than by forming a call.\n\nllvm-svn: 81009"},
[d]={{Q,7805,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  // ...\n  // C++ [expr.pseudo]p2:\n  //  [...] The cv-unqualified versions of the object type and of the type\n  //  designated by the pseudo-destructor-name shall be the same type.\n  if (DestructedTypeInfo) {\n    // ...\n    if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n      if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n        // Detect dot pseudo destructor calls on pointer objects, e.g.:\n        //  Foo *foo;\n        //  foo.~Foo();\n        if (OpKind == tok::period && ObjectType->isPointerType() && Context.hasSameUnqualifiedType(DestructedType, ObjectType->getPointeeType())) {\n        // ...\n        } else {\n          Diag(DestructedTypeStart, diag::err_pseudo_dtor_type_mismatch) << ObjectType << DestructedType << Base->getSourceRange() << DestructedTypeInfo->getTypeLoc().getSourceRange();"},{Q,7849,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  // ...\n  // C++ [expr.pseudo]p2:\n  //  [...] Furthermore, the two type-names in a pseudo-destructor-name of the\n  //  form\n  //\n  //    ::[opt] nested-name-specifier[opt] type-name :: ~ type-name\n  //\n  //  shall designate the same scalar type.\n  if (ScopeTypeInfo) {\n    // ...\n    if (!ScopeType->isDependentType() && !ObjectType->isDependentType() && !Context.hasSameUnqualifiedType(ScopeType, ObjectType)) {\n      Diag(ScopeTypeInfo->getTypeLoc().getSourceRange().getBegin(), diag::err_pseudo_dtor_type_mismatch) << ObjectType << ScopeType << Base->getSourceRange() << ScopeTypeInfo->getTypeLoc().getSourceRange();"}},
[i]={{Q,7805,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  // ...\n  // C++ [expr.pseudo]p2:\n  //  [...] The cv-unqualified versions of the object type and of the type\n  //  designated by the pseudo-destructor-name shall be the same type.\n  if (DestructedTypeInfo) {\n    // ...\n    if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n      if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n        // Detect dot pseudo destructor calls on pointer objects, e.g.:\n        //  Foo *foo;\n        //  foo.~Foo();\n        if (OpKind == tok::period && ObjectType->isPointerType() && Context.hasSameUnqualifiedType(DestructedType, ObjectType->getPointeeType())) {\n        // ...\n        } else {\n          Diag(DestructedTypeStart, diag::err_pseudo_dtor_type_mismatch) << ObjectType << DestructedType << Base->getSourceRange() << DestructedTypeInfo->getTypeLoc().getSourceRange();"},{Q,7849,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  // ...\n  // C++ [expr.pseudo]p2:\n  //  [...] Furthermore, the two type-names in a pseudo-destructor-name of the\n  //  form\n  //\n  //    ::[opt] nested-name-specifier[opt] type-name :: ~ type-name\n  //\n  //  shall designate the same scalar type.\n  if (ScopeTypeInfo) {\n    // ...\n    if (!ScopeType->isDependentType() && !ObjectType->isDependentType() && !Context.hasSameUnqualifiedType(ScopeType, ObjectType)) {\n      Diag(ScopeTypeInfo->getTypeLoc().getSourceRange().getBegin(), diag::err_pseudo_dtor_type_mismatch) << ObjectType << ScopeType << Base->getSourceRange() << ScopeTypeInfo->getTypeLoc().getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:32:7: error: the type of object expression (\'int\') does not match the type being destroyed (\'Bar\' (aka \'Foo\')) in pseudo-destructor expression","clang/test/SemaCXX/pseudo-destructors.cpp:51:16: error: the type of object expression (\'int\') does not match the type being destroyed (\'Double\' (aka \'double\')) in pseudo-destructor expression"}
["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:32:7: error: the type of object expression (\'int\') does not match the type being destroyed (\'Bar\' (aka \'Foo\')) in pseudo-destructor expression","clang/test/SemaCXX/pseudo-destructors.cpp:51:16: error: the type of object expression (\'int\') does not match the type being destroyed (\'Double\' (aka \'double\')) in pseudo-destructor expression"}
Line 4,036: Line 4,037:
},
},
["err_pure_friend"]={
["err_pure_friend"]={
[b]="err_pure_friend",
[d]="err_pure_friend",
[j]="friend declaration cannot have a pure-specifier",
[e]="friend declaration cannot have a pure-specifier",
[i]="friend declaration cannot have a pure-specifier",
[f]="friend declaration cannot have a pure-specifier",
[h]=k,
[g]=k,
[c]="friend declaration cannot have a pure\\-specifier",
[h]="friend declaration cannot have a pure\\-specifier",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"9ba0fec83e7f",1435627736,"Rework parsing of pure-specifiers. Perform the grammar matching and","Rework parsing of pure-specifiers. Perform the grammar matching and\ndisambiguation in the parser rather than trying to do it in Sema.\n\nllvm-svn: 241032"},
[j]={"9ba0fec83e7f",1435627736,"Rework parsing of pure-specifiers. Perform the grammar matching and","Rework parsing of pure-specifiers. Perform the grammar matching and\ndisambiguation in the parser rather than trying to do it in Sema.\n\nllvm-svn: 241032"},
[d]={{w,18148,"void Sema::ActOnPureSpecifier(Decl *D, SourceLocation ZeroLoc) {\n  if (D->getFriendObjectKind())\n    Diag(D->getLocation(), diag::err_pure_friend);"}},
[i]={{w,18148,"void Sema::ActOnPureSpecifier(Decl *D, SourceLocation ZeroLoc) {\n  if (D->getFriendObjectKind())\n    Diag(D->getLocation(), diag::err_pure_friend);"}},
[l]={
[l]={
["clang/test/SemaCXX/virtuals.cpp"]={"clang/test/SemaCXX/virtuals.cpp:70:28: error: friend declaration cannot have a pure-specifier","clang/test/SemaCXX/virtuals.cpp:73:19: error: friend declaration cannot have a pure-specifier"}
["clang/test/SemaCXX/virtuals.cpp"]={"clang/test/SemaCXX/virtuals.cpp:70:28: error: friend declaration cannot have a pure-specifier","clang/test/SemaCXX/virtuals.cpp:73:19: error: friend declaration cannot have a pure-specifier"}
Line 4,050: Line 4,051:
},
},
["err_qualified_catch_declarator"]={
["err_qualified_catch_declarator"]={
[b]="err_qualified_catch_declarator",
[d]="err_qualified_catch_declarator",
[j]="exception declarator cannot be qualified",
[e]="exception declarator cannot be qualified",
[i]="exception declarator cannot be qualified",
[f]="exception declarator cannot be qualified",
[h]=k,
[g]=k,
[c]="exception declarator cannot be qualified",
[h]="exception declarator cannot be qualified",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{w,16772,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (D.getCXXScopeSpec().isSet() && !Invalid) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator) << D.getCXXScopeSpec().getRange();"}}
[i]={{w,16772,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (D.getCXXScopeSpec().isSet() && !Invalid) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator) << D.getCXXScopeSpec().getRange();"}}
},
},
["err_qualified_friend_def"]={
["err_qualified_friend_def"]={
[b]="err_qualified_friend_def",
[d]="err_qualified_friend_def",
[j]="friend function definition cannot be qualified with \'%0\'",
[e]="friend function definition cannot be qualified with \'%0\'",
[i]="friend function definition cannot be qualified with \'A\'",
[f]="friend function definition cannot be qualified with \'A\'",
[h]=k,
[g]=k,
[c]="friend function definition cannot be qualified with \'(.*?)\'",
[h]="friend function definition cannot be qualified with \'(.*?)\'",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"16e65616d64b",1318209119,"Implement the restrictions in C++ [class.friend]p6, which disallow","Implement the restrictions in C++ [class.friend]p6, which disallow\ndefining a friend function with a qualified name or in a local\nclass. Fixes PR9853. \n\nllvm-svn: 141524"},
[j]={"16e65616d64b",1318209119,"Implement the restrictions in C++ [class.friend]p6, which disallow","Implement the restrictions in C++ [class.friend]p6, which disallow\ndefining a friend function with a qualified name or in a local\nclass. Fixes PR9853. \n\nllvm-svn: 141524"},
[d]={{w,17657,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  // ...\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n  // ...\n  } else if (SS.isInvalid() || !SS.isSet()) {\n  // ...\n  } else if (!SS.getScopeRep()->isDependent()) {\n    // ...\n    if (D.isFunctionDefinition()) {\n      // ...\n      SemaDiagnosticBuilder DB = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);"},{w,17676,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  // ...\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n  // ...\n  } else if (SS.isInvalid() || !SS.isSet()) {\n  // ...\n  } else if (!SS.getScopeRep()->isDependent()) {\n  // ...\n  } else {\n    if (D.isFunctionDefinition()) {\n      // ...\n      Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def) << SS.getScopeRep();"}},
[i]={{w,17657,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  // ...\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n  // ...\n  } else if (SS.isInvalid() || !SS.isSet()) {\n  // ...\n  } else if (!SS.getScopeRep()->isDependent()) {\n    // ...\n    if (D.isFunctionDefinition()) {\n      // ...\n      SemaDiagnosticBuilder DB = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);"},{w,17676,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  // ...\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n  // ...\n  } else if (SS.isInvalid() || !SS.isSet()) {\n  // ...\n  } else if (!SS.getScopeRep()->isDependent()) {\n  // ...\n  } else {\n    if (D.isFunctionDefinition()) {\n      // ...\n      Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def) << SS.getScopeRep();"}},
[l]={
[l]={
["clang/test/CXX/class.access/class.friend/p6.cpp"]={"clang/test/CXX/class.access/class.friend/p6.cpp:10:15: error: friend function definition cannot be qualified with \'::\'","clang/test/CXX/class.access/class.friend/p6.cpp:11:15: error: friend function definition cannot be qualified with \'X::\'","clang/test/CXX/class.access/class.friend/p6.cpp:15:15: error: friend function definition cannot be qualified with \'T::\'"}
["clang/test/CXX/class.access/class.friend/p6.cpp"]={"clang/test/CXX/class.access/class.friend/p6.cpp:10:15: error: friend function definition cannot be qualified with \'::\'","clang/test/CXX/class.access/class.friend/p6.cpp:11:15: error: friend function definition cannot be qualified with \'X::\'","clang/test/CXX/class.access/class.friend/p6.cpp:15:15: error: friend function definition cannot be qualified with \'T::\'"}
Line 4,075: Line 4,076:
},
},
["err_qualified_friend_no_match"]={
["err_qualified_friend_no_match"]={
[b]="err_qualified_friend_no_match",
[d]={{nil,u,"err_qualified_friend_no_match"}},
[j]={{nil,u,"friend declaration of %0 does not match any declaration in %1"}},
[e]={{nil,u,"friend declaration of %0 does not match any declaration in %1"}},
[i]={{nil,u,"friend declaration of A does not match any declaration in B"}},
[f]={{nil,u,"friend declaration of A does not match any declaration in B"}},
[h]=k,
[g]=k,
[c]="friend declaration of (.*?) does not match any declaration in (.*?)",
[h]="friend declaration of (.*?) does not match any declaration in (.*?)",
[f]=a,
[b]=a,
[e]={{nil,u,m}},
[c]={{nil,u,m}},
[g]={"8ce732b46f55",1546840846,"DR674, PR38883, PR40238: Qualified friend lookup should look for a","DR674, PR38883, PR40238: Qualified friend lookup should look for a\ntemplate specialization if there is no matching non-template function.\n\nThis exposed a couple of related bugs:\n - we would sometimes substitute into a friend template instead of a\n  suitable non-friend declaration; this would now crash because we\'d\n  decide the specialization of the friend is a redeclaration of itself\n - ADL failed to properly handle the case where an invisible local\n  extern declaration redeclares an invisible friend\n\nBoth are fixed herein: in particular, we now never make invisible\nfriends or local extern declarations visible to name lookup unless\nthey are the only declaration of the entity. (We already mostly did\nthis for local extern declarations.)\n\nllvm-svn: 350505"},
[j]={"8ce732b46f55",1546840846,"DR674, PR38883, PR40238: Qualified friend lookup should look for a","DR674, PR38883, PR40238: Qualified friend lookup should look for a\ntemplate specialization if there is no matching non-template function.\n\nThis exposed a couple of related bugs:\n - we would sometimes substitute into a friend template instead of a\n  suitable non-friend declaration; this would now crash because we\'d\n  decide the specialization of the friend is a redeclaration of itself\n - ADL failed to properly handle the case where an invisible local\n  extern declaration redeclares an invisible friend\n\nBoth are fixed herein: in particular, we now never make invisible\nfriends or local extern declarations visible to name lookup unless\nthey are the only declaration of the entity. (We already mostly did\nthis for local extern declarations.)\n\nllvm-svn: 350505"},
[d]={{D,8957,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  // ...\n  unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"},{W,9482,"/// Perform semantic analysis for the given function template\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit function template specialization. On successful completion,\n/// the function declaration \\p FD will become a function template\n/// specialization.\n///\n/// \\param FD the function declaration, which will be updated to become a\n/// function template specialization.\n///\n/// \\param ExplicitTemplateArgs the explicitly-provided template arguments,\n/// if any. Note that this may be valid info even when 0 arguments are\n/// explicitly provided as in, e.g., \\c void sort<>(char*, char*);\n/// as it anyway contains info on the angle brackets locations.\n///\n/// \\param Previous the set of declarations that may be specialized by\n/// this function specialization.\n///\n/// \\param QualifiedFriend whether this is a lookup for a qualified friend\n/// declaration with no explicit template argument list that might be\n/// befriending a function template specialization.\nbool Sema::CheckFunctionTemplateSpecialization(FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs, LookupResult &Previous, bool QualifiedFriend) {\n  // ...\n  // For a qualified friend declaration (with no explicit marker to indicate\n  // that a template specialization was intended), note all (template and\n  // non-template) candidates.\n  if (QualifiedFriend && Candidates.empty()) {\n    Diag(FD->getLocation(), diag::err_qualified_friend_no_match) << FD->getDeclName() << FDLookupContext;"}}
[i]={{D,8957,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  // ...\n  unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"},{W,9482,"/// Perform semantic analysis for the given function template\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit function template specialization. On successful completion,\n/// the function declaration \\p FD will become a function template\n/// specialization.\n///\n/// \\param FD the function declaration, which will be updated to become a\n/// function template specialization.\n///\n/// \\param ExplicitTemplateArgs the explicitly-provided template arguments,\n/// if any. Note that this may be valid info even when 0 arguments are\n/// explicitly provided as in, e.g., \\c void sort<>(char*, char*);\n/// as it anyway contains info on the angle brackets locations.\n///\n/// \\param Previous the set of declarations that may be specialized by\n/// this function specialization.\n///\n/// \\param QualifiedFriend whether this is a lookup for a qualified friend\n/// declaration with no explicit template argument list that might be\n/// befriending a function template specialization.\nbool Sema::CheckFunctionTemplateSpecialization(FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs, LookupResult &Previous, bool QualifiedFriend) {\n  // ...\n  // For a qualified friend declaration (with no explicit marker to indicate\n  // that a template specialization was intended), note all (template and\n  // non-template) candidates.\n  if (QualifiedFriend && Candidates.empty()) {\n    Diag(FD->getLocation(), diag::err_qualified_friend_no_match) << FD->getDeclName() << FDLookupContext;"}}
},
},
["err_qualified_function_typeid"]={
["err_qualified_function_typeid"]={
[b]={{nil,o,"err_qualified_function_typeid"}},
[d]={{nil,o,"err_qualified_function_typeid"}},
[j]={{nil,o,"type operand %0 of \'typeid\' cannot have \'%1\' qualifier"}},
[e]={{nil,o,"type operand %0 of \'typeid\' cannot have \'%1\' qualifier"}},
[i]={{nil,o,"type operand A of \'typeid\' cannot have \'B\' qualifier"}},
[f]={{nil,o,"type operand A of \'typeid\' cannot have \'B\' qualifier"}},
[h]=k,
[g]=k,
[c]="type operand (.*?) of \'typeid\' cannot have \'(.*?)\' qualifier",
[h]="type operand (.*?) of \'typeid\' cannot have \'(.*?)\' qualifier",
[f]=a,
[b]=a,
[e]={{nil,o,m}},
[c]={{nil,o,m}},
[g]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[j]={"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"},
[d]={{rb,2145,"bool Sema::CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc) {\n  // ...\n  Diag(Loc, diag::err_qualified_function_typeid) << T << getFunctionQualifiersAsString(FPT);"}},
[i]={{ob,2145,"bool Sema::CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc) {\n  // ...\n  Diag(Loc, diag::err_qualified_function_typeid) << T << getFunctionQualifiersAsString(FPT);"}},
[l]={
[l]={
["clang/test/SemaTemplate/instantiate-expr-4.cpp"]={"clang/test/SemaTemplate/instantiate-expr-4.cpp:198:12: error: type operand \'void () const\' of \'typeid\' cannot have \'const\' qualifier","clang/test/SemaTemplate/instantiate-expr-4.cpp:198:12: error: type operand \'void () &\' of \'typeid\' cannot have \'&\' qualifier"}
["clang/test/SemaTemplate/instantiate-expr-4.cpp"]={"clang/test/SemaTemplate/instantiate-expr-4.cpp:198:12: error: type operand \'void () const\' of \'typeid\' cannot have \'const\' qualifier","clang/test/SemaTemplate/instantiate-expr-4.cpp:198:12: error: type operand \'void () &\' of \'typeid\' cannot have \'&\' qualifier"}
Line 4,100: Line 4,101:
},
},
["err_qualified_member_nonclass"]={
["err_qualified_member_nonclass"]={
[b]="err_qualified_member_nonclass",
[d]="err_qualified_member_nonclass",
[j]="qualified member access refers to a member in %0",
[e]="qualified member access refers to a member in %0",
[i]="qualified member access refers to a member in A",
[f]="qualified member access refers to a member in A",
[h]=k,
[g]=k,
[c]="qualified member access refers to a member in (.*?)",
[h]="qualified member access refers to a member in (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"0b3d95ae64a5",1255819074,"Fix a crash with qualified member access into a non-type, from Sean Hunt!","Fix a crash with qualified member access into a non-type, from Sean Hunt!\n\nllvm-svn: 84370"},
[j]={"0b3d95ae64a5",1255819074,"Fix a crash with qualified member access into a non-type, from Sean Hunt!","Fix a crash with qualified member access into a non-type, from Sean Hunt!\n\nllvm-svn: 84370"},
[d]={{cb,683,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  // ...\n  if (SS.isSet()) {\n    // ...\n    if (!isa<TypeDecl>(DC)) {\n      SemaRef.Diag(R.getNameLoc(), diag::err_qualified_member_nonclass) << DC << SS.getRange();"}},
[i]={{hb,683,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  // ...\n  if (SS.isSet()) {\n    // ...\n    if (!isa<TypeDecl>(DC)) {\n      SemaRef.Diag(R.getNameLoc(), diag::err_qualified_member_nonclass) << DC << SS.getRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/member-expr.cpp"]={"clang/test/SemaCXX/member-expr.cpp:43:9: error: qualified member access refers to a member in the global namespace","clang/test/SemaCXX/member-expr.cpp:44:10: error: qualified member access refers to a member in namespace \'C\'"}
["clang/test/SemaCXX/member-expr.cpp"]={"clang/test/SemaCXX/member-expr.cpp:43:9: error: qualified member access refers to a member in the global namespace","clang/test/SemaCXX/member-expr.cpp:44:10: error: qualified member access refers to a member in namespace \'C\'"}
Line 4,114: Line 4,115:
},
},
["err_qualified_member_of_unrelated"]={
["err_qualified_member_of_unrelated"]={
[b]="err_qualified_member_of_unrelated",
[d]="err_qualified_member_of_unrelated",
[j]="%q0 is not a member of class %1",
[e]="%q0 is not a member of class %1",
[i]="A is not a member of class B",
[f]="A is not a member of class B",
[h]=k,
[g]=k,
[c]="(.*?) is not a member of class (.*?)",
[h]="(.*?) is not a member of class (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"1e67dd6b2f6a",1272332618,"Improve the diagnostic you get when making a qualified member access","Improve the diagnostic you get when making a qualified member access\nwith a qualifier referencing a different type.\n\nllvm-svn: 102409"},
[j]={"1e67dd6b2f6a",1272332618,"Improve the diagnostic you get when making a qualified member access","Improve the diagnostic you get when making a qualified member access\nwith a qualifier referencing a different type.\n\nllvm-svn: 102409"},
[d]={{cb,540,"/// We know that the given qualified member reference points only to\n/// declarations which do not belong to the static type of the base\n/// expression.  Diagnose the problem.\nstatic void DiagnoseQualifiedMemberReference(Sema &SemaRef, Expr *BaseExpr, QualType BaseType, const CXXScopeSpec &SS, NamedDecl *rep, const DeclarationNameInfo &nameInfo) {\n  // ...\n  SemaRef.Diag(nameInfo.getLoc(), diag::err_qualified_member_of_unrelated) << SS.getRange() << rep << BaseType;"}},
[i]={{hb,540,"/// We know that the given qualified member reference points only to\n/// declarations which do not belong to the static type of the base\n/// expression.  Diagnose the problem.\nstatic void DiagnoseQualifiedMemberReference(Sema &SemaRef, Expr *BaseExpr, QualType BaseType, const CXXScopeSpec &SS, NamedDecl *rep, const DeclarationNameInfo &nameInfo) {\n  // ...\n  SemaRef.Diag(nameInfo.getLoc(), diag::err_qualified_member_of_unrelated) << SS.getRange() << rep << BaseType;"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.prim/expr.prim.general/p8-0x.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.general/p8-0x.cpp:33:34: error: \'PR10127::outer::middle::mfunc\' is not a member of class \'decltype(outer::middle::inner())\' (aka \'PR10127::outer::middle::inner\')"}
["clang/test/CXX/expr/expr.prim/expr.prim.general/p8-0x.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.general/p8-0x.cpp:33:34: error: \'PR10127::outer::middle::mfunc\' is not a member of class \'decltype(outer::middle::inner())\' (aka \'PR10127::outer::middle::inner\')"}
Line 4,128: Line 4,129:
},
},
["err_qualified_objc_access"]={
["err_qualified_objc_access"]={
[b]="err_qualified_objc_access",
[d]="err_qualified_objc_access",
[j]="%select{property|instance variable}0 access cannot be qualified with \'%1\'",
[e]="%select{property|instance variable}0 access cannot be qualified with \'%1\'",
[i]={{nil,nil,{{"property","instance variable"}," access cannot be qualified with \'B\'"}}},
[f]={{nil,nil,{{"property","instance variable"}," access cannot be qualified with \'B\'"}}},
[h]=k,
[g]=k,
[c]="(?:property|instance variable) access cannot be qualified with \'(.*?)\'",
[h]="(?:property|instance variable) access cannot be qualified with \'(.*?)\'",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"12340e5b1868",1318202569,"Diagnose attempts to qualify the name of an instance variable or","Diagnose attempts to qualify the name of an instance variable or\nproperty in an Objective-C++ member access expression. Fixes PR9759.\n\nllvm-svn: 141522"},
[j]={"12340e5b1868",1318202569,"Diagnose attempts to qualify the name of an instance variable or","Diagnose attempts to qualify the name of an instance variable or\nproperty in an Objective-C++ member access expression. Fixes PR9759.\n\nllvm-svn: 141522"},
[d]={{cb,1331,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (!SS.isEmpty() && !SS.isInvalid()) {\n      S.Diag(SS.getRange().getBegin(), diag::err_qualified_objc_access) << 1 << SS.getScopeRep() << FixItHint::CreateRemoval(SS.getRange());"},{cb,1494,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    if (!SS.isEmpty() && !SS.isInvalid()) {\n      S.Diag(SS.getRange().getBegin(), diag::err_qualified_objc_access) << 0 << SS.getScopeRep() << FixItHint::CreateRemoval(SS.getRange());"}},
[i]={{hb,1331,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (!SS.isEmpty() && !SS.isInvalid()) {\n      S.Diag(SS.getRange().getBegin(), diag::err_qualified_objc_access) << 1 << SS.getScopeRep() << FixItHint::CreateRemoval(SS.getRange());"},{hb,1494,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    if (!SS.isEmpty() && !SS.isInvalid()) {\n      S.Diag(SS.getRange().getBegin(), diag::err_qualified_objc_access) << 0 << SS.getScopeRep() << FixItHint::CreateRemoval(SS.getRange());"}},
[l]={
[l]={
["clang/test/SemaObjCXX/propert-dot-error.mm"]={"clang/test/SemaObjCXX/propert-dot-error.mm:65:5: error: property access cannot be qualified with \'Forward::\'","clang/test/SemaObjCXX/propert-dot-error.mm:66:6: error: instance variable access cannot be qualified with \'Forward::\'"}
["clang/test/SemaObjCXX/propert-dot-error.mm"]={"clang/test/SemaObjCXX/propert-dot-error.mm:65:5: error: property access cannot be qualified with \'Forward::\'","clang/test/SemaObjCXX/propert-dot-error.mm:66:6: error: instance variable access cannot be qualified with \'Forward::\'"}
Line 4,142: Line 4,143:
},
},
["err_qualified_objc_catch_parm"]={
["err_qualified_objc_catch_parm"]={
[b]="err_qualified_objc_catch_parm",
[d]="err_qualified_objc_catch_parm",
[j]="@catch parameter declarator cannot be qualified",
[e]="@catch parameter declarator cannot be qualified",
[i]="@catch parameter declarator cannot be qualified",
[f]="@catch parameter declarator cannot be qualified",
[h]=k,
[g]=k,
[c]="@catch parameter declarator cannot be qualified",
[h]="@catch parameter declarator cannot be qualified",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from","Refactor Objective-C @catch parameter checking by detangling it from\nfunction-parameter checking and splitting it into the normal\nActOn*/Build* pair in Sema. We now use VarDecl to represent the @catch\nparameter rather than the ill-fitting ParmVarDecl.\n\nllvm-svn: 102347"},
[j]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from","Refactor Objective-C @catch parameter checking by detangling it from\nfunction-parameter checking and splitting it into the normal\nActOn*/Build* pair in Sema. We now use VarDecl to represent the @catch\nparameter rather than the ill-fitting ParmVarDecl.\n\nllvm-svn: 102347"},
[d]={{Z,5226,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  // ...\n  // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).\n  if (D.getCXXScopeSpec().isSet()) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_objc_catch_parm) << D.getCXXScopeSpec().getRange();"}}
[i]={{bb,5226,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  // ...\n  // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).\n  if (D.getCXXScopeSpec().isSet()) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_objc_catch_parm) << D.getCXXScopeSpec().getRange();"}}
},
},
["err_qualified_param_declarator"]={
["err_qualified_param_declarator"]={
[b]="err_qualified_param_declarator",
[d]="err_qualified_param_declarator",
[j]="parameter declarator cannot be qualified",
[e]="parameter declarator cannot be qualified",
[i]="parameter declarator cannot be qualified",
[f]="parameter declarator cannot be qualified",
[h]=k,
[g]=k,
[c]="parameter declarator cannot be qualified",
[h]="parameter declarator cannot be qualified",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{D,14694,"/// Common checks for a parameter-declaration that should apply to both function\n/// parameters and non-type template parameters.\nvoid Sema::CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).\n  if (D.getCXXScopeSpec().isSet()) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_param_declarator) << D.getCXXScopeSpec().getRange();"}},
[i]={{D,14694,"/// Common checks for a parameter-declaration that should apply to both function\n/// parameters and non-type template parameters.\nvoid Sema::CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).\n  if (D.getCXXScopeSpec().isSet()) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_param_declarator) << D.getCXXScopeSpec().getRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:73:17: error: parameter declarator cannot be qualified"}
["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:73:17: error: parameter declarator cannot be qualified"}
Line 4,167: Line 4,168:
},
},
["err_qualified_typedef_declarator"]={
["err_qualified_typedef_declarator"]={
[b]="err_qualified_typedef_declarator",
[d]="err_qualified_typedef_declarator",
[j]="typedef declarator cannot be qualified",
[e]="typedef declarator cannot be qualified",
[i]="typedef declarator cannot be qualified",
[f]="typedef declarator cannot be qualified",
[h]=k,
[g]=k,
[c]="typedef declarator cannot be qualified",
[h]="typedef declarator cannot be qualified",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{D,6661,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n  // Typedef declarators cannot be qualified (C++ [dcl.meaning]p1).\n  if (D.getCXXScopeSpec().isSet()) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_typedef_declarator) << D.getCXXScopeSpec().getRange();"}},
[i]={{D,6661,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n  // Typedef declarators cannot be qualified (C++ [dcl.meaning]p1).\n  if (D.getCXXScopeSpec().isSet()) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_typedef_declarator) << D.getCXXScopeSpec().getRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:101:18: error: typedef declarator cannot be qualified"}
["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:101:18: error: typedef declarator cannot be qualified"}
Line 4,181: Line 4,182:
},
},
["err_range_on_array_parameter"]={
["err_range_on_array_parameter"]={
[b]="err_range_on_array_parameter",
[d]="err_range_on_array_parameter",
[j]="cannot build range expression with array function parameter %0 since parameter with array type %1 is treated as pointer type %2",
[e]="cannot build range expression with array function parameter %0 since parameter with array type %1 is treated as pointer type %2",
[i]="cannot build range expression with array function parameter A since parameter with array type B is treated as pointer type C",
[f]="cannot build range expression with array function parameter A since parameter with array type B is treated as pointer type C",
[h]=k,
[g]=k,
[c]="cannot build range expression with array function parameter (.*?) since parameter with array type (.*?) is treated as pointer type (.*?)",
[h]="cannot build range expression with array function parameter (.*?) since parameter with array type (.*?) is treated as pointer type (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"0825469126d7",1381529764,"Improve the error message for attempting to build a for range loop using a","Improve the error message for attempting to build a for range loop using a\nfunction parameter that has array type.  Such a parameter will be treated as\na pointer type instead, resulting in a missing begin function error is a\nsuggestion to dereference the pointer.  This provides a different,\nmore informative diagnostic as well as point to the parameter declaration.\n\nllvm-svn: 192512"},
[j]={"0825469126d7",1381529764,"Improve the error message for attempting to build a for range loop using a","Improve the error message for attempting to build a for range loop using a\nfunction parameter that has array type.  Such a parameter will be treated as\na pointer type instead, resulting in a missing begin function error is a\nsuggestion to dereference the pointer.  This provides a different,\nmore informative diagnostic as well as point to the parameter declaration.\n\nllvm-svn: 192512"},
[d]={{Eb,2926,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  // ...\n  if (RangeVarType->isDependentType()) {\n  // ...\n  } else if (!BeginDeclStmt.get()) {\n    // ...\n    if (const ArrayType *UnqAT = RangeType->getAsArrayTypeUnsafe()) {\n    // ...\n    } else {\n      // ...\n      if (Kind == BFRK_Build && RangeStatus == FRS_NoViableFunction && BEFFailure == BEF_begin) {\n        // If the range is being built from an array parameter, emit a\n        // a diagnostic that it is being treated as a pointer.\n        if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Range)) {\n          if (ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n            // ...\n            if (PointerTy->isPointerType() && ArrayTy->isArrayType()) {\n              Diag(Range->getBeginLoc(), diag::err_range_on_array_parameter) << RangeLoc << PVD << ArrayTy << PointerTy;"}},
[i]={{Kb,2926,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  // ...\n  if (RangeVarType->isDependentType()) {\n  // ...\n  } else if (!BeginDeclStmt.get()) {\n    // ...\n    if (const ArrayType *UnqAT = RangeType->getAsArrayTypeUnsafe()) {\n    // ...\n    } else {\n      // ...\n      if (Kind == BFRK_Build && RangeStatus == FRS_NoViableFunction && BEFFailure == BEF_begin) {\n        // If the range is being built from an array parameter, emit a\n        // a diagnostic that it is being treated as a pointer.\n        if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Range)) {\n          if (ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n            // ...\n            if (PointerTy->isPointerType() && ArrayTy->isArrayType()) {\n              Diag(Range->getBeginLoc(), diag::err_range_on_array_parameter) << RangeLoc << PVD << ArrayTy << PointerTy;"}},
[l]={
[l]={
["clang/test/SemaCXX/for-range-examples.cpp"]={"clang/test/SemaCXX/for-range-examples.cpp:198:19: error: cannot build range expression with array function parameter \'arr\' since parameter with array type \'int[]\' is treated as pointer type \'int *\'","clang/test/SemaCXX/for-range-examples.cpp:209:19: error: cannot build range expression with array function parameter \'arr\' since parameter with array type \'vector[]\' is treated as pointer type \'vector *\'"}
["clang/test/SemaCXX/for-range-examples.cpp"]={"clang/test/SemaCXX/for-range-examples.cpp:198:19: error: cannot build range expression with array function parameter \'arr\' since parameter with array type \'int[]\' is treated as pointer type \'int *\'","clang/test/SemaCXX/for-range-examples.cpp:209:19: error: cannot build range expression with array function parameter \'arr\' since parameter with array type \'vector[]\' is treated as pointer type \'vector *\'"}
Line 4,195: Line 4,196:
},
},
["err_raw_delim_too_long"]={
["err_raw_delim_too_long"]={
[b]="err_raw_delim_too_long",
[d]="err_raw_delim_too_long",
[j]="raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string",
[e]="raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string",
[i]="raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string",
[f]="raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string",
[h]=k,
[g]=k,
[c]="raw string delimiter longer than 16 characters; use PREFIX\\( \\)PREFIX to delimit raw string",
[h]="raw string delimiter longer than 16 characters; use PREFIX\\( \\)PREFIX to delimit raw string",
[f]=a,
[b]=a,
[e]=p,
[c]=p,
[g]={"54edccafc5e3",1313035575,"Add support for C++0x raw string literals.","Add support for C++0x raw string literals.\n\nllvm-svn: 137298"},
[j]={"54edccafc5e3",1313035575,"Add support for C++0x raw string literals.","Add support for C++0x raw string literals.\n\nllvm-svn: 137298"},
[d]={{"clang/lib/Lex/Lexer.cpp",2158,"/// LexRawStringLiteral - Lex the remainder of a raw string literal, after\n/// having lexed R\", LR\", u8R\", uR\", or UR\".\nbool Lexer::LexRawStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // ...\n  // If the last character was not a \'(\', then we didn\'t lex a valid delimiter.\n  if (CurPtr[PrefixLen] != \'(\') {\n    if (!isLexingRawMode()) {\n      // ...\n      if (PrefixLen == 16) {\n        Diag(PrefixEnd, diag::err_raw_delim_too_long);"}},
[i]={{"clang/lib/Lex/Lexer.cpp",2158,"/// LexRawStringLiteral - Lex the remainder of a raw string literal, after\n/// having lexed R\", LR\", u8R\", uR\", or UR\".\nbool Lexer::LexRawStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // ...\n  // If the last character was not a \'(\', then we didn\'t lex a valid delimiter.\n  if (CurPtr[PrefixLen] != \'(\') {\n    if (!isLexingRawMode()) {\n      // ...\n      if (PrefixLen == 16) {\n        Diag(PrefixEnd, diag::err_raw_delim_too_long);"}},
[l]={
[l]={
["clang/test/Lexer/cxx0x_raw_string_delim_length.cpp"]={"clang/test/Lexer/cxx0x_raw_string_delim_length.cpp:7:38: error: raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string"}
["clang/test/Lexer/cxx0x_raw_string_delim_length.cpp"]={"clang/test/Lexer/cxx0x_raw_string_delim_length.cpp:7:38: error: raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string"}
Line 4,209: Line 4,210:
},
},
["err_readonly_message_assignment"]={
["err_readonly_message_assignment"]={
[b]="err_readonly_message_assignment",
[d]="err_readonly_message_assignment",
[j]="assigning to \'readonly\' return result of an Objective-C message not allowed",
[e]="assigning to \'readonly\' return result of an Objective-C message not allowed",
[i]="assigning to \'readonly\' return result of an Objective-C message not allowed",
[f]="assigning to \'readonly\' return result of an Objective-C message not allowed",
[h]=k,
[g]=k,
[c]="assigning to \'readonly\' return result of an Objective\\-C message not allowed",
[h]="assigning to \'readonly\' return result of an Objective\\-C message not allowed",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={bb,1480718311,eb,fb},
[j]={eb,1480718311,cb,fb},
[d]={{O,14373,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  // ...\n  case Expr::MLV_InvalidMessageExpression:\n    DiagID = diag::err_readonly_message_assignment;"}},
[i]={{O,14373,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  // ...\n  case Expr::MLV_InvalidMessageExpression:\n    DiagID = diag::err_readonly_message_assignment;"}},
[l]={
[l]={
["clang/test/SemaObjC/assign-rvalue-message.m"]={"clang/test/SemaObjC/assign-rvalue-message.m:23:18: error: assigning to \'readonly\' return result of an Objective-C message not allowed"}
["clang/test/SemaObjC/assign-rvalue-message.m"]={"clang/test/SemaObjC/assign-rvalue-message.m:23:18: error: assigning to \'readonly\' return result of an Objective-C message not allowed"}
Line 4,223: Line 4,224:
},
},
["err_realimag_invalid_type"]={
["err_realimag_invalid_type"]={
[b]="err_realimag_invalid_type",
[d]="err_realimag_invalid_type",
[j]="invalid type %0 to %1 operator",
[e]="invalid type %0 to %1 operator",
[i]="invalid type A to B operator",
[f]="invalid type A to B operator",
[h]=k,
[g]=k,
[c]="invalid type (.*?) to (.*?) operator",
[h]="invalid type (.*?) to (.*?) operator",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{O,4914,"static QualType CheckRealImagOperand(Sema &S, ExprResult &V, SourceLocation Loc, bool IsReal) {\n  // ...\n  S.Diag(Loc, diag::err_realimag_invalid_type) << V.get()->getType() << (IsReal ? \"__real\" : \"__imag\");"}},
[i]={{O,4914,"static QualType CheckRealImagOperand(Sema &S, ExprResult &V, SourceLocation Loc, bool IsReal) {\n  // ...\n  S.Diag(Loc, diag::err_realimag_invalid_type) << V.get()->getType() << (IsReal ? \"__real\" : \"__imag\");"}},
[l]={
[l]={
["clang/test/SemaCXX/unary-real-imag.cpp"]={"clang/test/SemaCXX/unary-real-imag.cpp:4:9: error: invalid type \'A\' to __real operator","clang/test/SemaCXX/unary-real-imag.cpp:5:9: error: invalid type \'A\' to __imag operator"}
["clang/test/SemaCXX/unary-real-imag.cpp"]={"clang/test/SemaCXX/unary-real-imag.cpp:4:9: error: invalid type \'A\' to __real operator","clang/test/SemaCXX/unary-real-imag.cpp:5:9: error: invalid type \'A\' to __imag operator"}
Line 4,237: Line 4,238:
},
},
["err_record_with_pointers_kernel_param"]={
["err_record_with_pointers_kernel_param"]={
[b]="err_record_with_pointers_kernel_param",
[d]="err_record_with_pointers_kernel_param",
[j]="%select{struct|union}0 kernel parameters may not contain pointers",
[e]="%select{struct|union}0 kernel parameters may not contain pointers",
[i]={{nil,nil,{{"struct","union"}," kernel parameters may not contain pointers"}}},
[f]={{nil,nil,{{"struct","union"}," kernel parameters may not contain pointers"}}},
[h]=k,
[g]=k,
[c]="(?:struct|union) kernel parameters may not contain pointers",
[h]="(?:struct|union) kernel parameters may not contain pointers",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"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"},
[j]={"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"},
[d]={{D,9578,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  // ...\n  do {\n    // ...\n    for (const auto *FD : RD->fields()) {\n      // ...\n      // OpenCL v1.2 s6.9.p:\n      // Arguments to kernel functions that are declared to be a struct or union\n      // do not allow OpenCL objects to be passed as elements of the struct or\n      // union. This restriction was lifted in OpenCL v2.0 with the introduction\n      // of SVM.\n      if (ParamType == PtrKernelParam || ParamType == PtrPtrKernelParam || ParamType == InvalidAddrSpacePtrKernelParam) {\n        S.Diag(Param->getLocation(), diag::err_record_with_pointers_kernel_param) << PT->isUnionType() << PT;"}},
[i]={{D,9578,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  // ...\n  do {\n    // ...\n    for (const auto *FD : RD->fields()) {\n      // ...\n      // OpenCL v1.2 s6.9.p:\n      // Arguments to kernel functions that are declared to be a struct or union\n      // do not allow OpenCL objects to be passed as elements of the struct or\n      // union. This restriction was lifted in OpenCL v2.0 with the introduction\n      // of SVM.\n      if (ParamType == PtrKernelParam || ParamType == PtrPtrKernelParam || ParamType == InvalidAddrSpacePtrKernelParam) {\n        S.Diag(Param->getLocation(), diag::err_record_with_pointers_kernel_param) << PT->isUnionType() << PT;"}},
[l]={
[l]={
["clang/test/SemaOpenCL/invalid-kernel-parameters.cl"]={"clang/test/SemaOpenCL/invalid-kernel-parameters.cl:98:44: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:105:39: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:119:43: error: union kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:130:56: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:147:78: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:207:85: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:207:106: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:213:44: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:219:50: error: struct kernel parameters may not contain pointers"}
["clang/test/SemaOpenCL/invalid-kernel-parameters.cl"]={"clang/test/SemaOpenCL/invalid-kernel-parameters.cl:98:44: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:105:39: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:119:43: error: union kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:130:56: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:147:78: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:207:85: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:207:106: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:213:44: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:219:50: error: struct kernel parameters may not contain pointers"}
Line 4,251: Line 4,252:
},
},
["err_recursive_default_argument"]={
["err_recursive_default_argument"]={
[b]="err_recursive_default_argument",
[d]="err_recursive_default_argument",
[j]="recursive evaluation of default argument",
[e]="recursive evaluation of default argument",
[i]="recursive evaluation of default argument",
[f]="recursive evaluation of default argument",
[h]=k,
[g]=k,
[c]="recursive evaluation of default argument",
[h]="recursive evaluation of default argument",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"b82a9401dfb7",1465872956,"Detect recursive default argument definition","Detect recursive default argument definition\n\nIf definition of default function argument uses itself, clang crashed,\nbecause corresponding function parameter is not associated with the default\nargument yet. With this fix clang emits appropriate error message.\n\nThis change fixes PR28105.\n\nDifferential Revision: http://reviews.llvm.org/D21301\n\nllvm-svn: 272623"},
[j]={"b82a9401dfb7",1465872956,"Detect recursive default argument definition","Detect recursive default argument definition\n\nIf definition of default function argument uses itself, clang crashed,\nbecause corresponding function parameter is not associated with the default\nargument yet. With this fix clang emits appropriate error message.\n\nThis change fixes PR28105.\n\nDifferential Revision: http://reviews.llvm.org/D21301\n\nllvm-svn: 272623"},
[d]={{O,6027,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n  if (Param->hasUnparsedDefaultArg()) {\n    // ...\n    // If we\'ve already cleared out the location for the default argument,\n    // that means we\'re parsing it right now.\n    if (!UnparsedDefaultArgLocs.count(Param)) {\n      Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"},{"clang/lib/Sema/SemaTemplateInstantiate.cpp",2966,"/// Substitute the given template arguments into the default argument.\nbool Sema::SubstDefaultArgument(SourceLocation Loc, ParmVarDecl *Param, const MultiLevelTemplateArgumentList &TemplateArgs, bool ForCallExpr) {\n  // ...\n  if (Inst.isAlreadyInstantiating()) {\n    Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"}},
[i]={{O,6027,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n  if (Param->hasUnparsedDefaultArg()) {\n    // ...\n    // If we\'ve already cleared out the location for the default argument,\n    // that means we\'re parsing it right now.\n    if (!UnparsedDefaultArgLocs.count(Param)) {\n      Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"},{"clang/lib/Sema/SemaTemplateInstantiate.cpp",2966,"/// Substitute the given template arguments into the default argument.\nbool Sema::SubstDefaultArgument(SourceLocation Loc, ParmVarDecl *Param, const MultiLevelTemplateArgumentList &TemplateArgs, bool ForCallExpr) {\n  // ...\n  if (Inst.isAlreadyInstantiating()) {\n    Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp:46:17: error: recursive evaluation of default argument"}
["clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp:46:17: error: recursive evaluation of default argument"}
Line 4,265: Line 4,266:
},
},
["err_recursive_superclass"]={
["err_recursive_superclass"]={
[b]="err_recursive_superclass",
[d]="err_recursive_superclass",
[j]="trying to recursively use %0 as superclass of %1",
[e]="trying to recursively use %0 as superclass of %1",
[i]="trying to recursively use A as superclass of B",
[f]="trying to recursively use A as superclass of B",
[h]=k,
[g]=k,
[c]="trying to recursively use (.*?) as superclass of (.*?)",
[h]="trying to recursively use (.*?) as superclass of (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"5582f231f2b2",1247177306,"don\'t crash if class is using itself as its super class.","don\'t crash if class is using itself as its super class.\n\nllvm-svn: 75178"},
[j]={"5582f231f2b2",1247177306,"don\'t crash if class is using itself as its super class.","don\'t crash if class is using itself as its super class.\n\nllvm-svn: 75178"},
[d]={{Z,570,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n  // ...\n  if (declaresSameEntity(PrevDecl, IDecl)) {\n    Diag(SuperLoc, diag::err_recursive_superclass) << SuperName << ClassName << SourceRange(AtInterfaceLoc, ClassLoc);"}},
[i]={{bb,570,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n  // ...\n  if (declaresSameEntity(PrevDecl, IDecl)) {\n    Diag(SuperLoc, diag::err_recursive_superclass) << SuperName << ClassName << SourceRange(AtInterfaceLoc, ClassLoc);"}},
[l]={
[l]={
["clang/test/SemaObjC/undef-superclass-1.m"]={"clang/test/SemaObjC/undef-superclass-1.m:29:29: error: trying to recursively use \'RecursiveClass\' as superclass of \'RecursiveClass\'"}
["clang/test/SemaObjC/undef-superclass-1.m"]={"clang/test/SemaObjC/undef-superclass-1.m:29:29: error: trying to recursively use \'RecursiveClass\' as superclass of \'RecursiveClass\'"}
Line 4,279: Line 4,280:
},
},
["err_redeclaration_different_type"]={
["err_redeclaration_different_type"]={
[b]="err_redeclaration_different_type",
[d]="err_redeclaration_different_type",
[j]="redeclaration of %0 with a different type%diff{: $ vs $|}1,2",
[e]="redeclaration of %0 with a different type%diff{: $ vs $|}1,2",
[i]={{nil,nil,{"redeclaration of A with a different type",{": B vs C",a}}}},
[f]={{nil,nil,{"redeclaration of A with a different type",{": B vs C",a}}}},
[h]=k,
[g]=k,
[c]="redeclaration of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)",
[h]="redeclaration of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"38a50c0a1620",1436904529,"[Sema] Emit a better diagnostic when variable redeclarations disagree","[Sema] Emit a better diagnostic when variable redeclarations disagree\n\nWe referred to all declaration in definitions in our diagnostic messages\nwhich is can be inaccurate.  Instead, classify the declaration and emit\nan appropriate diagnostic for the new declaration and an appropriate\nnote pointing to the old one.\n\nThis fixes PR24116.\n\nllvm-svn: 242190"},
[j]={"38a50c0a1620",1436904529,"[Sema] Emit a better diagnostic when variable redeclarations disagree","[Sema] Emit a better diagnostic when variable redeclarations disagree\n\nWe referred to all declaration in definitions in our diagnostic messages\nwhich is can be inaccurate.  Instead, classify the declaration and emit\nan appropriate diagnostic for the new declaration and an appropriate\nnote pointing to the old one.\n\nThis fixes PR24116.\n\nllvm-svn: 242190"},
[d]={{D,4383,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n  // ...\n  S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}},
[i]={{D,4383,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n  // ...\n  S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:162:14: error: redeclaration of \'n_var\' with a different type: \'double\' vs \'int\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:214:24: error: redeclaration of \'arr\' with a different type: \'int[3]\' vs \'int[2]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:149:14: error: redeclaration of \'arrX\' with a different type: \'int[4]\' vs \'int[3]\'"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:162:14: error: redeclaration of \'n_var\' with a different type: \'double\' vs \'int\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:214:24: error: redeclaration of \'arr\' with a different type: \'int[3]\' vs \'int[2]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:149:14: error: redeclaration of \'arrX\' with a different type: \'int[4]\' vs \'int[3]\'"}
Line 4,293: Line 4,294:
},
},
["err_redeclaration_non_exported"]={
["err_redeclaration_non_exported"]={
[b]={{nil,F,"err_redeclaration_non_exported"}},
[d]={{nil,F,"err_redeclaration_non_exported"}},
[j]={{nil,C,"cannot export redeclaration %0 here since the previous declaration %select{is not exported|has internal linkage|has module linkage}1"},{F,F,"cannot export redeclaration %0 here since the previous declaration is not exported"}},
[e]={{nil,C,"cannot export redeclaration %0 here since the previous declaration %select{is not exported|has internal linkage|has module linkage}1"},{F,F,"cannot export redeclaration %0 here since the previous declaration is not exported"}},
[i]={{nil,C,{"cannot export redeclaration A here since the previous declaration ",{"is not exported","has internal linkage","has module linkage"}}},{F,F,"cannot export redeclaration A here since the previous declaration is not exported"}},
[f]={{nil,C,{"cannot export redeclaration A here since the previous declaration ",{"is not exported","has internal linkage","has module linkage"}}},{F,F,"cannot export redeclaration A here since the previous declaration is not exported"}},
[h]=k,
[g]=k,
[c]="cannot export redeclaration (.*?) here since the previous declaration (?:is not exported|has internal linkage|has module linkage)",
[h]="cannot export redeclaration (.*?) here since the previous declaration (?:is not exported|has internal linkage|has module linkage)",
[f]=a,
[b]=a,
[e]={{nil,F,m}},
[c]={{nil,F,m}},
[g]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[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"},
[j]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[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"},
[d]={{D,1735,"// [module.interface]p6:\n// A redeclaration of an entity X is implicitly exported if X was introduced by\n// an exported declaration; otherwise it shall not be exported.\nbool Sema::CheckRedeclarationExported(NamedDecl *New, NamedDecl *Old) {\n  // ...\n  Diag(New->getLocation(), diag::err_redeclaration_non_exported) << New << S;"}},
[i]={{D,1735,"// [module.interface]p6:\n// A redeclaration of an entity X is implicitly exported if X was introduced by\n// an exported declaration; otherwise it shall not be exported.\nbool Sema::CheckRedeclarationExported(NamedDecl *New, NamedDecl *Old) {\n  // ...\n  Diag(New->getLocation(), diag::err_redeclaration_non_exported) << New << S;"}},
[l]={
[l]={
["clang/test/CXX/module/module.interface/p6.cpp"]={"clang/test/CXX/module/module.interface/p6.cpp:12:15: error: cannot export redeclaration \'S\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:20:15: error: cannot export redeclaration \'X\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:23:15: error: cannot export redeclaration \'Z\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:32:15: error: cannot export redeclaration \'B\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:33:15: error: cannot export redeclaration \'C\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:40:8: error: cannot export redeclaration \'TemplS\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:46:8: error: cannot export redeclaration \'TemplS2\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:49:13: error: cannot export redeclaration \'baz\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:54:13: error: cannot export redeclaration \'bar\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:66:16: error: cannot export redeclaration \'f1\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:72:6: error: cannot export redeclaration \'TemplFunc\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:79:6: error: cannot export redeclaration \'TemplFunc2\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:85:9: error: cannot export redeclaration \'TemplFunc3\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:88:12: error: cannot export redeclaration \'var\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:93:3: error: cannot export redeclaration \'TemplVar\' here since the previous declaration has module linkage"}
["clang/test/CXX/module/module.interface/p6.cpp"]={"clang/test/CXX/module/module.interface/p6.cpp:12:15: error: cannot export redeclaration \'S\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:20:15: error: cannot export redeclaration \'X\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:23:15: error: cannot export redeclaration \'Z\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:32:15: error: cannot export redeclaration \'B\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:33:15: error: cannot export redeclaration \'C\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:40:8: error: cannot export redeclaration \'TemplS\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:46:8: error: cannot export redeclaration \'TemplS2\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:49:13: error: cannot export redeclaration \'baz\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:54:13: error: cannot export redeclaration \'bar\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:66:16: error: cannot export redeclaration \'f1\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:72:6: error: cannot export redeclaration \'TemplFunc\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:79:6: error: cannot export redeclaration \'TemplFunc2\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:85:9: error: cannot export redeclaration \'TemplFunc3\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:88:12: error: cannot export redeclaration \'var\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:93:3: error: cannot export redeclaration \'TemplVar\' here since the previous declaration has module linkage"}
Line 4,307: Line 4,308:
},
},
["err_redefinition"]={
["err_redefinition"]={
[b]="err_redefinition",
[d]="err_redefinition",
[j]="redefinition of %0",
[e]="redefinition of %0",
[i]="redefinition of A",
[f]="redefinition of A",
[h]=k,
[g]=k,
[c]="redefinition of (.*?)",
[h]="redefinition of (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{D,2719,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'.  Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{D,3042,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n  // ...\n  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    // ...\n    if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      // ...\n      } else {\n        // ...\n        unsigned Diag = cast<VarDecl>(Def)->isThisDeclarationADefinition() == VarDecl::TentativeDefinition ? diag::err_alias_after_tentative : diag::err_redefinition;"},{D,3044,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n  // ...\n  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    // ...\n    if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      // ...\n      } else {\n        // ...\n        if (Diag == diag::err_redefinition)"},{D,4683,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // ...\n  // FIXME: The test for external storage here seems wrong? We still\n  // need to check for mismatches.\n  if (!New->hasExternalStorage() && !New->isFileVarDecl() &&\n    // ...\n    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{D,4837,"/// We\'ve just determined that \\p Old and \\p New both appear to be definitions\n/// of the same variable. Either diagnose or fix the problem.\nbool Sema::checkVarDeclRedefinition(VarDecl *Old, VarDecl *New) {\n  if (!hasVisibleDefinition(Old) && (New->getFormalLinkage() == InternalLinkage || New->isInline() || isa<VarTemplateSpecializationDecl>(New) || New->getDescribedVarTemplate() || New->getNumTemplateParameterLists() || New->getDeclContext()->isDependentContext())) {\n  // ...\n  } else {\n    Diag(New->getLocation(), diag::err_redefinition) << New;"},{D,15170,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n  // ...\n  if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n  // ...\n  else\n    Diag(FD->getLocation(), diag::err_redefinition) << FD;"},{D,17369,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  // ...\n  if (!Previous.empty()) {\n    // ...\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n      // If this is a use of a previous tag, or if the tag is already declared\n      // in the same scope (so that the definition/declaration completes or\n      // rementions the tag), reuse the decl.\n      if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n        // ...\n        if (!Invalid) {\n          // ...\n          // Diagnose attempts to redefine a tag.\n          if (TUK == TUK_Definition) {\n            if (NamedDecl *Def = PrevTagDecl->getDefinition()) {\n              // ...\n              if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n              // ...\n              } else if (!IsExplicitSpecializationAfterInstantiation) {\n                // A redeclaration in function prototype scope in C isn\'t\n                // visible elsewhere, so merely issue a warning.\n                if (!getLangOpts().CPlusPlus && S->containedInPrototypeScope())\n                // ...\n                else\n                  Diag(NameLoc, diag::err_redefinition) << Name;"},{D,19504,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n  // ...\n  if (PrevDecl) {\n    // ...\n    if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n      if (isa<EnumConstantDecl>(PrevDecl))\n      // ...\n      else\n        Diag(IdLoc, diag::err_redefinition) << Id;"},{w,909,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  // Build the BindingDecls.\n  for (auto &B : D.getDecompositionDeclarator().bindings()) {\n    // ...\n    if (!Previous.empty()) {\n      // ...\n      Diag(B.NameLoc, diag::err_redefinition) << B.Name;"},{w,12947,"/// Checks that the given using declaration is not an invalid\n/// redeclaration.  Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n  // ...\n  // C++03 [namespace.udecl]p8:\n  // C++0x [namespace.udecl]p10:\n  //  A using-declaration is a declaration and can therefore be used\n  //  repeatedly where (and only where) multiple declarations are\n  //  allowed.\n  //\n  // That\'s in non-member contexts.\n  if (!CurContext->getRedeclContext()->isRecord()) {\n    // A dependent qualifier outside a class can only ever resolve to an\n    // enumeration type. Therefore it conflicts with any other non-type\n    // declaration in the same scope.\n    // FIXME: How should we check for dependent type-type conflicts at block\n    // scope?\n    if (Qual->isDependent() && !HasTypenameKeyword) {\n      for (auto *D : Prev) {\n        if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) {\n          // ...\n          Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{w,13443,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  // ...\n  if (PrevR.isSingleResult()) {\n    // ...\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n    // ...\n    } else if (isVisible(PrevDecl)) {\n      unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{w,16762,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(), LookupOrdinaryName, ForVisibleRedeclaration)) {\n    // ...\n    if (isDeclInScope(PrevDecl, CurContext, S)) {\n      Diag(D.getIdentifierLoc(), diag::err_redefinition) << D.getIdentifier();"},{O,5565,"ExprResult Sema::ActOnOMPIteratorExpr(Scope *S, SourceLocation IteratorKwLoc, SourceLocation LLoc, SourceLocation RLoc, ArrayRef<OMPIteratorData> Data) {\n  // ...\n  for (const OMPIteratorData &D : Data) {\n    // ...\n    if (S) {\n      // ...\n      if (!Previous.empty()) {\n        // ...\n        Diag(D.DeclIdentLoc, diag::err_redefinition) << VD->getDeclName();"},{W,2028,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (PrevClassTemplate) {\n    // ...\n    // Check for redefinition of this class template.\n    if (TUK == TUK_Definition) {\n      if (TagDecl *Def = PrevRecordDecl->getDefinition()) {\n        // ...\n        if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n        // ...\n        } else {\n          Diag(NameLoc, diag::err_redefinition) << Name;"},{W,8904,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // ...\n  // Check that this isn\'t a redefinition of this specialization.\n  if (TUK == TUK_Definition) {\n    // ...\n    if (Def && SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n    // ...\n    } else if (Def) {\n      // ...\n      Diag(TemplateNameLoc, diag::err_redefinition) << Specialization << Range;"},{W,9077,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  // ...\n  if (hasReachableDefinition(OldConcept) && IsRedefinitionInModule(NewDecl, OldConcept)) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition) << NewDecl->getDeclName();"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",3838,"Decl *TemplateDeclInstantiator::VisitClassTemplateSpecializationDecl(ClassTemplateSpecializationDecl *D) {\n  // ...\n  // If PrevDecl was a definition and D is also a definition, diagnose.\n  // This happens in cases like:\n  //\n  //  template<typename T, typename U>\n  //  struct Outer {\n  //    template<typename X> struct Inner;\n  //    template<> struct Inner<T> {};\n  //    template<> struct Inner<U> {};\n  //  };\n  //\n  //  Outer<int, int> outer; // error: the explicit specializations of Inner\n  //                          // have the same signature.\n  if (PrevDecl && PrevDecl->getDefinition() && D->isThisDeclarationADefinition()) {\n    SemaRef.Diag(D->getLocation(), diag::err_redefinition) << PrevDecl;"}},
[i]={{D,2719,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'.  Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{D,3042,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n  // ...\n  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    // ...\n    if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      // ...\n      } else {\n        // ...\n        unsigned Diag = cast<VarDecl>(Def)->isThisDeclarationADefinition() == VarDecl::TentativeDefinition ? diag::err_alias_after_tentative : diag::err_redefinition;"},{D,3044,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n  // ...\n  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    // ...\n    if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      // ...\n      } else {\n        // ...\n        if (Diag == diag::err_redefinition)"},{D,4683,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // ...\n  // FIXME: The test for external storage here seems wrong? We still\n  // need to check for mismatches.\n  if (!New->hasExternalStorage() && !New->isFileVarDecl() &&\n    // ...\n    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{D,4837,"/// We\'ve just determined that \\p Old and \\p New both appear to be definitions\n/// of the same variable. Either diagnose or fix the problem.\nbool Sema::checkVarDeclRedefinition(VarDecl *Old, VarDecl *New) {\n  if (!hasVisibleDefinition(Old) && (New->getFormalLinkage() == InternalLinkage || New->isInline() || isa<VarTemplateSpecializationDecl>(New) || New->getDescribedVarTemplate() || New->getNumTemplateParameterLists() || New->getDeclContext()->isDependentContext())) {\n  // ...\n  } else {\n    Diag(New->getLocation(), diag::err_redefinition) << New;"},{D,15170,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n  // ...\n  if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n  // ...\n  else\n    Diag(FD->getLocation(), diag::err_redefinition) << FD;"},{D,17369,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  // ...\n  if (!Previous.empty()) {\n    // ...\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n      // If this is a use of a previous tag, or if the tag is already declared\n      // in the same scope (so that the definition/declaration completes or\n      // rementions the tag), reuse the decl.\n      if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n        // ...\n        if (!Invalid) {\n          // ...\n          // Diagnose attempts to redefine a tag.\n          if (TUK == TUK_Definition) {\n            if (NamedDecl *Def = PrevTagDecl->getDefinition()) {\n              // ...\n              if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n              // ...\n              } else if (!IsExplicitSpecializationAfterInstantiation) {\n                // A redeclaration in function prototype scope in C isn\'t\n                // visible elsewhere, so merely issue a warning.\n                if (!getLangOpts().CPlusPlus && S->containedInPrototypeScope())\n                // ...\n                else\n                  Diag(NameLoc, diag::err_redefinition) << Name;"},{D,19504,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n  // ...\n  if (PrevDecl) {\n    // ...\n    if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n      if (isa<EnumConstantDecl>(PrevDecl))\n      // ...\n      else\n        Diag(IdLoc, diag::err_redefinition) << Id;"},{w,909,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  // Build the BindingDecls.\n  for (auto &B : D.getDecompositionDeclarator().bindings()) {\n    // ...\n    if (!Previous.empty()) {\n      // ...\n      Diag(B.NameLoc, diag::err_redefinition) << B.Name;"},{w,12947,"/// Checks that the given using declaration is not an invalid\n/// redeclaration.  Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n  // ...\n  // C++03 [namespace.udecl]p8:\n  // C++0x [namespace.udecl]p10:\n  //  A using-declaration is a declaration and can therefore be used\n  //  repeatedly where (and only where) multiple declarations are\n  //  allowed.\n  //\n  // That\'s in non-member contexts.\n  if (!CurContext->getRedeclContext()->isRecord()) {\n    // A dependent qualifier outside a class can only ever resolve to an\n    // enumeration type. Therefore it conflicts with any other non-type\n    // declaration in the same scope.\n    // FIXME: How should we check for dependent type-type conflicts at block\n    // scope?\n    if (Qual->isDependent() && !HasTypenameKeyword) {\n      for (auto *D : Prev) {\n        if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) {\n          // ...\n          Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{w,13443,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  // ...\n  if (PrevR.isSingleResult()) {\n    // ...\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n    // ...\n    } else if (isVisible(PrevDecl)) {\n      unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{w,16762,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(), LookupOrdinaryName, ForVisibleRedeclaration)) {\n    // ...\n    if (isDeclInScope(PrevDecl, CurContext, S)) {\n      Diag(D.getIdentifierLoc(), diag::err_redefinition) << D.getIdentifier();"},{O,5565,"ExprResult Sema::ActOnOMPIteratorExpr(Scope *S, SourceLocation IteratorKwLoc, SourceLocation LLoc, SourceLocation RLoc, ArrayRef<OMPIteratorData> Data) {\n  // ...\n  for (const OMPIteratorData &D : Data) {\n    // ...\n    if (S) {\n      // ...\n      if (!Previous.empty()) {\n        // ...\n        Diag(D.DeclIdentLoc, diag::err_redefinition) << VD->getDeclName();"},{W,2028,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (PrevClassTemplate) {\n    // ...\n    // Check for redefinition of this class template.\n    if (TUK == TUK_Definition) {\n      if (TagDecl *Def = PrevRecordDecl->getDefinition()) {\n        // ...\n        if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n        // ...\n        } else {\n          Diag(NameLoc, diag::err_redefinition) << Name;"},{W,8904,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // ...\n  // Check that this isn\'t a redefinition of this specialization.\n  if (TUK == TUK_Definition) {\n    // ...\n    if (Def && SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n    // ...\n    } else if (Def) {\n      // ...\n      Diag(TemplateNameLoc, diag::err_redefinition) << Specialization << Range;"},{W,9077,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  // ...\n  if (hasReachableDefinition(OldConcept) && IsRedefinitionInModule(NewDecl, OldConcept)) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition) << NewDecl->getDeclName();"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",3838,"Decl *TemplateDeclInstantiator::VisitClassTemplateSpecializationDecl(ClassTemplateSpecializationDecl *D) {\n  // ...\n  // If PrevDecl was a definition and D is also a definition, diagnose.\n  // This happens in cases like:\n  //\n  //  template<typename T, typename U>\n  //  struct Outer {\n  //    template<typename X> struct Inner;\n  //    template<> struct Inner<T> {};\n  //    template<> struct Inner<U> {};\n  //  };\n  //\n  //  Outer<int, int> outer; // error: the explicit specializations of Inner\n  //                          // have the same signature.\n  if (PrevDecl && PrevDecl->getDefinition() && D->isThisDeclarationADefinition()) {\n    SemaRef.Diag(D->getLocation(), diag::err_redefinition) << PrevDecl;"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp"]={"clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:6:9: error: redefinition of \'binding_a\'"}
["clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp"]={"clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:6:9: error: redefinition of \'binding_a\'"}
Line 4,321: Line 4,322:
},
},
["err_redefinition_different_concept"]={
["err_redefinition_different_concept"]={
[b]={{nil,C,"err_redefinition_different_concept"}},
[d]={{nil,C,"err_redefinition_different_concept"}},
[j]={{nil,C,"redefinition of concept %0 with different template parameters or requirements"}},
[e]={{nil,C,"redefinition of concept %0 with different template parameters or requirements"}},
[i]={{nil,C,"redefinition of concept A with different template parameters or requirements"}},
[f]={{nil,C,"redefinition of concept A with different template parameters or requirements"}},
[h]=k,
[g]=k,
[c]="redefinition of concept (.*?) with different template parameters or requirements",
[h]="redefinition of concept (.*?) with different template parameters or requirements",
[f]=a,
[b]=a,
[e]={{nil,C,m}},
[c]={{nil,C,m}},
[g]={ib,1625925174,kb,jb},
[j]={gb,1625925174,ib,jb},
[d]={{W,9069,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  // ...\n  if (!IsSame) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition_different_concept) << NewDecl->getDeclName();"}}
[i]={{W,9069,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  // ...\n  if (!IsSame) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition_different_concept) << NewDecl->getDeclName();"}}
},
},
["err_redefinition_different_kind"]={
["err_redefinition_different_kind"]={
[b]="err_redefinition_different_kind",
[d]="err_redefinition_different_kind",
[j]="redefinition of %0 as different kind of symbol",
[e]="redefinition of %0 as different kind of symbol",
[i]="redefinition of A as different kind of symbol",
[f]="redefinition of A as different kind of symbol",
[h]=k,
[g]=k,
[c]="redefinition of (.*?) as different kind of symbol",
[h]="redefinition of (.*?) as different kind of symbol",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{D,2624,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'.  Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n  // ...\n  if (!Old) {\n    Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{D,3661,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  if (!Old) {\n    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n    // ...\n    } else {\n      Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{D,4557,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // ...\n  if (!Old) {\n    Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{D,17460,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  // ...\n  if (!Previous.empty()) {\n    // ...\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    // ...\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n      // ...\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      // ...\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n      // ...\n      } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n      // ...\n      } else {\n        // ...\n        Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{w,11434,"/// ActOnStartNamespaceDef - This is called at the start of a namespace\n/// definition.\nDecl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope, SourceLocation InlineLoc, SourceLocation NamespaceLoc, SourceLocation IdentLoc, IdentifierInfo *II, SourceLocation LBrace, const ParsedAttributesView &AttrList, UsingDirectiveDecl *&UD, bool IsNested) {\n  // ...\n  if (II) {\n    // ...\n    if (PrevNS) {\n    // ...\n    } else if (PrevDecl) {\n      // ...\n      Diag(Loc, diag::err_redefinition_different_kind) << II;"},{w,12948,"/// Checks that the given using declaration is not an invalid\n/// redeclaration.  Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n  // ...\n  // C++03 [namespace.udecl]p8:\n  // C++0x [namespace.udecl]p10:\n  //  A using-declaration is a declaration and can therefore be used\n  //  repeatedly where (and only where) multiple declarations are\n  //  allowed.\n  //\n  // That\'s in non-member contexts.\n  if (!CurContext->getRedeclContext()->isRecord()) {\n    // A dependent qualifier outside a class can only ever resolve to an\n    // enumeration type. Therefore it conflicts with any other non-type\n    // declaration in the same scope.\n    // FIXME: How should we check for dependent type-type conflicts at block\n    // scope?\n    if (Qual->isDependent() && !HasTypenameKeyword) {\n      for (auto *D : Prev) {\n        if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) {\n          // ...\n          Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{w,13317,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n  // ...\n  if (TemplateParamLists.size()) {\n    // ...\n    if (!Previous.empty()) {\n      // ...\n      if (!OldDecl && !Invalid) {\n        Diag(UsingLoc, diag::err_redefinition_different_kind) << Name.Identifier;"},{w,13444,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  // ...\n  if (PrevR.isSingleResult()) {\n    // ...\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n    // ...\n    } else if (isVisible(PrevDecl)) {\n      unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{Z,610,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n  // ...\n  if (declaresSameEntity(PrevDecl, IDecl)) {\n  // ...\n  } else {\n    // ...\n    if (PrevDecl && !SuperClassDecl) {\n      // ...\n      // This handles the following case:\n      //\n      // typedef int SuperClass;\n      // @interface MyClass : SuperClass {} @end\n      //\n      if (!SuperClassDecl) {\n        Diag(SuperLoc, diag::err_redefinition_different_kind) << SuperName;"},{Z,991,"ObjCInterfaceDecl *Sema::ActOnStartClassInterface(Scope *S, SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList, SkipBodyInfo *SkipBody) {\n  // ...\n  if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n    Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{Z,1993,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n    Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{Z,2026,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  if (SuperClassname) {\n    // ...\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      Diag(SuperClassLoc, diag::err_redefinition_different_kind) << SuperClassname;"},{Z,3082,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n  // ...\n  for (unsigned i = 0; i != NumElts; ++i) {\n    // ...\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      // ...\n      if (!TDD || !TDD->getUnderlyingType()->isObjCObjectType()) {\n        Diag(AtClassLoc, diag::err_redefinition_different_kind) << IdentList[i];"},{W,2042,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (PrevClassTemplate) {\n  // ...\n  } else if (PrevDecl) {\n    // ...\n    Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{W,9060,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  // ...\n  if (!OldConcept) {\n    // ...\n    Diag(NewDecl->getLocation(), diag::err_redefinition_different_kind) << NewDecl->getDeclName();"}},
[i]={{D,2624,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'.  Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n  // ...\n  if (!Old) {\n    Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{D,3661,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  if (!Old) {\n    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n    // ...\n    } else {\n      Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{D,4557,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // ...\n  if (!Old) {\n    Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{D,17460,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  // ...\n  if (!Previous.empty()) {\n    // ...\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    // ...\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n      // ...\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      // ...\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n      // ...\n      } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n      // ...\n      } else {\n        // ...\n        Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{w,11434,"/// ActOnStartNamespaceDef - This is called at the start of a namespace\n/// definition.\nDecl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope, SourceLocation InlineLoc, SourceLocation NamespaceLoc, SourceLocation IdentLoc, IdentifierInfo *II, SourceLocation LBrace, const ParsedAttributesView &AttrList, UsingDirectiveDecl *&UD, bool IsNested) {\n  // ...\n  if (II) {\n    // ...\n    if (PrevNS) {\n    // ...\n    } else if (PrevDecl) {\n      // ...\n      Diag(Loc, diag::err_redefinition_different_kind) << II;"},{w,12948,"/// Checks that the given using declaration is not an invalid\n/// redeclaration.  Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n  // ...\n  // C++03 [namespace.udecl]p8:\n  // C++0x [namespace.udecl]p10:\n  //  A using-declaration is a declaration and can therefore be used\n  //  repeatedly where (and only where) multiple declarations are\n  //  allowed.\n  //\n  // That\'s in non-member contexts.\n  if (!CurContext->getRedeclContext()->isRecord()) {\n    // A dependent qualifier outside a class can only ever resolve to an\n    // enumeration type. Therefore it conflicts with any other non-type\n    // declaration in the same scope.\n    // FIXME: How should we check for dependent type-type conflicts at block\n    // scope?\n    if (Qual->isDependent() && !HasTypenameKeyword) {\n      for (auto *D : Prev) {\n        if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) {\n          // ...\n          Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{w,13317,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n  // ...\n  if (TemplateParamLists.size()) {\n    // ...\n    if (!Previous.empty()) {\n      // ...\n      if (!OldDecl && !Invalid) {\n        Diag(UsingLoc, diag::err_redefinition_different_kind) << Name.Identifier;"},{w,13444,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  // ...\n  if (PrevR.isSingleResult()) {\n    // ...\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n    // ...\n    } else if (isVisible(PrevDecl)) {\n      unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{bb,610,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n  // ...\n  if (declaresSameEntity(PrevDecl, IDecl)) {\n  // ...\n  } else {\n    // ...\n    if (PrevDecl && !SuperClassDecl) {\n      // ...\n      // This handles the following case:\n      //\n      // typedef int SuperClass;\n      // @interface MyClass : SuperClass {} @end\n      //\n      if (!SuperClassDecl) {\n        Diag(SuperLoc, diag::err_redefinition_different_kind) << SuperName;"},{bb,991,"ObjCInterfaceDecl *Sema::ActOnStartClassInterface(Scope *S, SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList, SkipBodyInfo *SkipBody) {\n  // ...\n  if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n    Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{bb,1993,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n    Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{bb,2026,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  if (SuperClassname) {\n    // ...\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      Diag(SuperClassLoc, diag::err_redefinition_different_kind) << SuperClassname;"},{bb,3082,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n  // ...\n  for (unsigned i = 0; i != NumElts; ++i) {\n    // ...\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      // ...\n      if (!TDD || !TDD->getUnderlyingType()->isObjCObjectType()) {\n        Diag(AtClassLoc, diag::err_redefinition_different_kind) << IdentList[i];"},{W,2042,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (PrevClassTemplate) {\n  // ...\n  } else if (PrevDecl) {\n    // ...\n    Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{W,9060,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  // ...\n  if (!OldConcept) {\n    // ...\n    Diag(NewDecl->getLocation(), diag::err_redefinition_different_kind) << NewDecl->getDeclName();"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp"]={"clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:8:10: error: redefinition of \'binding_b\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:11:28: error: redefinition of \'vartemplate_a\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:13:10: error: redefinition of \'vartemplate_b\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:16:24: error: redefinition of \'aliastemplate_a\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:18:10: error: redefinition of \'aliastemplate_b\' as different kind of symbol"}
["clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp"]={"clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:8:10: error: redefinition of \'binding_b\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:11:28: error: redefinition of \'vartemplate_a\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:13:10: error: redefinition of \'vartemplate_b\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:16:24: error: redefinition of \'aliastemplate_a\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:18:10: error: redefinition of \'aliastemplate_b\' as different kind of symbol"}
Line 4,346: Line 4,347:
},
},
["err_redefinition_different_namespace_alias"]={
["err_redefinition_different_namespace_alias"]={
[b]="err_redefinition_different_namespace_alias",
[d]="err_redefinition_different_namespace_alias",
[j]="redefinition of %0 as an alias for a different namespace",
[e]="redefinition of %0 as an alias for a different namespace",
[i]="redefinition of A as an alias for a different namespace",
[f]="redefinition of A as an alias for a different namespace",
[h]=k,
[g]=k,
[c]="redefinition of (.*?) as an alias for a different namespace",
[h]="redefinition of (.*?) as an alias for a different namespace",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes","[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes\nmerging of namespace aliases across modules and improves source fidelity.\nIncidentally also fixes PR20816.\n\nllvm-svn: 217103"},
[j]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes","[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes\nmerging of namespace aliases across modules and improves source fidelity.\nIncidentally also fixes PR20816.\n\nllvm-svn: 217103"},
[d]={{w,13435,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  // ...\n  if (PrevR.isSingleResult()) {\n    // ...\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n      // We already have an alias with the same name that points to the same\n      // namespace; check that it matches.\n      if (AD->getNamespace()->Equals(getNamespaceDecl(ND))) {\n      // ...\n      } else if (isVisible(PrevDecl)) {\n        Diag(AliasLoc, diag::err_redefinition_different_namespace_alias) << Alias;"}},
[i]={{w,13435,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  // ...\n  if (PrevR.isSingleResult()) {\n    // ...\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n      // We already have an alias with the same name that points to the same\n      // namespace; check that it matches.\n      if (AD->getNamespace()->Equals(getNamespaceDecl(ND))) {\n      // ...\n      } else if (isVisible(PrevDecl)) {\n        Diag(AliasLoc, diag::err_redefinition_different_namespace_alias) << Alias;"}},
[l]={
[l]={
["clang/test/SemaCXX/namespace-alias.cpp"]={"clang/test/SemaCXX/namespace-alias.cpp:43:13: error: redefinition of \'B\' as an alias for a different namespace"}
["clang/test/SemaCXX/namespace-alias.cpp"]={"clang/test/SemaCXX/namespace-alias.cpp:43:13: error: redefinition of \'B\' as an alias for a different namespace"}
Line 4,360: Line 4,361:
},
},
["err_redefinition_different_type"]={
["err_redefinition_different_type"]={
[b]="err_redefinition_different_type",
[d]="err_redefinition_different_type",
[j]="redefinition of %0 with a different type%diff{: $ vs $|}1,2",
[e]="redefinition of %0 with a different type%diff{: $ vs $|}1,2",
[i]={{nil,nil,{"redefinition of A with a different type",{": B vs C",a}}}},
[f]={{nil,nil,{"redefinition of A with a different type",{": B vs C",a}}}},
[h]=k,
[g]=k,
[c]="redefinition of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)",
[h]="redefinition of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{D,4382,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n  // ...\n  S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}},
[i]={{D,4382,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n  // ...\n  S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:173:9: error: redefinition of \'o_var\' with a different type: \'float\' vs \'int\'"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:173:9: error: redefinition of \'o_var\' with a different type: \'float\' vs \'int\'"}
Line 4,374: Line 4,375:
},
},
["err_redefinition_different_typedef"]={
["err_redefinition_different_typedef"]={
[b]="err_redefinition_different_typedef",
[d]="err_redefinition_different_typedef",
[j]="%select{typedef|type alias|type alias template}0 redefinition with different types%diff{ ($ vs $)|}1,2",
[e]="%select{typedef|type alias|type alias template}0 redefinition with different types%diff{ ($ vs $)|}1,2",
[i]={{nil,nil,{{"typedef","type alias","type alias template"}," redefinition with different types",{" (B vs C)",a}}}},
[f]={{nil,nil,{{"typedef","type alias","type alias template"}," redefinition with different types",{" (B vs C)",a}}}},
[h]=k,
[g]=k,
[c]="(?:typedef|type alias|type alias template) redefinition with different types(?: \\((.*?) vs (.*?)\\)|)",
[h]="(?:typedef|type alias|type alias template) redefinition with different types(?: \\((.*?) vs (.*?)\\)|)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{D,2559,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n  // ...\n  if (OldType != NewType && !OldType->isDependentType() && !NewType->isDependentType() && !Context.hasSameType(OldType, NewType)) {\n    // ...\n    Diag(New->getLocation(), diag::err_redefinition_different_typedef) << Kind << NewType << OldType;"},{w,13343,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n  // ...\n  if (TemplateParamLists.size()) {\n    // ...\n    if (!Previous.empty()) {\n      // ...\n      if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {\n        // ...\n        if (!Invalid && !Context.hasSameType(OldTD->getUnderlyingType(), NewTD->getUnderlyingType())) {\n          // ...\n          Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef) << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();"}},
[i]={{D,2559,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n  // ...\n  if (OldType != NewType && !OldType->isDependentType() && !NewType->isDependentType() && !Context.hasSameType(OldType, NewType)) {\n    // ...\n    Diag(New->getLocation(), diag::err_redefinition_different_typedef) << Kind << NewType << OldType;"},{w,13343,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n  // ...\n  if (TemplateParamLists.size()) {\n    // ...\n    if (!Previous.empty()) {\n      // ...\n      if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {\n        // ...\n        if (!Invalid && !Context.hasSameType(OldTD->getUnderlyingType(), NewTD->getUnderlyingType())) {\n          // ...\n          Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef) << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();"}},
[l]={
[l]={
["clang/test/SemaCXX/libstdcxx_common_type_hack.cpp"]={"clang/test/SemaCXX/libstdcxx_common_type_hack.cpp:31:7: error: type alias redefinition with different types (\'decltype(true ? std::declval<int>() : std::declval<int>())\' (aka \'int &&\') vs \'int\')"}
["clang/test/SemaCXX/libstdcxx_common_type_hack.cpp"]={"clang/test/SemaCXX/libstdcxx_common_type_hack.cpp:31:7: error: type alias redefinition with different types (\'decltype(true ? std::declval<int>() : std::declval<int>())\' (aka \'int &&\') vs \'int\')"}
Line 4,388: Line 4,389:
},
},
["err_redefinition_extern_inline"]={
["err_redefinition_extern_inline"]={
[b]="err_redefinition_extern_inline",
[d]="err_redefinition_extern_inline",
[j]="redefinition of a \'extern inline\' function %0 is not supported in %select{C99 mode|C++}1",
[e]="redefinition of a \'extern inline\' function %0 is not supported in %select{C99 mode|C++}1",
[i]={{nil,nil,{"redefinition of a \'extern inline\' function A is not supported in ",{"C99 mode","C++"}}}},
[f]={{nil,nil,{"redefinition of a \'extern inline\' function A is not supported in ",{"C99 mode","C++"}}}},
[h]=k,
[g]=k,
[c]="redefinition of a \'extern inline\' function (.*?) is not supported in (?:C99 mode|C\\+\\+)",
[h]="redefinition of a \'extern inline\' function (.*?) is not supported in (?:C99 mode|C\\+\\+)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"a7d6e3d0f526",1283874661,"Provide a specific diagnostic when trying to redefine an \"extern","Provide a specific diagnostic when trying to redefine an \"extern\ninline\" function outside of GNU89 mode. Fixes\n<rdar://problem/6880464>.\n\nllvm-svn: 113204"},
[j]={"a7d6e3d0f526",1283874661,"Provide a specific diagnostic when trying to redefine an \"extern","Provide a specific diagnostic when trying to redefine an \"extern\ninline\" function outside of GNU89 mode. Fixes\n<rdar://problem/6880464>.\n\nllvm-svn: 113204"},
[d]={{D,15167,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n  // ...\n  if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n    Diag(FD->getLocation(), diag::err_redefinition_extern_inline) << FD << getLangOpts().CPlusPlus;"}},
[i]={{D,15167,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n  // ...\n  if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n    Diag(FD->getLocation(), diag::err_redefinition_extern_inline) << FD << getLangOpts().CPlusPlus;"}},
[l]={
[l]={
["clang/test/Sema/redefinition.c"]={"clang/test/Sema/redefinition.c:14:5: error: redefinition of a \'extern inline\' function \'g\' is not supported in C99 mode"}
["clang/test/Sema/redefinition.c"]={"clang/test/Sema/redefinition.c:14:5: error: redefinition of a \'extern inline\' function \'g\' is not supported in C99 mode"}
Line 4,402: Line 4,403:
},
},
["err_redefinition_of_enumerator"]={
["err_redefinition_of_enumerator"]={
[b]="err_redefinition_of_enumerator",
[d]="err_redefinition_of_enumerator",
[j]="redefinition of enumerator %0",
[e]="redefinition of enumerator %0",
[i]="redefinition of enumerator A",
[f]="redefinition of enumerator A",
[h]=k,
[g]=k,
[c]="redefinition of enumerator (.*?)",
[h]="redefinition of enumerator (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{D,19502,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n  // ...\n  if (PrevDecl) {\n    // ...\n    if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n      if (isa<EnumConstantDecl>(PrevDecl))\n        Diag(IdLoc, diag::err_redefinition_of_enumerator) << Id;"}},
[i]={{D,19502,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n  // ...\n  if (PrevDecl) {\n    // ...\n    if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n      if (isa<EnumConstantDecl>(PrevDecl))\n        Diag(IdLoc, diag::err_redefinition_of_enumerator) << Id;"}},
[l]={
[l]={
["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:159:5: error: redefinition of enumerator \'PR15071_One\'"}
["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:159:5: error: redefinition of enumerator \'PR15071_One\'"}
Line 4,416: Line 4,417:
},
},
["err_redefinition_of_label"]={
["err_redefinition_of_label"]={
[b]="err_redefinition_of_label",
[d]="err_redefinition_of_label",
[j]="redefinition of label %0",
[e]="redefinition of label %0",
[i]="redefinition of label A",
[f]="redefinition of label A",
[h]=k,
[g]=k,
[c]="redefinition of label (.*?)",
[h]="redefinition of label (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{Eb,559,"StmtResult Sema::ActOnLabelStmt(SourceLocation IdentLoc, LabelDecl *TheDecl, SourceLocation ColonLoc, Stmt *SubStmt) {\n  // If the label was multiply defined, reject it now.\n  if (TheDecl->getStmt()) {\n    Diag(IdentLoc, diag::err_redefinition_of_label) << TheDecl->getDeclName();"}},
[i]={{Kb,559,"StmtResult Sema::ActOnLabelStmt(SourceLocation IdentLoc, LabelDecl *TheDecl, SourceLocation ColonLoc, Stmt *SubStmt) {\n  // If the label was multiply defined, reject it now.\n  if (TheDecl->getStmt()) {\n    Diag(IdentLoc, diag::err_redefinition_of_label) << TheDecl->getDeclName();"}},
[l]={
[l]={
["clang/test/Parser/goto.c"]={"clang/test/Parser/goto.c:26:3: error: redefinition of label \'l\'"}
["clang/test/Parser/goto.c"]={"clang/test/Parser/goto.c:26:3: error: redefinition of label \'l\'"}
Line 4,430: Line 4,431:
},
},
["err_redefinition_variably_modified_typedef"]={
["err_redefinition_variably_modified_typedef"]={
[b]="err_redefinition_variably_modified_typedef",
[d]="err_redefinition_variably_modified_typedef",
[j]="redefinition of %select{typedef|type alias}0 for variably-modified type %1",
[e]="redefinition of %select{typedef|type alias}0 for variably-modified type %1",
[i]={{nil,nil,{"redefinition of ",{"typedef","type alias"}," for variably-modified type B"}}},
[f]={{nil,nil,{"redefinition of ",{"typedef","type alias"}," for variably-modified type B"}}},
[h]=k,
[g]=k,
[c]="redefinition of (?:typedef|type alias) for variably\\-modified type (.*?)",
[h]="redefinition of (?:typedef|type alias) for variably\\-modified type (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"aab36986ab66",1326321228,"Improve the diagnostic when trying to redefine a typedef with a","Improve the diagnostic when trying to redefine a typedef with a\nvariably-modified type.\n\nllvm-svn: 147973"},
[j]={"aab36986ab66",1326321228,"Improve the diagnostic when trying to redefine a typedef with a","Improve the diagnostic when trying to redefine a typedef with a\nvariably-modified type.\n\nllvm-svn: 147973"},
[d]={{D,2546,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n  // ...\n  if (NewType->isVariablyModifiedType()) {\n    // ...\n    Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef) << Kind << NewType;"}},
[i]={{D,2546,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n  // ...\n  if (NewType->isVariablyModifiedType()) {\n    // ...\n    Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef) << Kind << NewType;"}},
[l]={
[l]={
["clang/test/Sema/c11-typedef-redef.c"]={"clang/test/Sema/c11-typedef-redef.c:13:15: error: redefinition of typedef for variably-modified type \'int[N]\'","clang/test/Sema/c11-typedef-redef.c:17:16: error: redefinition of typedef for variably-modified type \'vla2\' (aka \'int[N]\')"}
["clang/test/Sema/c11-typedef-redef.c"]={"clang/test/Sema/c11-typedef-redef.c:13:15: error: redefinition of typedef for variably-modified type \'int[N]\'","clang/test/Sema/c11-typedef-redef.c:17:16: error: redefinition of typedef for variably-modified type \'vla2\' (aka \'int[N]\')"}
Line 4,444: Line 4,445:
},
},
["err_ref_array_type"]={
["err_ref_array_type"]={
[b]="err_ref_array_type",
[d]="err_ref_array_type",
[j]="cannot refer to declaration with an array type inside block",
[e]="cannot refer to declaration with an array type inside block",
[i]="cannot refer to declaration with an array type inside block",
[f]="cannot refer to declaration with an array type inside block",
[h]=k,
[g]=k,
[c]="cannot refer to declaration with an array type inside block",
[h]="cannot refer to declaration with an array type inside block",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"8971a8653847",1262661036,"Disallow captured arrays in blocks as well.  Radar 7438948.","Disallow captured arrays in blocks as well.  Radar 7438948.\n\nllvm-svn: 92677"},
[j]={"8971a8653847",1262661036,"Disallow captured arrays in blocks as well.  Radar 7438948.","Disallow captured arrays in blocks as well.  Radar 7438948.\n\nllvm-svn: 92677"},
[d]={{O,19231,"// Returns true if the capture by block was successful.\nstatic bool captureInBlock(BlockScopeInfo *BSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool Nested, Sema &S, bool Invalid) {\n  // ...\n  // Blocks are not allowed to capture arrays, excepting OpenCL.\n  // OpenCL v2.0 s1.12.5 (revision 40): arrays are captured by reference\n  // (decayed to pointers).\n  if (!Invalid && !S.getLangOpts().OpenCL && CaptureType->isArrayType()) {\n    if (BuildAndDiagnose) {\n      S.Diag(Loc, diag::err_ref_array_type);"}},
[i]={{O,19231,"// Returns true if the capture by block was successful.\nstatic bool captureInBlock(BlockScopeInfo *BSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool Nested, Sema &S, bool Invalid) {\n  // ...\n  // Blocks are not allowed to capture arrays, excepting OpenCL.\n  // OpenCL v2.0 s1.12.5 (revision 40): arrays are captured by reference\n  // (decayed to pointers).\n  if (!Invalid && !S.getLangOpts().OpenCL && CaptureType->isArrayType()) {\n    if (BuildAndDiagnose) {\n      S.Diag(Loc, diag::err_ref_array_type);"}},
[l]={
[l]={
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:220:11: error: cannot refer to declaration with an array type inside block","clang/test/Sema/block-misc.c:221:11: error: cannot refer to declaration with an array type inside block"}
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:220:11: error: cannot refer to declaration with an array type inside block","clang/test/Sema/block-misc.c:221:11: error: cannot refer to declaration with an array type inside block"}
Line 4,458: Line 4,459:
},
},
["err_ref_bad_target"]={
["err_ref_bad_target"]={
[b]="err_ref_bad_target",
[d]="err_ref_bad_target",
[j]={{nil,A,"reference to %select{__device__|__global__|__host__|__host__ __device__}0 %select{function|variable}1 %2 in %select{__device__|__global__|__host__|__host__ __device__}3 function"},{Gb,nil,"reference to %select{__device__|__global__|__host__|__host__ __device__}0 function %1 in %select{__device__|__global__|__host__|__host__ __device__}2 function"}},
[e]={{nil,A,"reference to %select{__device__|__global__|__host__|__host__ __device__}0 %select{function|variable}1 %2 in %select{__device__|__global__|__host__|__host__ __device__}3 function"},{Cb,nil,"reference to %select{__device__|__global__|__host__|__host__ __device__}0 function %1 in %select{__device__|__global__|__host__|__host__ __device__}2 function"}},
[i]={{nil,A,{"reference to ",{jc,gc,hc,ic}," ",{"function","variable"}," C in ",{jc,gc,hc,ic}," function"}},{Gb,nil,{"reference to ",{jc,gc,hc,ic}," function B in ",{jc,gc,hc,ic}," function"}}},
[f]={{nil,A,{"reference to ",{kc,ic,hc,gc}," ",{"function","variable"}," C in ",{kc,ic,hc,gc}," function"}},{Cb,nil,{"reference to ",{kc,ic,hc,gc}," function B in ",{kc,ic,hc,gc}," function"}}},
[h]=k,
[g]=k,
[c]="reference to (?:__device__|__global__|__host__|__host__ __device__) (?:function|variable) (.*?) in (?:__device__|__global__|__host__|__host__ __device__) function",
[h]="reference to (?:__device__|__global__|__host__|__host__ __device__) (?:function|variable) (.*?) in (?:__device__|__global__|__host__|__host__ __device__) function",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets","CUDA: diagnose invalid calls across targets\n\nllvm-svn: 140978"},
[j]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets","CUDA: diagnose invalid calls across targets\n\nllvm-svn: 140978"},
[d]={{"clang/lib/Sema/SemaCUDA.cpp",835,"bool Sema::CheckCUDACall(SourceLocation Loc, FunctionDecl *Callee) {\n  // ...\n  SemaDiagnosticBuilder(DiagKind, Loc, diag::err_ref_bad_target, Caller, *this) << IdentifyCUDATarget(Callee) << /*function*/ 0 << Callee << IdentifyCUDATarget(Caller);"},{O,19015,"/// Directly mark a variable odr-used. Given a choice, prefer to use\n/// MarkVariableReferenced since it does additional checks and then\n/// calls MarkVarDeclODRUsed.\n/// If the variable must be captured:\n///  - if FunctionScopeIndexToStopAt is null, capture it in the CurContext\n///  - else capture it in the DeclContext that maps to the\n///    *FunctionScopeIndexToStopAt on the FunctionScopeInfo stack.\nstatic void MarkVarDeclODRUsed(ValueDecl *V, SourceLocation Loc, Sema &SemaRef, const unsigned *const FunctionScopeIndexToStopAt = nullptr) {\n  // ...\n  if (SemaRef.LangOpts.CUDA && Var->hasGlobalStorage()) {\n    // ...\n    if (VarTarget == Sema::CVT_Host && (UserTarget == Sema::CFT_Device || UserTarget == Sema::CFT_HostDevice || UserTarget == Sema::CFT_Global)) {\n      // Diagnose ODR-use of host global variables in device functions.\n      // Reference of device global variables in host functions is allowed\n      // through shadow variables therefore it is not diagnosed.\n      if (SemaRef.LangOpts.CUDAIsDevice) {\n        SemaRef.targetDiag(Loc, diag::err_ref_bad_target) << /*host*/ 2 << /*variable*/ 1 << Var << UserTarget;"}},
[i]={{"clang/lib/Sema/SemaCUDA.cpp",835,"bool Sema::CheckCUDACall(SourceLocation Loc, FunctionDecl *Callee) {\n  // ...\n  SemaDiagnosticBuilder(DiagKind, Loc, diag::err_ref_bad_target, Caller, *this) << IdentifyCUDATarget(Callee) << /*function*/ 0 << Callee << IdentifyCUDATarget(Caller);"},{O,19015,"/// Directly mark a variable odr-used. Given a choice, prefer to use\n/// MarkVariableReferenced since it does additional checks and then\n/// calls MarkVarDeclODRUsed.\n/// If the variable must be captured:\n///  - if FunctionScopeIndexToStopAt is null, capture it in the CurContext\n///  - else capture it in the DeclContext that maps to the\n///    *FunctionScopeIndexToStopAt on the FunctionScopeInfo stack.\nstatic void MarkVarDeclODRUsed(ValueDecl *V, SourceLocation Loc, Sema &SemaRef, const unsigned *const FunctionScopeIndexToStopAt = nullptr) {\n  // ...\n  if (SemaRef.LangOpts.CUDA && Var->hasGlobalStorage()) {\n    // ...\n    if (VarTarget == Sema::CVT_Host && (UserTarget == Sema::CFT_Device || UserTarget == Sema::CFT_HostDevice || UserTarget == Sema::CFT_Global)) {\n      // Diagnose ODR-use of host global variables in device functions.\n      // Reference of device global variables in host functions is allowed\n      // through shadow variables therefore it is not diagnosed.\n      if (SemaRef.LangOpts.CUDAIsDevice) {\n        SemaRef.targetDiag(Loc, diag::err_ref_bad_target) << /*host*/ 2 << /*variable*/ 1 << Var << UserTarget;"}},
[l]={
[l]={
["clang/test/Parser/cuda-force-host-device-templates.cu"]={"clang/test/Parser/cuda-force-host-device-templates.cu:18:11: error: reference to __host__ function \'foo<int>\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:19:12: error: reference to __host__ function \'foo\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:38:11: error: reference to __host__ function \'bar<int>\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:39:12: error: reference to __host__ function \'bar\' in __host__ __device__ function"}
["clang/test/Parser/cuda-force-host-device-templates.cu"]={"clang/test/Parser/cuda-force-host-device-templates.cu:18:11: error: reference to __host__ function \'foo<int>\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:19:12: error: reference to __host__ function \'foo\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:38:11: error: reference to __host__ function \'bar<int>\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:39:12: error: reference to __host__ function \'bar\' in __host__ __device__ function"}
Line 4,472: Line 4,473:
},
},
["err_ref_bad_target_global_initializer"]={
["err_ref_bad_target_global_initializer"]={
[b]="err_ref_bad_target_global_initializer",
[d]="err_ref_bad_target_global_initializer",
[j]="reference to %select{__device__|__global__|__host__|__host__ __device__}0 function %1 in global initializer",
[e]="reference to %select{__device__|__global__|__host__|__host__ __device__}0 function %1 in global initializer",
[i]={{nil,nil,{"reference to ",{jc,gc,hc,ic}," function B in global initializer"}}},
[f]={{nil,nil,{"reference to ",{kc,ic,hc,gc}," function B in global initializer"}}},
[h]=k,
[g]=k,
[c]="reference to (?:__device__|__global__|__host__|__host__ __device__) function (.*?) in global initializer",
[h]="reference to (?:__device__|__global__|__host__|__host__ __device__) function (.*?) in global initializer",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"c989c3e78475",1470791361,"[CUDA] Reject calls to __device__ functions from host variable global initializers.","[CUDA] Reject calls to __device__ functions from host variable global initializers.\n\nReviewers: tra\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D23335\n\nllvm-svn: 278196"},
[j]={"c989c3e78475",1470791361,"[CUDA] Reject calls to __device__ functions from host variable global initializers.","[CUDA] Reject calls to __device__ functions from host variable global initializers.\n\nReviewers: tra\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D23335\n\nllvm-svn: 278196"},
[d]={{"clang/lib/Sema/SemaCUDA.cpp",639,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n  // ...\n  if (IsDeviceOrConstantVar || IsSharedVar) {\n  // ...\n  } else {\n    // ...\n    if (InitFn) {\n      // ...\n      if (InitFnTarget != CFT_Host && InitFnTarget != CFT_HostDevice) {\n        Diag(VD->getLocation(), diag::err_ref_bad_target_global_initializer) << InitFnTarget << InitFn;"}},
[i]={{"clang/lib/Sema/SemaCUDA.cpp",639,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n  // ...\n  if (IsDeviceOrConstantVar || IsSharedVar) {\n  // ...\n  } else {\n    // ...\n    if (InitFn) {\n      // ...\n      if (InitFnTarget != CFT_Host && InitFnTarget != CFT_HostDevice) {\n        Diag(VD->getLocation(), diag::err_ref_bad_target_global_initializer) << InitFnTarget << InitFn;"}},
[l]={
[l]={
["clang/test/SemaCUDA/global-initializers-host.cu"]={"clang/test/SemaCUDA/global-initializers-host.cu:13:3: error: reference to __device__ function \'S\' in global initializer","clang/test/SemaCUDA/global-initializers-host.cu:26:3: error: reference to __device__ function \'U\' in global initializer","clang/test/SemaCUDA/global-initializers-host.cu:31:5: error: reference to __device__ function \'device_fn\' in global initializer"}
["clang/test/SemaCUDA/global-initializers-host.cu"]={"clang/test/SemaCUDA/global-initializers-host.cu:13:3: error: reference to __device__ function \'S\' in global initializer","clang/test/SemaCUDA/global-initializers-host.cu:26:3: error: reference to __device__ function \'U\' in global initializer","clang/test/SemaCUDA/global-initializers-host.cu:31:5: error: reference to __device__ function \'device_fn\' in global initializer"}
Line 4,486: Line 4,487:
},
},
["err_ref_flexarray_type"]={
["err_ref_flexarray_type"]={
[b]="err_ref_flexarray_type",
[d]="err_ref_flexarray_type",
[j]="cannot refer to declaration of structure variable with flexible array member inside block",
[e]="cannot refer to declaration of structure variable with flexible array member inside block",
[i]="cannot refer to declaration of structure variable with flexible array member inside block",
[f]="cannot refer to declaration of structure variable with flexible array member inside block",
[h]=k,
[g]=k,
[c]="cannot refer to declaration of structure variable with flexible array member inside block",
[h]="cannot refer to declaration of structure variable with flexible array member inside block",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"a716a345276c",1357687071,"objectiveC blocks: It is impractical to capture ","objectiveC blocks: It is impractical to capture \nstruct variables with flexiable array members in\nblocks (and lambdas). Issue error instead of\ncrashing in IRGen. // rdar://12655829\n\nllvm-svn: 171912"},
[j]={"a716a345276c",1357687071,"objectiveC blocks: It is impractical to capture ","objectiveC blocks: It is impractical to capture \nstruct variables with flexiable array members in\nblocks (and lambdas). Issue error instead of\ncrashing in IRGen. // rdar://12655829\n\nllvm-svn: 171912"},
[d]={{O,19177,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n  // ...\n  // Prohibit structs with flexible array members too.\n  // We cannot capture what is in the tail end of the struct.\n  if (const RecordType *VTTy = Var->getType()->getAs<RecordType>()) {\n    if (VTTy->getDecl()->hasFlexibleArrayMember()) {\n      if (Diagnose) {\n        if (IsBlock)\n          S.Diag(Loc, diag::err_ref_flexarray_type);"}},
[i]={{O,19177,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n  // ...\n  // Prohibit structs with flexible array members too.\n  // We cannot capture what is in the tail end of the struct.\n  if (const RecordType *VTTy = Var->getType()->getAs<RecordType>()) {\n    if (VTTy->getDecl()->hasFlexibleArrayMember()) {\n      if (Diagnose) {\n        if (IsBlock)\n          S.Diag(Loc, diag::err_ref_flexarray_type);"}},
[l]={
[l]={
["clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm"]={"clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm:6:12: error: cannot refer to declaration of structure variable with flexible array member inside block"}
["clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm"]={"clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm:6:12: error: cannot refer to declaration of structure variable with flexible array member inside block"}
Line 4,500: Line 4,501:
},
},
["err_ref_init_ambiguous"]={
["err_ref_init_ambiguous"]={
[b]="err_ref_init_ambiguous",
[d]="err_ref_init_ambiguous",
[j]="reference initialization of type %0 with initializer of type %1 is ambiguous",
[e]="reference initialization of type %0 with initializer of type %1 is ambiguous",
[i]="reference initialization of type A with initializer of type B is ambiguous",
[f]="reference initialization of type A with initializer of type B is ambiguous",
[h]=k,
[g]=k,
[c]="reference initialization of type (.*?) with initializer of type (.*?) is ambiguous",
[h]="reference initialization of type (.*?) with initializer of type (.*?) is ambiguous",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"31481d8b22a9",1255481563,"Handle ambiguity of reference initialization.","Handle ambiguity of reference initialization.\nRemoves a FIXME.\n\nllvm-svn: 84068"},
[j]={"31481d8b22a9",1255481563,"Handle ambiguity of reference initialization.","Handle ambiguity of reference initialization.\nRemoves a FIXME.\n\nllvm-svn: 84068"},
[d]={{P,9651,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitOverloadFailed:\n  case FK_UserConversionOverloadFailed:\n    // ...\n    case OR_Ambiguous:\n      FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), Failure == FK_UserConversionOverloadFailed ? (S.PDiag(diag::err_typecheck_ambiguous_condition) << OnlyArg->getType() << DestType << Args[0]->getSourceRange()) : (S.PDiag(diag::err_ref_init_ambiguous) << DestType << OnlyArg->getType() << Args[0]->getSourceRange())), S, OCD_AmbiguousCandidates, Args);"}},
[i]={{P,9651,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitOverloadFailed:\n  case FK_UserConversionOverloadFailed:\n    // ...\n    case OR_Ambiguous:\n      FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), Failure == FK_UserConversionOverloadFailed ? (S.PDiag(diag::err_typecheck_ambiguous_condition) << OnlyArg->getType() << DestType << Args[0]->getSourceRange()) : (S.PDiag(diag::err_ref_init_ambiguous) << DestType << OnlyArg->getType() << Args[0]->getSourceRange())), S, OCD_AmbiguousCandidates, Args);"}},
[l]={
[l]={
["clang/test/SemaCXX/ref-init-ambiguous.cpp"]={"clang/test/SemaCXX/ref-init-ambiguous.cpp:17:13: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous","clang/test/SemaCXX/ref-init-ambiguous.cpp:23:9: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous","clang/test/SemaCXX/ref-init-ambiguous.cpp:25:12: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous"}
["clang/test/SemaCXX/ref-init-ambiguous.cpp"]={"clang/test/SemaCXX/ref-init-ambiguous.cpp:17:13: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous","clang/test/SemaCXX/ref-init-ambiguous.cpp:23:9: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous","clang/test/SemaCXX/ref-init-ambiguous.cpp:25:12: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous"}
Line 4,514: Line 4,515:
},
},
["err_ref_non_value"]={
["err_ref_non_value"]={
[b]="err_ref_non_value",
[d]="err_ref_non_value",
[j]="%0 does not refer to a value",
[e]="%0 does not refer to a value",
[i]="A does not refer to a value",
[f]="A does not refer to a value",
[h]=k,
[g]=k,
[c]="(.*?) does not refer to a value",
[h]="(.*?) does not refer to a value",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a","Don\'t automatically assume that an id-expression refers to a\nValueDecl, because that isn\'t always the case in ill-formed\ncode. Diagnose a common mistake (forgetting to provide a template\nargument list for a class template, PR5655) and dyn_cast so that we\nhandle the general problem of referring to a non-value declaration\ngracefully.\n\nllvm-svn: 90239"},
[j]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a","Don\'t automatically assume that an id-expression refers to a\nValueDecl, because that isn\'t always the case in ill-formed\ncode. Diagnose a common mistake (forgetting to provide a template\nargument list for a class template, PR5655) and dyn_cast so that we\nhandle the general problem of referring to a non-value declaration\ngracefully.\n\nllvm-svn: 90239"},
[d]={{O,3387,"/// Complete semantic analysis for a reference to the given declaration.\nExprResult Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, NamedDecl *D, NamedDecl *FoundD, const TemplateArgumentListInfo *TemplateArgs, bool AcceptInvalidDecl) {\n  // ...\n  // Make sure that we\'re referring to a value.\n  if (!isa<ValueDecl, UnresolvedUsingIfExistsDecl>(D)) {\n    Diag(Loc, diag::err_ref_non_value) << D << SS.getRange();"}},
[i]={{O,3387,"/// Complete semantic analysis for a reference to the given declaration.\nExprResult Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, NamedDecl *D, NamedDecl *FoundD, const TemplateArgumentListInfo *TemplateArgs, bool AcceptInvalidDecl) {\n  // ...\n  // Make sure that we\'re referring to a value.\n  if (!isa<ValueDecl, UnresolvedUsingIfExistsDecl>(D)) {\n    Diag(Loc, diag::err_ref_non_value) << D << SS.getRange();"}},
[l]={
[l]={
["clang/test/SemaHLSL/cb_error.hlsl"]={"clang/test/SemaHLSL/cb_error.hlsl:10:17: error: \'a\' does not refer to a value"}
["clang/test/SemaHLSL/cb_error.hlsl"]={"clang/test/SemaHLSL/cb_error.hlsl:10:17: error: \'a\' does not refer to a value"}
Line 4,528: Line 4,529:
},
},
["err_ref_qualifier_comparison_operator"]={
["err_ref_qualifier_comparison_operator"]={
[b]="err_ref_qualifier_comparison_operator",
[d]="err_ref_qualifier_comparison_operator",
[j]="ref-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[e]="ref-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[i]="ref-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[f]="ref-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[h]=k,
[g]=k,
[c]="ref\\-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[h]="ref\\-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={ib,1625925174,kb,jb},
[j]={gb,1625925174,ib,jb},
[d]={{w,8708,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  if (IsMethod) {\n    // ...\n    if (MD->getRefQualifier() == RQ_RValue) {\n      Diag(MD->getLocation(), diag::err_ref_qualifier_comparison_operator);"}},
[i]={{w,8708,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  if (IsMethod) {\n    // ...\n    if (MD->getRefQualifier() == RQ_RValue) {\n      Diag(MD->getLocation(), diag::err_ref_qualifier_comparison_operator);"}},
[l]={
[l]={
["clang/test/CXX/class/class.compare/class.compare.default/p1.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:18:8: error: ref-qualifier \'&&\' is not allowed on a defaulted comparison operator","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:202:10: error: ref-qualifier \'&&\' is not allowed on a defaulted comparison operator"}
["clang/test/CXX/class/class.compare/class.compare.default/p1.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:18:8: error: ref-qualifier \'&&\' is not allowed on a defaulted comparison operator","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:202:10: error: ref-qualifier \'&&\' is not allowed on a defaulted comparison operator"}
Line 4,542: Line 4,543:
},
},
["err_ref_qualifier_constructor"]={
["err_ref_qualifier_constructor"]={
[b]="err_ref_qualifier_constructor",
[d]="err_ref_qualifier_constructor",
[j]="ref-qualifier \'%select{&&|&}0\' is not allowed on a constructor",
[e]="ref-qualifier \'%select{&&|&}0\' is not allowed on a constructor",
[i]={{nil,nil,{"ref-qualifier \'",{"&&","&"},"\' is not allowed on a constructor"}}},
[f]={{nil,nil,{"ref-qualifier \'",{"&&","&"},"\' is not allowed on a constructor"}}},
[h]=k,
[g]=k,
[c]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a constructor",
[h]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a constructor",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"db9d66424425",1296018118,"Rvalue references for *this: ","Rvalue references for *this: \n\n  - Add ref-qualifiers to the type system; they are part of the\n  canonical type. Print & profile ref-qualifiers\n  - Translate the ref-qualifier from the Declarator chunk for\n    functions to the function type. \n  - Diagnose mis-uses of ref-qualifiers w.r.t. static member\n  functions, free functions, constructors, destructors, etc.\n  - Add serialization and deserialization of ref-qualifiers.\n\nllvm-svn: 124281"},
[j]={"db9d66424425",1296018118,"Rvalue references for *this: ","Rvalue references for *this: \n\n  - Add ref-qualifiers to the type system; they are part of the\n  canonical type. Print & profile ref-qualifiers\n  - Translate the ref-qualifier from the Declarator chunk for\n    functions to the function type. \n  - Diagnose mis-uses of ref-qualifiers w.r.t. static member\n  functions, free functions, constructors, destructors, etc.\n  - Add serialization and deserialization of ref-qualifiers.\n\nllvm-svn: 124281"},
[d]={{w,10747,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the invalid bit to true.  In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  // ...\n  if (FTI.hasRefQualifier()) {\n    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}},
[i]={{w,10747,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the invalid bit to true.  In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  // ...\n  if (FTI.hasRefQualifier()) {\n    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}},
[l]={
[l]={
["clang/test/CXX/special/class.ctor/p4-0x.cpp"]={"clang/test/CXX/special/class.ctor/p4-0x.cpp:5:7: error: ref-qualifier \'&\' is not allowed on a constructor","clang/test/CXX/special/class.ctor/p4-0x.cpp:6:10: error: ref-qualifier \'&&\' is not allowed on a constructor"}
["clang/test/CXX/special/class.ctor/p4-0x.cpp"]={"clang/test/CXX/special/class.ctor/p4-0x.cpp:5:7: error: ref-qualifier \'&\' is not allowed on a constructor","clang/test/CXX/special/class.ctor/p4-0x.cpp:6:10: error: ref-qualifier \'&&\' is not allowed on a constructor"}
Line 4,556: Line 4,557:
},
},
["err_ref_qualifier_destructor"]={
["err_ref_qualifier_destructor"]={
[b]="err_ref_qualifier_destructor",
[d]="err_ref_qualifier_destructor",
[j]="ref-qualifier \'%select{&&|&}0\' is not allowed on a destructor",
[e]="ref-qualifier \'%select{&&|&}0\' is not allowed on a destructor",
[i]={{nil,nil,{"ref-qualifier \'",{"&&","&"},"\' is not allowed on a destructor"}}},
[f]={{nil,nil,{"ref-qualifier \'",{"&&","&"},"\' is not allowed on a destructor"}}},
[h]=k,
[g]=k,
[c]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a destructor",
[h]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a destructor",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"db9d66424425",1296018118,"Rvalue references for *this: ","Rvalue references for *this: \n\n  - Add ref-qualifiers to the type system; they are part of the\n  canonical type. Print & profile ref-qualifiers\n  - Translate the ref-qualifier from the Declarator chunk for\n    functions to the function type. \n  - Diagnose mis-uses of ref-qualifiers w.r.t. static member\n  functions, free functions, constructors, destructors, etc.\n  - Add serialization and deserialization of ref-qualifiers.\n\nllvm-svn: 124281"},
[j]={"db9d66424425",1296018118,"Rvalue references for *this: ","Rvalue references for *this: \n\n  - Add ref-qualifiers to the type system; they are part of the\n  canonical type. Print & profile ref-qualifiers\n  - Translate the ref-qualifier from the Declarator chunk for\n    functions to the function type. \n  - Diagnose mis-uses of ref-qualifiers w.r.t. static member\n  functions, free functions, constructors, destructors, etc.\n  - Add serialization and deserialization of ref-qualifiers.\n\nllvm-svn: 124281"},
[d]={{w,10924,"/// CheckDestructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formednes of the destructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the declarator to invalid.  Even if this happens,\n/// will be updated to reflect a well-formed type for the destructor and\n/// returned.\nQualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  // ...\n  if (FTI.hasRefQualifier()) {\n    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}},
[i]={{w,10924,"/// CheckDestructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formednes of the destructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the declarator to invalid.  Even if this happens,\n/// will be updated to reflect a well-formed type for the destructor and\n/// returned.\nQualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  // ...\n  if (FTI.hasRefQualifier()) {\n    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}},
[l]={
[l]={
["clang/test/CXX/special/class.dtor/p2-0x.cpp"]={"clang/test/CXX/special/class.dtor/p2-0x.cpp:5:8: error: ref-qualifier \'&\' is not allowed on a destructor","clang/test/CXX/special/class.dtor/p2-0x.cpp:9:8: error: ref-qualifier \'&&\' is not allowed on a destructor"}
["clang/test/CXX/special/class.dtor/p2-0x.cpp"]={"clang/test/CXX/special/class.dtor/p2-0x.cpp:5:8: error: ref-qualifier \'&\' is not allowed on a destructor","clang/test/CXX/special/class.dtor/p2-0x.cpp:9:8: error: ref-qualifier \'&&\' is not allowed on a destructor"}
Line 4,570: Line 4,571:
},
},
["err_ref_qualifier_overload"]={
["err_ref_qualifier_overload"]={
[b]="err_ref_qualifier_overload",
[d]="err_ref_qualifier_overload",
[j]="cannot overload a member function %select{without a ref-qualifier|with ref-qualifier \'&\'|with ref-qualifier \'&&\'}0 with a member function %select{without a ref-qualifier|with ref-qualifier \'&\'|with ref-qualifier \'&&\'}1",
[e]="cannot overload a member function %select{without a ref-qualifier|with ref-qualifier \'&\'|with ref-qualifier \'&&\'}0 with a member function %select{without a ref-qualifier|with ref-qualifier \'&\'|with ref-qualifier \'&&\'}1",
[i]={{nil,nil,{"cannot overload a member function ",{"without a ref-qualifier","with ref-qualifier \'&\'","with ref-qualifier \'&&\'"}," with a member function ",{"without a ref-qualifier","with ref-qualifier \'&\'","with ref-qualifier \'&&\'"}}}},
[f]={{nil,nil,{"cannot overload a member function ",{"without a ref-qualifier","with ref-qualifier \'&\'","with ref-qualifier \'&&\'"}," with a member function ",{"without a ref-qualifier","with ref-qualifier \'&\'","with ref-qualifier \'&&\'"}}}},
[h]=k,
[g]=k,
[c]="cannot overload a member function (?:without a ref\\-qualifier|with ref\\-qualifier \'&\'|with ref\\-qualifier \'&&\') with a member function (?:without a ref\\-qualifier|with ref\\-qualifier \'&\'|with ref\\-qualifier \'&&\')",
[h]="cannot overload a member function (?:without a ref\\-qualifier|with ref\\-qualifier \'&\'|with ref\\-qualifier \'&&\') with a member function (?:without a ref\\-qualifier|with ref\\-qualifier \'&\'|with ref\\-qualifier \'&&\')",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"c83f9865a0da",1296076837,"Implement the restriction that a function with a ref-qualifier cannot","Implement the restriction that a function with a ref-qualifier cannot\noverload a function without a ref-qualifier (C++0x\n[over.load]p2). This, apparently, completes the implementation of\nrvalue references for *this.\n\nllvm-svn: 124321"},
[j]={"c83f9865a0da",1296076837,"Implement the restriction that a function with a ref-qualifier cannot","Implement the restriction that a function with a ref-qualifier cannot\noverload a function without a ref-qualifier (C++0x\n[over.load]p2). This, apparently, completes the implementation of\nrvalue references for *this.\n\nllvm-svn: 124321"},
[d]={{E,1356,"bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old, bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs, bool ConsiderRequiresClauses) {\n  // ...\n  if (OldMethod && NewMethod && !OldMethod->isStatic() && !NewMethod->isStatic()) {\n    if (OldMethod->getRefQualifier() != NewMethod->getRefQualifier()) {\n      if (!UseMemberUsingDeclRules && (OldMethod->getRefQualifier() == RQ_None || NewMethod->getRefQualifier() == RQ_None)) {\n        // ...\n        Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload) << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();"}},
[i]={{E,1356,"bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old, bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs, bool ConsiderRequiresClauses) {\n  // ...\n  if (OldMethod && NewMethod && !OldMethod->isStatic() && !NewMethod->isStatic()) {\n    if (OldMethod->getRefQualifier() != NewMethod->getRefQualifier()) {\n      if (!UseMemberUsingDeclRules && (OldMethod->getRefQualifier() == RQ_None || NewMethod->getRefQualifier() == RQ_None)) {\n        // ...\n        Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload) << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();"}},
[l]={
[l]={
["clang/test/CXX/over/over.load/p2-0x.cpp"]={"clang/test/CXX/over/over.load/p2-0x.cpp:15:8: error: cannot overload a member function without a ref-qualifier with a member function with ref-qualifier \'&\'","clang/test/CXX/over/over.load/p2-0x.cpp:21:29: error: cannot overload a member function without a ref-qualifier with a member function with ref-qualifier \'&\'","clang/test/CXX/over/over.load/p2-0x.cpp:24:8: error: cannot overload a member function with ref-qualifier \'&&\' with a member function without a ref-qualifier"}
["clang/test/CXX/over/over.load/p2-0x.cpp"]={"clang/test/CXX/over/over.load/p2-0x.cpp:15:8: error: cannot overload a member function without a ref-qualifier with a member function with ref-qualifier \'&\'","clang/test/CXX/over/over.load/p2-0x.cpp:21:29: error: cannot overload a member function without a ref-qualifier with a member function with ref-qualifier \'&\'","clang/test/CXX/over/over.load/p2-0x.cpp:24:8: error: cannot overload a member function with ref-qualifier \'&&\' with a member function without a ref-qualifier"}
Line 4,584: Line 4,585:
},
},
["err_ref_vm_type"]={
["err_ref_vm_type"]={
[b]="err_ref_vm_type",
[d]="err_ref_vm_type",
[j]="cannot refer to declaration with a variably modified type inside block",
[e]="cannot refer to declaration with a variably modified type inside block",
[i]="cannot refer to declaration with a variably modified type inside block",
[f]="cannot refer to declaration with a variably modified type inside block",
[h]=k,
[g]=k,
[c]="cannot refer to declaration with a variably modified type inside block",
[h]="cannot refer to declaration with a variably modified type inside block",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"7dafa0d04810",1262660195,"Disallow capturing vlas inside blocks.","Disallow capturing vlas inside blocks.\n\nllvm-svn: 92676"},
[j]={"7dafa0d04810",1262660195,"Disallow capturing vlas inside blocks.","Disallow capturing vlas inside blocks.\n\nllvm-svn: 92676"},
[d]={{O,19165,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n  // ...\n  // Prohibit variably-modified types in blocks; they\'re difficult to deal with.\n  if (Var->getType()->isVariablyModifiedType() && IsBlock) {\n    if (Diagnose) {\n      S.Diag(Loc, diag::err_ref_vm_type);"}},
[i]={{O,19165,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n  // ...\n  // Prohibit variably-modified types in blocks; they\'re difficult to deal with.\n  if (Var->getType()->isVariablyModifiedType() && IsBlock) {\n    if (Diagnose) {\n      S.Diag(Loc, diag::err_ref_vm_type);"}},
[l]={
[l]={
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:209:11: error: cannot refer to declaration with a variably modified type inside block","clang/test/Sema/block-misc.c:210:12: error: cannot refer to declaration with a variably modified type inside block"}
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:209:11: error: cannot refer to declaration with a variably modified type inside block","clang/test/Sema/block-misc.c:210:12: error: cannot refer to declaration with a variably modified type inside block"}
Line 4,598: Line 4,599:
},
},
["err_refactor_code_outside_of_function"]={
["err_refactor_code_outside_of_function"]={
[b]={{nil,B,"err_refactor_code_outside_of_function"}},
[d]={{nil,B,"err_refactor_code_outside_of_function"}},
[j]={{nil,B,"the selected code is not a part of a function\'s / method\'s body"}},
[e]={{nil,B,"the selected code is not a part of a function\'s / method\'s body"}},
[i]={{nil,B,"the selected code is not a part of a function\'s / method\'s body"}},
[f]={{nil,B,"the selected code is not a part of a function\'s / method\'s body"}},
[h]=k,
[g]=k,
[c]="the selected code is not a part of a function\'s \\/ method\'s body",
[h]="the selected code is not a part of a function\'s \\/ method\'s body",
[f]=a,
[b]=a,
[e]={{nil,B,Fb}},
[c]={{nil,B,Bb}},
[g]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring","[refactor] Initial outline of implementation of \"extract function\" refactoring\n\nThis commit adds an initial, skeleton outline of the \"extract function\"\nrefactoring. The extracted function doesn\'t capture variables / rewrite code\nyet, it just basically does a simple copy-paste.\nThe following initiation rules are specified:\n\n- extraction can only be done for executable code in a function/method/block.\n  This means that you can\'t extract a global variable initialize into a function\n  right now.\n- simple literals and references are not extractable.\n\nThis commit also adds support for full source ranges to clang-refactor\'s test\nmode.\n\nDifferential Revision: https://reviews.llvm.org/D38982\n\nllvm-svn: 316465"},
[j]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring","[refactor] Initial outline of implementation of \"extract function\" refactoring\n\nThis commit adds an initial, skeleton outline of the \"extract function\"\nrefactoring. The extracted function doesn\'t capture variables / rewrite code\nyet, it just basically does a simple copy-paste.\nThe following initiation rules are specified:\n\n- extraction can only be done for executable code in a function/method/block.\n  This means that you can\'t extract a global variable initialize into a function\n  right now.\n- simple literals and references are not extractable.\n\nThis commit also adds support for full source ranges to clang-refactor\'s test\nmode.\n\nDifferential Revision: https://reviews.llvm.org/D38982\n\nllvm-svn: 316465"},
[d]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",79,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  // We would like to extract code out of functions/methods/blocks.\n  // Prohibit extraction from things like global variable / field\n  // initializers and other top-level expressions.\n  if (!Code.isInFunctionLikeBodyOfCode())\n    return Context.createDiagnosticError(diag::err_refactor_code_outside_of_function);"}}
[i]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",79,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  // We would like to extract code out of functions/methods/blocks.\n  // Prohibit extraction from things like global variable / field\n  // initializers and other top-level expressions.\n  if (!Code.isInFunctionLikeBodyOfCode())\n    return Context.createDiagnosticError(diag::err_refactor_code_outside_of_function);"}}
},
},
["err_refactor_extract_prohibited_expression"]={
["err_refactor_extract_prohibited_expression"]={
[b]={{nil,B,"err_refactor_extract_prohibited_expression"}},
[d]={{nil,B,"err_refactor_extract_prohibited_expression"}},
[j]={{nil,B,"the selected expression can\'t be extracted"}},
[e]={{nil,B,"the selected expression can\'t be extracted"}},
[i]={{nil,B,"the selected expression can\'t be extracted"}},
[f]={{nil,B,"the selected expression can\'t be extracted"}},
[h]=k,
[g]=k,
[c]="the selected expression can\'t be extracted",
[h]="the selected expression can\'t be extracted",
[f]=a,
[b]=a,
[e]={{nil,B,Fb}},
[c]={{nil,B,Bb}},
[g]={"1e416fe23df4",1509495655,"[refactor][extract] prohibit extraction of ObjC property setters","[refactor][extract] prohibit extraction of ObjC property setters\n\nllvm-svn: 317056"},
[j]={"1e416fe23df4",1509495655,"[refactor][extract] prohibit extraction of ObjC property setters","[refactor][extract] prohibit extraction of ObjC property setters\n\nllvm-svn: 317056"},
[d]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",91,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  // ...\n  if (Code.size() == 1) {\n    // ...\n    // Property setters can\'t be extracted.\n    if (const auto *PRE = dyn_cast<ObjCPropertyRefExpr>(Code[0])) {\n      if (!PRE->isMessagingGetter())\n        return Context.createDiagnosticError(diag::err_refactor_extract_prohibited_expression);"}}
[i]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",91,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  // ...\n  if (Code.size() == 1) {\n    // ...\n    // Property setters can\'t be extracted.\n    if (const auto *PRE = dyn_cast<ObjCPropertyRefExpr>(Code[0])) {\n      if (!PRE->isMessagingGetter())\n        return Context.createDiagnosticError(diag::err_refactor_extract_prohibited_expression);"}}
},
},
["err_refactor_extract_simple_expression"]={
["err_refactor_extract_simple_expression"]={
[b]={{nil,B,"err_refactor_extract_simple_expression"}},
[d]={{nil,B,"err_refactor_extract_simple_expression"}},
[j]={{nil,B,"the selected expression is too simple to extract"}},
[e]={{nil,B,"the selected expression is too simple to extract"}},
[i]={{nil,B,"the selected expression is too simple to extract"}},
[f]={{nil,B,"the selected expression is too simple to extract"}},
[h]=k,
[g]=k,
[c]="the selected expression is too simple to extract",
[h]="the selected expression is too simple to extract",
[f]=a,
[b]=a,
[e]={{nil,B,Fb}},
[c]={{nil,B,Bb}},
[g]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring","[refactor] Initial outline of implementation of \"extract function\" refactoring\n\nThis commit adds an initial, skeleton outline of the \"extract function\"\nrefactoring. The extracted function doesn\'t capture variables / rewrite code\nyet, it just basically does a simple copy-paste.\nThe following initiation rules are specified:\n\n- extraction can only be done for executable code in a function/method/block.\n  This means that you can\'t extract a global variable initialize into a function\n  right now.\n- simple literals and references are not extractable.\n\nThis commit also adds support for full source ranges to clang-refactor\'s test\nmode.\n\nDifferential Revision: https://reviews.llvm.org/D38982\n\nllvm-svn: 316465"},
[j]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring","[refactor] Initial outline of implementation of \"extract function\" refactoring\n\nThis commit adds an initial, skeleton outline of the \"extract function\"\nrefactoring. The extracted function doesn\'t capture variables / rewrite code\nyet, it just basically does a simple copy-paste.\nThe following initiation rules are specified:\n\n- extraction can only be done for executable code in a function/method/block.\n  This means that you can\'t extract a global variable initialize into a function\n  right now.\n- simple literals and references are not extractable.\n\nThis commit also adds support for full source ranges to clang-refactor\'s test\nmode.\n\nDifferential Revision: https://reviews.llvm.org/D38982\n\nllvm-svn: 316465"},
[d]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",85,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  // ...\n  if (Code.size() == 1) {\n    // Avoid extraction of simple literals and references.\n    if (isSimpleExpression(dyn_cast<Expr>(Code[0])))\n      return Context.createDiagnosticError(diag::err_refactor_extract_simple_expression);"}}
[i]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",85,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  // ...\n  if (Code.size() == 1) {\n    // Avoid extraction of simple literals and references.\n    if (isSimpleExpression(dyn_cast<Expr>(Code[0])))\n      return Context.createDiagnosticError(diag::err_refactor_extract_simple_expression);"}}
},
},
["err_refactor_no_selection"]={
["err_refactor_no_selection"]={
[b]={{nil,B,"err_refactor_no_selection"}},
[d]={{nil,B,"err_refactor_no_selection"}},
[j]={{nil,B,"refactoring action can\'t be initiated without a selection"}},
[e]={{nil,B,"refactoring action can\'t be initiated without a selection"}},
[i]={{nil,B,"refactoring action can\'t be initiated without a selection"}},
[f]={{nil,B,"refactoring action can\'t be initiated without a selection"}},
[h]=k,
[g]=k,
[c]="refactoring action can\'t be initiated without a selection",
[h]="refactoring action can\'t be initiated without a selection",
[f]=a,
[b]=a,
[e]={{nil,B,Fb}},
[c]={{nil,B,Bb}},
[g]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics","[refactor] allow the use of refactoring diagnostics\n\nThis commit allows the refactoring library to use its own set of\nrefactoring-specific diagnostics to reports things like initiation errors.\n\nDifferential Revision: https://reviews.llvm.org/D38772\n\nllvm-svn: 315924"},
[j]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics","[refactor] allow the use of refactoring diagnostics\n\nThis commit allows the refactoring library to use its own set of\nrefactoring-specific diagnostics to reports things like initiation errors.\n\nDifferential Revision: https://reviews.llvm.org/D38772\n\nllvm-svn: 315924"},
[d]={{"clang/unittests/Tooling/RefactoringActionRulesTest.cpp",145,"TEST_F(RefactoringActionRulesTest, MyFirstRefactoringRule) {\n  // ...\n  // When one of the requirements is not satisfied, invoke should return a\n  // valid error.\n  {\n    // ...\n    EXPECT_EQ(DiagID, diag::err_refactor_no_selection);"}}
[i]={{"clang/unittests/Tooling/RefactoringActionRulesTest.cpp",145,"TEST_F(RefactoringActionRulesTest, MyFirstRefactoringRule) {\n  // ...\n  // When one of the requirements is not satisfied, invoke should return a\n  // valid error.\n  {\n    // ...\n    EXPECT_EQ(DiagID, diag::err_refactor_no_selection);"}}
},
},
["err_refactor_selection_invalid_ast"]={
["err_refactor_selection_invalid_ast"]={
[b]={{nil,B,"err_refactor_selection_invalid_ast"}},
[d]={{nil,B,"err_refactor_selection_invalid_ast"}},
[j]={{nil,B,"the provided selection does not overlap with the AST nodes of interest"}},
[e]={{nil,B,"the provided selection does not overlap with the AST nodes of interest"}},
[i]={{nil,B,"the provided selection does not overlap with the AST nodes of interest"}},
[f]={{nil,B,"the provided selection does not overlap with the AST nodes of interest"}},
[h]=k,
[g]=k,
[c]="the provided selection does not overlap with the AST nodes of interest",
[h]="the provided selection does not overlap with the AST nodes of interest",
[f]=a,
[b]=a,
[e]={{nil,B,Fb}},
[c]={{nil,B,Bb}},
[g]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring","[refactor] Initial outline of implementation of \"extract function\" refactoring\n\nThis commit adds an initial, skeleton outline of the \"extract function\"\nrefactoring. The extracted function doesn\'t capture variables / rewrite code\nyet, it just basically does a simple copy-paste.\nThe following initiation rules are specified:\n\n- extraction can only be done for executable code in a function/method/block.\n  This means that you can\'t extract a global variable initialize into a function\n  right now.\n- simple literals and references are not extractable.\n\nThis commit also adds support for full source ranges to clang-refactor\'s test\nmode.\n\nDifferential Revision: https://reviews.llvm.org/D38982\n\nllvm-svn: 316465"},
[j]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring","[refactor] Initial outline of implementation of \"extract function\" refactoring\n\nThis commit adds an initial, skeleton outline of the \"extract function\"\nrefactoring. The extracted function doesn\'t capture variables / rewrite code\nyet, it just basically does a simple copy-paste.\nThe following initiation rules are specified:\n\n- extraction can only be done for executable code in a function/method/block.\n  This means that you can\'t extract a global variable initialize into a function\n  right now.\n- simple literals and references are not extractable.\n\nThis commit also adds support for full source ranges to clang-refactor\'s test\nmode.\n\nDifferential Revision: https://reviews.llvm.org/D38982\n\nllvm-svn: 316465"},
[d]={{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",29,"Expected<SelectedASTNode> ASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n  // ...\n  if (!Selection)\n    return Context.createDiagnosticError(Range->getBegin(), diag::err_refactor_selection_invalid_ast);"},{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",48,"Expected<CodeRangeASTSelection> CodeRangeASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n  // ...\n  if (!CodeRange)\n    return Context.createDiagnosticError(Context.getSelectionRange().getBegin(), diag::err_refactor_selection_invalid_ast);"}}
[i]={{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",29,"Expected<SelectedASTNode> ASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n  // ...\n  if (!Selection)\n    return Context.createDiagnosticError(Range->getBegin(), diag::err_refactor_selection_invalid_ast);"},{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",48,"Expected<CodeRangeASTSelection> CodeRangeASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n  // ...\n  if (!CodeRange)\n    return Context.createDiagnosticError(Context.getSelectionRange().getBegin(), diag::err_refactor_selection_invalid_ast);"}}
},
},
["err_refactor_selection_no_symbol"]={
["err_refactor_selection_no_symbol"]={
[b]={{nil,B,"err_refactor_selection_no_symbol"}},
[d]={{nil,B,"err_refactor_selection_no_symbol"}},
[j]={{nil,B,"there is no symbol at the given location"}},
[e]={{nil,B,"there is no symbol at the given location"}},
[i]={{nil,B,"there is no symbol at the given location"}},
[f]={{nil,B,"there is no symbol at the given location"}},
[h]=k,
[g]=k,
[c]="there is no symbol at the given location",
[h]="there is no symbol at the given location",
[f]=a,
[b]=a,
[e]={{nil,B,Fb}},
[c]={{nil,B,Bb}},
[g]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics","[refactor] allow the use of refactoring diagnostics\n\nThis commit allows the refactoring library to use its own set of\nrefactoring-specific diagnostics to reports things like initiation errors.\n\nDifferential Revision: https://reviews.llvm.org/D38772\n\nllvm-svn: 315924"},
[j]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics","[refactor] allow the use of refactoring diagnostics\n\nThis commit allows the refactoring library to use its own set of\nrefactoring-specific diagnostics to reports things like initiation errors.\n\nDifferential Revision: https://reviews.llvm.org/D38772\n\nllvm-svn: 315924"},
[d]={{"clang/lib/Tooling/Refactoring/Rename/RenamingAction.cpp",73,"Expected<RenameOccurrences> RenameOccurrences::initiate(RefactoringRuleContext &Context, SourceRange SelectionRange, std::string NewName) {\n  // ...\n  if (!ND)\n    return Context.createDiagnosticError(SelectionRange.getBegin(), diag::err_refactor_selection_no_symbol);"}}
[i]={{"clang/lib/Tooling/Refactoring/Rename/RenamingAction.cpp",73,"Expected<RenameOccurrences> RenameOccurrences::initiate(RefactoringRuleContext &Context, SourceRange SelectionRange, std::string NewName) {\n  // ...\n  if (!ND)\n    return Context.createDiagnosticError(SelectionRange.getBegin(), diag::err_refactor_selection_no_symbol);"}}
},
},
["err_reference_bind_drops_quals"]={
["err_reference_bind_drops_quals"]={
[b]="err_reference_bind_drops_quals",
[d]="err_reference_bind_drops_quals",
[j]={{nil,o,"binding reference %diff{of type $ to value of type $|to value}0,1 %select{drops %3 qualifier%plural{1:|2:|4:|:s}4|changes address space|not permitted due to incompatible qualifiers}2"},{x,x,"binding reference %diff{of type $ to value of type $|to value}0,1 %select{drops %3 qualifier%plural{1:|2:|4:|:s}4|changes address space}2"},{u,nil,"binding value %diff{of type $ to reference to type $|to reference}0,1 drops %select{<<ERROR>>|\'const\'|\'restrict\'|\'const\' and \'restrict\'|\'volatile\'|\'const\' and \'volatile\'|\'restrict\' and \'volatile\'|\'const\', \'restrict\', and \'volatile\'}2 qualifier%plural{1:|2:|4:|:s}2"}},
[e]={{nil,o,"binding reference %diff{of type $ to value of type $|to value}0,1 %select{drops %3 qualifier%plural{1:|2:|4:|:s}4|changes address space|not permitted due to incompatible qualifiers}2"},{x,x,"binding reference %diff{of type $ to value of type $|to value}0,1 %select{drops %3 qualifier%plural{1:|2:|4:|:s}4|changes address space}2"},{u,nil,"binding value %diff{of type $ to reference to type $|to reference}0,1 drops %select{<<ERROR>>|\'const\'|\'restrict\'|\'const\' and \'restrict\'|\'volatile\'|\'const\' and \'volatile\'|\'restrict\' and \'volatile\'|\'const\', \'restrict\', and \'volatile\'}2 qualifier%plural{1:|2:|4:|:s}2"}},
[i]={{nil,o,{"binding reference ",{"of type A to value of type B","to value"}," ",{{"drops D qualifier",{a,a,a,"s"}},"changes address space","not permitted due to incompatible qualifiers"}}},{x,x,{"binding reference ",{"of type A to value of type B","to value"}," ",{{"drops D qualifier",{a,a,a,"s"}},"changes address space"}}},{u,nil,{"binding value ",{"of type A to reference to type B","to reference"}," drops ",{"\'const\'","\'restrict\'","\'const\' and \'restrict\'","\'volatile\'","\'const\' and \'volatile\'","\'restrict\' and \'volatile\'","\'const\', \'restrict\', and \'volatile\'"}," qualifier",{a,a,a,"s"}}}},
[f]={{nil,o,{"binding reference ",{"of type A to value of type B","to value"}," ",{{"drops D qualifier",{a,a,a,"s"}},"changes address space","not permitted due to incompatible qualifiers"}}},{x,x,{"binding reference ",{"of type A to value of type B","to value"}," ",{{"drops D qualifier",{a,a,a,"s"}},"changes address space"}}},{u,nil,{"binding value ",{"of type A to reference to type B","to reference"}," drops ",{"\'const\'","\'restrict\'","\'const\' and \'restrict\'","\'volatile\'","\'const\' and \'volatile\'","\'restrict\' and \'volatile\'","\'const\', \'restrict\', and \'volatile\'"}," qualifier",{a,a,a,"s"}}}},
[h]=k,
[g]=k,
[c]="binding reference (?:of type (.*?) to value of type (.*?)|to value) (?:drops (.*?) qualifier(?:|||s)|changes address space|not permitted due to incompatible qualifiers)",
[h]="binding reference (?:of type (.*?) to value of type (.*?)|to value) (?:drops (.*?) qualifier(?:|||s)|changes address space|not permitted due to incompatible qualifiers)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"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"},
[j]={"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"},
[d]={{P,9756,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitDropsQualifiers: {\n    // ...\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 1 /*addr space*/"},{P,9760,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitDropsQualifiers: {\n    // ...\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n    // ...\n    else if (DroppedQualifiers.hasQualifiers())\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 0 /*cv quals*/"},{P,9767,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitDropsQualifiers: {\n    // ...\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n    // ...\n    else if (DroppedQualifiers.hasQualifiers())\n    // ...\n    else\n      // ...\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 2 /*incompatible quals*/"}},
[i]={{P,9756,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitDropsQualifiers: {\n    // ...\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 1 /*addr space*/"},{P,9760,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitDropsQualifiers: {\n    // ...\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n    // ...\n    else if (DroppedQualifiers.hasQualifiers())\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 0 /*cv quals*/"},{P,9767,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitDropsQualifiers: {\n    // ...\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n    // ...\n    else if (DroppedQualifiers.hasQualifiers())\n    // ...\n    else\n      // ...\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 2 /*incompatible quals*/"}},
[l]={
[l]={
["clang/test/SemaCXX/builtins-arm.cpp"]={"clang/test/SemaCXX/builtins-arm.cpp:5:27: error: binding reference of type \'__builtin_va_list\' to value of type \'const __builtin_va_list\' drops \'const\' qualifier"}
["clang/test/SemaCXX/builtins-arm.cpp"]={"clang/test/SemaCXX/builtins-arm.cpp:5:27: error: binding reference of type \'__builtin_va_list\' to value of type \'const __builtin_va_list\' drops \'const\' qualifier"}
Line 4,678: Line 4,679:
},
},
["err_reference_bind_failed"]={
["err_reference_bind_failed"]={
[b]="err_reference_bind_failed",
[d]="err_reference_bind_failed",
[j]={{nil,x,"reference %diff{to %select{type|incomplete type}1 $ could not bind to an %select{rvalue|lvalue}2 of type $|could not bind to %select{rvalue|lvalue}2 of incompatible type}0,3"},{u,nil,"reference %diff{to type $ could not bind to an %select{rvalue|lvalue}1 of type $|could not bind to %select{rvalue|lvalue}1 of incompatible type}0,2"}},
[e]={{nil,x,"reference %diff{to %select{type|incomplete type}1 $ could not bind to an %select{rvalue|lvalue}2 of type $|could not bind to %select{rvalue|lvalue}2 of incompatible type}0,3"},{u,nil,"reference %diff{to type $ could not bind to an %select{rvalue|lvalue}1 of type $|could not bind to %select{rvalue|lvalue}1 of incompatible type}0,2"}},
[i]={{nil,x,{"reference ",{{"to ",{"type","incomplete type"}," A could not bind to an ",{cc,bc}," of type D"},{"could not bind to ",{cc,bc}," of incompatible type"}}}},{u,nil,{"reference ",{{"to type A could not bind to an ",{cc,bc}," of type C"},{"could not bind to ",{cc,bc}," of incompatible type"}}}}},
[f]={{nil,x,{"reference ",{{"to ",{"type","incomplete type"}," A could not bind to an ",{cc,bc}," of type D"},{"could not bind to ",{cc,bc}," of incompatible type"}}}},{u,nil,{"reference ",{{"to type A could not bind to an ",{cc,bc}," of type C"},{"could not bind to ",{cc,bc}," of incompatible type"}}}}},
[h]=k,
[g]=k,
[c]="reference (?:to (?:type|incomplete type) (.*?) could not bind to an (?:rvalue|lvalue) of type (.*?)|could not bind to (?:rvalue|lvalue) of incompatible type)",
[h]="reference (?:to (?:type|incomplete type) (.*?) could not bind to an (?:rvalue|lvalue) of type (.*?)|could not bind to (?:rvalue|lvalue) of incompatible type)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"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"},
[j]={"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"},
[d]={{P,9774,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitFailed:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_failed) << DestType.getNonReferenceType() << DestType.getNonReferenceType()->isIncompleteType() << OnlyArg->isLValue() << OnlyArg->getType() << Args[0]->getSourceRange();"}},
[i]={{P,9774,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitFailed:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_failed) << DestType.getNonReferenceType() << DestType.getNonReferenceType()->isIncompleteType() << OnlyArg->isLValue() << OnlyArg->getType() << Args[0]->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:28:12: error: reference to type \'const A\' (aka \'void (*const)() noexcept\') could not bind to an rvalue of type \'void (*)()\'"}
["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:28:12: error: reference to type \'const A\' (aka \'void (*const)() noexcept\') could not bind to an rvalue of type \'void (*)()\'"}
Line 4,692: Line 4,693:
},
},
["err_reference_bind_init_list"]={
["err_reference_bind_init_list"]={
[b]="err_reference_bind_init_list",
[d]="err_reference_bind_init_list",
[j]="reference to type %0 cannot bind to an initializer list",
[e]="reference to type %0 cannot bind to an initializer list",
[i]="reference to type A cannot bind to an initializer list",
[f]="reference to type A cannot bind to an initializer list",
[h]=k,
[g]=k,
[c]="reference to type (.*?) cannot bind to an initializer list",
[h]="reference to type (.*?) cannot bind to an initializer list",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"51e77d5ab0a0",1260467815,"Move initialization via initializer list over to InitializationSequences.","Move initialization via initializer list over to InitializationSequences.\n\nllvm-svn: 91050"},
[j]={"51e77d5ab0a0",1260467815,"Move initialization via initializer list over to InitializationSequences.","Move initialization via initializer list over to InitializationSequences.\n\nllvm-svn: 91050"},
[d]={{P,9828,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceBindingToInitList:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_init_list) << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}},
[i]={{P,9828,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceBindingToInitList:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_init_list) << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx0x-initializer-references.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-references.cpp:141:16: error: reference to type \'const int\' cannot bind to an initializer list"}
["clang/test/SemaCXX/cxx0x-initializer-references.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-references.cpp:141:16: error: reference to type \'const int\' cannot bind to an initializer list"}
Line 4,706: Line 4,707:
},
},
["err_reference_bind_temporary_addrspace"]={
["err_reference_bind_temporary_addrspace"]={
[b]={{nil,x,"err_reference_bind_temporary_addrspace"}},
[d]={{nil,x,"err_reference_bind_temporary_addrspace"}},
[j]={{nil,x,"reference of type %0 cannot bind to a temporary object because of address space mismatch"}},
[e]={{nil,x,"reference of type %0 cannot bind to a temporary object because of address space mismatch"}},
[i]={{nil,x,"reference of type A cannot bind to a temporary object because of address space mismatch"}},
[f]={{nil,x,"reference of type A cannot bind to a temporary object because of address space mismatch"}},
[h]=k,
[g]=k,
[c]="reference of type (.*?) cannot bind to a temporary object because of address space mismatch",
[h]="reference of type (.*?) cannot bind to a temporary object because of address space mismatch",
[f]=a,
[b]=a,
[e]={{nil,x,m}},
[c]={{nil,x,m}},
[g]={"5145b1e4421a",1559743414,"[Sema] Prevent binding incompatible addr space ref to temporaries","[Sema] Prevent binding incompatible addr space ref to temporaries\n\nReferences to arbitrary address spaces can\'t always be bound to\ntemporaries. This change extends the reference binding logic to\ncheck that the address space of a temporary can be implicitly\nconverted to the address space in a reference when temporary\nmaterialization is performed.\n\nDifferential Revision: https://reviews.llvm.org/D61318\n\nllvm-svn: 362604"},
[j]={"5145b1e4421a",1559743414,"[Sema] Prevent binding incompatible addr space ref to temporaries","[Sema] Prevent binding incompatible addr space ref to temporaries\n\nReferences to arbitrary address spaces can\'t always be bound to\ntemporaries. This change extends the reference binding logic to\ncheck that the address space of a temporary can be implicitly\nconverted to the address space in a reference when temporary\nmaterialization is performed.\n\nDifferential Revision: https://reviews.llvm.org/D61318\n\nllvm-svn: 362604"},
[d]={{P,9744,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceAddrspaceMismatchTemporary:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_temporary_addrspace) << DestType << Args[0]->getSourceRange();"}},
[i]={{P,9744,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceAddrspaceMismatchTemporary:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_temporary_addrspace) << DestType << Args[0]->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaOpenCLCXX/address-space-references.clcpp"]={"clang/test/SemaOpenCLCXX/address-space-references.clcpp:4:10: error: reference of type \'const __global int &\' cannot bind to a temporary object because of address space mismatch"}
["clang/test/SemaOpenCLCXX/address-space-references.clcpp"]={"clang/test/SemaOpenCLCXX/address-space-references.clcpp:4:10: error: reference of type \'const __global int &\' cannot bind to a temporary object because of address space mismatch"}
Line 4,720: Line 4,721:
},
},
["err_reference_bind_to_bitfield"]={
["err_reference_bind_to_bitfield"]={
[b]="err_reference_bind_to_bitfield",
[d]="err_reference_bind_to_bitfield",
[j]="%select{non-const|volatile}0 reference cannot bind to bit-field%select{| %1}2",
[e]="%select{non-const|volatile}0 reference cannot bind to bit-field%select{| %1}2",
[i]={{nil,nil,{{"non-const","volatile"}," reference cannot bind to bit-field",{a,vb}}}},
[f]={{nil,nil,{{"non-const","volatile"}," reference cannot bind to bit-field",{a,wb}}}},
[h]=k,
[g]=k,
[c]="(?:non\\-const|volatile) reference cannot bind to bit\\-field(?:| (.*?))",
[h]="(?:non\\-const|volatile) reference cannot bind to bit\\-field(?:| (.*?))",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"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"},
[j]={"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"},
[d]={{P,9716,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NonConstLValueReferenceBindingToBitfield: {\n    // ...\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_bitfield) << DestType.isVolatileQualified() << (BitField ? BitField->getDeclName() : DeclarationName()) << (BitField != nullptr) << Args[0]->getSourceRange();"}},
[i]={{P,9716,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NonConstLValueReferenceBindingToBitfield: {\n    // ...\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_bitfield) << DestType.isVolatileQualified() << (BitField ? BitField->getDeclName() : DeclarationName()) << (BitField != nullptr) << Args[0]->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjCXX/references.mm"]={"clang/test/SemaObjCXX/references.mm:74:13: error: non-const reference cannot bind to bit-field \'bf\'"}
["clang/test/SemaObjCXX/references.mm"]={"clang/test/SemaObjCXX/references.mm:74:13: error: non-const reference cannot bind to bit-field \'bf\'"}
Line 4,734: Line 4,735:
},
},
["err_reference_bind_to_matrix_element"]={
["err_reference_bind_to_matrix_element"]={
[b]={{nil,t,"err_reference_bind_to_matrix_element"}},
[d]={{nil,t,"err_reference_bind_to_matrix_element"}},
[j]={{nil,t,"%select{non-const|volatile}0 reference cannot bind to matrix element"}},
[e]={{nil,t,"%select{non-const|volatile}0 reference cannot bind to matrix element"}},
[i]={{nil,t,{{"non-const","volatile"}," reference cannot bind to matrix element"}}},
[f]={{nil,t,{{"non-const","volatile"}," reference cannot bind to matrix element"}}},
[h]=k,
[g]=k,
[c]="(?:non\\-const|volatile) reference cannot bind to matrix element",
[h]="(?:non\\-const|volatile) reference cannot bind to matrix element",
[f]=a,
[b]=a,
[e]={{nil,t,m}},
[c]={{nil,t,m}},
[g]={qb,1576908663,sb,nb},
[j]={pb,1576908663,sb,ub},
[d]={{P,9733,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NonConstLValueReferenceBindingToMatrixElement:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_matrix_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}},
[i]={{P,9733,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NonConstLValueReferenceBindingToMatrixElement:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_matrix_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/matrix-type-operators.cpp"]={"clang/test/SemaCXX/matrix-type-operators.cpp:236:10: error: non-const reference cannot bind to matrix element"}
["clang/test/SemaCXX/matrix-type-operators.cpp"]={"clang/test/SemaCXX/matrix-type-operators.cpp:236:10: error: non-const reference cannot bind to matrix element"}
Line 4,748: Line 4,749:
},
},
["err_reference_bind_to_vector_element"]={
["err_reference_bind_to_vector_element"]={
[b]="err_reference_bind_to_vector_element",
[d]="err_reference_bind_to_vector_element",
[j]="%select{non-const|volatile}0 reference cannot bind to vector element",
[e]="%select{non-const|volatile}0 reference cannot bind to vector element",
[i]={{nil,nil,{{"non-const","volatile"}," reference cannot bind to vector element"}}},
[f]={{nil,nil,{{"non-const","volatile"}," reference cannot bind to vector element"}}},
[h]=k,
[g]=k,
[c]="(?:non\\-const|volatile) reference cannot bind to vector element",
[h]="(?:non\\-const|volatile) reference cannot bind to vector element",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"8abde4b447db",1264958329,"Diagnose binding a non-const reference to a vector element.","Diagnose binding a non-const reference to a vector element.\n\nllvm-svn: 94963"},
[j]={"8abde4b447db",1264958329,"Diagnose binding a non-const reference to a vector element.","Diagnose binding a non-const reference to a vector element.\n\nllvm-svn: 94963"},
[d]={{P,9727,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NonConstLValueReferenceBindingToVectorElement:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_vector_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}},
[i]={{P,9727,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NonConstLValueReferenceBindingToVectorElement:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_vector_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/references.cpp"]={"clang/test/SemaCXX/references.cpp:149:8: error: non-const reference cannot bind to vector element","clang/test/SemaCXX/references.cpp:153:8: error: non-const reference cannot bind to vector element"}
["clang/test/SemaCXX/references.cpp"]={"clang/test/SemaCXX/references.cpp:149:8: error: non-const reference cannot bind to vector element","clang/test/SemaCXX/references.cpp:153:8: error: non-const reference cannot bind to vector element"}
Line 4,762: Line 4,763:
},
},
["err_reference_capture_with_reference_default"]={
["err_reference_capture_with_reference_default"]={
[b]="err_reference_capture_with_reference_default",
[d]="err_reference_capture_with_reference_default",
[j]="\'&\' cannot precede a capture when the capture default is \'&\'",
[e]="\'&\' cannot precede a capture when the capture default is \'&\'",
[i]="\'&\' cannot precede a capture when the capture default is \'&\'",
[f]="\'&\' cannot precede a capture when the capture default is \'&\'",
[h]=k,
[g]=k,
[c]="\'&\' cannot precede a capture when the capture default is \'&\'",
[h]="\'&\' cannot precede a capture when the capture default is \'&\'",
[f]=a,
[b]=a,
[e]="Lambda Issue",
[c]="Lambda Issue",
[g]={"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"},
[j]={"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"},
[d]={{"clang/lib/Sema/SemaLambda.cpp",1117,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // ...\n    if (C->Init.isUsable()) {\n    // ...\n    } else {\n      // ...\n      // C++11 [expr.prim.lambda]p8:\n      //  If a lambda-capture includes a capture-default that is &, the\n      //  identifiers in the lambda-capture shall not be preceded by &.\n      //  If a lambda-capture includes a capture-default that is =, [...]\n      //  each identifier it contains shall be preceded by &.\n      if (C->Kind == LCK_ByRef && Intro.Default == LCD_ByRef) {\n        Diag(C->Loc, diag::err_reference_capture_with_reference_default) << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"}},
[i]={{"clang/lib/Sema/SemaLambda.cpp",1117,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // ...\n    if (C->Init.isUsable()) {\n    // ...\n    } else {\n      // ...\n      // C++11 [expr.prim.lambda]p8:\n      //  If a lambda-capture includes a capture-default that is &, the\n      //  identifiers in the lambda-capture shall not be preceded by &.\n      //  If a lambda-capture includes a capture-default that is =, [...]\n      //  each identifier it contains shall be preceded by &.\n      if (C->Kind == LCK_ByRef && Intro.Default == LCD_ByRef) {\n        Diag(C->Loc, diag::err_reference_capture_with_reference_default) << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:13:16: error: \'&\' cannot precede a capture when the capture default is \'&\'","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:25:14: error: \'&\' cannot precede a capture when the capture default is \'&\'"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:13:16: error: \'&\' cannot precede a capture when the capture default is \'&\'","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:25:14: error: \'&\' cannot precede a capture when the capture default is \'&\'"}
Line 4,776: Line 4,777:
},
},
["err_reference_has_multiple_inits"]={
["err_reference_has_multiple_inits"]={
[b]="err_reference_has_multiple_inits",
[d]="err_reference_has_multiple_inits",
[j]="reference cannot be initialized with multiple values",
[e]="reference cannot be initialized with multiple values",
[i]="reference cannot be initialized with multiple values",
[f]="reference cannot be initialized with multiple values",
[h]=k,
[g]=k,
[c]="reference cannot be initialized with multiple values",
[h]="reference cannot be initialized with multiple values",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"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"},
[j]={"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"},
[d]={{P,9569,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_TooManyInitsForReference:\n    // FIXME: Customize for the initialized entity?\n    if (Args.empty()) {\n    // ...\n    } else // FIXME: diagnostic below could be better!\n      S.Diag(Kind.getLocation(), diag::err_reference_has_multiple_inits) << SourceRange(Args.front()->getBeginLoc(), Args.back()->getEndLoc());"}}
[i]={{P,9569,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_TooManyInitsForReference:\n    // FIXME: Customize for the initialized entity?\n    if (Args.empty()) {\n    // ...\n    } else // FIXME: diagnostic below could be better!\n      S.Diag(Kind.getLocation(), diag::err_reference_has_multiple_inits) << SourceRange(Args.front()->getBeginLoc(), Args.back()->getEndLoc());"}}
},
},
["err_reference_pipe_type"]={
["err_reference_pipe_type"]={
[b]="err_reference_pipe_type",
[d]="err_reference_pipe_type",
[j]="pipes packet types cannot be of reference type",
[e]="pipes packet types cannot be of reference type",
[i]="pipes packet types cannot be of reference type",
[f]="pipes packet types cannot be of reference type",
[h]=k,
[g]=k,
[c]="pipes packet types cannot be of reference type",
[h]="pipes packet types cannot be of reference type",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support","[OpenCL] Pipe type support\n\nSummary:\nSupport for OpenCL 2.0 pipe type.\nThis is a bug-fix version for bader\'s patch reviews.llvm.org/D14441\n\n\nReviewers: pekka.jaaskelainen, Anastasia\n\nSubscribers: bader, Anastasia, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D15603\n\nllvm-svn: 257254"},
[j]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support","[OpenCL] Pipe type support\n\nSummary:\nSupport for OpenCL 2.0 pipe type.\nThis is a bug-fix version for bader\'s patch reviews.llvm.org/D14441\n\n\nReviewers: pekka.jaaskelainen, Anastasia\n\nSubscribers: bader, Anastasia, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D15603\n\nllvm-svn: 257254"},
[d]={{D,10746,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  for (const ParmVarDecl *Param : NewFD->parameters()) {\n    // ...\n    // OpenCL 2.0 pipe restrictions forbids pipe packet types to be non-value\n    // types.\n    if (getLangOpts().getOpenCLCompatibleVersion() >= 200) {\n      if (const PipeType *PipeTy = PT->getAs<PipeType>()) {\n        // ...\n        if (ElemTy->isReferenceType() || ElemTy->isPointerType()) {\n          Diag(Param->getTypeSpecStartLoc(), diag::err_reference_pipe_type);"}},
[i]={{D,10746,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  for (const ParmVarDecl *Param : NewFD->parameters()) {\n    // ...\n    // OpenCL 2.0 pipe restrictions forbids pipe packet types to be non-value\n    // types.\n    if (getLangOpts().getOpenCLCompatibleVersion() >= 200) {\n      if (const PipeType *PipeTy = PT->getAs<PipeType>()) {\n        // ...\n        if (ElemTy->isReferenceType() || ElemTy->isPointerType()) {\n          Diag(Param->getTypeSpecStartLoc(), diag::err_reference_pipe_type);"}},
[l]={
[l]={
["clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl"]={"clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl:22:17: error: pipes packet types cannot be of reference type"}
["clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl"]={"clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl:22:17: error: pipes packet types cannot be of reference type"}
Line 4,801: Line 4,802:
},
},
["err_reference_to_function_with_unsatisfied_constraints"]={
["err_reference_to_function_with_unsatisfied_constraints"]={
[b]={{nil,o,"err_reference_to_function_with_unsatisfied_constraints"}},
[d]={{nil,o,"err_reference_to_function_with_unsatisfied_constraints"}},
[j]={{nil,o,"invalid reference to function %0: constraints not satisfied"}},
[e]={{nil,o,"invalid reference to function %0: constraints not satisfied"}},
[i]={{nil,o,"invalid reference to function A: constraints not satisfied"}},
[f]={{nil,o,"invalid reference to function A: constraints not satisfied"}},
[h]=k,
[g]=k,
[c]="invalid reference to function (.*?)\\: constraints not satisfied",
[h]="invalid reference to function (.*?)\\: constraints not satisfied",
[f]=a,
[b]=a,
[e]={{nil,o,m}},
[c]={{nil,o,m}},
[g]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension.","Implement VectorType conditional operator GNU extension.\n\nGCC supports the conditional operator on VectorTypes that acts as a\n\'select\' in C++ mode. This patch implements the support. Types are\nconverted as closely to GCC\'s behavior as possible, though in a few\nplaces consistency with our existing vector type support was preferred.\n\nNote that this implementation is different from the OpenCL version in a\nnumber of ways, so it unfortunately required a different implementation.\n\nFirst, the SEMA rules and promotion rules are significantly different.\n\nSecondly, GCC implements COND[i] != 0 ? LHS[i] : RHS[i] (where i is in\nthe range 0- VectorSize, for each element).  In OpenCL, the condition is\nCOND[i] < 0 ? LHS[i]: RHS[i].\n\nIn the process of implementing this, it was also required to make the\nexpression COND ? LHS : RHS type dependent if COND is type dependent,\nsince the type is now dependent on the condition.  For example:\n\n    T ? 1 : 2;\n\nIs not typically type dependent, since the result can be deduced from\nthe operands.  HOWEVER, if T is a VectorType now, it could change this\nto a \'select\' (basically a swizzle with a non-constant mask) with the 1\nand 2 being promoted to vectors themselves.\n\nWhile this is a change, it is NOT a standards incompatible change. Based\non my (and D. Gregor\'s, at the time of writing the code) reading of the\nstandard, the expression is supposed to be type dependent if ANY\nsub-expression is type dependent.\n\nDifferential Revision: https://reviews.llvm.org/D71463"},
[j]={"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"},
[d]={{O,297,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  // ...\n  if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {\n    // ...\n    // [expr.prim.id]p4\n    //  A program that refers explicitly or implicitly to a function with a\n    //  trailing requires-clause whose constraint-expression is not satisfied,\n    //  other than to declare it, is ill-formed. [...]\n    //\n    // See if this is a function with constraints that need to be satisfied.\n    // Check this before deducing the return type, as it might instantiate the\n    // definition.\n    if (!SkipTrailingRequiresClause && FD->getTrailingRequiresClause()) {\n      // ...\n      if (!Satisfaction.IsSatisfied) {\n        Diag(Loc, diag::err_reference_to_function_with_unsatisfied_constraints) << D;"}},
[i]={{O,297,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  // ...\n  if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {\n    // ...\n    // [expr.prim.id]p4\n    //  A program that refers explicitly or implicitly to a function with a\n    //  trailing requires-clause whose constraint-expression is not satisfied,\n    //  other than to declare it, is ill-formed. [...]\n    //\n    // See if this is a function with constraints that need to be satisfied.\n    // Check this before deducing the return type, as it might instantiate the\n    // definition.\n    if (!SkipTrailingRequiresClause && FD->getTrailingRequiresClause()) {\n      // ...\n      if (!Satisfaction.IsSatisfied) {\n        Diag(Loc, diag::err_reference_to_function_with_unsatisfied_constraints) << D;"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp"]={"clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:10:11: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:11:29: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:12:31: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:13:20: error: invalid reference to function \'f\': constraints not satisfied"}
["clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp"]={"clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:10:11: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:11:29: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:12:31: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:13:20: error: invalid reference to function \'f\': constraints not satisfied"}
Line 4,815: Line 4,816:
},
},
["err_reference_to_local_in_enclosing_context"]={
["err_reference_to_local_in_enclosing_context"]={
[b]="err_reference_to_local_in_enclosing_context",
[d]="err_reference_to_local_in_enclosing_context",
[j]="reference to local %select{variable|binding}1 %0 declared in enclosing %select{%3|block literal|lambda expression|context}2",
[e]="reference to local %select{variable|binding}1 %0 declared in enclosing %select{%3|block literal|lambda expression|context}2",
[i]={{nil,nil,{"reference to local ",{"variable","binding"}," A declared in enclosing ",{"D","block literal","lambda expression","context"}}}},
[f]={{nil,nil,{"reference to local ",{"variable","binding"}," A declared in enclosing ",{"D","block literal","lambda expression","context"}}}},
[h]=k,
[g]=k,
[c]="reference to local (?:variable|binding) (.*?) declared in enclosing (?:(.*?)|block literal|lambda expression|context)",
[h]="reference to local (?:variable|binding) (.*?) declared in enclosing (?:(.*?)|block literal|lambda expression|context)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"1879f1069b60",1471228463,"Disable lambda-capture of decomposition declaration bindings for now, until CWG","Disable lambda-capture of decomposition declaration bindings for now, until CWG\nagrees on how they\'re supposed to work.\n\nllvm-svn: 278648"},
[j]={"1879f1069b60",1471228463,"Disable lambda-capture of decomposition declaration bindings for now, until CWG","Disable lambda-capture of decomposition declaration bindings for now, until CWG\nagrees on how they\'re supposed to work.\n\nllvm-svn: 278648"},
[d]={{O,19081,"void diagnoseUncapturableValueReferenceOrBinding(Sema &S, SourceLocation loc, ValueDecl *var) {\n  // ...\n  S.Diag(loc, diag::err_reference_to_local_in_enclosing_context) << var << ValueKind << ContextKind << VarDC;"}},
[i]={{O,19081,"void diagnoseUncapturableValueReferenceOrBinding(Sema &S, SourceLocation loc, ValueDecl *var) {\n  // ...\n  S.Diag(loc, diag::err_reference_to_local_in_enclosing_context) << var << ValueKind << ContextKind << VarDC;"}},
[l]={
[l]={
["clang/test/CXX/class/class.local/p1.cpp"]={"clang/test/CXX/class/class.local/p1.cpp:11:22: error: reference to local variable \'x\' declared in enclosing function \'f\'"}
["clang/test/CXX/class/class.local/p1.cpp"]={"clang/test/CXX/class/class.local/p1.cpp:11:22: error: reference to local variable \'x\' declared in enclosing function \'f\'"}
Line 4,829: Line 4,830:
},
},
["err_reference_to_void"]={
["err_reference_to_void"]={
[b]="err_reference_to_void",
[d]="err_reference_to_void",
[j]="cannot form a reference to \'void\'",
[e]="cannot form a reference to \'void\'",
[i]="cannot form a reference to \'void\'",
[f]="cannot form a reference to \'void\'",
[h]=k,
[g]=k,
[c]="cannot form a reference to \'void\'",
[h]="cannot form a reference to \'void\'",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{rb,2270,"/// Build a reference type.\n///\n/// \\param T The type to which we\'ll be building a reference.\n///\n/// \\param Loc The location of the entity whose type involves this\n/// reference type or, if there is no such entity, the location of the\n/// type that will have reference type.\n///\n/// \\param Entity The name of the entity that involves the reference\n/// type, if known.\n///\n/// \\returns A suitable reference type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildReferenceType(QualType T, bool SpelledAsLValue, SourceLocation Loc, DeclarationName Entity) {\n  // ...\n  // C++ [dcl.ref]p1:\n  //  A declarator that specifies the type \"reference to cv void\"\n  //  is ill-formed.\n  if (T->isVoidType()) {\n    Diag(Loc, diag::err_reference_to_void);"}},
[i]={{ob,2270,"/// Build a reference type.\n///\n/// \\param T The type to which we\'ll be building a reference.\n///\n/// \\param Loc The location of the entity whose type involves this\n/// reference type or, if there is no such entity, the location of the\n/// type that will have reference type.\n///\n/// \\param Entity The name of the entity that involves the reference\n/// type, if known.\n///\n/// \\returns A suitable reference type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildReferenceType(QualType T, bool SpelledAsLValue, SourceLocation Loc, DeclarationName Entity) {\n  // ...\n  // C++ [dcl.ref]p1:\n  //  A declarator that specifies the type \"reference to cv void\"\n  //  is ill-formed.\n  if (T->isVoidType()) {\n    Diag(Loc, diag::err_reference_to_void);"}},
[l]={
[l]={
["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:13:14: error: cannot form a reference to \'void\'"}
["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:13:14: error: cannot form a reference to \'void\'"}
Line 4,843: Line 4,844:
},
},
["err_reference_var_requires_init"]={
["err_reference_var_requires_init"]={
[b]="err_reference_var_requires_init",
[d]="err_reference_var_requires_init",
[j]="declaration of reference variable %0 requires an initializer",
[e]="declaration of reference variable %0 requires an initializer",
[i]="declaration of reference variable A requires an initializer",
[f]="declaration of reference variable A requires an initializer",
[h]=k,
[g]=k,
[c]="declaration of reference variable (.*?) requires an initializer",
[h]="declaration of reference variable (.*?) requires an initializer",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={s,1236199783,q,r},
[j]={q,1236199783,r,s},
[d]={{D,13842,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    // Provide a specific diagnostic for uninitialized variable\n    // definitions with reference type.\n    if (Type->isReferenceType()) {\n      Diag(Var->getLocation(), diag::err_reference_var_requires_init) << Var << SourceRange(Var->getLocation(), Var->getLocation());"}},
[i]={{D,13842,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    // Provide a specific diagnostic for uninitialized variable\n    // definitions with reference type.\n    if (Type->isReferenceType()) {\n      Diag(Var->getLocation(), diag::err_reference_var_requires_init) << Var << SourceRange(Var->getLocation(), Var->getLocation());"}},
[l]={
[l]={
["clang/test/SemaTemplate/instantiate-member-template.cpp"]={"clang/test/SemaTemplate/instantiate-member-template.cpp:72:21: error: declaration of reference variable \'value\' requires an initializer"}
["clang/test/SemaTemplate/instantiate-member-template.cpp"]={"clang/test/SemaTemplate/instantiate-member-template.cpp:72:21: error: declaration of reference variable \'value\' requires an initializer"}
Line 4,857: Line 4,858:
},
},
["err_reference_without_init"]={
["err_reference_without_init"]={
[b]="err_reference_without_init",
[d]="err_reference_without_init",
[j]="reference to type %0 requires an initializer",
[e]="reference to type %0 requires an initializer",
[i]="reference to type A requires an initializer",
[f]="reference to type A requires an initializer",
[h]=k,
[g]=k,
[c]="reference to type (.*?) requires an initializer",
[h]="reference to type (.*?) requires an initializer",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"7ae2d7758f3f",1264929171,"Rework base and member initialization in constructors, with several","Rework base and member initialization in constructors, with several\n(necessarily simultaneous) changes:\n\n  - CXXBaseOrMemberInitializer now contains only a single initializer\n    rather than a set of initialiation arguments + a constructor. The\n    single initializer covers all aspects of initialization, including\n    constructor calls as necessary but also cleanup of temporaries\n    created by the initializer (which we never handled\n    before!).\n\n  - Rework + simplify code generation for CXXBaseOrMemberInitializers,\n    since we can now just emit the initializer as an initializer.\n\n  - Switched base and member initialization over to the new\n    initialization code (InitializationSequence), so that it\n\n  - Improved diagnostics for the new initialization code when\n    initializing bases and members, to match the diagnostics produced\n    by the previous (special-purpose) code.\n\n  - Simplify the representation of type-checked constructor initializers in\n    templates; instead of keeping the fully-type-checked AST, which is\n    rather hard to undo at template instantiation time, throw away the\n    type-checked AST and store the raw expressions in the AST. This\n    simplifies instantiation, but loses a little but of information in\n    the AST.\n\n  - When type-checking implicit base or member initializers within a\n    dependent context, don\'t add the generated initializers into the\n    AST, because they\'ll look like they were explicit.\n\n  - Record in CXXConstructExpr when the constructor call is to\n  initialize a base class, so that CodeGen does not have to infer it\n  from context. This ensures that we call the right kind of\n  constructor.\n\nThere are also a few \"opportunity\" fixes here that were needed to not\nregress, for example:\n\n  - Diagnose default-initialization of a const-qualified class that\n    does not have a user-declared default constructor. We had this\n    diagnostic specifically for bases and members, but missed it for\n    variables. That\'s fixed now.\n\n  - When defining the implicit constructors, destructor, and\n    copy-assignment operator, set the CurContext to that constructor\n    when we\'re defining the body.\n\nllvm-svn: 94952"},
[j]={"7ae2d7758f3f",1264929171,"Rework base and member initialization in constructors, with several","Rework base and member initialization in constructors, with several\n(necessarily simultaneous) changes:\n\n  - CXXBaseOrMemberInitializer now contains only a single initializer\n    rather than a set of initialiation arguments + a constructor. The\n    single initializer covers all aspects of initialization, including\n    constructor calls as necessary but also cleanup of temporaries\n    created by the initializer (which we never handled\n    before!).\n\n  - Rework + simplify code generation for CXXBaseOrMemberInitializers,\n    since we can now just emit the initializer as an initializer.\n\n  - Switched base and member initialization over to the new\n    initialization code (InitializationSequence), so that it\n\n  - Improved diagnostics for the new initialization code when\n    initializing bases and members, to match the diagnostics produced\n    by the previous (special-purpose) code.\n\n  - Simplify the representation of type-checked constructor initializers in\n    templates; instead of keeping the fully-type-checked AST, which is\n    rather hard to undo at template instantiation time, throw away the\n    type-checked AST and store the raw expressions in the AST. This\n    simplifies instantiation, but loses a little but of information in\n    the AST.\n\n  - When type-checking implicit base or member initializers within a\n    dependent context, don\'t add the generated initializers into the\n    AST, because they\'ll look like they were explicit.\n\n  - Record in CXXConstructExpr when the constructor call is to\n  initialize a base class, so that CodeGen does not have to infer it\n  from context. This ensures that we call the right kind of\n  constructor.\n\nThere are also a few \"opportunity\" fixes here that were needed to not\nregress, for example:\n\n  - Diagnose default-initialization of a const-qualified class that\n    does not have a user-declared default constructor. We had this\n    diagnostic specifically for bases and members, but missed it for\n    variables. That\'s fixed now.\n\n  - When defining the implicit constructors, destructor, and\n    copy-assignment operator, set the CurContext to that constructor\n    when we\'re defining the body.\n\nllvm-svn: 94952"},
[d]={{P,9431,"/// Somewhere within T there is an uninitialized reference subobject.\n/// Dig it out and diagnose it.\nstatic bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, QualType T) {\n  if (T->isReferenceType()) {\n    S.Diag(Loc, diag::err_reference_without_init) << T.getNonReferenceType();"}},
[i]={{P,9431,"/// Somewhere within T there is an uninitialized reference subobject.\n/// Dig it out and diagnose it.\nstatic bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, QualType T) {\n  if (T->isReferenceType()) {\n    S.Diag(Loc, diag::err_reference_without_init) << T.getNonReferenceType();"}},
[l]={
[l]={
["clang/test/SemaObjCXX/property-synthesis-error.mm"]={"clang/test/SemaObjCXX/property-synthesis-error.mm:94:47: error: reference to type \'int\' requires an initializer"}
["clang/test/SemaObjCXX/property-synthesis-error.mm"]={"clang/test/SemaObjCXX/property-synthesis-error.mm:94:47: error: reference to type \'int\' requires an initializer"}
Line 4,871: Line 4,872:
},
},
["err_regparm_mismatch"]={
["err_regparm_mismatch"]={
[b]="err_regparm_mismatch",
[d]="err_regparm_mismatch",
[j]="function declared with regparm(%0) attribute was previously declared %plural{0:without the regparm|:with the regparm(%1)}1 attribute",
[e]="function declared with regparm(%0) attribute was previously declared %plural{0:without the regparm|:with the regparm(%1)}1 attribute",
[i]={{nil,nil,{"function declared with regparm(A) attribute was previously declared ",{"without the regparm","with the regparm(B)"}," attribute"}}},
[f]={{nil,nil,{"function declared with regparm(A) attribute was previously declared ",{"without the regparm","with the regparm(B)"}," attribute"}}},
[h]=k,
[g]=k,
[c]="function declared with regparm\\((.*?)\\) attribute was previously declared (?:without the regparm|with the regparm\\((.*?)\\)) attribute",
[h]="function declared with regparm\\((.*?)\\) attribute was previously declared (?:without the regparm|with the regparm\\((.*?)\\)) attribute",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"77e274fbc67d",1276896625,"Merge the \"regparm\" attribute from a previous declaration of a","Merge the \"regparm\" attribute from a previous declaration of a\nfunction to redeclarations of that function. Fixes PR7025.\n\nllvm-svn: 106317"},
[j]={"77e274fbc67d",1276896625,"Merge the \"regparm\" attribute from a previous declaration of a","Merge the \"regparm\" attribute from a previous declaration of a\nfunction to redeclarations of that function. Fixes PR7025.\n\nllvm-svn: 106317"},
[d]={{D,3831,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  // Merge regparm attribute.\n  if (OldTypeInfo.getHasRegParm() != NewTypeInfo.getHasRegParm() || OldTypeInfo.getRegParm() != NewTypeInfo.getRegParm()) {\n    if (NewTypeInfo.getHasRegParm()) {\n      Diag(New->getLocation(), diag::err_regparm_mismatch) << NewType->getRegParmType() << OldType->getRegParmType();"}},
[i]={{D,3831,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  // Merge regparm attribute.\n  if (OldTypeInfo.getHasRegParm() != NewTypeInfo.getHasRegParm() || OldTypeInfo.getRegParm() != NewTypeInfo.getRegParm()) {\n    if (NewTypeInfo.getHasRegParm()) {\n      Diag(New->getLocation(), diag::err_regparm_mismatch) << NewType->getRegParmType() << OldType->getRegParmType();"}},
[l]={
[l]={
["clang/test/Sema/attr-regparm.c"]={"clang/test/Sema/attr-regparm.c:11:34: error: function declared with regparm(2) attribute was previously declared with the regparm(3) attribute","clang/test/Sema/attr-regparm.c:14:26: error: function declared with regparm(2) attribute was previously declared with the regparm(3) attribute"}
["clang/test/Sema/attr-regparm.c"]={"clang/test/Sema/attr-regparm.c:11:34: error: function declared with regparm(2) attribute was previously declared with the regparm(3) attribute","clang/test/Sema/attr-regparm.c:14:26: error: function declared with regparm(2) attribute was previously declared with the regparm(3) attribute"}
Line 4,885: Line 4,886:
},
},
["err_relocatable_without_isysroot"]={
["err_relocatable_without_isysroot"]={
[b]="err_relocatable_without_isysroot",
[d]="err_relocatable_without_isysroot",
[j]="must specify system root with -isysroot when building a relocatable PCH file",
[e]="must specify system root with -isysroot when building a relocatable PCH file",
[i]="must specify system root with -isysroot when building a relocatable PCH file",
[f]="must specify system root with -isysroot when building a relocatable PCH file",
[h]=k,
[g]=k,
[c]="must specify system root with \\-isysroot when building a relocatable PCH file",
[h]="must specify system root with \\-isysroot when building a relocatable PCH file",
[f]=a,
[b]=a,
[e]=a,
[c]=S,
[g]={"ea68af43e80d",1282067738,"Fix a typo in a diag name.","Fix a typo in a diag name.\n\nllvm-svn: 111257"},
[j]={"ea68af43e80d",1282067738,"Fix a typo in a diag name.","Fix a typo in a diag name.\n\nllvm-svn: 111257"},
[d]={{"clang/lib/Frontend/FrontendActions.cpp",156,"bool GeneratePCHAction::ComputeASTConsumerArguments(CompilerInstance &CI, std::string &Sysroot) {\n  // ...\n  if (CI.getFrontendOpts().RelocatablePCH && Sysroot.empty()) {\n    CI.getDiagnostics().Report(diag::err_relocatable_without_isysroot);"}}
[i]={{"clang/lib/Frontend/FrontendActions.cpp",156,"bool GeneratePCHAction::ComputeASTConsumerArguments(CompilerInstance &CI, std::string &Sysroot) {\n  // ...\n  if (CI.getFrontendOpts().RelocatablePCH && Sysroot.empty()) {\n    CI.getDiagnostics().Report(diag::err_relocatable_without_isysroot);"}}
},
},
["err_repeat_attribute"]={
["err_repeat_attribute"]={
[b]="err_repeat_attribute",
[d]="err_repeat_attribute",
[j]="%0 attribute cannot be repeated",
[e]="%0 attribute cannot be repeated",
[i]="A attribute cannot be repeated",
[f]="A attribute cannot be repeated",
[h]=k,
[g]=k,
[c]="(.*?) attribute cannot be repeated",
[h]="(.*?) attribute cannot be repeated",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"54a025488774",1259122827,"Parse C++ member check attributes - base_check, hiding, and override.","Parse C++ member check attributes - base_check, hiding, and override.\nThe attributes are currently ignored.\n\nllvm-svn: 89837"},
[j]={"54a025488774",1259122827,"Parse C++ member check attributes - base_check, hiding, and override.","Parse C++ member check attributes - base_check, hiding, and override.\nThe attributes are currently ignored.\n\nllvm-svn: 89837"},
[d]={{dc,2287,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (VecReturnAttr *A = D->getAttr<VecReturnAttr>()) {\n    S.Diag(AL.getLoc(), diag::err_repeat_attribute) << A;"}},
[i]={{dc,2287,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (VecReturnAttr *A = D->getAttr<VecReturnAttr>()) {\n    S.Diag(AL.getLoc(), diag::err_repeat_attribute) << A;"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx-altivec.cpp"]={"clang/test/SemaCXX/cxx-altivec.cpp:5:45: error: \'vecreturn\' attribute cannot be repeated"}
["clang/test/SemaCXX/cxx-altivec.cpp"]={"clang/test/SemaCXX/cxx-altivec.cpp:5:45: error: \'vecreturn\' attribute cannot be repeated"}
Line 4,910: Line 4,911:
},
},
["err_require_constant_init_failed"]={
["err_require_constant_init_failed"]={
[b]="err_require_constant_init_failed",
[d]="err_require_constant_init_failed",
[j]="variable does not have a constant initializer",
[e]="variable does not have a constant initializer",
[i]="variable does not have a constant initializer",
[f]="variable does not have a constant initializer",
[h]=k,
[g]=k,
[c]="variable does not have a constant initializer",
[h]="variable does not have a constant initializer",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"92f8935e63f0",1472840729,"Implement __attribute__((require_constant_initialization)) for safe static initialization.","Implement __attribute__((require_constant_initialization)) for safe static initialization.\n\nSummary:\nThis attribute specifies expectations about the initialization of static and\nthread local variables. Specifically that the variable has a\n[constant initializer](http://en.cppreference.com/w/cpp/language/constant_initialization)\naccording to the rules of [basic.start.static]. Failure to meet this expectation\nwill result in an error.\n\nStatic objects with constant initializers avoid hard-to-find bugs caused by\nthe indeterminate order of dynamic initialization. They can also be safely\nused by other static constructors across translation units.\n\nThis attribute acts as a compile time assertion that the requirements\nfor constant initialization have been met. Since these requirements change\nbetween dialects and have subtle pitfalls it\'s important to fail fast instead\nof silently falling back on dynamic initialization.\n\n```c++\n  // -std=c++14\n  #define SAFE_STATIC __attribute__((require_constant_initialization)) static\n  struct T {\n    constexpr T(int) {}\n    ~T();\n  };\n  SAFE_STATIC T x = {42}; // OK.\n  SAFE_STATIC T y = 42; // error: variable does not have a constant initializer\n  // copy initialization is not a constant expression on a non-literal type.\n```\nThis attribute can only be applied to objects with static or thread-local storage\nduration.\n\nReviewers: majnemer, rsmith, aaron.ballman\n\nSubscribers: jroelofs, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D23385\n\nllvm-svn: 280516"},
[j]={"92f8935e63f0",1472840729,"Implement __attribute__((require_constant_initialization)) for safe static initialization.","Implement __attribute__((require_constant_initialization)) for safe static initialization.\n\nSummary:\nThis attribute specifies expectations about the initialization of static and\nthread local variables. Specifically that the variable has a\n[constant initializer](http://en.cppreference.com/w/cpp/language/constant_initialization)\naccording to the rules of [basic.start.static]. Failure to meet this expectation\nwill result in an error.\n\nStatic objects with constant initializers avoid hard-to-find bugs caused by\nthe indeterminate order of dynamic initialization. They can also be safely\nused by other static constructors across translation units.\n\nThis attribute acts as a compile time assertion that the requirements\nfor constant initialization have been met. Since these requirements change\nbetween dialects and have subtle pitfalls it\'s important to fail fast instead\nof silently falling back on dynamic initialization.\n\n```c++\n  // -std=c++14\n  #define SAFE_STATIC __attribute__((require_constant_initialization)) static\n  struct T {\n    constexpr T(int) {}\n    ~T();\n  };\n  SAFE_STATIC T x = {42}; // OK.\n  SAFE_STATIC T y = 42; // error: variable does not have a constant initializer\n  // copy initialization is not a constant expression on a non-literal type.\n```\nThis attribute can only be applied to objects with static or thread-local storage\nduration.\n\nReviewers: majnemer, rsmith, aaron.ballman\n\nSubscribers: jroelofs, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D23385\n\nllvm-svn: 280516"},
[d]={{D,14227,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // ...\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    // ...\n    if (HasConstInit) {\n    // ...\n    } else if (var->isConstexpr()) {\n    // ...\n    } else if (GlobalStorage && var->hasAttr<ConstInitAttr>()) {\n      // ...\n      Diag(var->getLocation(), diag::err_require_constant_init_failed) << Init->getSourceRange();"}},
[i]={{D,14227,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // ...\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    // ...\n    if (HasConstInit) {\n    // ...\n    } else if (var->isConstexpr()) {\n    // ...\n    } else if (GlobalStorage && var->hasAttr<ConstInitAttr>()) {\n      // ...\n      Diag(var->getLocation(), diag::err_require_constant_init_failed) << Init->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp:6:23: error: variable does not have a constant initializer"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp:6:23: error: variable does not have a constant initializer"}
Line 4,924: Line 4,925:
},
},
["err_requires_clause_inside_parens"]={
["err_requires_clause_inside_parens"]={
[b]={{nil,o,"err_requires_clause_inside_parens"}},
[d]={{nil,o,"err_requires_clause_inside_parens"}},
[j]={{nil,o,"trailing requires clause should be placed outside parentheses"}},
[e]={{nil,o,"trailing requires clause should be placed outside parentheses"}},
[i]={{nil,o,"trailing requires clause should be placed outside parentheses"}},
[f]={{nil,o,"trailing requires clause should be placed outside parentheses"}},
[h]=k,
[g]=k,
[c]="trailing requires clause should be placed outside parentheses",
[h]="trailing requires clause should be placed outside parentheses",
[f]=a,
[b]=a,
[e]={{nil,o,y}},
[c]={{nil,o,y}},
[g]={gb,1570627358,hb,db},
[j]={lb,1570627358,kb,db},
[d]={{Kb,6714,"PastIdentifier:\n  // ...\n  while (true) {\n    if (Tok.is(tok::l_paren)) {\n    // ...\n    } else if (Tok.is(tok::l_square)) {\n    // ...\n    } else if (Tok.isRegularKeywordAttribute()) {\n    // ...\n    } else if (Tok.is(tok::kw_requires) && D.hasGroupingParens()) {\n      // ...\n      Diag(Tok, diag::err_requires_clause_inside_parens);"}},
[i]={{yb,6714,"PastIdentifier:\n  // ...\n  while (true) {\n    if (Tok.is(tok::l_paren)) {\n    // ...\n    } else if (Tok.is(tok::l_square)) {\n    // ...\n    } else if (Tok.isRegularKeywordAttribute()) {\n    // ...\n    } else if (Tok.is(tok::kw_requires) && D.hasGroupingParens()) {\n      // ...\n      Diag(Tok, diag::err_requires_clause_inside_parens);"}},
[l]={
[l]={
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:18:21: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:43:12: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:44:12: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:49:30: error: trailing requires clause should be placed outside parentheses"}
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:18:21: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:43:12: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:44:12: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:49:30: error: trailing requires clause should be placed outside parentheses"}
Line 4,938: Line 4,939:
},
},
["err_requires_clause_must_appear_after_trailing_return"]={
["err_requires_clause_must_appear_after_trailing_return"]={
[b]={{nil,o,"err_requires_clause_must_appear_after_trailing_return"}},
[d]={{nil,o,"err_requires_clause_must_appear_after_trailing_return"}},
[j]={{nil,o,"trailing return type must appear before trailing requires clause"}},
[e]={{nil,o,"trailing return type must appear before trailing requires clause"}},
[i]={{nil,o,"trailing return type must appear before trailing requires clause"}},
[f]={{nil,o,"trailing return type must appear before trailing requires clause"}},
[h]=k,
[g]=k,
[c]="trailing return type must appear before trailing requires clause",
[h]="trailing return type must appear before trailing requires clause",
[f]=a,
[b]=a,
[e]={{nil,o,y}},
[c]={{nil,o,y}},
[g]={gb,1570627358,hb,db},
[j]={lb,1570627358,kb,db},
[d]={{kc,4142,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n  // ...\n  // Did the user swap the trailing return type and requires clause?\n  if (D.isFunctionDeclarator() && Tok.is(tok::arrow) && D.getDeclSpec().getTypeSpecType() == TST_auto) {\n    // ...\n    if (!TrailingReturnType.isInvalid()) {\n      Diag(ArrowLoc, diag::err_requires_clause_must_appear_after_trailing_return) << Range;"}},
[i]={{lc,4142,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n  // ...\n  // Did the user swap the trailing return type and requires clause?\n  if (D.isFunctionDeclarator() && Tok.is(tok::arrow) && D.getDeclSpec().getTypeSpecType() == TST_auto) {\n    // ...\n    if (!TrailingReturnType.isInvalid()) {\n      Diag(ArrowLoc, diag::err_requires_clause_must_appear_after_trailing_return) << Range;"}},
[l]={
[l]={
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:15:40: error: trailing return type must appear before trailing requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:37:30: error: trailing return type must appear before trailing requires clause"}
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:15:40: error: trailing return type must appear before trailing requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:37:30: error: trailing return type must appear before trailing requires clause"}
Line 4,952: Line 4,953:
},
},
["err_requires_clause_on_declarator_not_declaring_a_function"]={
["err_requires_clause_on_declarator_not_declaring_a_function"]={
[b]={{nil,o,"err_requires_clause_on_declarator_not_declaring_a_function"}},
[d]={{nil,o,"err_requires_clause_on_declarator_not_declaring_a_function"}},
[j]={{nil,o,"trailing requires clause can only be used when declaring a function"}},
[e]={{nil,o,"trailing requires clause can only be used when declaring a function"}},
[i]={{nil,o,"trailing requires clause can only be used when declaring a function"}},
[f]={{nil,o,"trailing requires clause can only be used when declaring a function"}},
[h]=k,
[g]=k,
[c]="trailing requires clause can only be used when declaring a function",
[h]="trailing requires clause can only be used when declaring a function",
[f]=a,
[b]=a,
[e]={{nil,o,y}},
[c]={{nil,o,y}},
[g]={gb,1570627358,hb,db},
[j]={lb,1570627358,kb,db},
[d]={{Kb,7375,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  // ...\n  do {\n    // ...\n    if (Tok.is(tok::kw_requires)) {\n      // ...\n      Diag(Tok, diag::err_requires_clause_on_declarator_not_declaring_a_function);"},{kc,4122,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n  // ...\n  if (!D.isDeclarationOfFunction()) {\n    Diag(RequiresKWLoc, diag::err_requires_clause_on_declarator_not_declaring_a_function);"}},
[i]={{yb,7375,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  // ...\n  do {\n    // ...\n    if (Tok.is(tok::kw_requires)) {\n      // ...\n      Diag(Tok, diag::err_requires_clause_on_declarator_not_declaring_a_function);"},{lc,4122,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n  // ...\n  if (!D.isDeclarationOfFunction()) {\n    Diag(RequiresKWLoc, diag::err_requires_clause_on_declarator_not_declaring_a_function);"}},
[l]={
[l]={
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:46:14: error: trailing requires clause can only be used when declaring a function","clang/test/CXX/dcl/dcl.decl/p3.cpp:47:25: error: trailing requires clause can only be used when declaring a function","clang/test/CXX/dcl/dcl.decl/p3.cpp:48:30: error: trailing requires clause can only be used when declaring a function"}
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:46:14: error: trailing requires clause can only be used when declaring a function","clang/test/CXX/dcl/dcl.decl/p3.cpp:47:25: error: trailing requires clause can only be used when declaring a function","clang/test/CXX/dcl/dcl.decl/p3.cpp:48:30: error: trailing requires clause can only be used when declaring a function"}
Line 4,966: Line 4,967:
},
},
["err_requires_expr_expected_type_constraint"]={
["err_requires_expr_expected_type_constraint"]={
[b]={{nil,o,"err_requires_expr_expected_type_constraint"}},
[d]={{nil,o,"err_requires_expr_expected_type_constraint"}},
[j]={{nil,o,"expected concept name with optional arguments"}},
[e]={{nil,o,"expected concept name with optional arguments"}},
[i]={{nil,o,"expected concept name with optional arguments"}},
[f]={{nil,o,"expected concept name with optional arguments"}},
[h]=k,
[g]=k,
[c]="expected concept name with optional arguments",
[h]="expected concept name with optional arguments",
[f]=a,
[b]=a,
[e]={{nil,o,y}},
[c]={{nil,o,y}},
[g]={gb,1570627358,hb,db},
[j]={lb,1570627358,kb,db},
[d]={{Ob,3591,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::r_brace)) {\n  // ...\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      // ...\n      case tok::l_brace: {\n        // ...\n        if (!isTypeConstraintAnnotation()) {\n          Diag(Tok, diag::err_requires_expr_expected_type_constraint);"}},
[i]={{Nb,3591,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::r_brace)) {\n  // ...\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      // ...\n      case tok::l_brace: {\n        // ...\n        if (!isTypeConstraintAnnotation()) {\n          Diag(Tok, diag::err_requires_expr_expected_type_constraint);"}},
[l]={
[l]={
[Pb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:97:38: error: expected concept name with optional arguments"}
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:97:38: error: expected concept name with optional arguments"}
}
}
},
},
["err_requires_expr_in_simple_requirement"]={
["err_requires_expr_in_simple_requirement"]={
[b]={{nil,F,"err_requires_expr_in_simple_requirement"}},
[d]={{nil,F,"err_requires_expr_in_simple_requirement"}},
[j]={{nil,F,"requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)"}},
[e]={{nil,F,"requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)"}},
[i]={{nil,F,"requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)"}},
[f]={{nil,F,"requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)"}},
[h]=k,
[g]=k,
[c]="requires expression in requirement body; did you intend to place it in a nested requirement\\? \\(add another \'requires\' before the expression\\)",
[h]="requires expression in requirement body; did you intend to place it in a nested requirement\\? \\(add another \'requires\' before the expression\\)",
[f]=a,
[b]=a,
[e]={{nil,F,y}},
[c]={{nil,F,y}},
[g]={"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"},
[j]={"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"},
[d]={{Ob,3736,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::r_brace)) {\n  // ...\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      // ...\n      default: {\n        // ...\n        if (!Expression.isInvalid() && PossibleRequiresExprInSimpleRequirement)\n          Diag(StartLoc, diag::err_requires_expr_in_simple_requirement) << FixItHint::CreateInsertion(StartLoc, \"requires\");"}},
[i]={{Nb,3736,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::r_brace)) {\n  // ...\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      // ...\n      default: {\n        // ...\n        if (!Expression.isInvalid() && PossibleRequiresExprInSimpleRequirement)\n          Diag(StartLoc, diag::err_requires_expr_in_simple_requirement) << FixItHint::CreateInsertion(StartLoc, \"requires\");"}},
[l]={
[l]={
[Pb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:137:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:140:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:143:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)"}
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:137:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:140:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:143:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)"}
}
}
},
},
["err_requires_expr_local_parameter_default_argument"]={
["err_requires_expr_local_parameter_default_argument"]={
[b]={{nil,o,"err_requires_expr_local_parameter_default_argument"}},
[d]={{nil,o,"err_requires_expr_local_parameter_default_argument"}},
[j]={{nil,o,"default arguments not allowed for parameters of a requires expression"}},
[e]={{nil,o,"default arguments not allowed for parameters of a requires expression"}},
[i]={{nil,o,"default arguments not allowed for parameters of a requires expression"}},
[f]={{nil,o,"default arguments not allowed for parameters of a requires expression"}},
[h]=k,
[g]=k,
[c]="default arguments not allowed for parameters of a requires expression",
[h]="default arguments not allowed for parameters of a requires expression",
[f]=a,
[b]=a,
[e]={{nil,o,m}},
[c]={{nil,o,m}},
[g]={"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"},
[j]={"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"},
[d]={{Q,9162,"RequiresExprBodyDecl *Sema::ActOnStartRequiresExpr(SourceLocation RequiresKWLoc, ArrayRef<ParmVarDecl *> LocalParameters, Scope *BodyScope) {\n  // ...\n  for (ParmVarDecl *Param : LocalParameters) {\n    if (Param->hasDefaultArg())\n      // ...\n      Diag(Param->getDefaultArgRange().getBegin(), diag::err_requires_expr_local_parameter_default_argument);"}},
[i]={{Q,9162,"RequiresExprBodyDecl *Sema::ActOnStartRequiresExpr(SourceLocation RequiresKWLoc, ArrayRef<ParmVarDecl *> LocalParameters, Scope *BodyScope) {\n  // ...\n  for (ParmVarDecl *Param : LocalParameters) {\n    if (Param->hasDefaultArg())\n      // ...\n      Diag(Param->getDefaultArgRange().getBegin(), diag::err_requires_expr_local_parameter_default_argument);"}},
[l]={
[l]={
[Pb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:37:30: error: default arguments not allowed for parameters of a requires expression"}
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:37:30: error: default arguments not allowed for parameters of a requires expression"}
}
}
},
},
["err_requires_expr_missing_arrow"]={
["err_requires_expr_missing_arrow"]={
[b]={{nil,o,"err_requires_expr_missing_arrow"}},
[d]={{nil,o,"err_requires_expr_missing_arrow"}},
[j]={{nil,o,"expected \'->\' before expression type requirement"}},
[e]={{nil,o,"expected \'->\' before expression type requirement"}},
[i]={{nil,o,"expected \'->\' before expression type requirement"}},
[f]={{nil,o,"expected \'->\' before expression type requirement"}},
[h]=k,
[g]=k,
[c]="expected \'\\-\\>\' before expression type requirement",
[h]="expected \'\\-\\>\' before expression type requirement",
[f]=a,
[b]=a,
[e]={{nil,o,y}},
[c]={{nil,o,y}},
[g]={gb,1570627358,hb,db},
[j]={lb,1570627358,kb,db},
[d]={{Ob,3583,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::r_brace)) {\n  // ...\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      // ...\n      case tok::l_brace: {\n        // ...\n        if (!TryConsumeToken(tok::arrow))\n          // ...\n          Diag(Tok, diag::err_requires_expr_missing_arrow) << FixItHint::CreateInsertion(Tok.getLocation(), \"->\");"}},
[i]={{Nb,3583,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::r_brace)) {\n  // ...\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      // ...\n      case tok::l_brace: {\n        // ...\n        if (!TryConsumeToken(tok::arrow))\n          // ...\n          Diag(Tok, diag::err_requires_expr_missing_arrow) << FixItHint::CreateInsertion(Tok.getLocation(), \"->\");"}},
[l]={
[l]={
[Pb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:97:38: error: expected \'->\' before expression type requirement","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:107:38: error: expected \'->\' before expression type requirement"}
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:97:38: error: expected \'->\' before expression type requirement","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:107:38: error: expected \'->\' before expression type requirement"}
}
}
},
},
["err_requires_expr_parameter_list_ellipsis"]={
["err_requires_expr_parameter_list_ellipsis"]={
[b]={{nil,o,"err_requires_expr_parameter_list_ellipsis"}},
[d]={{nil,o,"err_requires_expr_parameter_list_ellipsis"}},
[j]={{nil,o,"varargs not allowed in requires expression"}},
[e]={{nil,o,"varargs not allowed in requires expression"}},
[i]={{nil,o,"varargs not allowed in requires expression"}},
[f]={{nil,o,"varargs not allowed in requires expression"}},
[h]=k,
[g]=k,
[c]="varargs not allowed in requires expression",
[h]="varargs not allowed in requires expression",
[f]=a,
[b]=a,
[e]={{nil,o,y}},
[c]={{nil,o,y}},
[g]={gb,1570627358,hb,db},
[j]={lb,1570627358,kb,db},
[d]={{Ob,3511,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::l_paren)) {\n    // ...\n    if (!Tok.is(tok::r_paren)) {\n      // ...\n      if (EllipsisLoc.isValid())\n        Diag(EllipsisLoc, diag::err_requires_expr_parameter_list_ellipsis);"}},
[i]={{Nb,3511,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::l_paren)) {\n    // ...\n    if (!Tok.is(tok::r_paren)) {\n      // ...\n      if (EllipsisLoc.isValid())\n        Diag(EllipsisLoc, diag::err_requires_expr_parameter_list_ellipsis);"}},
[l]={
[l]={
[Pb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:8:28: error: varargs not allowed in requires expression"}
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:8:28: error: varargs not allowed in requires expression"}
}
}
},
},
["err_requires_expr_parameter_referenced_in_evaluated_context"]={
["err_requires_expr_parameter_referenced_in_evaluated_context"]={
[b]={{nil,o,"err_requires_expr_parameter_referenced_in_evaluated_context"}},
[d]={{nil,o,"err_requires_expr_parameter_referenced_in_evaluated_context"}},
[j]={{nil,o,"constraint variable %0 cannot be used in an evaluated context"}},
[e]={{nil,o,"constraint variable %0 cannot be used in an evaluated context"}},
[i]={{nil,o,"constraint variable A cannot be used in an evaluated context"}},
[f]={{nil,o,"constraint variable A cannot be used in an evaluated context"}},
[h]=k,
[g]=k,
[c]="constraint variable (.*?) cannot be used in an evaluated context",
[h]="constraint variable (.*?) cannot be used in an evaluated context",
[f]=a,
[b]=a,
[e]={{nil,o,m}},
[c]={{nil,o,m}},
[g]={"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"},
[j]={"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"},
[d]={{O,404,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  // ...\n  if (isa<ParmVarDecl>(D) && isa<RequiresExprBodyDecl>(D->getDeclContext()) && !isUnevaluatedContext()) {\n    // ...\n    Diag(Loc, diag::err_requires_expr_parameter_referenced_in_evaluated_context) << D;"}},
[i]={{O,404,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  // ...\n  if (isa<ParmVarDecl>(D) && isa<RequiresExprBodyDecl>(D->getDeclContext()) && !isUnevaluatedContext()) {\n    // ...\n    Diag(Loc, diag::err_requires_expr_parameter_referenced_in_evaluated_context) << D;"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp:104:65: error: constraint variable \'x\' cannot be used in an evaluated context"}
["clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp:104:65: error: constraint variable \'x\' cannot be used in an evaluated context"}
Line 5,050: Line 5,051:
},
},
["err_requires_expr_simple_requirement_noexcept"]={
["err_requires_expr_simple_requirement_noexcept"]={
[b]={{nil,o,"err_requires_expr_simple_requirement_noexcept"}},
[d]={{nil,o,"err_requires_expr_simple_requirement_noexcept"}},
[j]={{nil,o,"\'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)"}},
[e]={{nil,o,"\'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)"}},
[i]={{nil,o,"\'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)"}},
[f]={{nil,o,"\'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)"}},
[h]=k,
[g]=k,
[c]="\'noexcept\' can only be used in a compound requirement \\(with \'\\{\' \'\\}\' around the expression\\)",
[h]="\'noexcept\' can only be used in a compound requirement \\(with \'\\{\' \'\\}\' around the expression\\)",
[f]=a,
[b]=a,
[e]={{nil,o,y}},
[c]={{nil,o,y}},
[g]={gb,1570627358,hb,db},
[j]={lb,1570627358,kb,db},
[d]={{Ob,3746,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::r_brace)) {\n  // ...\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      // ...\n      default: {\n        // ...\n        // User may have tried to put some compound requirement stuff here\n        if (Tok.is(tok::kw_noexcept)) {\n          Diag(Tok, diag::err_requires_expr_simple_requirement_noexcept) << FixItHint::CreateInsertion(StartLoc, \"{\") << FixItHint::CreateInsertion(Tok.getLocation(), \"}\");"}},
[i]={{Nb,3746,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::r_brace)) {\n  // ...\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      // ...\n      default: {\n        // ...\n        // User may have tried to put some compound requirement stuff here\n        if (Tok.is(tok::kw_noexcept)) {\n          Diag(Tok, diag::err_requires_expr_simple_requirement_noexcept) << FixItHint::CreateInsertion(StartLoc, \"{\") << FixItHint::CreateInsertion(Tok.getLocation(), \"}\");"}},
[l]={
[l]={
[Pb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:122:25: error: \'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)"}
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:122:25: error: \'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)"}
}
}
},
},
["err_restricted_superclass_mismatch"]={
["err_restricted_superclass_mismatch"]={
[b]="err_restricted_superclass_mismatch",
[d]="err_restricted_superclass_mismatch",
[j]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[e]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[i]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[f]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[h]=k,
[g]=k,
[c]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[h]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"a8c44ba2c01e",1477650310,"[Objective-C] Add objc_subclassing_restricted attribute","[Objective-C] Add objc_subclassing_restricted attribute\n\nThis patch adds an objc_subclassing_restricted attribute into clang. This\nattribute acts similarly to \'final\' - Objective-C classes with this attribute\ncan\'t be subclassed. However, @interface declarations that have\nobjc_subclassing_restricted but don\'t have @implementation are allowed to\ninherit other @interface declarations with objc_subclassing_restricted. This is\nneeded to describe the Swift class hierarchy in clang while making sure that\nthe Objective-C classes cannot subclass the Swift classes.\n\nThis attribute is already implemented in a fork of clang that\'s used for Swift\n(https://github.com/apple/swift-clang) and this patch moves that code to the\nupstream clang repository.\n\nrdar://28937548\n\nDifferential Revision: https://reviews.llvm.org/D25993\n\nllvm-svn: 285391"},
[j]={"a8c44ba2c01e",1477650310,"[Objective-C] Add objc_subclassing_restricted attribute","[Objective-C] Add objc_subclassing_restricted attribute\n\nThis patch adds an objc_subclassing_restricted attribute into clang. This\nattribute acts similarly to \'final\' - Objective-C classes with this attribute\ncan\'t be subclassed. However, @interface declarations that have\nobjc_subclassing_restricted but don\'t have @implementation are allowed to\ninherit other @interface declarations with objc_subclassing_restricted. This is\nneeded to describe the Swift class hierarchy in clang while making sure that\nthe Objective-C classes cannot subclass the Swift classes.\n\nThis attribute is already implemented in a fork of clang that\'s used for Swift\n(https://github.com/apple/swift-clang) and this patch moves that code to the\nupstream clang repository.\n\nrdar://28937548\n\nDifferential Revision: https://reviews.llvm.org/D25993\n\nllvm-svn: 285391"},
[d]={{Z,4165,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    // ...\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      // ...\n      if (const ObjCInterfaceDecl *Super = IDecl->getSuperClass()) {\n        // An interface can subclass another interface with a\n        // objc_subclassing_restricted attribute when it has that attribute as\n        // well (because of interfaces imported from Swift). Therefore we have\n        // to check if we can subclass in the implementation as well.\n        if (IDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n          Diag(IC->getLocation(), diag::err_restricted_superclass_mismatch);"},{Z,4197,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n  // ...\n  } else if (ObjCCategoryImplDecl *CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassDecl)) {\n  // ...\n  } else if (const auto *IntfDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) {\n    if (const ObjCInterfaceDecl *Super = IntfDecl->getSuperClass()) {\n      if (!IntfDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n        Diag(IntfDecl->getLocation(), diag::err_restricted_superclass_mismatch);"}},
[i]={{bb,4165,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    // ...\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      // ...\n      if (const ObjCInterfaceDecl *Super = IDecl->getSuperClass()) {\n        // An interface can subclass another interface with a\n        // objc_subclassing_restricted attribute when it has that attribute as\n        // well (because of interfaces imported from Swift). Therefore we have\n        // to check if we can subclass in the implementation as well.\n        if (IDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n          Diag(IC->getLocation(), diag::err_restricted_superclass_mismatch);"},{bb,4197,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n  // ...\n  } else if (ObjCCategoryImplDecl *CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassDecl)) {\n  // ...\n  } else if (const auto *IntfDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) {\n    if (const ObjCInterfaceDecl *Super = IntfDecl->getSuperClass()) {\n      if (!IntfDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n        Diag(IntfDecl->getLocation(), diag::err_restricted_superclass_mismatch);"}},
[l]={
[l]={
["clang/test/SemaObjC/subclassing-restricted-attr.m"]={"clang/test/SemaObjC/subclassing-restricted-attr.m:14:12: error: cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute","clang/test/SemaObjC/subclassing-restricted-attr.m:35:17: error: cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute"}
["clang/test/SemaObjC/subclassing-restricted-attr.m"]={"clang/test/SemaObjC/subclassing-restricted-attr.m:14:12: error: cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute","clang/test/SemaObjC/subclassing-restricted-attr.m:35:17: error: cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute"}
Line 5,078: Line 5,079:
},
},
["err_ret_local_block"]={
["err_ret_local_block"]={
[b]="err_ret_local_block",
[d]="err_ret_local_block",
[j]="returning block that lives on the local stack",
[e]="returning block that lives on the local stack",
[i]="returning block that lives on the local stack",
[f]="returning block that lives on the local stack",
[h]=k,
[g]=k,
[c]="returning block that lives on the local stack",
[h]="returning block that lives on the local stack",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{P,8262,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_Return:\n    case LK_StmtExprResult:\n      if (auto *DRE = dyn_cast<DeclRefExpr>(L)) {\n      // ...\n      } else if (isa<BlockExpr>(L)) {\n        Diag(DiagLoc, diag::err_ret_local_block) << DiagRange;"}},
[i]={{P,8262,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_Return:\n    case LK_StmtExprResult:\n      if (auto *DRE = dyn_cast<DeclRefExpr>(L)) {\n      // ...\n      } else if (isa<BlockExpr>(L)) {\n        Diag(DiagLoc, diag::err_ret_local_block) << DiagRange;"}},
[l]={
[l]={
["clang/test/Analysis/stack-block-returned.cpp"]={"clang/test/Analysis/stack-block-returned.cpp:8:10: error: returning block that lives on the local stack"}
["clang/test/Analysis/stack-block-returned.cpp"]={"clang/test/Analysis/stack-block-returned.cpp:8:10: error: returning block that lives on the local stack"}
Line 5,092: Line 5,093:
},
},
["err_rethrow_used_outside_catch"]={
["err_rethrow_used_outside_catch"]={
[b]="err_rethrow_used_outside_catch",
[d]="err_rethrow_used_outside_catch",
[j]="@throw (rethrow) used outside of a @catch block",
[e]="@throw (rethrow) used outside of a @catch block",
[i]="@throw (rethrow) used outside of a @catch block",
[f]="@throw (rethrow) used outside of a @catch block",
[h]=k,
[g]=k,
[c]="@throw \\(rethrow\\) used outside of a @catch block",
[h]="@throw \\(rethrow\\) used outside of a @catch block",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={bb,1480718311,eb,fb},
[j]={eb,1480718311,cb,fb},
[d]={{Eb,4292,"StmtResult Sema::ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw, Scope *CurScope) {\n  // ...\n  if (!Throw) {\n    // ...\n    if (!AtCatchParent)\n      return StmtError(Diag(AtLoc, diag::err_rethrow_used_outside_catch));"}},
[i]={{Kb,4292,"StmtResult Sema::ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw, Scope *CurScope) {\n  // ...\n  if (!Throw) {\n    // ...\n    if (!AtCatchParent)\n      return StmtError(Diag(AtLoc, diag::err_rethrow_used_outside_catch));"}},
[l]={
[l]={
["clang/test/SemaObjC/try-catch.m"]={"clang/test/SemaObjC/try-catch.m:51:3: error: @throw (rethrow) used outside of a @catch block"}
["clang/test/SemaObjC/try-catch.m"]={"clang/test/SemaObjC/try-catch.m:51:3: error: @throw (rethrow) used outside of a @catch block"}
Line 5,106: Line 5,107:
},
},
["err_return_block_has_expr"]={
["err_return_block_has_expr"]={
[b]="err_return_block_has_expr",
[d]="err_return_block_has_expr",
[j]="void block should not return a value",
[e]="void block should not return a value",
[i]="void block should not return a value",
[f]="void block should not return a value",
[h]=k,
[g]=k,
[c]="void block should not return a value",
[h]="void block should not return a value",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={L,1237025389,M,N},
[j]={M,1237025389,L,N},
[d]={{Eb,3688,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // ...\n  // Otherwise, verify that this result type matches the previous one.  We are\n  // pickier with blocks than for normal functions because we don\'t have GCC\n  // compatibility to worry about here.\n  if (FnRetType->isDependentType()) {\n  // ...\n  } else if (FnRetType->isVoidType()) {\n    if (RetValExp && !isa<InitListExpr>(RetValExp) && !(getLangOpts().CPlusPlus && (RetValExp->isTypeDependent() || RetValExp->getType()->isVoidType()))) {\n      if (!getLangOpts().CPlusPlus && RetValExp->getType()->isVoidType())\n      // ...\n      else {\n        Diag(ReturnLoc, diag::err_return_block_has_expr);"}}
[i]={{Kb,3688,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // ...\n  // Otherwise, verify that this result type matches the previous one.  We are\n  // pickier with blocks than for normal functions because we don\'t have GCC\n  // compatibility to worry about here.\n  if (FnRetType->isDependentType()) {\n  // ...\n  } else if (FnRetType->isVoidType()) {\n    if (RetValExp && !isa<InitListExpr>(RetValExp) && !(getLangOpts().CPlusPlus && (RetValExp->isTypeDependent() || RetValExp->getType()->isVoidType()))) {\n      if (!getLangOpts().CPlusPlus && RetValExp->getType()->isVoidType())\n      // ...\n      else {\n        Diag(ReturnLoc, diag::err_return_block_has_expr);"}}
},
},
["err_return_in_captured_stmt"]={
["err_return_in_captured_stmt"]={
[b]="err_return_in_captured_stmt",
[d]="err_return_in_captured_stmt",
[j]="cannot return from %0",
[e]="cannot return from %0",
[i]="cannot return from A",
[f]="cannot return from A",
[h]=k,
[g]=k,
[c]="cannot return from (.*?)",
[h]="cannot return from (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"6dfa25a19f3f",1366141058,"Sema for Captured Statements","Sema for Captured Statements\n\nAdd CapturedDecl to be the DeclContext for CapturedStmt, and perform semantic\nanalysis. Currently captures all variables by reference.\n\nTODO: templates\n\nAuthor: Ben Langmuir <ben.langmuir@intel.com>\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D433\n\nllvm-svn: 179618"},
[j]={"6dfa25a19f3f",1366141058,"Sema for Captured Statements","Sema for Captured Statements\n\nAdd CapturedDecl to be the DeclContext for CapturedStmt, and perform semantic\nanalysis. Currently captures all variables by reference.\n\nTODO: templates\n\nAuthor: Ben Langmuir <ben.langmuir@intel.com>\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D433\n\nllvm-svn: 179618"},
[d]={{Eb,3661,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // ...\n  if (auto *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {\n  // ...\n  } else if (auto *CurRegion = dyn_cast<CapturedRegionScopeInfo>(CurCap)) {\n    Diag(ReturnLoc, diag::err_return_in_captured_stmt) << CurRegion->getRegionName();"}},
[i]={{Kb,3661,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // ...\n  if (auto *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {\n  // ...\n  } else if (auto *CurRegion = dyn_cast<CapturedRegionScopeInfo>(CurCap)) {\n    Diag(ReturnLoc, diag::err_return_in_captured_stmt) << CurRegion->getRegionName();"}},
[l]={
[l]={
["clang/test/Sema/captured-statements.c"]={"clang/test/Sema/captured-statements.c:30:7: error: cannot return from default captured statement"}
["clang/test/Sema/captured-statements.c"]={"clang/test/Sema/captured-statements.c:30:7: error: cannot return from default captured statement"}
Line 5,131: Line 5,132:
},
},
["err_return_in_constructor_handler"]={
["err_return_in_constructor_handler"]={
[b]="err_return_in_constructor_handler",
[d]="err_return_in_constructor_handler",
[j]="return in the catch of a function try block of a constructor is illegal",
[e]="return in the catch of a function try block of a constructor is illegal",
[i]="return in the catch of a function try block of a constructor is illegal",
[f]="return in the catch of a function try block of a constructor is illegal",
[h]=k,
[g]=k,
[c]="return in the catch of a function try block of a constructor is illegal",
[h]="return in the catch of a function try block of a constructor is illegal",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"4c018663b22c",1240868004,"Track down return statements in the handlers of a function-try-block of constructors. Meh ...","Track down return statements in the handlers of a function-try-block of constructors. Meh ...\n\nllvm-svn: 70256"},
[j]={"4c018663b22c",1240868004,"Track down return statements in the handlers of a function-try-block of constructors. Meh ...","Track down return statements in the handlers of a function-try-block of constructors. Meh ...\n\nllvm-svn: 70256"},
[d]={{w,17943,"static void SearchForReturnInStmt(Sema &Self, Stmt *S) {\n  for (Stmt *SubStmt : S->children()) {\n    // ...\n    if (isa<ReturnStmt>(SubStmt))\n      Self.Diag(SubStmt->getBeginLoc(), diag::err_return_in_constructor_handler);"}},
[i]={{w,17943,"static void SearchForReturnInStmt(Sema &Self, Stmt *S) {\n  for (Stmt *SubStmt : S->children()) {\n    // ...\n    if (isa<ReturnStmt>(SubStmt))\n      Self.Diag(SubStmt->getBeginLoc(), diag::err_return_in_constructor_handler);"}},
[l]={
[l]={
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:86:11: error: return in the catch of a function try block of a constructor is illegal","clang/test/SemaCXX/exceptions.cpp:98:5: error: return in the catch of a function try block of a constructor is illegal","clang/test/SemaCXX/exceptions.cpp:102:9: error: return in the catch of a function try block of a constructor is illegal"}
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:86:11: error: return in the catch of a function try block of a constructor is illegal","clang/test/SemaCXX/exceptions.cpp:98:5: error: return in the catch of a function try block of a constructor is illegal","clang/test/SemaCXX/exceptions.cpp:102:9: error: return in the catch of a function try block of a constructor is illegal"}
Line 5,145: Line 5,146:
},
},
["err_return_in_coroutine"]={
["err_return_in_coroutine"]={
[b]="err_return_in_coroutine",
[d]="err_return_in_coroutine",
[j]="return statement not allowed in coroutine; did you mean \'co_return\'?",
[e]="return statement not allowed in coroutine; did you mean \'co_return\'?",
[i]="return statement not allowed in coroutine; did you mean \'co_return\'?",
[f]="return statement not allowed in coroutine; did you mean \'co_return\'?",
[h]=k,
[g]=k,
[c]="return statement not allowed in coroutine; did you mean \'co_return\'\\?",
[h]="return statement not allowed in coroutine; did you mean \'co_return\'\\?",
[f]=a,
[b]=a,
[e]="Coroutines Issue",
[c]="Coroutines Issue",
[g]={"cfd53b4e9993",1445494430,"[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return.","[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return.\n\nllvm-svn: 250993"},
[j]={"cfd53b4e9993",1445494430,"[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return.","[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return.\n\nllvm-svn: 250993"},
[d]={{"clang/lib/Sema/SemaCoroutine.cpp",1123,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n  // ...\n  // [stmt.return.coroutine]p1:\n  //  A coroutine shall not enclose a return statement ([stmt.return]).\n  if (Fn->FirstReturnLoc.isValid()) {\n    // ...\n    Diag(Fn->FirstReturnLoc, diag::err_return_in_coroutine);"}},
[i]={{"clang/lib/Sema/SemaCoroutine.cpp",1123,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n  // ...\n  // [stmt.return.coroutine]p1:\n  //  A coroutine shall not enclose a return statement ([stmt.return]).\n  if (Fn->FirstReturnLoc.isValid()) {\n    // ...\n    Diag(Fn->FirstReturnLoc, diag::err_return_in_coroutine);"}},
[l]={
[l]={
["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:200:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:206:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:213:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:220:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:227:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:232:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:238:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:245:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:252:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:264:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:272:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:281:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:291:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?"}
["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:200:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:206:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:213:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:220:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:227:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:232:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:238:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:245:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:252:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:264:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:272:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:281:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:291:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?"}
Line 5,159: Line 5,160:
},
},
["err_return_init_list"]={
["err_return_init_list"]={
[b]="err_return_init_list",
[d]="err_return_init_list",
[j]="%select{void function|void method|constructor|destructor}1 %0 must not return a value",
[e]="%select{void function|void method|constructor|destructor}1 %0 must not return a value",
[i]={{nil,nil,{{"void function","void method","constructor","destructor"}," A must not return a value"}}},
[f]={{nil,nil,{{"void function","void method","constructor","destructor"}," A must not return a value"}}},
[h]=k,
[g]=k,
[c]="(?:void function|void method|constructor|destructor) (.*?) must not return a value",
[h]="(?:void function|void method|constructor|destructor) (.*?) must not return a value",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"eef474ce1bc8",1329907808,"Fix parsing and processing initializer lists in return statements and as direct member initializers.","Fix parsing and processing initializer lists in return statements and as direct member initializers.\n\nllvm-svn: 151155"},
[j]={"eef474ce1bc8",1329907808,"Fix parsing and processing initializer lists in return statements and as direct member initializers.","Fix parsing and processing initializer lists in return statements and as direct member initializers.\n\nllvm-svn: 151155"},
[d]={{Eb,4063,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  // ...\n  if (FnRetType->isVoidType()) {\n    if (RetValExp) {\n      if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n        // ...\n        Diag(ReturnLoc, diag::err_return_init_list) << CurDecl << FunctionKind << RetValExp->getSourceRange();"}},
[i]={{Kb,4063,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  // ...\n  if (FnRetType->isVoidType()) {\n    if (RetValExp) {\n      if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n        // ...\n        Diag(ReturnLoc, diag::err_return_init_list) << CurDecl << FunctionKind << RetValExp->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/return-void.cpp"]={"clang/test/SemaCXX/return-void.cpp:3:13: error: void function \'f1\' must not return a value","clang/test/SemaCXX/return-void.cpp:5:35: error: void function \'f2\' must not return a value","clang/test/SemaCXX/return-void.cpp:7:32: error: void function \'f2<float>\' must not return a value","clang/test/SemaCXX/return-void.cpp:15:15: error: void function \'f3\' must not return a value","clang/test/SemaCXX/return-void.cpp:16:9: error: constructor \'S\' must not return a value","clang/test/SemaCXX/return-void.cpp:17:10: error: destructor \'~S\' must not return a value","clang/test/SemaCXX/return-void.cpp:21:15: error: void function \'f4\' must not return a value","clang/test/SemaCXX/return-void.cpp:22:10: error: constructor \'ST<T>\' must not return a value","clang/test/SemaCXX/return-void.cpp:23:11: error: destructor \'~ST<T>\' must not return a value"}
["clang/test/SemaCXX/return-void.cpp"]={"clang/test/SemaCXX/return-void.cpp:3:13: error: void function \'f1\' must not return a value","clang/test/SemaCXX/return-void.cpp:5:35: error: void function \'f2\' must not return a value","clang/test/SemaCXX/return-void.cpp:7:32: error: void function \'f2<float>\' must not return a value","clang/test/SemaCXX/return-void.cpp:15:15: error: void function \'f3\' must not return a value","clang/test/SemaCXX/return-void.cpp:16:9: error: constructor \'S\' must not return a value","clang/test/SemaCXX/return-void.cpp:17:10: error: destructor \'~S\' must not return a value","clang/test/SemaCXX/return-void.cpp:21:15: error: void function \'f4\' must not return a value","clang/test/SemaCXX/return-void.cpp:22:10: error: constructor \'ST<T>\' must not return a value","clang/test/SemaCXX/return-void.cpp:23:11: error: destructor \'~ST<T>\' must not return a value"}
Line 5,173: Line 5,174:
},
},
["err_return_value_with_address_space"]={
["err_return_value_with_address_space"]={
[b]={{nil,mb,"err_return_value_with_address_space"}},
[d]={{nil,tb,"err_return_value_with_address_space"}},
[j]={{nil,mb,"return type cannot be qualified with address space"}},
[e]={{nil,tb,"return type cannot be qualified with address space"}},
[i]={{nil,mb,"return type cannot be qualified with address space"}},
[f]={{nil,tb,"return type cannot be qualified with address space"}},
[h]=k,
[g]=k,
[c]="return type cannot be qualified with address space",
[h]="return type cannot be qualified with address space",
[f]=a,
[b]=a,
[e]={{nil,mb,m}},
[c]={{nil,tb,m}},
[g]={ib,1625925174,kb,jb},
[j]={gb,1625925174,ib,jb},
[d]={{D,10253,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().OpenCL) {\n    // ...\n    if (AddressSpace != LangAS::Default) {\n      Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{D,10287,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().HLSL) {\n    // ...\n    if (AddressSpace != LangAS::Default) {\n      Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{"clang/lib/Sema/SemaLambda.cpp",876,"static TypeSourceInfo *getLambdaType(Sema &S, LambdaIntroducer &Intro, Declarator &ParamInfo, Scope *CurScope, SourceLocation Loc, bool &ExplicitResultType) {\n  // ...\n  if (ParamInfo.getNumTypeObjects() == 0) {\n  // ...\n  } else {\n    // ...\n    if (ExplicitResultType && S.getLangOpts().HLSL) {\n      // ...\n      if (!RetTy.isNull()) {\n        // ...\n        if (AddressSpace != LangAS::Default)\n          S.Diag(FTI.getTrailingReturnTypeLoc(), diag::err_return_value_with_address_space);"}},
[i]={{D,10253,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().OpenCL) {\n    // ...\n    if (AddressSpace != LangAS::Default) {\n      Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{D,10287,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().HLSL) {\n    // ...\n    if (AddressSpace != LangAS::Default) {\n      Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{"clang/lib/Sema/SemaLambda.cpp",876,"static TypeSourceInfo *getLambdaType(Sema &S, LambdaIntroducer &Intro, Declarator &ParamInfo, Scope *CurScope, SourceLocation Loc, bool &ExplicitResultType) {\n  // ...\n  if (ParamInfo.getNumTypeObjects() == 0) {\n  // ...\n  } else {\n    // ...\n    if (ExplicitResultType && S.getLangOpts().HLSL) {\n      // ...\n      if (!RetTy.isNull()) {\n        // ...\n        if (AddressSpace != LangAS::Default)\n          S.Diag(FTI.getTrailingReturnTypeLoc(), diag::err_return_value_with_address_space);"}},
[l]={
[l]={
["clang/test/SemaHLSL/group_shared.hlsl"]={"clang/test/SemaHLSL/group_shared.hlsl:14:20: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:20:20: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:25:21: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:32:24: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:35:24: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:38:31: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:41:31: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:80:18: error: return type cannot be qualified with address space"}
["clang/test/SemaHLSL/group_shared.hlsl"]={"clang/test/SemaHLSL/group_shared.hlsl:14:20: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:20:20: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:25:21: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:32:24: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:35:24: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:38:31: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:41:31: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:80:18: error: return type cannot be qualified with address space"}
Line 5,187: Line 5,188:
},
},
["err_right_angle_bracket_equal_needs_space"]={
["err_right_angle_bracket_equal_needs_space"]={
[b]="err_right_angle_bracket_equal_needs_space",
[d]="err_right_angle_bracket_equal_needs_space",
[j]="a space is required between a right angle bracket and an equals sign (use \'> =\')",
[e]="a space is required between a right angle bracket and an equals sign (use \'> =\')",
[i]="a space is required between a right angle bracket and an equals sign (use \'> =\')",
[f]="a space is required between a right angle bracket and an equals sign (use \'> =\')",
[h]=k,
[g]=k,
[c]="a space is required between a right angle bracket and an equals sign \\(use \'\\> \\=\'\\)",
[h]="a space is required between a right angle bracket and an equals sign \\(use \'\\> \\=\'\\)",
[f]=a,
[b]=a,
[e]=y,
[c]=y,
[g]={"7b3f322517c2",1339999864,"Extend the error recovery for a template-argument-list terminated by \'>>\' to","Extend the error recovery for a template-argument-list terminated by \'>>\' to\nalso deal with \'>>>\' (in CUDA), \'>=\', and \'>>=\'. Fix the FixItHints logic to\ndeal with cases where the token is followed by an adjacent \'=\', \'==\', \'>=\',\n\'>>=\', or \'>>>\' token, where a naive fix-it would result in a differing token\nstream on a re-lex.\n\nllvm-svn: 158652"},
[j]={"7b3f322517c2",1339999864,"Extend the error recovery for a template-argument-list terminated by \'>>\' to","Extend the error recovery for a template-argument-list terminated by \'>>\' to\nalso deal with \'>>>\' (in CUDA), \'>=\', and \'>>=\'. Fix the FixItHints logic to\ndeal with cases where the token is followed by an adjacent \'=\', \'==\', \'>=\',\n\'>>=\', or \'>>>\' token, where a naive fix-it would result in a differing token\nstream on a re-lex.\n\nllvm-svn: 158652"},
[d]={{"clang/lib/Parse/ParseTemplate.cpp",1209,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n  // ...\n  // Diagnose this situation as appropriate.\n  if (!ObjCGenericList) {\n    // ...\n    if (getLangOpts().CPlusPlus11 && (Tok.is(tok::greatergreater) || Tok.is(tok::greatergreatergreater)))\n    // ...\n    else if (Tok.is(tok::greaterequal))\n      DiagId = diag::err_right_angle_bracket_equal_needs_space;"}},
[i]={{"clang/lib/Parse/ParseTemplate.cpp",1209,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n  // ...\n  // Diagnose this situation as appropriate.\n  if (!ObjCGenericList) {\n    // ...\n    if (getLangOpts().CPlusPlus11 && (Tok.is(tok::greatergreater) || Tok.is(tok::greatergreatergreater)))\n    // ...\n    else if (Tok.is(tok::greaterequal))\n      DiagId = diag::err_right_angle_bracket_equal_needs_space;"}},
[l]={
[l]={
["clang/test/Parser/cxx-template-argument.cpp"]={"clang/test/Parser/cxx-template-argument.cpp:22:15: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:23:18: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:30:18: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:36:21: error: a space is required between a right angle bracket and an equals sign (use \'> =\')"}
["clang/test/Parser/cxx-template-argument.cpp"]={"clang/test/Parser/cxx-template-argument.cpp:22:15: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:23:18: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:30:18: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:36:21: error: a space is required between a right angle bracket and an equals sign (use \'> =\')"}
Line 5,201: Line 5,202:
},
},
["err_riscv_builtin_invalid_lmul"]={
["err_riscv_builtin_invalid_lmul"]={
[b]={{nil,U,"err_riscv_builtin_invalid_lmul"}},
[d]={{nil,V,"err_riscv_builtin_invalid_lmul"}},
[j]={{nil,U,"LMUL argument must be in the range [0,3] or [5,7]"}},
[e]={{nil,V,"LMUL argument must be in the range [0,3] or [5,7]"}},
[i]={{nil,U,"LMUL argument must be in the range [0,3] or [5,7]"}},
[f]={{nil,V,"LMUL argument must be in the range [0,3] or [5,7]"}},
[h]=k,
[g]=k,
[c]="LMUL argument must be in the range \\[0,3\\] or \\[5,7\\]",
[h]="LMUL argument must be in the range \\[0,3\\] or \\[5,7\\]",
[f]=a,
[b]=a,
[e]={{nil,U,a}},
[c]={{nil,V,S}},
[g]={"3dbcea8b957a",1615397021,"Reland [clang] Check unsupported types in expressions","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"},
[j]={"3dbcea8b957a",1615397021,"Reland [clang] Check unsupported types in expressions","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"},
[d]={{I,4493,"bool Sema::CheckRISCVLMUL(CallExpr *TheCall, unsigned ArgNum) {\n  // ...\n  return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_invalid_lmul) << Arg->getSourceRange();"}},
[i]={{I,4493,"bool Sema::CheckRISCVLMUL(CallExpr *TheCall, unsigned ArgNum) {\n  // ...\n  return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_invalid_lmul) << Arg->getSourceRange();"}},
[l]={
[l]={
["clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c"]={"clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:6:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:7:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:8:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:9:3: error: LMUL argument must be in the range [0,3] or [5,7]"}
["clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c"]={"clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:6:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:7:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:8:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:9:3: error: LMUL argument must be in the range [0,3] or [5,7]"}
Line 5,215: Line 5,216:
},
},
["err_riscv_builtin_requires_extension"]={
["err_riscv_builtin_requires_extension"]={
[b]={{nil,U,"err_riscv_builtin_requires_extension"}},
[d]={{nil,V,"err_riscv_builtin_requires_extension"}},
[j]={{nil,mb,"builtin requires%select{| at least one of the following extensions to be enabled}0: %1"},{C,F,"builtin requires at least one of the following extensions support to be enabled : %0"},{U,U,"builtin requires \'%0\' extension support to be enabled"}},
[e]={{nil,tb,"builtin requires%select{| at least one of the following extensions to be enabled}0: %1"},{C,F,"builtin requires at least one of the following extensions support to be enabled : %0"},{V,V,"builtin requires \'%0\' extension support to be enabled"}},
[i]={{nil,mb,{"builtin requires",{a," at least one of the following extensions to be enabled"},": B"}},{C,F,"builtin requires at least one of the following extensions support to be enabled : A"},{U,U,"builtin requires \'A\' extension support to be enabled"}},
[f]={{nil,tb,{"builtin requires",{a," at least one of the following extensions to be enabled"},": B"}},{C,F,"builtin requires at least one of the following extensions support to be enabled : A"},{V,V,"builtin requires \'A\' extension support to be enabled"}},
[h]=k,
[g]=k,
[c]="builtin requires(?:| at least one of the following extensions to be enabled)\\: (.*?)",
[h]="builtin requires(?:| at least one of the following extensions to be enabled)\\: (.*?)",
[f]=a,
[b]=a,
[e]={{nil,U,a}},
[c]={{nil,V,S}},
[g]={Tb,1590001902,Ub,Vb},
[j]={Vb,1590001902,Ub,Zb},
[d]={{I,4542,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  // Check if each required feature is included\n  for (StringRef F : ReqFeatures) {\n    // ...\n    if (llvm::none_of(ReqOpFeatures, [&TI](StringRef OF) { return TI.hasFeature(OF); })) {\n      // ...\n      Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << IsExtension << TheCall->getSourceRange() << StringRef(FeatureStrs);"},{I,4611,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_m:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_m:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_mu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_mu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tum:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tum:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_tu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_tu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_m:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_m:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_mu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_mu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_tum:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_tum:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_tu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_tu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_m:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_m:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_mu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_mu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_tum:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_tum:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_tumu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_tu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_tu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_m:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_m:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_mu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_mu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_tum:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_tum:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_tumu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_tumu: {\n    // ...\n    if (RequireV && !TI.hasFeature(\"v\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << /* IsExtension */ false << TheCall->getSourceRange() << \"v\";"}},
[i]={{I,4542,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  // Check if each required feature is included\n  for (StringRef F : ReqFeatures) {\n    // ...\n    if (llvm::none_of(ReqOpFeatures, [&TI](StringRef OF) { return TI.hasFeature(OF); })) {\n      // ...\n      Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << IsExtension << TheCall->getSourceRange() << StringRef(FeatureStrs);"},{I,4611,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_m:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_m:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_mu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_mu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tum:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tum:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_tu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_tu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_m:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_m:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_mu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_mu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_tum:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_tum:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_tu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_tu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_m:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_m:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_mu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_mu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_tum:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_tum:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_tumu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_tu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_tu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_m:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_m:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_mu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_mu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_tum:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_tum:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_tumu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_tumu: {\n    // ...\n    if (RequireV && !TI.hasFeature(\"v\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << /* IsExtension */ false << TheCall->getSourceRange() << \"v\";"}},
[l]={
[l]={
["clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbb-error.c"]={"clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbb-error.c:5:10: error: builtin requires: \'RV64\'"}
["clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbb-error.c"]={"clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbb-error.c:5:10: error: builtin requires: \'RV64\'"}
Line 5,229: Line 5,230:
},
},
["err_riscv_type_requires_extension"]={
["err_riscv_type_requires_extension"]={
[b]="err_riscv_type_requires_extension",
[d]="err_riscv_type_requires_extension",
[j]="RISC-V type %0 requires the \'%1\' extension",
[e]="RISC-V type %0 requires the \'%1\' extension",
[i]="RISC-V type A requires the \'B\' extension",
[f]="RISC-V type A requires the \'B\' extension",
[h]=k,
[g]=k,
[c]="RISC\\-V type (.*?) requires the \'(.*?)\' extension",
[h]="RISC\\-V type (.*?) requires the \'(.*?)\' extension",
[f]=a,
[b]=a,
[e]=a,
[c]=S,
[g]={ib,1625925174,kb,jb},
[j]={gb,1625925174,ib,jb},
[d]={{I,5427,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  // (ELEN, LMUL) pairs of (8, mf8), (16, mf4), (32, mf2), (64, m1) requires at\n  // least zve64x\n  if ((Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ false) || Ty->isRVVType(/* ElementCount */ 1)) && !TI.hasFeature(\"zve64x\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64x\";"},{I,5430,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  if (Ty->isRVVType(/* Bitwidth */ 16, /* IsFloat */ true) && !TI.hasFeature(\"zvfh\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zvfh\";"},{I,5433,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  if (Ty->isRVVType(/* Bitwidth */ 32, /* IsFloat */ true) && !TI.hasFeature(\"zve32f\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32f\";"},{I,5436,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  if (Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ true) && !TI.hasFeature(\"zve64d\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64d\";"},{I,5440,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  // Given that caller already checked isRVVType() before calling this function,\n  // if we don\'t have at least zve32x supported, then we need to emit error.\n  if (!TI.hasFeature(\"zve32x\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32x\";"}},
[i]={{I,5427,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  // (ELEN, LMUL) pairs of (8, mf8), (16, mf4), (32, mf2), (64, m1) requires at\n  // least zve64x\n  if ((Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ false) || Ty->isRVVType(/* ElementCount */ 1)) && !TI.hasFeature(\"zve64x\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64x\";"},{I,5430,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  if (Ty->isRVVType(/* Bitwidth */ 16, /* IsFloat */ true) && !TI.hasFeature(\"zvfh\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zvfh\";"},{I,5433,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  if (Ty->isRVVType(/* Bitwidth */ 32, /* IsFloat */ true) && !TI.hasFeature(\"zve32f\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32f\";"},{I,5436,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  if (Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ true) && !TI.hasFeature(\"zve64d\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64d\";"},{I,5440,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  // Given that caller already checked isRVVType() before calling this function,\n  // if we don\'t have at least zve32x supported, then we need to emit error.\n  if (!TI.hasFeature(\"zve32x\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32x\";"}},
[l]={
[l]={
["clang/test/Sema/riscv-vector-zve64x-check.c"]={"clang/test/Sema/riscv-vector-zve64x-check.c:10:19: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:12:9: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:14:10: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:9:17: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:18:20: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:20:9: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:22:10: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:17:18: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:26:20: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:28:9: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:30:10: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:25:18: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:34:19: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:36:9: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:38:10: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:33:17: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension"}
["clang/test/Sema/riscv-vector-zve64x-check.c"]={"clang/test/Sema/riscv-vector-zve64x-check.c:10:19: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:12:9: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:14:10: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:9:17: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:18:20: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:20:9: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:22:10: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:17:18: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:26:20: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:28:9: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:30:10: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:25:18: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:34:19: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:36:9: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:38:10: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:33:17: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension"}
Line 5,243: Line 5,244:
},
},
["err_root_class_cannot_use_super"]={
["err_root_class_cannot_use_super"]={
[b]="err_root_class_cannot_use_super",
[d]="err_root_class_cannot_use_super",
[j]="%0 cannot use \'super\' because it is a root class",
[e]="%0 cannot use \'super\' because it is a root class",
[i]="A cannot use \'super\' because it is a root class",
[f]="A cannot use \'super\' because it is a root class",
[h]=k,
[g]=k,
[c]="(.*?) cannot use \'super\' because it is a root class",
[h]="(.*?) cannot use \'super\' because it is a root class",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={bb,1480718311,eb,fb},
[j]={eb,1480718311,cb,fb},
[d]={{lb,2178,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n  // ...\n  if (!IFace) {\n    // If the \"receiver\" is \'super\' in a method, handle it as an expression-like\n    // property reference.\n    if (receiverNamePtr->isStr(\"super\")) {\n      if (ObjCMethodDecl *CurMethod = tryCaptureObjCSelf(receiverNameLoc)) {\n        if (auto classDecl = CurMethod->getClassInterface()) {\n          // ...\n          if (CurMethod->isInstanceMethod()) {\n            if (SuperType.isNull()) {\n              // ...\n              Diag(receiverNameLoc, diag::err_root_class_cannot_use_super) << CurMethod->getClassInterface()->getIdentifier();"},{lb,2405,"ExprResult Sema::ActOnSuperMessage(Scope *S, SourceLocation SuperLoc, Selector Sel, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg Args) {\n  // ...\n  if (SuperTy.isNull()) {\n    // ...\n    Diag(SuperLoc, diag::err_root_class_cannot_use_super) << Class->getIdentifier();"}},
[i]={{qb,2178,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n  // ...\n  if (!IFace) {\n    // If the \"receiver\" is \'super\' in a method, handle it as an expression-like\n    // property reference.\n    if (receiverNamePtr->isStr(\"super\")) {\n      if (ObjCMethodDecl *CurMethod = tryCaptureObjCSelf(receiverNameLoc)) {\n        if (auto classDecl = CurMethod->getClassInterface()) {\n          // ...\n          if (CurMethod->isInstanceMethod()) {\n            if (SuperType.isNull()) {\n              // ...\n              Diag(receiverNameLoc, diag::err_root_class_cannot_use_super) << CurMethod->getClassInterface()->getIdentifier();"},{qb,2405,"ExprResult Sema::ActOnSuperMessage(Scope *S, SourceLocation SuperLoc, Selector Sel, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg Args) {\n  // ...\n  if (SuperTy.isNull()) {\n    // ...\n    Diag(SuperLoc, diag::err_root_class_cannot_use_super) << Class->getIdentifier();"}},
[l]={
[l]={
["clang/test/SemaObjC/super-property-notation.m"]={"clang/test/SemaObjC/super-property-notation.m:38:3: error: \'ClassBase\' cannot use \'super\' because it is a root class","clang/test/SemaObjC/super-property-notation.m:39:4: error: \'ClassBase\' cannot use \'super\' because it is a root class"}
["clang/test/SemaObjC/super-property-notation.m"]={"clang/test/SemaObjC/super-property-notation.m:38:3: error: \'ClassBase\' cannot use \'super\' because it is a root class","clang/test/SemaObjC/super-property-notation.m:39:4: error: \'ClassBase\' cannot use \'super\' because it is a root class"}
Line 5,257: Line 5,258:
},
},
["err_roptr_cannot_build_shared"]={
["err_roptr_cannot_build_shared"]={
[b]="err_roptr_cannot_build_shared",
[d]="err_roptr_cannot_build_shared",
[j]="-mxcoff-roptr is not supported with -shared",
[e]="-mxcoff-roptr is not supported with -shared",
[i]="-mxcoff-roptr is not supported with -shared",
[f]="-mxcoff-roptr is not supported with -shared",
[h]=k,
[g]=k,
[c]="\\-mxcoff\\-roptr is not supported with \\-shared",
[h]="\\-mxcoff\\-roptr is not supported with \\-shared",
[f]=a,
[b]=a,
[e]=a,
[c]=S,
[g]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers","[AIX][clang] Storage Locations for Constant Pointers\n\nThis patch adds clang options `-mxcoff-roptr` and `-mno-xcoff-roptr` to specify storage locations for constant pointers on AIX.\n\nWhen the `-mxcoff-roptr` option is in effect, constant pointers, virtual function tables, and virtual type tables are placed in read-only storage. When the `-mno-xcoff-roptr` option is in effect, pointers, virtual function tables, and virtual type tables are placed are placed in read/write storage.\n\nThis patch depends on https://reviews.llvm.org/D144189.\n\nReviewed By: hubert.reinterpretcast, stephenpeckham\n\nDifferential Revision: https://reviews.llvm.org/D144190"},
[j]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers","[AIX][clang] Storage Locations for Constant Pointers\n\nThis patch adds clang options `-mxcoff-roptr` and `-mno-xcoff-roptr` to specify storage locations for constant pointers on AIX.\n\nWhen the `-mxcoff-roptr` option is in effect, constant pointers, virtual function tables, and virtual type tables are placed in read-only storage. When the `-mno-xcoff-roptr` option is in effect, pointers, virtual function tables, and virtual type tables are placed are placed in read/write storage.\n\nThis patch depends on https://reviews.llvm.org/D144189.\n\nReviewed By: hubert.reinterpretcast, stephenpeckham\n\nDifferential Revision: https://reviews.llvm.org/D144190"},
[d]={{"clang/lib/Driver/ToolChains/AIX.cpp",141,"void aix::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (Args.hasFlag(options::OPT_mxcoff_roptr, options::OPT_mno_xcoff_roptr, false)) {\n    if (Args.hasArg(options::OPT_shared))\n      D.Diag(diag::err_roptr_cannot_build_shared);"}}
[i]={{"clang/lib/Driver/ToolChains/AIX.cpp",141,"void aix::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (Args.hasFlag(options::OPT_mxcoff_roptr, options::OPT_mno_xcoff_roptr, false)) {\n    if (Args.hasArg(options::OPT_shared))\n      D.Diag(diag::err_roptr_cannot_build_shared);"}}
},
},
["err_roptr_requires_data_sections"]={
["err_roptr_requires_data_sections"]={
[b]="err_roptr_requires_data_sections",
[d]="err_roptr_requires_data_sections",
[j]="-mxcoff-roptr is supported only with -fdata-sections",
[e]="-mxcoff-roptr is supported only with -fdata-sections",
[i]="-mxcoff-roptr is supported only with -fdata-sections",
[f]="-mxcoff-roptr is supported only with -fdata-sections",
[h]=k,
[g]=k,
[c]="\\-mxcoff\\-roptr is supported only with \\-fdata\\-sections",
[h]="\\-mxcoff\\-roptr is supported only with \\-fdata\\-sections",
[f]=a,
[b]=a,
[e]=a,
[c]=S,
[g]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers","[AIX][clang] Storage Locations for Constant Pointers\n\nThis patch adds clang options `-mxcoff-roptr` and `-mno-xcoff-roptr` to specify storage locations for constant pointers on AIX.\n\nWhen the `-mxcoff-roptr` option is in effect, constant pointers, virtual function tables, and virtual type tables are placed in read-only storage. When the `-mno-xcoff-roptr` option is in effect, pointers, virtual function tables, and virtual type tables are placed are placed in read/write storage.\n\nThis patch depends on https://reviews.llvm.org/D144189.\n\nReviewed By: hubert.reinterpretcast, stephenpeckham\n\nDifferential Revision: https://reviews.llvm.org/D144190"},
[j]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers","[AIX][clang] Storage Locations for Constant Pointers\n\nThis patch adds clang options `-mxcoff-roptr` and `-mno-xcoff-roptr` to specify storage locations for constant pointers on AIX.\n\nWhen the `-mxcoff-roptr` option is in effect, constant pointers, virtual function tables, and virtual type tables are placed in read-only storage. When the `-mno-xcoff-roptr` option is in effect, pointers, virtual function tables, and virtual type tables are placed are placed in read/write storage.\n\nThis patch depends on https://reviews.llvm.org/D144189.\n\nReviewed By: hubert.reinterpretcast, stephenpeckham\n\nDifferential Revision: https://reviews.llvm.org/D144190"},
[d]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",766,"#endif\n  // ...\n  if (Args.hasArg(options::OPT_mxcoff_roptr) || Args.hasArg(options::OPT_mno_xcoff_roptr)) {\n    // ...\n    if (HasRoptr) {\n      // The data sections option is on by default on AIX. We only need to error\n      // out when -fno-data-sections is specified explicitly to turn off data\n      // sections.\n      if (DataSectionsTurnedOff)\n        D.Diag(diag::err_roptr_requires_data_sections);"},{"clang/lib/Frontend/CompilerInvocation.cpp",1947,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_mxcoff_roptr)) {\n    // ...\n    // Since the storage mapping class is specified per csect,\n    // without using data sections, it is less effective to use read-only\n    // pointers. Using read-only pointers may cause other RO variables in the\n    // same csect to become RW when the linker acts upon `-bforceimprw`;\n    // therefore, we require that separate data sections\n    // are used when `-mxcoff-roptr` is in effect. We respect the setting of\n    // data-sections since we have not found reasons to do otherwise that\n    // overcome the user surprise of not respecting the setting.\n    if (!Args.hasFlag(OPT_fdata_sections, OPT_fno_data_sections, false))\n      Diags.Report(diag::err_roptr_requires_data_sections);"}}
[i]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",766,"#endif\n  // ...\n  if (Args.hasArg(options::OPT_mxcoff_roptr) || Args.hasArg(options::OPT_mno_xcoff_roptr)) {\n    // ...\n    if (HasRoptr) {\n      // The data sections option is on by default on AIX. We only need to error\n      // out when -fno-data-sections is specified explicitly to turn off data\n      // sections.\n      if (DataSectionsTurnedOff)\n        D.Diag(diag::err_roptr_requires_data_sections);"},{"clang/lib/Frontend/CompilerInvocation.cpp",1947,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_mxcoff_roptr)) {\n    // ...\n    // Since the storage mapping class is specified per csect,\n    // without using data sections, it is less effective to use read-only\n    // pointers. Using read-only pointers may cause other RO variables in the\n    // same csect to become RW when the linker acts upon `-bforceimprw`;\n    // therefore, we require that separate data sections\n    // are used when `-mxcoff-roptr` is in effect. We respect the setting of\n    // data-sections since we have not found reasons to do otherwise that\n    // overcome the user surprise of not respecting the setting.\n    if (!Args.hasFlag(OPT_fdata_sections, OPT_fno_data_sections, false))\n      Diags.Report(diag::err_roptr_requires_data_sections);"}}
},
},
["err_rotation_argument_to_cadd"]={
["err_rotation_argument_to_cadd"]={
[b]={{nil,t,"err_rotation_argument_to_cadd"}},
[d]={{nil,t,"err_rotation_argument_to_cadd"}},
[j]={{nil,t,"argument should be the value 90 or 270"}},
[e]={{nil,t,"argument should be the value 90 or 270"}},
[i]={{nil,t,"argument should be the value 90 or 270"}},
[f]={{nil,t,"argument should be the value 90 or 270"}},
[h]=k,
[g]=k,
[c]="argument should be the value 90 or 270",
[h]="argument should be the value 90 or 270",
[f]=a,
[b]=a,
[e]={{nil,t,m}},
[c]={{nil,t,m}},
[g]={qb,1576908663,sb,nb},
[j]={pb,1576908663,sb,ub},
[d]={{I,2992,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n  // ...\n  for (auto &I : ImmChecks) {\n    // ...\n    case SVETypeFlags::ImmCheckComplexRot90_270:\n      if (CheckImmediateInSet([](int64_t V) { return V == 90 || V == 270; }, diag::err_rotation_argument_to_cadd))"}},
[i]={{I,2992,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n  // ...\n  for (auto &I : ImmChecks) {\n    // ...\n    case SVETypeFlags::ImmCheckComplexRot90_270:\n      if (CheckImmediateInSet([](int64_t V) { return V == 90 || V == 270; }, diag::err_rotation_argument_to_cadd))"}},
[l]={
[l]={
["clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp"]={"clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:18:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:20:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:22:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:24:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:26:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:28:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:30:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:32:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:34:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:36:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:38:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:40:17: error: argument should be the value 90 or 270"}
["clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp"]={"clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:18:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:20:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:22:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:24:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:26:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:28:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:30:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:32:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:34:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:36:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:38:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:40:17: error: argument should be the value 90 or 270"}
Line 5,293: Line 5,294:
},
},
["err_rotation_argument_to_cmla"]={
["err_rotation_argument_to_cmla"]={
[b]={{nil,t,"err_rotation_argument_to_cmla"}},
[d]={{nil,t,"err_rotation_argument_to_cmla"}},
[j]={{nil,t,"argument should be the value 0, 90, 180 or 270"}},
[e]={{nil,t,"argument should be the value 0, 90, 180 or 270"}},
[i]={{nil,t,"argument should be the value 0, 90, 180 or 270"}},
[f]={{nil,t,"argument should be the value 0, 90, 180 or 270"}},
[h]=k,
[g]=k,
[c]="argument should be the value 0, 90, 180 or 270",
[h]="argument should be the value 0, 90, 180 or 270",
[f]=a,
[b]=a,
[e]={{nil,t,m}},
[c]={{nil,t,m}},
[g]={qb,1576908663,sb,nb},
[j]={pb,1576908663,sb,ub},
[d]={{I,3000,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n  // ...\n  for (auto &I : ImmChecks) {\n    // ...\n    case SVETypeFlags::ImmCheckComplexRotAll90:\n      if (CheckImmediateInSet([](int64_t V) { return V == 0 || V == 90 || V == 180 || V == 270; }, diag::err_rotation_argument_to_cmla))"}},
[i]={{I,3000,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n  // ...\n  for (auto &I : ImmChecks) {\n    // ...\n    case SVETypeFlags::ImmCheckComplexRotAll90:\n      if (CheckImmediateInSet([](int64_t V) { return V == 0 || V == 90 || V == 180 || V == 270; }, diag::err_rotation_argument_to_cmla))"}},
[l]={
[l]={
["clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp"]={"clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:46:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:48:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:50:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:52:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:54:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:56:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:58:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:60:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:62:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:64:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:66:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:68:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:70:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:72:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:74:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:76:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:78:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:80:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:82:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:84:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:86:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:88:17: error: argument should be the value 0, 90, 180 or 270"}
["clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp"]={"clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:46:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:48:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:50:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:52:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:54:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:56:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:58:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:60:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:62:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:64:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:66:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:68:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:70:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:72:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:74:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:76:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:78:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:80:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:82:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:84:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:86:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:88:17: error: argument should be the value 0, 90, 180 or 270"}
Line 5,307: Line 5,308:
},
},
["err_rref_in_exception_spec"]={
["err_rref_in_exception_spec"]={
[b]="err_rref_in_exception_spec",
[d]="err_rref_in_exception_spec",
[j]="rvalue reference type %0 is not allowed in exception specification",
[e]="rvalue reference type %0 is not allowed in exception specification",
[i]="rvalue reference type A is not allowed in exception specification",
[f]="rvalue reference type A is not allowed in exception specification",
[h]=k,
[g]=k,
[c]="rvalue reference type (.*?) is not allowed in exception specification",
[h]="rvalue reference type (.*?) is not allowed in exception specification",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"a118c6a8c0e9",1354143162,"Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications.","Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications.\n\nllvm-svn: 168824"},
[j]={"a118c6a8c0e9",1354143162,"Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications.","Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications.\n\nllvm-svn: 168824"},
[d]={{"clang/lib/Sema/SemaExceptionSpec.cpp",152,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T  The exception type. This will be decayed to a pointer type\n///                  when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n  // ...\n  if (const PointerType *PT = T->getAs<PointerType>()) {\n  // ...\n  } else if (const ReferenceType *RT = T->getAs<ReferenceType>()) {\n    // ...\n    if (RT->isRValueReferenceType()) {\n      // ...\n      Diag(Range.getBegin(), diag::err_rref_in_exception_spec) << T << Range;"}},
[i]={{"clang/lib/Sema/SemaExceptionSpec.cpp",152,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T  The exception type. This will be decayed to a pointer type\n///                  when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n  // ...\n  if (const PointerType *PT = T->getAs<PointerType>()) {\n  // ...\n  } else if (const ReferenceType *RT = T->getAs<ReferenceType>()) {\n    // ...\n    if (RT->isRValueReferenceType()) {\n      // ...\n      Diag(Range.getBegin(), diag::err_rref_in_exception_spec) << T << Range;"}},
[l]={
[l]={
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:164:24: error: rvalue reference type \'int &&\' is not allowed in exception specification"}
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:164:24: error: rvalue reference type \'int &&\' is not allowed in exception specification"}
Line 5,321: Line 5,322:
},
},
["err_sampler_argument_required"]={
["err_sampler_argument_required"]={
[b]="err_sampler_argument_required",
[d]="err_sampler_argument_required",
[j]="sampler_t variable required - got %0",
[e]="sampler_t variable required - got %0",
[i]="sampler_t variable required - got A",
[f]="sampler_t variable required - got A",
[h]=k,
[g]=k,
[c]="sampler_t variable required \\- got (.*?)",
[h]="sampler_t variable required \\- got (.*?)",
[f]=a,
[b]=a,
[e]=m,
[c]=m,
[g]={"610541989a52",1360234547,"Add OpenCL samplers as Clang builtin types and check sampler related restrictions.","Add OpenCL samplers as Clang builtin types and check sampler related restrictions.\n\nllvm-svn: 174601"},
[j]={"610541989a52",1360234547,"Add OpenCL samplers as Clang builtin types and check sampler related restrictions.","Add OpenCL samplers as Clang builtin types and check sampler related restrictions.\n\nllvm-svn: 174601"},
[d]={{P,9310,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    // ...\n    case SK_OCLSamplerInit: {\n      // ...\n      // Case 1\n      if (Entity.isParameterKind()) {\n        if (!SourceType->isSamplerT() && !SourceType->isIntegerType()) {\n          S.Diag(Kind.getLocation(), diag::err_sampler_argument_required) << SourceType;"}}
[i]={{P,9310,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    // ...\n    case SK_OCLSamplerInit: {\n      // ...\n      // Case 1\n      if (Entity.isParameterKind()) {\n        if (!SourceType->isSamplerT() && !SourceType->isIntegerType()) {\n          S.Diag(Kind.getLocation(), diag::err_sampler_argument_required) << SourceType;"}}
}
}
};
};
Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,557

edits

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

Navigation menu